From 23956b91fcc70bbc02eab428f3277f8b57d1fbca Mon Sep 17 00:00:00 2001 From: srdtrk <59252793+srdtrk@users.noreply.github.com> Date: Tue, 12 Mar 2024 01:57:29 +0700 Subject: [PATCH] docs: removed v8.0.x (#5951) Co-authored-by: Carlos Rodriguez --- docs/docusaurus.config.js | 4 +- .../versioned_docs/version-v8.0.x/00-intro.md | 16 - .../version-v8.0.x/01-ibc/01-overview.md | 297 ---------- .../version-v8.0.x/01-ibc/02-integration.md | 230 -------- .../version-v8.0.x/01-ibc/03-apps/01-apps.md | 494 ----------------- .../01-ibc/03-apps/02-ibcmodule.md | 379 ------------- .../01-ibc/03-apps/03-bindports.md | 122 ---- .../01-ibc/03-apps/04-keeper.md | 96 ---- .../01-ibc/03-apps/05-packets_acks.md | 166 ------ .../01-ibc/03-apps/06-routing.md | 44 -- .../01-ibc/03-apps/_category_.json | 5 - .../01-ibc/03-apps/images/packet_flow.png | Bin 352988 -> 0 bytes .../01-ibc/04-middleware/01-overview.md | 55 -- .../01-ibc/04-middleware/02-develop.md | 519 ------------------ .../01-ibc/04-middleware/03-integration.md | 74 --- .../01-ibc/04-middleware/_category_.json | 5 - .../04-middleware/images/middleware-stack.png | Bin 194858 -> 0 bytes .../01-ibc/05-upgrades/00-intro.md | 15 - .../01-ibc/05-upgrades/01-quick-guide.md | 60 -- .../01-ibc/05-upgrades/02-developer-guide.md | 14 - .../01-ibc/05-upgrades/03-genesis-restart.md | 52 -- .../01-ibc/05-upgrades/_category_.json | 5 - .../version-v8.0.x/01-ibc/06-proposals.md | 118 ---- .../version-v8.0.x/01-ibc/07-relayer.md | 53 -- .../version-v8.0.x/01-ibc/08-proto-docs.md | 11 - .../version-v8.0.x/01-ibc/09-roadmap.md | 52 -- .../01-ibc/10-troubleshooting.md | 15 - .../01-ibc/11-capability-module.md | 139 ----- .../version-v8.0.x/01-ibc/_category_.json | 5 - .../02-apps/01-transfer/01-overview.md | 134 ----- .../02-apps/01-transfer/02-state.md | 13 - .../01-transfer/03-state-transitions.md | 37 -- .../02-apps/01-transfer/04-messages.md | 58 -- .../02-apps/01-transfer/05-events.md | 54 -- .../02-apps/01-transfer/06-metrics.md | 18 - .../02-apps/01-transfer/07-params.md | 94 ---- .../02-apps/01-transfer/08-authorizations.md | 53 -- .../02-apps/01-transfer/09-client.md | 69 --- .../02-apps/01-transfer/_category_.json | 5 - .../02-interchain-accounts/01-overview.md | 39 -- .../02-interchain-accounts/02-development.md | 40 -- .../02-interchain-accounts/03-auth-modules.md | 27 - .../02-interchain-accounts/04-integration.md | 199 ------- .../02-interchain-accounts/05-messages.md | 78 --- .../02-interchain-accounts/06-parameters.md | 65 --- .../02-interchain-accounts/07-tx-encoding.md | 58 -- .../02-interchain-accounts/08-client.md | 183 ------ .../09-active-channels.md | 39 -- .../10-legacy/01-auth-modules.md | 274 --------- .../10-legacy/02-integration.md | 201 ------- .../10-legacy/03-keeper-api.md | 125 ----- .../10-legacy/_category_.json | 5 - .../10-legacy/images/ica-pre-v6.png | Bin 34698 -> 0 bytes .../02-interchain-accounts/_category_.json | 5 - .../02-interchain-accounts/images/ica-v6.png | Bin 163580 -> 0 bytes .../version-v8.0.x/02-apps/_category_.json | 5 - .../01-developer-guide/01-overview.md | 79 --- .../01-developer-guide/02-client-state.md | 79 --- .../01-developer-guide/03-consensus-state.md | 27 - .../04-updates-and-misbehaviour.md | 98 ---- .../01-developer-guide/05-upgrades.md | 66 --- .../01-developer-guide/06-proofs.md | 66 --- .../01-developer-guide/07-proposals.md | 36 -- .../01-developer-guide/08-genesis.md | 45 -- .../01-developer-guide/09-setup.md | 133 ----- .../01-developer-guide/_category_.json | 5 - .../02-localhost/01-overview.md | 46 -- .../02-localhost/02-integration.md | 20 - .../02-localhost/03-client-state.md | 64 --- .../02-localhost/04-connection.md | 29 - .../02-localhost/05-state-verification.md | 22 - .../02-localhost/_category_.json | 5 - .../03-solomachine/01-solomachine.md | 26 - .../03-solomachine/02-concepts.md | 168 ------ .../03-solomachine/03-state.md | 12 - .../03-solomachine/04-state_transitions.md | 43 -- .../03-solomachine/_category_.json | 5 - .../03-light-clients/04-wasm/01-overview.md | 26 - .../03-light-clients/04-wasm/02-concepts.md | 74 --- .../04-wasm/03-integration.md | 376 ------------- .../03-light-clients/04-wasm/04-messages.md | 75 --- .../03-light-clients/04-wasm/05-governance.md | 126 ----- .../03-light-clients/04-wasm/06-events.md | 26 - .../03-light-clients/04-wasm/07-contracts.md | 113 ---- .../03-light-clients/04-wasm/08-client.md | 141 ----- .../03-light-clients/04-wasm/09-migrations.md | 16 - .../03-light-clients/04-wasm/_category_.json | 5 - .../03-light-clients/_category_.json | 5 - .../04-middleware/01-ics29-fee/01-overview.md | 54 -- .../01-ics29-fee/02-integration.md | 177 ------ .../04-middleware/01-ics29-fee/03-msgs.md | 95 ---- .../01-ics29-fee/04-fee-distribution.md | 117 ---- .../04-middleware/01-ics29-fee/05-events.md | 43 -- .../01-ics29-fee/06-end-users.md | 39 -- .../01-ics29-fee/_category_.json | 5 - .../01-ics29-fee/images/feeflow.png | Bin 394717 -> 0 bytes .../01-ics29-fee/images/msgpaypacket.png | Bin 150696 -> 0 bytes .../01-ics29-fee/images/paypacketfeeasync.png | Bin 142753 -> 0 bytes .../04-middleware/02-callbacks/01-overview.md | 51 -- .../02-callbacks/02-integration.md | 95 ---- .../02-callbacks/03-interfaces.md | 151 ----- .../04-middleware/02-callbacks/04-events.md | 39 -- .../02-callbacks/05-end-users.md | 96 ---- .../04-middleware/02-callbacks/06-gas.md | 77 --- .../02-callbacks/_category_.json | 5 - .../02-callbacks/images/callbackflow.svg | 43 -- .../02-callbacks/images/ics4-callbackflow.svg | 43 -- .../04-middleware/_category_.json | 5 - .../01-support-denoms-with-slashes.md | 87 --- .../05-migrations/02-sdk-to-v1.md | 195 ------- .../05-migrations/03-v1-to-v2.md | 59 -- .../05-migrations/04-v2-to-v3.md | 186 ------- .../05-migrations/05-v3-to-v4.md | 159 ------ .../05-migrations/06-v4-to-v5.md | 441 --------------- .../05-migrations/07-v5-to-v6.md | 299 ---------- .../05-migrations/08-v6-to-v7.md | 357 ------------ .../05-migrations/09-v7-to-v7_1.md | 66 --- .../05-migrations/10-v7_2-to-v7_3.md | 50 -- .../05-migrations/11-v7-to-v8.md | 221 -------- .../05-migrations/_category_.json | 5 - .../images/auth-module-decision-tree.png | Bin 80522 -> 0 bytes .../05-migrations/migration.template.md | 28 - .../version-v8.0.x-sidebars.json | 40 -- docs/versions.json | 1 - 124 files changed, 2 insertions(+), 10307 deletions(-) delete mode 100644 docs/versioned_docs/version-v8.0.x/00-intro.md delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/01-overview.md delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/02-integration.md delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/01-apps.md delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/02-ibcmodule.md delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/03-bindports.md delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/04-keeper.md delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/05-packets_acks.md delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/06-routing.md delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/_category_.json delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/images/packet_flow.png delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/01-overview.md delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/02-develop.md delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/03-integration.md delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/_category_.json delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/images/middleware-stack.png delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/05-upgrades/00-intro.md delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/05-upgrades/01-quick-guide.md delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/05-upgrades/02-developer-guide.md delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/05-upgrades/03-genesis-restart.md delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/05-upgrades/_category_.json delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/06-proposals.md delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/07-relayer.md delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/08-proto-docs.md delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/09-roadmap.md delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/10-troubleshooting.md delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/11-capability-module.md delete mode 100644 docs/versioned_docs/version-v8.0.x/01-ibc/_category_.json delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/01-overview.md delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/02-state.md delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/03-state-transitions.md delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/04-messages.md delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/05-events.md delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/06-metrics.md delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/07-params.md delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/08-authorizations.md delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/09-client.md delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/_category_.json delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/01-overview.md delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/02-development.md delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/03-auth-modules.md delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/04-integration.md delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/05-messages.md delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/06-parameters.md delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/07-tx-encoding.md delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/08-client.md delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/09-active-channels.md delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/02-integration.md delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/03-keeper-api.md delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/_category_.json delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/images/ica-pre-v6.png delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/_category_.json delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/images/ica-v6.png delete mode 100644 docs/versioned_docs/version-v8.0.x/02-apps/_category_.json delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/01-overview.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/02-client-state.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/03-consensus-state.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/04-updates-and-misbehaviour.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/05-upgrades.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/06-proofs.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/07-proposals.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/08-genesis.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/09-setup.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/_category_.json delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/01-overview.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/02-integration.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/03-client-state.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/04-connection.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/05-state-verification.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/_category_.json delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/01-solomachine.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/02-concepts.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/03-state.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/04-state_transitions.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/_category_.json delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/01-overview.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/02-concepts.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/03-integration.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/04-messages.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/05-governance.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/06-events.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/07-contracts.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/08-client.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/09-migrations.md delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/_category_.json delete mode 100644 docs/versioned_docs/version-v8.0.x/03-light-clients/_category_.json delete mode 100644 docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/01-overview.md delete mode 100644 docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/02-integration.md delete mode 100644 docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/03-msgs.md delete mode 100644 docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/04-fee-distribution.md delete mode 100644 docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/05-events.md delete mode 100644 docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/06-end-users.md delete mode 100644 docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/_category_.json delete mode 100644 docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/images/feeflow.png delete mode 100644 docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/images/msgpaypacket.png delete mode 100644 docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/images/paypacketfeeasync.png delete mode 100644 docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/01-overview.md delete mode 100644 docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/02-integration.md delete mode 100644 docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/03-interfaces.md delete mode 100644 docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/04-events.md delete mode 100644 docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/05-end-users.md delete mode 100644 docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/06-gas.md delete mode 100644 docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/_category_.json delete mode 100644 docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/images/callbackflow.svg delete mode 100644 docs/versioned_docs/version-v8.0.x/04-middleware/02-callbacks/images/ics4-callbackflow.svg delete mode 100644 docs/versioned_docs/version-v8.0.x/04-middleware/_category_.json delete mode 100644 docs/versioned_docs/version-v8.0.x/05-migrations/01-support-denoms-with-slashes.md delete mode 100644 docs/versioned_docs/version-v8.0.x/05-migrations/02-sdk-to-v1.md delete mode 100644 docs/versioned_docs/version-v8.0.x/05-migrations/03-v1-to-v2.md delete mode 100644 docs/versioned_docs/version-v8.0.x/05-migrations/04-v2-to-v3.md delete mode 100644 docs/versioned_docs/version-v8.0.x/05-migrations/05-v3-to-v4.md delete mode 100644 docs/versioned_docs/version-v8.0.x/05-migrations/06-v4-to-v5.md delete mode 100644 docs/versioned_docs/version-v8.0.x/05-migrations/07-v5-to-v6.md delete mode 100644 docs/versioned_docs/version-v8.0.x/05-migrations/08-v6-to-v7.md delete mode 100644 docs/versioned_docs/version-v8.0.x/05-migrations/09-v7-to-v7_1.md delete mode 100644 docs/versioned_docs/version-v8.0.x/05-migrations/10-v7_2-to-v7_3.md delete mode 100644 docs/versioned_docs/version-v8.0.x/05-migrations/11-v7-to-v8.md delete mode 100644 docs/versioned_docs/version-v8.0.x/05-migrations/_category_.json delete mode 100644 docs/versioned_docs/version-v8.0.x/05-migrations/images/auth-module-decision-tree.png delete mode 100644 docs/versioned_docs/version-v8.0.x/05-migrations/migration.template.md delete mode 100644 docs/versioned_sidebars/version-v8.0.x-sidebars.json diff --git a/docs/docusaurus.config.js b/docs/docusaurus.config.js index 1af96c3b241..3e0e9ab4a65 100644 --- a/docs/docusaurus.config.js +++ b/docs/docusaurus.config.js @@ -49,14 +49,14 @@ const config = { // Exclude template markdown files from the docs exclude: ["**/*.template.md"], // Select the latest version - lastVersion: "v8.0.x", + lastVersion: "v8.1.x", // Assign banners to specific versions versions: { current: { path: "main", banner: "unreleased", }, - "v8.0.x": { + "v8.1.x": { path: "v8", banner: "none", }, diff --git a/docs/versioned_docs/version-v8.0.x/00-intro.md b/docs/versioned_docs/version-v8.0.x/00-intro.md deleted file mode 100644 index 8c781781f7d..00000000000 --- a/docs/versioned_docs/version-v8.0.x/00-intro.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -slug: / -sidebar_position: 0 ---- - -# IBC-Go Documentation - -Welcome to the documentation for IBC-Go, the Golang implementation of the Inter-Blockchain Communication Protocol! Looking for information on ibc-rs? [Click here to go to the ibc-rs github repo](https://github.com/cosmos/ibc-rs). - -The Inter-Blockchain Communication Protocol (IBC) is an end-to-end, connection-oriented, stateful protocol for reliable, ordered, and authenticated communication between heterogeneous blockchains arranged in an unknown and dynamic topology. - -IBC is a protocol that allows blockchains to talk to each other. Chains that speak IBC can share any type of data as long as it's encoded in bytes, enabling the industry’s most feature-rich cross-chain interactions. IBC is secure and permissionless. - -The protocol realizes this interoperability by specifying a set of data structures, abstractions, and semantics that can be implemented by any distributed ledger that satisfies a small set of requirements. - -IBC can be used to build a wide range of cross-chain applications that include token transfers, atomic swaps, multi-chain smart contracts (with or without mutually comprehensible VMs), cross-chain account control, and data and code sharding of various kinds. diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/01-overview.md b/docs/versioned_docs/version-v8.0.x/01-ibc/01-overview.md deleted file mode 100644 index 73c755d18a8..00000000000 --- a/docs/versioned_docs/version-v8.0.x/01-ibc/01-overview.md +++ /dev/null @@ -1,297 +0,0 @@ ---- -title: Overview -sidebar_label: Overview -sidebar_position: 1 -slug: /ibc/overview ---- - - -# Overview - -:::note Synopsis -Learn about IBC, its components, and its use cases. -::: - -## What is the Inter-Blockchain Communication Protocol (IBC)? - -This document serves as a guide for developers who want to write their own Inter-Blockchain -Communication Protocol (IBC) applications for custom use cases. - -> IBC applications must be written as self-contained modules. - -Due to the modular design of the IBC Protocol, IBC -application developers do not need to be concerned with the low-level details of clients, -connections, and proof verification. - -This brief explanation of the lower levels of the -stack gives application developers a broad understanding of the IBC -Protocol. Abstraction layer details for channels and ports are most relevant for application developers and describe how to define custom packets and `IBCModule` callbacks. - -The requirements to have your module interact over IBC are: - -- Bind to a port or ports. -- Define your packet data. -- Use the default acknowledgment struct provided by core IBC or optionally define a custom acknowledgment struct. -- Standardize an encoding of the packet data. -- Implement the `IBCModule` interface. - -Read on for a detailed explanation of how to write a self-contained IBC application module. - -## Components Overview - -### [Clients](https://github.com/cosmos/ibc-go/blob/main/modules/core/02-client) - -IBC clients are on-chain light clients. Each light client is identified by a unique client-id. -IBC clients track the consensus states of other blockchains, along with the proof spec necessary to -properly verify proofs against the client's consensus state. A client can be associated with any number -of connections to the counterparty chain. The client identifier is auto generated using the client type -and the global client counter appended in the format: `{client-type}-{N}`. - -A `ClientState` should contain chain specific and light client specific information necessary for verifying updates -and upgrades to the IBC client. The `ClientState` may contain information such as chain-id, latest height, proof specs, -unbonding periods or the status of the light client. The `ClientState` should not contain information that -is specific to a given block at a certain height, this is the function of the `ConsensusState`. Each `ConsensusState` -should be associated with a unique block and should be referenced using a height. IBC clients are given a -client identifier prefixed store to store their associated client state and consensus states along with -any metadata associated with the consensus states. Consensus states are stored using their associated height. - -The supported IBC clients are: - -- [Solo Machine light client](https://github.com/cosmos/ibc-go/blob/main/modules/light-clients/06-solomachine): Devices such as phones, browsers, or laptops. -- [Tendermint light client](https://github.com/cosmos/ibc-go/blob/main/modules/light-clients/07-tendermint): The default for Cosmos SDK-based chains. -- [Localhost (loopback) client](https://github.com/cosmos/ibc-go/blob/main/modules/light-clients/09-localhost): Useful for -testing, simulation, and relaying packets to modules on the same application. - -### IBC Client Heights - -IBC Client Heights are represented by the struct: - -```go -type Height struct { - RevisionNumber uint64 - RevisionHeight uint64 -} -``` - -The `RevisionNumber` represents the revision of the chain that the height is representing. -A revision typically represents a continuous, monotonically increasing range of block-heights. -The `RevisionHeight` represents the height of the chain within the given revision. - -On any reset of the `RevisionHeight`—for example, when hard-forking a Tendermint chain— -the `RevisionNumber` will get incremented. This allows IBC clients to distinguish between a -block-height `n` of a previous revision of the chain (at revision `p`) and block-height `n` of the current -revision of the chain (at revision `e`). - -`Height`s that share the same revision number can be compared by simply comparing their respective `RevisionHeight`s. -`Height`s that do not share the same revision number will only be compared using their respective `RevisionNumber`s. -Thus a height `h` with revision number `e+1` will always be greater than a height `g` with revision number `e`, -**REGARDLESS** of the difference in revision heights. - -Ex: - -```go -Height{RevisionNumber: 3, RevisionHeight: 0} > Height{RevisionNumber: 2, RevisionHeight: 100000000000} -``` - -When a Tendermint chain is running a particular revision, relayers can simply submit headers and proofs with the revision number -given by the chain's `chainID`, and the revision height given by the Tendermint block height. When a chain updates using a hard-fork -and resets its block-height, it is responsible for updating its `chainID` to increment the revision number. -IBC Tendermint clients then verifies the revision number against their `chainID` and treat the `RevisionHeight` as the Tendermint block-height. - -Tendermint chains wishing to use revisions to maintain persistent IBC connections even across height-resetting upgrades must format their `chainID`s -in the following manner: `{chainID}-{revision_number}`. On any height-resetting upgrade, the `chainID` **MUST** be updated with a higher revision number -than the previous value. - -Ex: - -- Before upgrade `chainID`: `gaiamainnet-3` -- After upgrade `chainID`: `gaiamainnet-4` - -Clients that do not require revisions, such as the solo-machine client, simply hardcode `0` into the revision number whenever they -need to return an IBC height when implementing IBC interfaces and use the `RevisionHeight` exclusively. - -Other client-types can implement their own logic to verify the IBC heights that relayers provide in their `Update`, `Misbehavior`, and -`Verify` functions respectively. - -The IBC interfaces expect an `ibcexported.Height` interface, however all clients must use the concrete implementation provided in -`02-client/types` and reproduced above. - -### [Connections](https://github.com/cosmos/ibc-go/blob/main/modules/core/03-connection) - -Connections encapsulate two `ConnectionEnd` objects on two separate blockchains. Each -`ConnectionEnd` is associated with a client of the other blockchain (for example, the counterparty blockchain). -The connection handshake is responsible for verifying that the light clients on each chain are -correct for their respective counterparties. Connections, once established, are responsible for -facilitating all cross-chain verifications of IBC state. A connection can be associated with any -number of channels. - -### [Proofs](https://github.com/cosmos/ibc-go/blob/main/modules/core/23-commitment) and [Paths](https://github.com/cosmos/ibc-go/blob/main/modules/core/24-host) - -In IBC, blockchains do not directly pass messages to each other over the network. Instead, to -communicate, a blockchain commits some state to a specifically defined path that is reserved for a -specific message type and a specific counterparty. For example, for storing a specific connectionEnd as part -of a handshake or a packet intended to be relayed to a module on the counterparty chain. A relayer -process monitors for updates to these paths and relays messages by submitting the data stored -under the path and a proof to the counterparty chain. - -Proofs are passed from core IBC to light-clients as bytes. It is up to light client implementation to interpret these bytes appropriately. - -- The paths that all IBC implementations must use for committing IBC messages is defined in -[ICS-24 Host State Machine Requirements](https://github.com/cosmos/ics/tree/master/spec/core/ics-024-host-requirements). -- The proof format that all implementations must be able to produce and verify is defined in [ICS-23 Proofs](https://github.com/cosmos/ics23) implementation. - -### [Capabilities](https://github.com/cosmos/cosmos-sdk/blob/main/docs/learn/advanced/10-ocap.md) - -IBC is intended to work in execution environments where modules do not necessarily trust each -other. Thus, IBC must authenticate module actions on ports and channels so that only modules with the -appropriate permissions can use them. - -This module authentication is accomplished using a [dynamic -capability store](https://github.com/cosmos/cosmos-sdk/blob/master/docs/architecture/adr-003-dynamic-capability-store.md). Upon binding to a port or -creating a channel for a module, IBC returns a dynamic capability that the module must claim in -order to use that port or channel. The dynamic capability module prevents other modules from using that port or channel since -they do not own the appropriate capability. - -While this background information is useful, IBC modules do not need to interact at all with -these lower-level abstractions. The relevant abstraction layer for IBC application developers is -that of channels and ports. IBC applications must be written as self-contained **modules**. - -A module on one blockchain can communicate with other modules on other blockchains by sending, -receiving, and acknowledging packets through channels that are uniquely identified by the -`(channelID, portID)` tuple. - -A useful analogy is to consider IBC modules as internet applications on -a computer. A channel can then be conceptualized as an IP connection, with the IBC portID being -analogous to an IP port and the IBC channelID being analogous to an IP address. Thus, a single -instance of an IBC module can communicate on the same port with any number of other modules and -IBC correctly routes all packets to the relevant module using the (channelID, portID tuple). An -IBC module can also communicate with another IBC module over multiple ports, with each -`(portID<->portID)` packet stream being sent on a different unique channel. - -### [Ports](https://github.com/cosmos/ibc-go/blob/main/modules/core/05-port) - -An IBC module can bind to any number of ports. Each port must be identified by a unique `portID`. -Since IBC is designed to be secure with mutually distrusted modules operating on the same ledger, -binding a port returns a dynamic object capability. In order to take action on a particular port -(for example, an open channel with its portID), a module must provide the dynamic object capability to the IBC -handler. This requirement prevents a malicious module from opening channels with ports it does not own. Thus, -IBC modules are responsible for claiming the capability that is returned on `BindPort`. - -### [Channels](https://github.com/cosmos/ibc-go/blob/main/modules/core/04-channel) - -An IBC channel can be established between two IBC ports. Currently, a port is exclusively owned by a -single module. IBC packets are sent over channels. Just as IP packets contain the destination IP -address and IP port, and the source IP address and source IP port, IBC packets contain -the destination portID and channelID, and the source portID and channelID. This packet structure enables IBC to -correctly route packets to the destination module while allowing modules receiving packets to -know the sender module. - -A channel can be `ORDERED`, where packets from a sending module must be processed by the -receiving module in the order they were sent. Or a channel can be `UNORDERED`, where packets -from a sending module are processed in the order they arrive (might be in a different order than they were sent). - -Modules can choose which channels they wish to communicate over with, thus IBC expects modules to -implement callbacks that are called during the channel handshake. These callbacks can do custom -channel initialization logic. If any callback returns an error, the channel handshake fails. Thus, by -returning errors on callbacks, modules can programmatically reject and accept channels. - -The channel handshake is a 4-step handshake. Briefly, if a given chain A wants to open a channel with -chain B using an already established connection: - -1. chain A sends a `ChanOpenInit` message to signal a channel initialization attempt with chain B. -2. chain B sends a `ChanOpenTry` message to try opening the channel on chain A. -3. chain A sends a `ChanOpenAck` message to mark its channel end status as open. -4. chain B sends a `ChanOpenConfirm` message to mark its channel end status as open. - -If all handshake steps are successful, the channel is opened on both sides. At each step in the handshake, the module -associated with the `ChannelEnd` executes its callback. So -on `ChanOpenInit`, the module on chain A executes its callback `OnChanOpenInit`. - -The channel identifier is auto derived in the format: `channel-{N}` where N is the next sequence to be used. - -Just as ports came with dynamic capabilities, channel initialization returns a dynamic capability -that the module **must** claim so that they can pass in a capability to authenticate channel actions -like sending packets. The channel capability is passed into the callback on the first parts of the -handshake; either `OnChanOpenInit` on the initializing chain or `OnChanOpenTry` on the other chain. - -#### Closing channels - -Closing a channel occurs in 2 handshake steps as defined in [ICS 04](https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics). - -`ChanCloseInit` closes a channel on the executing chain if the channel exists, it is not -already closed and the connection it exists upon is OPEN. Channels can only be closed by a -calling module or in the case of a packet timeout on an ORDERED channel. - -`ChanCloseConfirm` is a response to a counterparty channel executing `ChanCloseInit`. The channel -on the executing chain closes if the channel exists, the channel is not already closed, -the connection the channel exists upon is OPEN and the executing chain successfully verifies -that the counterparty channel has been closed. - -### [Packets](https://github.com/cosmos/ibc-go/blob/main/modules/core/04-channel) - -Modules communicate with each other by sending packets over IBC channels. All -IBC packets contain the destination `portID` and `channelID` along with the source `portID` and -`channelID`. This packet structure allows modules to know the sender module of a given packet. IBC packets -contain a sequence to optionally enforce ordering. - -IBC packets also contain a `TimeoutHeight` and a `TimeoutTimestamp` that determine the deadline before the receiving module must process a packet. - -Modules send custom application data to each other inside the `Data []byte` field of the IBC packet. -Thus, packet data is opaque to IBC handlers. It is incumbent on a sender module to encode -their application-specific packet information into the `Data` field of packets. The receiver -module must decode that `Data` back to the original application data. - -### [Receipts and Timeouts](https://github.com/cosmos/ibc-go/blob/main/modules/core/04-channel) - -Since IBC works over a distributed network and relies on potentially faulty relayers to relay messages between ledgers, -IBC must handle the case where a packet does not get sent to its destination in a timely manner or at all. Packets must -specify a non-zero value for timeout height (`TimeoutHeight`) or timeout timestamp (`TimeoutTimestamp` ) after which a packet can no longer be successfully received on the destination chain. - -- The `timeoutHeight` indicates a consensus height on the destination chain after which the packet is no longer be processed, and instead counts as having timed-out. -- The `timeoutTimestamp` indicates a timestamp on the destination chain after which the packet is no longer be processed, and instead counts as having timed-out. - -If the timeout passes without the packet being successfully received, the packet can no longer be -received on the destination chain. The sending module can timeout the packet and take appropriate actions. - -If the timeout is reached, then a proof of packet timeout can be submitted to the original chain. The original chain can then perform -application-specific logic to timeout the packet, perhaps by rolling back the packet send changes (refunding senders any locked funds, etc.). - -- In ORDERED channels, a timeout of a single packet in the channel causes the channel to close. - - - If packet sequence `n` times out, then a packet at sequence `k > n` cannot be received without violating the contract of ORDERED channels that packets are processed in the order that they are sent. - - Since ORDERED channels enforce this invariant, a proof that sequence `n` has not been received on the destination chain by the specified timeout of packet `n` is sufficient to timeout packet `n` and close the channel. - -- In UNORDERED channels, the application-specific timeout logic for that packet is applied and the channel is not closed. - - - Packets can be received in any order. - - - IBC writes a packet receipt for each sequence receives in the UNORDERED channel. This receipt does not contain information; it is simply a marker intended to signify that the UNORDERED channel has received a packet at the specified sequence. - - - To timeout a packet on an UNORDERED channel, a proof is required that a packet receipt **does not exist** for the packet's sequence by the specified timeout. - -For this reason, most modules should use UNORDERED channels as they require fewer liveness guarantees to function effectively for users of that channel. - -### [Acknowledgments](https://github.com/cosmos/ibc-go/blob/main/modules/core/04-channel) - -Modules can also choose to write application-specific acknowledgments upon processing a packet. Acknowledgments can be done: - -- Synchronously on `OnRecvPacket` if the module processes packets as soon as they are received from IBC module. -- Asynchronously if module processes packets at some later point after receiving the packet. - -This acknowledgment data is opaque to IBC much like the packet `Data` and is treated by IBC as a simple byte string `[]byte`. Receiver modules must encode their acknowledgment so that the sender module can decode it correctly. The encoding must be negotiated between the two parties during version negotiation in the channel handshake. - -The acknowledgment can encode whether the packet processing succeeded or failed, along with additional information that allows the sender module to take appropriate action. - -After the acknowledgment has been written by the receiving chain, a relayer relays the acknowledgment back to the original sender module. - -The original sender module then executes application-specific acknowledgment logic using the contents of the acknowledgment. - -- After an acknowledgement fails, packet-send changes can be rolled back (for example, refunding senders in ICS20). - -- After an acknowledgment is received successfully on the original sender on the chain, the corresponding packet commitment is deleted since it is no longer needed. - -## Further Readings and Specs - -If you want to learn more about IBC, check the following specifications: - -- [IBC specification overview](https://github.com/cosmos/ibc/blob/master/README.md) diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/02-integration.md b/docs/versioned_docs/version-v8.0.x/01-ibc/02-integration.md deleted file mode 100644 index 5a3ea531ae1..00000000000 --- a/docs/versioned_docs/version-v8.0.x/01-ibc/02-integration.md +++ /dev/null @@ -1,230 +0,0 @@ ---- -title: Integration -sidebar_label: Integration -sidebar_position: 2 -slug: /ibc/integration ---- - -# Integration - -:::note Synopsis -Learn how to integrate IBC to your application and send data packets to other chains. -::: - -This document outlines the required steps to integrate and configure the [IBC -module](https://github.com/cosmos/ibc-go/tree/main/modules/core) to your Cosmos SDK application and -send fungible token transfers to other chains. - -## Integrating the IBC module - -Integrating the IBC module to your SDK-based application is straightforward. The general changes can be summarized in the following steps: - -- Add required modules to the `module.BasicManager` -- Define additional `Keeper` fields for the new modules on the `App` type -- Add the module's `StoreKey`s and initialize their `Keeper`s -- Set up corresponding routers and routes for the `ibc` module -- Add the modules to the module `Manager` -- Add modules to `Begin/EndBlockers` and `InitGenesis` -- Update the module `SimulationManager` to enable simulations - -### Module `BasicManager` and `ModuleAccount` permissions - -The first step is to add the following modules to the `BasicManager`: `x/capability`, `x/ibc`, -and `x/ibc-transfer`. After that, we need to grant `Minter` and `Burner` permissions to -the `ibc-transfer` `ModuleAccount` to mint and burn relayed tokens. - -### Integrating light clients - -> Note that from v7 onwards, all light clients have to be explicitly registered in a chain's app.go and follow the steps listed below. -> This is in contrast to earlier versions of ibc-go when `07-tendermint` and `06-solomachine` were added out of the box. - -All light clients must be registered with `module.BasicManager` in a chain's app.go file. - -The following code example shows how to register the existing `ibctm.AppModuleBasic{}` light client implementation. - -```go -import ( - ... - // highlight-next-line -+ ibctm "github.com/cosmos/ibc-go/v6/modules/light-clients/07-tendermint" - ... -) - -// app.go -var ( - ModuleBasics = module.NewBasicManager( - // ... - capability.AppModuleBasic{}, - ibc.AppModuleBasic{}, - transfer.AppModuleBasic{}, // i.e ibc-transfer module - - // register light clients on IBC - // highlight-next-line -+ ibctm.AppModuleBasic{}, - ) - - // module account permissions - maccPerms = map[string][]string{ - // other module accounts permissions - // ... - ibctransfertypes.ModuleName: {authtypes.Minter, authtypes.Burner}, - } -) -``` - -### Application fields - -Then, we need to register the `Keepers` as follows: - -```go title="app.go" -type App struct { - // baseapp, keys and subspaces definitions - - // other keepers - // ... - IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly - TransferKeeper ibctransferkeeper.Keeper // for cross-chain fungible token transfers - - // make scoped keepers public for test purposes - ScopedIBCKeeper capabilitykeeper.ScopedKeeper - ScopedTransferKeeper capabilitykeeper.ScopedKeeper - - /// ... - /// module and simulation manager definitions -} -``` - -### Configure the `Keepers` - -During initialization, besides initializing the IBC `Keepers` (for the `x/ibc`, and -`x/ibc-transfer` modules), we need to grant specific capabilities through the capability module -`ScopedKeepers` so that we can authenticate the object-capability permissions for each of the IBC -channels. - -```go -func NewApp(...args) *App { - // define codecs and baseapp - - // 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(ibcexported.ModuleName) - scopedTransferKeeper := app.CapabilityKeeper.ScopeToModule(ibctransfertypes.ModuleName) - - // ... other modules keepers - - // Create IBC Keeper - app.IBCKeeper = ibckeeper.NewKeeper( - appCodec, keys[ibcexported.StoreKey], app.GetSubspace(ibcexported.ModuleName), app.StakingKeeper, app.UpgradeKeeper, scopedIBCKeeper, - ) - - // Create Transfer Keepers - app.TransferKeeper = ibctransferkeeper.NewKeeper( - appCodec, keys[ibctransfertypes.StoreKey], app.GetSubspace(ibctransfertypes.ModuleName), - app.IBCKeeper.ChannelKeeper, app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, - app.AccountKeeper, app.BankKeeper, scopedTransferKeeper, - ) - transferModule := transfer.NewAppModule(app.TransferKeeper) - - // .. continues -} -``` - -### Register `Routers` - -IBC needs to know which module is bound to which port so that it can route packets to the -appropriate module and call the appropriate callbacks. The port to module name mapping is handled by -IBC's port `Keeper`. However, the mapping from module name to the relevant callbacks is accomplished -by the port -[`Router`](https://github.com/cosmos/ibc-go/blob/main/modules/core/05-port/types/router.go) on the -IBC module. - -Adding the module routes allows the IBC handler to call the appropriate callback when processing a -channel handshake or a packet. - -Currently, a `Router` is static so it must be initialized and set correctly on app initialization. -Once the `Router` has been set, no new routes can be added. - -```go title="app.go" -func NewApp(...args) *App { - // .. continuation from above - - // Create static IBC router, add ibc-transfer module route, then set and seal it - ibcRouter := port.NewRouter() - ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferModule) - // Setting Router will finalize all routes by sealing router - // No more routes can be added - app.IBCKeeper.SetRouter(ibcRouter) - - // .. continues -``` - -### Module Managers - -In order to use IBC, we need to add the new modules to the module `Manager` and to the `SimulationManager` in case your application supports [simulations](https://github.com/cosmos/cosmos-sdk/blob/main/docs/build/building-modules/14-simulator.md). - -```go title="app.go" -func NewApp(...args) *App { - // .. continuation from above - - app.mm = module.NewManager( - // other modules - // ... - capability.NewAppModule(appCodec, *app.CapabilityKeeper), - ibc.NewAppModule(app.IBCKeeper), - transferModule, - ) - - // ... - - app.sm = module.NewSimulationManager( - // other modules - // ... - capability.NewAppModule(appCodec, *app.CapabilityKeeper), - ibc.NewAppModule(app.IBCKeeper), - transferModule, - ) - - // .. continues -``` - -### Application ABCI Ordering - -One addition from IBC is the concept of `HistoricalEntries` which are stored on the staking module. -Each entry contains the historical information for the `Header` and `ValidatorSet` of this chain which is stored -at each height during the `BeginBlock` call. The historical info is required to introspect the -past historical info at any given height in order to verify the light client `ConsensusState` during the -connection handshake. - -```go title="app.go" -func NewApp(...args) *App { - // .. continuation from above - - // add staking and ibc modules to BeginBlockers - app.mm.SetOrderBeginBlockers( - // other modules ... - stakingtypes.ModuleName, ibcexported.ModuleName, - ) - - // ... - - // NOTE: Capability module must occur first so that it can initialize any capabilities - // so that other modules that want to create or claim capabilities afterwards in InitChain - // can do so safely. - app.mm.SetOrderInitGenesis( - capabilitytypes.ModuleName, - // other modules ... - ibcexported.ModuleName, ibctransfertypes.ModuleName, - ) - - // .. continues -``` - -:::warning -**IMPORTANT**: The capability module **must** be declared first in `SetOrderInitGenesis` -::: - -That's it! You have now wired up the IBC module and are now able to send fungible tokens across -different chains. If you want to have a broader view of the changes take a look into the SDK's -[`SimApp`](https://github.com/cosmos/ibc-go/blob/main/testing/simapp/app.go). diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/01-apps.md b/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/01-apps.md deleted file mode 100644 index fb5013149e0..00000000000 --- a/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/01-apps.md +++ /dev/null @@ -1,494 +0,0 @@ ---- -title: IBC Applications -sidebar_label: IBC Applications -sidebar_position: 1 -slug: /ibc/apps/apps ---- - -# IBC Applications - -Learn how to configure your application to use IBC and send data packets to other chains. - -This document serves as a guide for developers who want to write their own Inter-blockchain -Communication Protocol (IBC) applications for custom use cases. - -Due to the modular design of the IBC protocol, IBC -application developers do not need to concern themselves with the low-level details of clients, -connections, and proof verification. Nevertheless a brief explanation of the lower levels of the -stack is given so that application developers may have a high-level understanding of the IBC -protocol. Then the document goes into detail on the abstraction layer most relevant for application -developers (channels and ports), and describes how to define your own custom packets, and -`IBCModule` callbacks. - -To have your module interact over IBC you must: bind to a port(s), define your own packet data and acknowledgement structs as well as how to encode/decode them, and implement the -`IBCModule` interface. Below is a more detailed explanation of how to write an IBC application -module correctly. - -:::note - -## Pre-requisites Readings - -- [IBC Overview](../01-overview.md) -- [IBC default integration](../02-integration.md) - -::: - -## Create a custom IBC application module - -### Implement `IBCModule` Interface and callbacks - -The Cosmos SDK expects all IBC modules to implement the [`IBCModule` -interface](https://github.com/cosmos/ibc-go/tree/main/modules/core/05-port/types/module.go). This -interface contains all of the callbacks IBC expects modules to implement. This section will describe -the callbacks that are called during channel handshake execution. - -Here are the channel handshake callbacks that modules are expected to implement: - -```go -// Called by IBC Handler on MsgOpenInit -func (k Keeper) OnChanOpenInit(ctx sdk.Context, - order channeltypes.Order, - connectionHops []string, - portID string, - channelID string, - channelCap *capabilitytypes.Capability, - counterparty channeltypes.Counterparty, - version string, -) error { - // OpenInit must claim the channelCapability that IBC passes into the callback - if err := k.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil { - return err - } - - // ... do custom initialization logic - - // Use above arguments to determine if we want to abort handshake - // Examples: Abort if order == UNORDERED, - // Abort if version is unsupported - err := checkArguments(args) - return err -} - -// Called by IBC Handler on MsgOpenTry -OnChanOpenTry( - ctx sdk.Context, - order channeltypes.Order, - connectionHops []string, - portID, - channelID string, - channelCap *capabilitytypes.Capability, - counterparty channeltypes.Counterparty, - counterpartyVersion string, -) (string, error) { - // OpenTry must claim the channelCapability that IBC passes into the callback - if err := k.scopedKeeper.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil { - return err - } - - // ... do custom initialization logic - - // Use above arguments to determine if we want to abort handshake - if err := checkArguments(args); err != nil { - return err - } - - // Construct application version - // IBC applications must return the appropriate application version - // This can be a simple string or it can be a complex version constructed - // from the counterpartyVersion and other arguments. - // The version returned will be the channel version used for both channel ends. - appVersion := negotiateAppVersion(counterpartyVersion, args) - - return appVersion, nil -} - -// Called by IBC Handler on MsgOpenAck -OnChanOpenAck( - ctx sdk.Context, - portID, - channelID string, - counterpartyVersion string, -) error { - // ... do custom initialization logic - - // Use above arguments to determine if we want to abort handshake - err := checkArguments(args) - return err -} - -// Called by IBC Handler on MsgOpenConfirm -OnChanOpenConfirm( - ctx sdk.Context, - portID, - channelID string, -) error { - // ... do custom initialization logic - - // Use above arguments to determine if we want to abort handshake - err := checkArguments(args) - return err -} -``` - -The channel closing handshake will also invoke module callbacks that can return errors to abort the -closing handshake. Closing a channel is a 2-step handshake, the initiating chain calls -`ChanCloseInit` and the finalizing chain calls `ChanCloseConfirm`. - -```go -// Called by IBC Handler on MsgCloseInit -OnChanCloseInit( - ctx sdk.Context, - portID, - channelID string, -) error { - // ... do custom finalization logic - - // Use above arguments to determine if we want to abort handshake - err := checkArguments(args) - return err -} - -// Called by IBC Handler on MsgCloseConfirm -OnChanCloseConfirm( - ctx sdk.Context, - portID, - channelID string, -) error { - // ... do custom finalization logic - - // Use above arguments to determine if we want to abort handshake - err := checkArguments(args) - return err -} -``` - -#### Channel Handshake Version Negotiation - -Application modules are expected to verify versioning used during the channel handshake procedure. - -- `ChanOpenInit` callback should verify that the `MsgChanOpenInit.Version` is valid -- `ChanOpenTry` callback should construct the application version used for both channel ends. If no application version can be constructed, it must return an error. -- `ChanOpenAck` callback should verify that the `MsgChanOpenAck.CounterpartyVersion` is valid and supported. - -IBC expects application modules to perform application version negotiation in `OnChanOpenTry`. The negotiated version -must be returned to core IBC. If the version cannot be negotiated, an error should be returned. - -Versions must be strings but can implement any versioning structure. If your application plans to -have linear releases then semantic versioning is recommended. If your application plans to release -various features in between major releases then it is advised to use the same versioning scheme -as IBC. This versioning scheme specifies a version identifier and compatible feature set with -that identifier. Valid version selection includes selecting a compatible version identifier with -a subset of features supported by your application for that version. The struct is used for this -scheme can be found in `03-connection/types`. - -Since the version type is a string, applications have the ability to do simple version verification -via string matching or they can use the already implemented versioning system and pass the proto -encoded version into each handhshake call as necessary. - -ICS20 currently implements basic string matching with a single supported version. - -### Bind Ports - -Currently, ports must be bound on app initialization. A module may bind to ports in `InitGenesis` -like so: - -```go -func InitGenesis(ctx sdk.Context, keeper keeper.Keeper, state types.GenesisState) { - // ... other initialization logic - - // Only try to bind to port if it is not already bound, since we may already own - // port capability from capability InitGenesis - if !hasCapability(ctx, state.PortID) { - // module binds to desired ports on InitChain - // and claims returned capabilities - cap1 := keeper.IBCPortKeeper.BindPort(ctx, port1) - cap2 := keeper.IBCPortKeeper.BindPort(ctx, port2) - cap3 := keeper.IBCPortKeeper.BindPort(ctx, port3) - - // NOTE: The module's scoped capability keeper must be private - keeper.scopedKeeper.ClaimCapability(cap1) - keeper.scopedKeeper.ClaimCapability(cap2) - keeper.scopedKeeper.ClaimCapability(cap3) - } - - // ... more initialization logic -} -``` - -### Custom Packets - -Modules connected by a channel must agree on what application data they are sending over the -channel, as well as how they will encode/decode it. This process is not specified by IBC as it is up -to each application module to determine how to implement this agreement. However, for most -applications this will happen as a version negotiation during the channel handshake. While more -complex version negotiation is possible to implement inside the channel opening handshake, a very -simple version negotiation is implemented in the [ibc-transfer module](https://github.com/cosmos/ibc-go/tree/main/modules/apps/transfer/module.go). - -Thus, a module must define its custom packet data structure, along with a well-defined way to -encode and decode it to and from `[]byte`. - -```go -// Custom packet data defined in application module -type CustomPacketData struct { - // Custom fields ... -} - -EncodePacketData(packetData CustomPacketData) []byte { - // encode packetData to bytes -} - -DecodePacketData(encoded []byte) (CustomPacketData) { - // decode from bytes to packet data -} -``` - -Then a module must encode its packet data before sending it through IBC. - -```go -// retrieve the dynamic capability for this channel -channelCap := scopedKeeper.GetCapability(ctx, channelCapName) -// Sending custom application packet data -data := EncodePacketData(customPacketData) -packet.Data = data -// Send packet to IBC, authenticating with channelCap -sequence, err := IBCChannelKeeper.SendPacket( - ctx, - channelCap, - sourcePort, - sourceChannel, - timeoutHeight, - timeoutTimestamp, - data, -) -``` - -A module receiving a packet must decode the `PacketData` into a structure it expects so that it can -act on it. - -```go -// Receiving custom application packet data (in OnRecvPacket) -packetData := DecodePacketData(packet.Data) -// handle received custom packet data -``` - -#### Packet Flow Handling - -Just as IBC expected modules to implement callbacks for channel handshakes, IBC also expects modules -to implement callbacks for handling the packet flow through a channel. - -Once a module A and module B are connected to each other, relayers can start relaying packets and -acknowledgements back and forth on the channel. - -![IBC packet flow diagram](https://media.githubusercontent.com/media/cosmos/ibc/old/spec/ics-004-channel-and-packet-semantics/channel-state-machine.png) - -Briefly, a successful packet flow works as follows: - -1. module A sends a packet through the IBC module -2. the packet is received by module B -3. if module B writes an acknowledgement of the packet then module A will process the - acknowledgement -4. if the packet is not successfully received before the timeout, then module A processes the - packet's timeout. - -##### Sending Packets - -Modules do not send packets through callbacks, since the modules initiate the action of sending -packets to the IBC module, as opposed to other parts of the packet flow where msgs sent to the IBC -module must trigger execution on the port-bound module through the use of callbacks. Thus, to send a -packet a module simply needs to call `SendPacket` on the `IBCChannelKeeper`. - -```go -// retrieve the dynamic capability for this channel -channelCap := scopedKeeper.GetCapability(ctx, channelCapName) -// Sending custom application packet data -data := EncodePacketData(customPacketData) -// Send packet to IBC, authenticating with channelCap -sequence, err := IBCChannelKeeper.SendPacket( - ctx, - channelCap, - sourcePort, - sourceChannel, - timeoutHeight, - timeoutTimestamp, - data, -) -``` - -::: warning -In order to prevent modules from sending packets on channels they do not own, IBC expects -modules to pass in the correct channel capability for the packet's source channel. -::: - -##### Receiving Packets - -To handle receiving packets, the module must implement the `OnRecvPacket` callback. This gets -invoked by the IBC module after the packet has been proved valid and correctly processed by the IBC -keepers. Thus, the `OnRecvPacket` callback only needs to worry about making the appropriate state -changes given the packet data without worrying about whether the packet is valid or not. - -Modules may return to the IBC handler an acknowledgement which implements the Acknowledgement interface. -The IBC handler will then commit this acknowledgement of the packet so that a relayer may relay the -acknowledgement back to the sender module. - -The state changes that occurred during this callback will only be written if: - -- the acknowledgement was successful as indicated by the `Success()` function of the acknowledgement -- if the acknowledgement returned is nil indicating that an asynchronous process is occurring - -NOTE: Applications which process asynchronous acknowledgements must handle reverting state changes -when appropriate. Any state changes that occurred during the `OnRecvPacket` callback will be written -for asynchronous acknowledgements. - -```go -OnRecvPacket( - ctx sdk.Context, - packet channeltypes.Packet, -) ibcexported.Acknowledgement { - // Decode the packet data - packetData := DecodePacketData(packet.Data) - - // do application state changes based on packet data and return the acknowledgement - // NOTE: The acknowledgement will indicate to the IBC handler if the application - // state changes should be written via the `Success()` function. Application state - // changes are only written if the acknowledgement is successful or the acknowledgement - // returned is nil indicating that an asynchronous acknowledgement will occur. - ack := processPacket(ctx, packet, packetData) - - return ack -} -``` - -The Acknowledgement interface: - -```go -// Acknowledgement defines the interface used to return -// acknowledgements in the OnRecvPacket callback. -type Acknowledgement interface { - Success() bool - Acknowledgement() []byte -} -``` - -### Acknowledgements - -Modules may commit an acknowledgement upon receiving and processing a packet in the case of synchronous packet processing. -In the case where a packet is processed at some later point after the packet has been received (asynchronous execution), the acknowledgement -will be written once the packet has been processed by the application which may be well after the packet receipt. - -NOTE: Most blockchain modules will want to use the synchronous execution model in which the module processes and writes the acknowledgement -for a packet as soon as it has been received from the IBC module. - -This acknowledgement can then be relayed back to the original sender chain, which can take action -depending on the contents of the acknowledgement. - -Just as packet data was opaque to IBC, acknowledgements are similarly opaque. Modules must pass and -receive acknowledegments with the IBC modules as byte strings. - -Thus, modules must agree on how to encode/decode acknowledgements. The process of creating an -acknowledgement struct along with encoding and decoding it, is very similar to the packet data -example above. [ICS 04](https://github.com/cosmos/ibc/blob/master/spec/core/ics-004-channel-and-packet-semantics#acknowledgement-envelope) -specifies a recommended format for acknowledgements. This acknowledgement type can be imported from -[channel types](https://github.com/cosmos/ibc-go/tree/main/modules/core/04-channel/types). - -While modules may choose arbitrary acknowledgement structs, a default acknowledgement types is provided by IBC [here](https://github.com/cosmos/ibc-go/blob/main/proto/ibc/core/channel/v1/channel.proto): - -```proto -// Acknowledgement is the recommended acknowledgement format to be used by -// app-specific protocols. -// NOTE: The field numbers 21 and 22 were explicitly chosen to avoid accidental -// conflicts with other protobuf message formats used for acknowledgements. -// The first byte of any message with this format will be the non-ASCII values -// `0xaa` (result) or `0xb2` (error). Implemented as defined by ICS: -// https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics#acknowledgement-envelope -message Acknowledgement { - // response contains either a result or an error and must be non-empty - oneof response { - bytes result = 21; - string error = 22; - } -} -``` - -#### Acknowledging Packets - -After a module writes an acknowledgement, a relayer can relay back the acknowledgement to the sender module. The sender module can -then process the acknowledgement using the `OnAcknowledgementPacket` callback. The contents of the -acknowledgement is entirely up to the modules on the channel (just like the packet data); however, it -may often contain information on whether the packet was successfully processed along -with some additional data that could be useful for remediation if the packet processing failed. - -Since the modules are responsible for agreeing on an encoding/decoding standard for packet data and -acknowledgements, IBC will pass in the acknowledgements as `[]byte` to this callback. The callback -is responsible for decoding the acknowledgement and processing it. - -```go -OnAcknowledgementPacket( - ctx sdk.Context, - packet channeltypes.Packet, - acknowledgement []byte, -) (*sdk.Result, error) { - // Decode acknowledgement - ack := DecodeAcknowledgement(acknowledgement) - - // process ack - res, err := processAck(ack) - return res, err -} -``` - -#### Timeout Packets - -If the timeout for a packet is reached before the packet is successfully received or the -counterparty channel end is closed before the packet is successfully received, then the receiving -chain can no longer process it. Thus, the sending chain must process the timeout using -`OnTimeoutPacket` to handle this situation. Again the IBC module will verify that the timeout is -indeed valid, so our module only needs to implement the state machine logic for what to do once a -timeout is reached and the packet can no longer be received. - -```go -OnTimeoutPacket( - ctx sdk.Context, - packet channeltypes.Packet, -) (*sdk.Result, error) { - // do custom timeout logic -} -``` - -### Routing - -As mentioned above, modules must implement the IBC module interface (which contains both channel -handshake callbacks and packet handling callbacks). The concrete implementation of this interface -must be registered with the module name as a route on the IBC `Router`. - -```go -// app.go -func NewApp(...args) *App { -// ... - -// Create static IBC router, add module routes, then set and seal it -ibcRouter := port.NewRouter() - -ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferModule) -// Note: moduleCallbacks must implement IBCModule interface -ibcRouter.AddRoute(moduleName, moduleCallbacks) - -// Setting Router will finalize all routes by sealing router -// No more routes can be added -app.IBCKeeper.SetRouter(ibcRouter) -``` - -## Working Example - -For a real working example of an IBC application, you can look through the `ibc-transfer` module -which implements everything discussed above. - -Here are the useful parts of the module to look at: - -[Binding to transfer -port](https://github.com/cosmos/ibc-go/blob/main/modules/apps/transfer/keeper/genesis.go) - -[Sending transfer -packets](https://github.com/cosmos/ibc-go/blob/main/modules/apps/transfer/keeper/relay.go) - -[Implementing IBC -callbacks](https://github.com/cosmos/ibc-go/blob/main/modules/apps/transfer/ibc_module.go) diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/02-ibcmodule.md b/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/02-ibcmodule.md deleted file mode 100644 index d128612fab2..00000000000 --- a/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/02-ibcmodule.md +++ /dev/null @@ -1,379 +0,0 @@ ---- -title: Implement IBCModule interface and callbacks -sidebar_label: Implement IBCModule interface and callbacks -sidebar_position: 2 -slug: /ibc/apps/ibcmodule ---- - -# Implement `IBCModule` interface and callbacks - -:::note Synopsis -Learn how to implement the `IBCModule` interface and all of the callbacks it requires. -::: - -The Cosmos SDK expects all IBC modules to implement the [`IBCModule` -interface](https://github.com/cosmos/ibc-go/tree/main/modules/core/05-port/types/module.go). This interface contains all of the callbacks IBC expects modules to implement. They include callbacks related to channel handshake, closing and packet callbacks (`OnRecvPacket`, `OnAcknowledgementPacket` and `OnTimeoutPacket`). - -```go -// IBCModule implements the ICS26 interface for given the keeper. -// The implementation of the IBCModule interface could for example be in a file called ibc_module.go, -// but ultimately file structure is up to the developer -type IBCModule struct { - keeper keeper.Keeper -} -``` - -Additionally, in the `module.go` file, add the following line: - -```go -var ( - _ module.AppModule = AppModule{} - _ module.AppModuleBasic = AppModuleBasic{} - // Add this line - _ porttypes.IBCModule = IBCModule{} -) -``` - -:::note - -## Pre-requisite readings - -- [IBC Overview](../01-overview.md) -- [IBC default integration](../02-integration.md) - -::: - -## Channel handshake callbacks - -This section will describe the callbacks that are called during channel handshake execution. Among other things, it will claim channel capabilities passed on from core IBC. For a refresher on capabilities, check [the Overview section](../01-overview.md#capabilities). - -Here are the channel handshake callbacks that modules are expected to implement: - -> Note that some of the code below is *pseudo code*, indicating what actions need to happen but leaving it up to the developer to implement a custom implementation. E.g. the `checkArguments` and `negotiateAppVersion` functions. - -```go -// Called by IBC Handler on MsgOpenInit -func (im IBCModule) OnChanOpenInit(ctx sdk.Context, - order channeltypes.Order, - connectionHops []string, - portID string, - channelID string, - channelCap *capabilitytypes.Capability, - counterparty channeltypes.Counterparty, - version string, -) (string, error) { - // ... do custom initialization logic - - // Use above arguments to determine if we want to abort handshake - // Examples: - // - Abort if order == UNORDERED, - // - Abort if version is unsupported - if err := checkArguments(args); err != nil { - return "", err - } - - // OpenInit must claim the channelCapability that IBC passes into the callback - if err := im.keeper.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil { - return "", err - } - - return version, nil -} - -// Called by IBC Handler on MsgOpenTry -func (im IBCModule) OnChanOpenTry( - ctx sdk.Context, - order channeltypes.Order, - connectionHops []string, - portID, - channelID string, - channelCap *capabilitytypes.Capability, - counterparty channeltypes.Counterparty, - counterpartyVersion string, -) (string, error) { - // ... do custom initialization logic - - // Use above arguments to determine if we want to abort handshake - if err := checkArguments(args); err != nil { - return "", err - } - - // OpenTry must claim the channelCapability that IBC passes into the callback - if err := im.keeper.scopedKeeper.ClaimCapability(ctx, chanCap, host.ChannelCapabilityPath(portID, channelID)); err != nil { - return err - } - - // Construct application version - // IBC applications must return the appropriate application version - // This can be a simple string or it can be a complex version constructed - // from the counterpartyVersion and other arguments. - // The version returned will be the channel version used for both channel ends. - appVersion := negotiateAppVersion(counterpartyVersion, args) - - return appVersion, nil -} - -// Called by IBC Handler on MsgOpenAck -func (im IBCModule) OnChanOpenAck( - ctx sdk.Context, - portID, - channelID string, - counterpartyVersion string, -) error { - if counterpartyVersion != types.Version { - return sdkerrors.Wrapf(types.ErrInvalidVersion, "invalid counterparty version: %s, expected %s", counterpartyVersion, types.Version) - } - - // do custom logic - - return nil -} - -// Called by IBC Handler on MsgOpenConfirm -func (im IBCModule) OnChanOpenConfirm( - ctx sdk.Context, - portID, - channelID string, -) error { - // do custom logic - - return nil -} -``` - -The channel closing handshake will also invoke module callbacks that can return errors to abort the closing handshake. Closing a channel is a 2-step handshake, the initiating chain calls `ChanCloseInit` and the finalizing chain calls `ChanCloseConfirm`. - -```go -// Called by IBC Handler on MsgCloseInit -func (im IBCModule) OnChanCloseInit( - ctx sdk.Context, - portID, - channelID string, -) error { - // ... do custom finalization logic - - // Use above arguments to determine if we want to abort handshake - err := checkArguments(args) - return err -} - -// Called by IBC Handler on MsgCloseConfirm -func (im IBCModule) OnChanCloseConfirm( - ctx sdk.Context, - portID, - channelID string, -) error { - // ... do custom finalization logic - - // Use above arguments to determine if we want to abort handshake - err := checkArguments(args) - return err -} -``` - -### Channel handshake version negotiation - -Application modules are expected to verify versioning used during the channel handshake procedure. - -- `OnChanOpenInit` will verify that the relayer-chosen parameters - are valid and perform any custom `INIT` logic. - It may return an error if the chosen parameters are invalid - in which case the handshake is aborted. - If the provided version string is non-empty, `OnChanOpenInit` should return - the version string if valid or an error if the provided version is invalid. - **If the version string is empty, `OnChanOpenInit` is expected to - return a default version string representing the version(s) - it supports.** - If there is no default version string for the application, - it should return an error if the provided version is an empty string. -- `OnChanOpenTry` will verify the relayer-chosen parameters along with the - counterparty-chosen version string and perform custom `TRY` logic. - If the relayer-chosen parameters - are invalid, the callback must return an error to abort the handshake. - If the counterparty-chosen version is not compatible with this module's - supported versions, the callback must return an error to abort the handshake. - If the versions are compatible, the try callback must select the final version - string and return it to core IBC. - `OnChanOpenTry` may also perform custom initialization logic. -- `OnChanOpenAck` will error if the counterparty selected version string - is invalid and abort the handshake. It may also perform custom ACK logic. - -Versions must be strings but can implement any versioning structure. If your application plans to -have linear releases then semantic versioning is recommended. If your application plans to release -various features in between major releases then it is advised to use the same versioning scheme -as IBC. This versioning scheme specifies a version identifier and compatible feature set with -that identifier. Valid version selection includes selecting a compatible version identifier with -a subset of features supported by your application for that version. The struct used for this -scheme can be found in [03-connection/types](https://github.com/cosmos/ibc-go/blob/main/modules/core/03-connection/types/version.go#L16). - -Since the version type is a string, applications have the ability to do simple version verification -via string matching or they can use the already implemented versioning system and pass the proto -encoded version into each handhshake call as necessary. - -ICS20 currently implements basic string matching with a single supported version. - -## Packet callbacks - -Just as IBC expects modules to implement callbacks for channel handshakes, it also expects modules to implement callbacks for handling the packet flow through a channel, as defined in the `IBCModule` interface. - -Once a module A and module B are connected to each other, relayers can start relaying packets and acknowledgements back and forth on the channel. - -![IBC packet flow diagram](./images/packet_flow.png) - -Briefly, a successful packet flow works as follows: - -1. Module A sends a packet through the IBC module -2. The packet is received by module B -3. If module B writes an acknowledgement of the packet then module A will process the acknowledgement -4. If the packet is not successfully received before the timeout, then module A processes the packet's timeout. - -### Sending packets - -Modules **do not send packets through callbacks**, since the modules initiate the action of sending packets to the IBC module, as opposed to other parts of the packet flow where messages sent to the IBC -module must trigger execution on the port-bound module through the use of callbacks. Thus, to send a packet a module simply needs to call `SendPacket` on the `IBCChannelKeeper`. - -> Note that some of the code below is *pseudo code*, indicating what actions need to happen but leaving it up to the developer to implement a custom implementation. E.g. the `EncodePacketData(customPacketData)` function. - -```go -// retrieve the dynamic capability for this channel -channelCap := scopedKeeper.GetCapability(ctx, channelCapName) -// Sending custom application packet data -data := EncodePacketData(customPacketData) -// Send packet to IBC, authenticating with channelCap -sequence, err := IBCChannelKeeper.SendPacket( - ctx, - channelCap, - sourcePort, - sourceChannel, - timeoutHeight, - timeoutTimestamp, - data, -) -``` - -:::warning -In order to prevent modules from sending packets on channels they do not own, IBC expects -modules to pass in the correct channel capability for the packet's source channel. -::: - -### Receiving packets - -To handle receiving packets, the module must implement the `OnRecvPacket` callback. This gets -invoked by the IBC module after the packet has been proved valid and correctly processed by the IBC -keepers. Thus, the `OnRecvPacket` callback only needs to worry about making the appropriate state -changes given the packet data without worrying about whether the packet is valid or not. - -Modules may return to the IBC handler an acknowledgement which implements the `Acknowledgement` interface. -The IBC handler will then commit this acknowledgement of the packet so that a relayer may relay the -acknowledgement back to the sender module. - -The state changes that occurred during this callback will only be written if: - -- the acknowledgement was successful as indicated by the `Success()` function of the acknowledgement -- if the acknowledgement returned is nil indicating that an asynchronous process is occurring - -NOTE: Applications which process asynchronous acknowledgements must handle reverting state changes -when appropriate. Any state changes that occurred during the `OnRecvPacket` callback will be written -for asynchronous acknowledgements. - -> Note that some of the code below is *pseudo code*, indicating what actions need to happen but leaving it up to the developer to implement a custom implementation. E.g. the `DecodePacketData(packet.Data)` function. - -```go -func (im IBCModule) OnRecvPacket( - ctx sdk.Context, - packet channeltypes.Packet, -) ibcexported.Acknowledgement { - // Decode the packet data - packetData := DecodePacketData(packet.Data) - - // do application state changes based on packet data and return the acknowledgement - // NOTE: The acknowledgement will indicate to the IBC handler if the application - // state changes should be written via the `Success()` function. Application state - // changes are only written if the acknowledgement is successful or the acknowledgement - // returned is nil indicating that an asynchronous acknowledgement will occur. - ack := processPacket(ctx, packet, packetData) - - return ack -} -``` - -Reminder, the `Acknowledgement` interface: - -```go -// Acknowledgement defines the interface used to return -// acknowledgements in the OnRecvPacket callback. -type Acknowledgement interface { - Success() bool - Acknowledgement() []byte -} -``` - -### Acknowledging packets - -After a module writes an acknowledgement, a relayer can relay back the acknowledgement to the sender module. The sender module can -then process the acknowledgement using the `OnAcknowledgementPacket` callback. The contents of the -acknowledgement is entirely up to the modules on the channel (just like the packet data); however, it -may often contain information on whether the packet was successfully processed along -with some additional data that could be useful for remediation if the packet processing failed. - -Since the modules are responsible for agreeing on an encoding/decoding standard for packet data and -acknowledgements, IBC will pass in the acknowledgements as `[]byte` to this callback. The callback -is responsible for decoding the acknowledgement and processing it. - -> Note that some of the code below is *pseudo code*, indicating what actions need to happen but leaving it up to the developer to implement a custom implementation. E.g. the `DecodeAcknowledgement(acknowledgments)` and `processAck(ack)` functions. - -```go -func (im IBCModule) OnAcknowledgementPacket( - ctx sdk.Context, - packet channeltypes.Packet, - acknowledgement []byte, -) (*sdk.Result, error) { - // Decode acknowledgement - ack := DecodeAcknowledgement(acknowledgement) - - // process ack - res, err := processAck(ack) - return res, err -} -``` - -### Timeout packets - -If the timeout for a packet is reached before the packet is successfully received or the -counterparty channel end is closed before the packet is successfully received, then the receiving -chain can no longer process it. Thus, the sending chain must process the timeout using -`OnTimeoutPacket` to handle this situation. Again the IBC module will verify that the timeout is -indeed valid, so our module only needs to implement the state machine logic for what to do once a -timeout is reached and the packet can no longer be received. - -```go -func (im IBCModule) OnTimeoutPacket( - ctx sdk.Context, - packet channeltypes.Packet, -) (*sdk.Result, error) { - // do custom timeout logic -} -``` - -### Optional interfaces - -The following interface are optional and MAY be implemented by an IBCModule. - -#### PacketDataUnmarshaler - -The `PacketDataUnmarshaler` interface is defined as follows: - -```go -// PacketDataUnmarshaler defines an optional interface which allows a middleware to -// request the packet data to be unmarshaled by the base application. -type PacketDataUnmarshaler interface { - // UnmarshalPacketData unmarshals the packet data into a concrete type - UnmarshalPacketData([]byte) (interface{}, error) -} -``` - -The implementation of `UnmarshalPacketData` should unmarshal the bytes into the packet data type defined for an IBC stack. -The base application of an IBC stack should unmarshal the bytes into its packet data type, while a middleware may simply defer the call to the underlying application. - -This interface allows middlewares to unmarshal a packet data in order to make use of interfaces the packet data type implements. -For example, the callbacks middleware makes use of this function to access packet data types which implement the `PacketData` and `PacketDataProvider` interfaces. diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/03-bindports.md b/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/03-bindports.md deleted file mode 100644 index 6a3cc27a924..00000000000 --- a/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/03-bindports.md +++ /dev/null @@ -1,122 +0,0 @@ ---- -title: Bind ports -sidebar_label: Bind ports -sidebar_position: 3 -slug: /ibc/apps/bindports ---- - -# Bind ports - -:::note Synopsis -Learn what changes to make to bind modules to their ports on initialization. -::: - -:::note - -## Pre-requisite readings - -- [IBC Overview](../01-overview.md) -- [IBC default integration](../02-integration.md) - -::: -Currently, ports must be bound on app initialization. In order to bind modules to their respective ports on initialization, the following needs to be implemented: - -> Note that `portID` does not refer to a certain numerical ID, like `localhost:8080` with a `portID` 8080. Rather it refers to the application module the port binds. For IBC Modules built with the Cosmos SDK, it defaults to the module's name and for Cosmwasm contracts it defaults to the contract address. - -1. Add port ID to the `GenesisState` proto definition: - -```protobuf -message GenesisState { - string port_id = 1; - // other fields -} -``` - -1. Add port ID as a key to the module store: - -```go -// x//types/keys.go -const ( - // ModuleName defines the IBC Module name - ModuleName = "moduleName" - - // Version defines the current version the IBC - // module supports - Version = "moduleVersion-1" - - // PortID is the default port id that module binds to - PortID = "portID" - - // ... -) -``` - -1. Add port ID to `x//types/genesis.go`: - -```go -// in x//types/genesis.go - -// DefaultGenesisState returns a GenesisState with "transfer" as the default PortID. -func DefaultGenesisState() *GenesisState { - return &GenesisState{ - PortId: PortID, - // additional k-v fields - } -} - -// Validate performs basic genesis state validation returning an error upon any -// failure. -func (gs GenesisState) Validate() error { - if err := host.PortIdentifierValidator(gs.PortId); err != nil { - return err - } - //additional validations - - return gs.Params.Validate() -} -``` - -1. Bind to port(s) in the module keeper's `InitGenesis`: - -```go -// InitGenesis initializes the ibc-module state and binds to PortID. -func (k Keeper) InitGenesis(ctx sdk.Context, state types.GenesisState) { - k.SetPort(ctx, state.PortId) - - // ... - - // Only try to bind to port if it is not already bound, since we may already own - // port capability from capability InitGenesis - if !k.hasCapability(ctx, state.PortId) { - // transfer module binds to the transfer port on InitChain - // and claims the returned capability - err := k.BindPort(ctx, state.PortId) - if err != nil { - panic(fmt.Sprintf("could not claim port capability: %v", err)) - } - } - - // ... -} -``` - -With: - -```go -// IsBound checks if the module is already bound to the desired port -func (k Keeper) IsBound(ctx sdk.Context, portID string) bool { - _, ok := k.scopedKeeper.GetCapability(ctx, host.PortPath(portID)) - return ok -} - -// BindPort defines a wrapper function for the port Keeper's function in -// order to expose it to module's InitGenesis function -func (k Keeper) BindPort(ctx sdk.Context, portID string) error { - cap := k.portKeeper.BindPort(ctx, portID) - return k.ClaimCapability(ctx, cap, host.PortPath(portID)) -} -``` - -The module binds to the desired port(s) and returns the capabilities. - -In the above we find reference to keeper methods that wrap other keeper functionality, in the next section the keeper methods that need to be implemented will be defined. diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/04-keeper.md b/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/04-keeper.md deleted file mode 100644 index 8e0040e09fc..00000000000 --- a/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/04-keeper.md +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: Keeper -sidebar_label: Keeper -sidebar_position: 4 -slug: /ibc/apps/keeper ---- - -# Keeper - -:::note Synopsis -Learn how to implement the IBC Module keeper. -::: - -:::note - -## Pre-requisite readings - -- [IBC Overview](../01-overview.md) -- [IBC default integration](../02-integration.md) - -::: -In the previous sections, on channel handshake callbacks and port binding in `InitGenesis`, a reference was made to keeper methods that need to be implemented when creating a custom IBC module. Below is an overview of how to define an IBC module's keeper. - -> Note that some code has been left out for clarity, to get a full code overview, please refer to [the transfer module's keeper in the ibc-go repo](https://github.com/cosmos/ibc-go/blob/main/modules/apps/transfer/keeper/keeper.go). - -```go -// Keeper defines the IBC app module keeper -type Keeper struct { - storeKey sdk.StoreKey - cdc codec.BinaryCodec - paramSpace paramtypes.Subspace - - channelKeeper types.ChannelKeeper - portKeeper types.PortKeeper - scopedKeeper capabilitykeeper.ScopedKeeper - - // ... additional according to custom logic -} - -// NewKeeper creates a new IBC app module Keeper instance -func NewKeeper( - // args -) Keeper { - // ... - - return Keeper{ - cdc: cdc, - storeKey: key, - paramSpace: paramSpace, - - channelKeeper: channelKeeper, - portKeeper: portKeeper, - scopedKeeper: scopedKeeper, - - // ... additional according to custom logic - } -} - -// hasCapability checks if the IBC app module owns the port capability for the desired port -func (k Keeper) hasCapability(ctx sdk.Context, portID string) bool { - _, ok := k.scopedKeeper.GetCapability(ctx, host.PortPath(portID)) - return ok -} - -// BindPort defines a wrapper function for the port Keeper's function in -// order to expose it to module's InitGenesis function -func (k Keeper) BindPort(ctx sdk.Context, portID string) error { - cap := k.portKeeper.BindPort(ctx, portID) - return k.ClaimCapability(ctx, cap, host.PortPath(portID)) -} - -// GetPort returns the portID for the IBC app module. Used in ExportGenesis -func (k Keeper) GetPort(ctx sdk.Context) string { - store := ctx.KVStore(k.storeKey) - return string(store.Get(types.PortKey)) -} - -// SetPort sets the portID for the IBC app module. Used in InitGenesis -func (k Keeper) SetPort(ctx sdk.Context, portID string) { - store := ctx.KVStore(k.storeKey) - store.Set(types.PortKey, []byte(portID)) -} - -// AuthenticateCapability wraps the scopedKeeper's AuthenticateCapability function -func (k Keeper) AuthenticateCapability(ctx sdk.Context, cap *capabilitytypes.Capability, name string) bool { - return k.scopedKeeper.AuthenticateCapability(ctx, cap, name) -} - -// ClaimCapability allows the IBC app module to claim a capability that core IBC -// passes to it -func (k Keeper) ClaimCapability(ctx sdk.Context, cap *capabilitytypes.Capability, name string) error { - return k.scopedKeeper.ClaimCapability(ctx, cap, name) -} - -// ... additional according to custom logic -``` diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/05-packets_acks.md b/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/05-packets_acks.md deleted file mode 100644 index 66a1710ecbc..00000000000 --- a/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/05-packets_acks.md +++ /dev/null @@ -1,166 +0,0 @@ ---- -title: Define packets and acks -sidebar_label: Define packets and acks -sidebar_position: 5 -slug: /ibc/apps/packets_acks ---- - -# Define packets and acks - -:::note Synopsis -Learn how to define custom packet and acknowledgement structs and how to encode and decode them. -::: - -:::note - -## Pre-requisite readings - -- [IBC Overview](../01-overview.md) -- [IBC default integration](../02-integration.md) - -::: - -## Custom packets - -Modules connected by a channel must agree on what application data they are sending over the -channel, as well as how they will encode/decode it. This process is not specified by IBC as it is up -to each application module to determine how to implement this agreement. However, for most -applications this will happen as a version negotiation during the channel handshake. While more -complex version negotiation is possible to implement inside the channel opening handshake, a very -simple version negotiation is implemented in the [ibc-transfer module](https://github.com/cosmos/ibc-go/tree/main/modules/apps/transfer/module.go). - -Thus, a module must define its custom packet data structure, along with a well-defined way to -encode and decode it to and from `[]byte`. - -```go -// Custom packet data defined in application module -type CustomPacketData struct { - // Custom fields ... -} - -EncodePacketData(packetData CustomPacketData) []byte { - // encode packetData to bytes -} - -DecodePacketData(encoded []byte) (CustomPacketData) { - // decode from bytes to packet data -} -``` - -> Note that the `CustomPacketData` struct is defined in the proto definition and then compiled by the protobuf compiler. - -Then a module must encode its packet data before sending it through IBC. - -```go -// retrieve the dynamic capability for this channel -channelCap := scopedKeeper.GetCapability(ctx, channelCapName) -// Sending custom application packet data -data := EncodePacketData(customPacketData) -// Send packet to IBC, authenticating with channelCap -sequence, err := IBCChannelKeeper.SendPacket( - ctx, - channelCap, - sourcePort, - sourceChannel, - timeoutHeight, - timeoutTimestamp, - data, -) -``` - -A module receiving a packet must decode the `PacketData` into a structure it expects so that it can -act on it. - -```go -// Receiving custom application packet data (in OnRecvPacket) -packetData := DecodePacketData(packet.Data) -// handle received custom packet data -``` - -### Optional interfaces - -The following interfaces are optional and MAY be implemented by a custom packet type. -They allow middlewares such as callbacks to access information stored within the packet data. - -#### PacketData interface - -The `PacketData` interface is defined as follows: - -```go -// PacketData defines an optional interface which an application's packet data structure may implement. -type PacketData interface { - // GetPacketSender returns the sender address of the packet data. - // If the packet sender is unknown or undefined, an empty string should be returned. - GetPacketSender(sourcePortID string) string -} -``` - -The implementation of `GetPacketSender` should return the sender of the packet data. -If the packet sender is unknown or undefined, an empty string should be returned. - -This interface is intended to give IBC middlewares access to the packet sender of a packet data type. - -#### PacketDataProvider interface - -The `PacketDataProvider` interface is defined as follows: - -```go -// PacketDataProvider defines an optional interfaces for retrieving custom packet data stored on behalf of another application. -// An existing problem in the IBC middleware design is the inability for a middleware to define its own packet data type and insert packet sender provided information. -// A short term solution was introduced into several application's packet data to utilize a memo field to carry this information on behalf of another application. -// This interfaces standardizes that behaviour. Upon realization of the ability for middleware's to define their own packet data types, this interface will be deprecated and removed with time. -type PacketDataProvider interface { - // GetCustomPacketData returns the packet data held on behalf of another application. - // The name the information is stored under should be provided as the key. - // If no custom packet data exists for the key, nil should be returned. - GetCustomPacketData(key string) interface{} -} -``` - -The implementation of `GetCustomPacketData` should return packet data held on behalf of another application (if present and supported). -If this functionality is not supported, it should return nil. Otherwise it should return the packet data associated with the provided key. - -This interface gives IBC applications access to the packet data information embedded into the base packet data type. -Within transfer and interchain accounts, the embedded packet data is stored within the Memo field. - -Once all IBC applications within an IBC stack are capable of creating/maintaining their own packet data type's, this interface function will be deprecated and removed. - -## Acknowledgements - -Modules may commit an acknowledgement upon receiving and processing a packet in the case of synchronous packet processing. -In the case where a packet is processed at some later point after the packet has been received (asynchronous execution), the acknowledgement -will be written once the packet has been processed by the application which may be well after the packet receipt. - -NOTE: Most blockchain modules will want to use the synchronous execution model in which the module processes and writes the acknowledgement -for a packet as soon as it has been received from the IBC module. - -This acknowledgement can then be relayed back to the original sender chain, which can take action -depending on the contents of the acknowledgement. - -Just as packet data was opaque to IBC, acknowledgements are similarly opaque. Modules must pass and -receive acknowledegments with the IBC modules as byte strings. - -Thus, modules must agree on how to encode/decode acknowledgements. The process of creating an -acknowledgement struct along with encoding and decoding it, is very similar to the packet data -example above. [ICS 04](https://github.com/cosmos/ibc/blob/master/spec/core/ics-004-channel-and-packet-semantics#acknowledgement-envelope) -specifies a recommended format for acknowledgements. This acknowledgement type can be imported from -[channel types](https://github.com/cosmos/ibc-go/tree/main/modules/core/04-channel/types). - -While modules may choose arbitrary acknowledgement structs, a default acknowledgement types is provided by IBC [here](https://github.com/cosmos/ibc-go/blob/main/proto/ibc/core/channel/v1/channel.proto): - -```protobuf -// Acknowledgement is the recommended acknowledgement format to be used by -// app-specific protocols. -// NOTE: The field numbers 21 and 22 were explicitly chosen to avoid accidental -// conflicts with other protobuf message formats used for acknowledgements. -// The first byte of any message with this format will be the non-ASCII values -// `0xaa` (result) or `0xb2` (error). Implemented as defined by ICS: -// https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics#acknowledgement-envelope -message Acknowledgement { - // response contains either a result or an error and must be non-empty - oneof response { - bytes result = 21; - string error = 22; - } -} -``` diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/06-routing.md b/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/06-routing.md deleted file mode 100644 index 666fb1af11b..00000000000 --- a/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/06-routing.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Routing -sidebar_label: Routing -sidebar_position: 6 -slug: /ibc/apps/routing ---- - -# Routing - -:::note - -## Pre-requisite readings - -- [IBC Overview](../01-overview.md) -- [IBC default integration](../02-integration.md) - -::: -:::note Synopsis -Learn how to hook a route to the IBC router for the custom IBC module. -::: - -As mentioned above, modules must implement the `IBCModule` interface (which contains both channel -handshake callbacks and packet handling callbacks). The concrete implementation of this interface -must be registered with the module name as a route on the IBC `Router`. - -```go -// app.go -func NewApp(...args) *App { - // ... - - // Create static IBC router, add module routes, then set and seal it - ibcRouter := port.NewRouter() - - ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferModule) - // Note: moduleCallbacks must implement IBCModule interface - ibcRouter.AddRoute(moduleName, moduleCallbacks) - - // Setting Router will finalize all routes by sealing router - // No more routes can be added - app.IBCKeeper.SetRouter(ibcRouter) - - // ... -} -``` diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/_category_.json b/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/_category_.json deleted file mode 100644 index 4561a95b84c..00000000000 --- a/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": "Applications", - "position": 3, - "link": null -} \ No newline at end of file diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/images/packet_flow.png b/docs/versioned_docs/version-v8.0.x/01-ibc/03-apps/images/packet_flow.png deleted file mode 100644 index db2d1d314b86766f403009ff6fa3f31578d32460..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 352988 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�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 z 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 Note how this is analogous to implementing the same interfaces for IBC applications that act as base applications. - -As will be mentioned in the [integration section](03-integration.md), this struct should be different than the struct that implements `AppModule` in case the middleware maintains its own internal state and processes separate SDK messages. - -The middleware must have access to the underlying application, and be called before it during all ICS-26 callbacks. It may execute custom logic during these callbacks, and then call the underlying application's callback. - -> Middleware **may** choose not to call the underlying application's callback at all. Though these should generally be limited to error cases. - -The `IBCModule` interface consists of the channel handshake callbacks and packet callbacks. Most of the custom logic will be performed in the packet callbacks, in the case of the channel handshake callbacks, introducing the middleware requires consideration to the version negotiation and passing of capabilities. - -### Channel handshake callbacks - -#### Version negotiation - -In the case where the IBC middleware expects to speak to a compatible IBC middleware on the counterparty chain, they must use the channel handshake to negotiate the middleware version without interfering in the version negotiation of the underlying application. - -Middleware accomplishes this by formatting the version in a JSON-encoded string containing the middleware version and the application version. The application version may as well be a JSON-encoded string, possibly including further middleware and app versions, if the application stack consists of multiple milddlewares wrapping a base application. The format of the version is specified in ICS-30 as the following: - -```json -{ - "": "", - "app_version": "" -} -``` - -The `` key in the JSON struct should be replaced by the actual name of the key for the corresponding middleware (e.g. `fee_version`). - -During the handshake callbacks, the middleware can unmarshal the version string and retrieve the middleware and application versions. It can do its negotiation logic on ``, and pass the `` to the underlying application. - -> **NOTE**: Middleware that does not need to negotiate with a counterparty middleware on the remote stack will not implement the version unmarshalling and negotiation, and will simply perform its own custom logic on the callbacks without relying on the counterparty behaving similarly. - -#### `OnChanOpenInit` - -```go -func (im IBCMiddleware) OnChanOpenInit( - ctx sdk.Context, - order channeltypes.Order, - connectionHops []string, - portID string, - channelID string, - channelCap *capabilitytypes.Capability, - counterparty channeltypes.Counterparty, - version string, -) (string, error) { - if version != "" { - // try to unmarshal JSON-encoded version string and pass - // the app-specific version to app callback. - // otherwise, pass version directly to app callback. - metadata, err := Unmarshal(version) - if err != nil { - // Since it is valid for fee version to not be specified, - // the above middleware version may be for another middleware. - // Pass the entire version string onto the underlying application. - return im.app.OnChanOpenInit( - ctx, - order, - connectionHops, - portID, - channelID, - channelCap, - counterparty, - version, - ) - } - else { - metadata = { - // set middleware version to default value - MiddlewareVersion: defaultMiddlewareVersion, - // allow application to return its default version - AppVersion: "", - } - } - } - - doCustomLogic() - - // if the version string is empty, OnChanOpenInit is expected to return - // a default version string representing the version(s) it supports - appVersion, err := im.app.OnChanOpenInit( - ctx, - order, - connectionHops, - portID, - channelID, - channelCap, - counterparty, - metadata.AppVersion, // note we only pass app version here - ) - if err != nil { - // Since it is valid for fee version to not be specified, - // the above middleware version may be for another middleware. - // Pass the entire version string onto the underlying application. - return im.app.OnChanOpenInit( - ctx, - order, - connectionHops, - portID, - channelID, - channelCap, - counterparty, - version, - ) - } - else { - metadata = { - // set middleware version to default value - MiddlewareVersion: defaultMiddlewareVersion, - // allow application to return its default version - AppVersion: "", - } - } - - doCustomLogic() - - // if the version string is empty, OnChanOpenInit is expected to return - // a default version string representing the version(s) it supports - appVersion, err := im.app.OnChanOpenInit( - ctx, - order, - connectionHops, - portID, - channelID, - channelCap, - counterparty, - metadata.AppVersion, // note we only pass app version here - ) - if err != nil { - return "", err - } - - version := constructVersion(metadata.MiddlewareVersion, appVersion) - - return version, nil -} -``` - -See [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/29-fee/ibc_middleware.go#L36-L83) an example implementation of this callback for the ICS-29 Fee Middleware module. - -#### `OnChanOpenTry` - -```go -func (im IBCMiddleware) OnChanOpenTry( - ctx sdk.Context, - order channeltypes.Order, - connectionHops []string, - portID, - channelID string, - channelCap *capabilitytypes.Capability, - counterparty channeltypes.Counterparty, - counterpartyVersion string, -) (string, error) { - // try to unmarshal JSON-encoded version string and pass - // the app-specific version to app callback. - // otherwise, pass version directly to app callback. - cpMetadata, err := Unmarshal(counterpartyVersion) - if err != nil { - return app.OnChanOpenTry( - ctx, - order, - connectionHops, - portID, - channelID, - channelCap, - counterparty, - counterpartyVersion, - ) - } - - doCustomLogic() - - // Call the underlying application's OnChanOpenTry callback. - // The try callback must select the final app-specific version string and return it. - appVersion, err := app.OnChanOpenTry( - ctx, - order, - connectionHops, - portID, - channelID, - channelCap, - counterparty, - cpMetadata.AppVersion, // note we only pass counterparty app version here - ) - if err != nil { - return "", err - } - - // negotiate final middleware version - middlewareVersion := negotiateMiddlewareVersion(cpMetadata.MiddlewareVersion) - version := constructVersion(middlewareVersion, appVersion) - - return version, nil -} -``` - -See [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/29-fee/ibc_middleware.go#L88-L125) an example implementation of this callback for the ICS-29 Fee Middleware module. - -#### `OnChanOpenAck` - -```go -func (im IBCMiddleware) OnChanOpenAck( - ctx sdk.Context, - portID, - channelID string, - counterpartyChannelID string, - counterpartyVersion string, -) error { - // try to unmarshal JSON-encoded version string and pass - // the app-specific version to app callback. - // otherwise, pass version directly to app callback. - cpMetadata, err = UnmarshalJSON(counterpartyVersion) - if err != nil { - return app.OnChanOpenAck(ctx, portID, channelID, counterpartyChannelID, counterpartyVersion) - } - - if !isCompatible(cpMetadata.MiddlewareVersion) { - return error - } - doCustomLogic() - - // call the underlying application's OnChanOpenTry callback - return app.OnChanOpenAck(ctx, portID, channelID, counterpartyChannelID, cpMetadata.AppVersion) -} -``` - -See [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/29-fee/ibc_middleware.go#L128-L153)) an example implementation of this callback for the ICS-29 Fee Middleware module. - -#### `OnChanOpenConfirm` - -```go -func OnChanOpenConfirm( - ctx sdk.Context, - portID, - channelID string, -) error { - doCustomLogic() - - return app.OnChanOpenConfirm(ctx, portID, channelID) -} -``` - -See [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/29-fee/ibc_middleware.go#L156-L163) an example implementation of this callback for the ICS-29 Fee Middleware module. - -#### `OnChanCloseInit` - -```go -func OnChanCloseInit( - ctx sdk.Context, - portID, - channelID string, -) error { - doCustomLogic() - - return app.OnChanCloseInit(ctx, portID, channelID) -} -``` - -See [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/29-fee/ibc_middleware.go#L166-L188) an example implementation of this callback for the ICS-29 Fee Middleware module. - -#### `OnChanCloseConfirm` - -```go -func OnChanCloseConfirm( - ctx sdk.Context, - portID, - channelID string, -) error { - doCustomLogic() - - return app.OnChanCloseConfirm(ctx, portID, channelID) -} -``` - -See [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/29-fee/ibc_middleware.go#L191-L213) an example implementation of this callback for the ICS-29 Fee Middleware module. - -#### Capabilities - -The middleware should simply pass the capability in the callback arguments along to the underlying application so that it may be claimed by the base application. The base application will then pass the capability up the stack in order to authenticate an outgoing packet/acknowledgement, which you can check in the [`ICS4Wrapper` section](02-develop.md#ics-4-wrappers). - -In the case where the middleware wishes to send a packet or acknowledgment without the involvement of the underlying application, it should be given access to the same `scopedKeeper` as the base application so that it can retrieve the capabilities by itself. - -### Packet callbacks - -The packet callbacks just like the handshake callbacks wrap the application's packet callbacks. The packet callbacks are where the middleware performs most of its custom logic. The middleware may read the packet flow data and perform some additional packet handling, or it may modify the incoming data before it reaches the underlying application. This enables a wide degree of usecases, as a simple base application like token-transfer can be transformed for a variety of usecases by combining it with custom middleware. - -#### `OnRecvPacket` - -```go -func (im IBCMiddleware) OnRecvPacket( - ctx sdk.Context, - packet channeltypes.Packet, - relayer sdk.AccAddress, -) ibcexported.Acknowledgement { - doCustomLogic(packet) - - ack := app.OnRecvPacket(ctx, packet, relayer) - - doCustomLogic(ack) // middleware may modify outgoing ack - - return ack -} -``` - -See [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/29-fee/ibc_middleware.go#L217-L238) an example implementation of this callback for the ICS-29 Fee Middleware module. - -#### `OnAcknowledgementPacket` - -```go -func (im IBCMiddleware) OnAcknowledgementPacket( - ctx sdk.Context, - packet channeltypes.Packet, - acknowledgement []byte, - relayer sdk.AccAddress, -) error { - doCustomLogic(packet, ack) - - return app.OnAcknowledgementPacket(ctx, packet, ack, relayer) -} -``` - -See [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/29-fee/ibc_middleware.go#L242-L293) an example implementation of this callback for the ICS-29 Fee Middleware module. - -#### `OnTimeoutPacket` - -```go -func (im IBCMiddleware) OnTimeoutPacket( - ctx sdk.Context, - packet channeltypes.Packet, - relayer sdk.AccAddress, -) error { - doCustomLogic(packet) - - return app.OnTimeoutPacket(ctx, packet, relayer) -} -``` - -See [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/29-fee/ibc_middleware.go#L297-L335) an example implementation of this callback for the ICS-29 Fee Middleware module. - -## ICS-04 wrappers - -Middleware must also wrap ICS-04 so that any communication from the application to the `channelKeeper` goes through the middleware first. Similar to the packet callbacks, the middleware may modify outgoing acknowledgements and packets in any way it wishes. - -To ensure optimal generalisability, the `ICS4Wrapper` abstraction serves to abstract away whether a middleware is the topmost middleware (and thus directly calling into the ICS-04 `channelKeeper`) or itself being wrapped by another middleware. - -Remember that middleware can be stateful or stateless. When defining the stateful middleware's keeper, the `ics4Wrapper` field is included. Then the appropriate keeper can be passed when instantiating the middleware's keeper in `app.go` - -```go -type Keeper struct { - storeKey storetypes.StoreKey - cdc codec.BinaryCodec - - ics4Wrapper porttypes.ICS4Wrapper - channelKeeper types.ChannelKeeper - portKeeper types.PortKeeper - ... -} -``` - -For stateless middleware, the `ics4Wrapper` can be passed on directly without having to instantiate a keeper struct for the middleware. - -[The interface](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/05-port/types/module.go#L110-L133) looks as follows: - -```go -// This is implemented by ICS4 and all middleware that are wrapping base application. -// The base application will call `sendPacket` or `writeAcknowledgement` of the middleware directly above them -// which will call the next middleware until it reaches the core IBC handler. -type ICS4Wrapper interface { - SendPacket( - ctx sdk.Context, - chanCap *capabilitytypes.Capability, - sourcePort string, - sourceChannel string, - timeoutHeight clienttypes.Height, - timeoutTimestamp uint64, - data []byte, - ) (sequence uint64, err error) - - WriteAcknowledgement( - ctx sdk.Context, - chanCap *capabilitytypes.Capability, - packet exported.PacketI, - ack exported.Acknowledgement, - ) error - - GetAppVersion( - ctx sdk.Context, - portID, - channelID string, - ) (string, bool) -} -``` - -:warning: In the following paragraphs, the methods are presented in pseudo code which has been kept general, not stating whether the middleware is stateful or stateless. Remember that when the middleware is stateful, `ics4Wrapper` can be accessed through the keeper. - -Check out the references provided for an actual implementation to clarify, where the `ics4Wrapper` methods in `ibc_middleware.go` simply call the equivalent keeper methods where the actual logic resides. - -### `SendPacket` - -```go -func SendPacket( - ctx sdk.Context, - chanCap *capabilitytypes.Capability, - sourcePort string, - sourceChannel string, - timeoutHeight clienttypes.Height, - timeoutTimestamp uint64, - appData []byte, -) (uint64, error) { - // middleware may modify data - data = doCustomLogic(appData) - - return ics4Wrapper.SendPacket( - ctx, - chanCap, - sourcePort, - sourceChannel, - timeoutHeight, - timeoutTimestamp, - data, - ) -} -``` - -See [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/29-fee/keeper/relay.go#L17-L27) an example implementation of this function for the ICS-29 Fee Middleware module. - -### `WriteAcknowledgement` - -```go -// only called for async acks -func WriteAcknowledgement( - ctx sdk.Context, - chanCap *capabilitytypes.Capability, - packet exported.PacketI, - ack exported.Acknowledgement, -) error { - // middleware may modify acknowledgement - ack_bytes = doCustomLogic(ack) - - return ics4Wrapper.WriteAcknowledgement(packet, ack_bytes) -} -``` - -See [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/29-fee/keeper/relay.go#L31-L55) an example implementation of this function for the ICS-29 Fee Middleware module. - -### `GetAppVersion` - -```go -// middleware must return the underlying application version -func GetAppVersion( - ctx sdk.Context, - portID, - channelID string, -) (string, bool) { - version, found := ics4Wrapper.GetAppVersion(ctx, portID, channelID) - if !found { - return "", false - } - - if !MiddlewareEnabled { - return version, true - } - - // unwrap channel version - metadata, err := Unmarshal(version) - if err != nil { - panic(fmt.Errof("unable to unmarshal version: %w", err)) - } - - return metadata.AppVersion, true -} -``` - -See [here](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/apps/29-fee/keeper/relay.go#L58-L74) an example implementation of this function for the ICS-29 Fee Middleware module. diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/03-integration.md b/docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/03-integration.md deleted file mode 100644 index f049555e544..00000000000 --- a/docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/03-integration.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Integrating IBC middleware into a chain -sidebar_label: Integrating IBC middleware into a chain -sidebar_position: 3 -slug: /ibc/middleware/integration ---- - - -# Integrating IBC middleware into a chain - -Learn how to integrate IBC middleware(s) with a base application to your chain. The following document only applies for Cosmos SDK chains. - -If the middleware is maintaining its own state and/or processing SDK messages, then it should create and register its SDK module with the module manager in `app.go`. - -All middleware must be connected to the IBC router and wrap over an underlying base IBC application. An IBC application may be wrapped by many layers of middleware, only the top layer middleware should be hooked to the IBC router, with all underlying middlewares and application getting wrapped by it. - -The order of middleware **matters**, function calls from IBC to the application travel from top-level middleware to the bottom middleware and then to the application. Function calls from the application to IBC goes through the bottom middleware in order to the top middleware and then to core IBC handlers. Thus the same set of middleware put in different orders may produce different effects. - -## Example integration - -```go -// app.go pseudocode - -// middleware 1 and middleware 3 are stateful middleware, -// perhaps implementing separate sdk.Msg and Handlers -mw1Keeper := mw1.NewKeeper(storeKey1, ..., ics4Wrapper: channelKeeper, ...) // in stack 1 & 3 -// middleware 2 is stateless -mw3Keeper1 := mw3.NewKeeper(storeKey3,..., ics4Wrapper: mw1Keeper, ...) // in stack 1 -mw3Keeper2 := mw3.NewKeeper(storeKey3,..., ics4Wrapper: channelKeeper, ...) // in stack 2 - -// Only create App Module **once** and register in app module -// if the module maintains independent state and/or processes sdk.Msgs -app.moduleManager = module.NewManager( - ... - mw1.NewAppModule(mw1Keeper), - mw3.NewAppModule(mw3Keeper1), - mw3.NewAppModule(mw3Keeper2), - transfer.NewAppModule(transferKeeper), - custom.NewAppModule(customKeeper) -) - -scopedKeeperTransfer := capabilityKeeper.NewScopedKeeper("transfer") -scopedKeeperCustom1 := capabilityKeeper.NewScopedKeeper("custom1") -scopedKeeperCustom2 := capabilityKeeper.NewScopedKeeper("custom2") - -// NOTE: IBC Modules may be initialized any number of times provided they use a separate -// scopedKeeper and underlying port. - -customKeeper1 := custom.NewKeeper(..., scopedKeeperCustom1, ...) -customKeeper2 := custom.NewKeeper(..., scopedKeeperCustom2, ...) - -// initialize base IBC applications -// if you want to create two different stacks with the same base application, -// they must be given different scopedKeepers and assigned different ports. -transferIBCModule := transfer.NewIBCModule(transferKeeper) -customIBCModule1 := custom.NewIBCModule(customKeeper1, "portCustom1") -customIBCModule2 := custom.NewIBCModule(customKeeper2, "portCustom2") - -// create IBC stacks by combining middleware with base application -// NOTE: since middleware2 is stateless it does not require a Keeper -// stack 1 contains mw1 -> mw3 -> transfer -stack1 := mw1.NewIBCMiddleware(mw3.NewIBCMiddleware(transferIBCModule, mw3Keeper1), mw1Keeper) -// stack 2 contains mw3 -> mw2 -> custom1 -stack2 := mw3.NewIBCMiddleware(mw2.NewIBCMiddleware(customIBCModule1), mw3Keeper2) -// stack 3 contains mw2 -> mw1 -> custom2 -stack3 := mw2.NewIBCMiddleware(mw1.NewIBCMiddleware(customIBCModule2, mw1Keeper)) - -// associate each stack with the moduleName provided by the underlying scopedKeeper -ibcRouter := porttypes.NewRouter() -ibcRouter.AddRoute("transfer", stack1) -ibcRouter.AddRoute("custom1", stack2) -ibcRouter.AddRoute("custom2", stack3) -app.IBCKeeper.SetRouter(ibcRouter) -``` diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/_category_.json b/docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/_category_.json deleted file mode 100644 index 6596fe16c13..00000000000 --- a/docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": "Middleware", - "position": 4, - "link": null -} \ No newline at end of file diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/images/middleware-stack.png b/docs/versioned_docs/version-v8.0.x/01-ibc/04-middleware/images/middleware-stack.png deleted file mode 100644 index 1d54f8081700fb7cf718d87f7cdc706ca3400b9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194858 zcmX_ocRUsT_rDQ}kiwM;S(#S~*()Qvu5pcf%@nS^_g3j9B^TYuwfD8hwKowivSnYc zz4!XwPu{=ZANS$$xPQD}ud|=$dCnF2Qd^apl9`f-h=^M4g%XH}=o*HIi0s96a>6$+ zLa(AQ2E^`o)xx?))Jn$^zhHGyFd(TaNGccgetFrGHgm_F8Uut5rUIn)r52yb$mn><=^PHqJZ+fXRjwO7Oj-^+ zS^oJmO>Wm+$L-|Egxda3Fn<@L{hiErvA6hzO*0i7el*3U2qJf@Xg4Y>d|DZmDlBpR zYgwoAol@CPI}9v)6`okKKDUYFfcvLM=Pq{-1Q?2Mbg%SBUW#8&MCG}QCwR|kxs)bGe-!3|M_FEl!1 zcZg;e?%Equ`>4V&U-oQ?((hRg8J!>b*w=AY9#s-7jA#918HQW%^FdvkE8y+DvG zz+8|H#hH(7!pFV*xdg>%3g4*b=x5g|k)!)}i~Ic4Gt0H)yykx~NIK2QSXPPRz7NXZ z@i7oRz|faPuCGm~mVVRmIK*aH@CWoj%Ii5PefWb$vI0 zIc>TTtXS*o<*mqhAAT~qvO{SC>JwAk844+H)a7Qo*snXqhd<06v z;GM3OSJtEk12=w*-1fGpR@F|!?5r;=jo6_7NZWQ;{jM42a>Jq zc=N}`&%fvcCmSnW)M80SKSUxB|3JsUS{pG5`&*&8KIw7&X~xO>lw*4RQ{$xy4S2F$ zmx`$#?*if2++XTxn8kGH$Hmn6IX|{-vX)1HaCN_$JmXufuj_Gtr)+?0520z8s$(~b zOx+N!hxofA^l6w1)iWF5aBQ31rdXDob@5a+SxsPor#rgQo#ZJ&4nHkTi@Qh%c-~1W5&2edYbP z5Tly#z0nLa+{`;-`yGHfS?{R{>>>hom715DZsrvS^2D_iY5cRVmN9dW=%aO0k@&qL zS52%)#mX#;58`B0`JpqCH)^q~@>_DyX(|Sk-VZ^D#M=P%bi=KLIT z)p>Y$6EN-HYcn|suhmk%6GkOP*CSfznt8VeF(tG_*MpElVQtVpc1Su^kDV=lqkSP z2$FwVJ1`LXgI_dS#f>XlNhF@{Pt01~_>OH!jps5CaD`vbjG1zcBm(j;Mt;G3X^jVw z8wgHI5paJfw^ec6QneUZLT+ukr5`eA^xlT0AF|so{cd4L+&1%%4jpC)wL?(=lplJsD!OZyt-m0<>-J7(AL331dLX{8Sv@) zksw`s73aZXP)Vc6*HDeC59>zhiv1|Zp|A^ zo{Bi|`dyvM!4Nr!r9mOHztn#x=ufJ(_p6EA5RE6f258`yk_!GUlD-5m5SS49gm72Vqc%3#1e7q zARP)Q^|_p*)9Q=UMtR7|@6 zTt4=RwXFy^cfdcF^uQ2jBNESXf_Xqt4ZY*m?2wN!l228G4AL_rXZPSdhyLH;uL)As zWcUc(G~0LiBJSYwvA~F`M2jB@k9U#mhX@z+jv)}W9sm~>@WzcGxc$7g&l zfll8l8L;o%CoSSB0`3fV>3!QJQP2-5Io24>=ZacXABs)G7>+O7pi>Z&FM5PiFTzfP+ZShysV(Q|c4cdE*;5f-?@6>gq@&yAU zQy6UuuEN*o1t2B4;_M~Nm{zTZp+|Jz7Vh42Hxlt7ji2~|wf&;1+dB35%~Ke`oCk5s z%5E7(tfYKxbGMIj^$-0wU!!|@zgWfSO8p4G$m)m4tgDLv+U!g>21deWKN?5vmMb?n zS>#=njbVZgPP$AWZvH*TN9^^F4Bk?1x_faTyR{50?c!0~ZoaJz<5e>%e;!z84Q zF0kW0G9kS%H6smUegQuZSIH6EAG2AlqG;R64Njz1u{vyVWibp{+^!>$Bx9WwHyMK-L$O7 zQxh|mwdj86NN_d&b|<*0c^~%kvclnd zoBNy$`cEb58OG{q<8KODZGcG?3AUvJWo;|{5DvNZXPrc~6K_g5YP$UCUXF{ED|zMp zVc#Q2Y>MfJ@OD%O`U`pGGJLw^0xMfMZGg`4MpeV$2_Zv>t_DAu3E+We=jBefrW=4=U z*viZ%f8;b1(8EPmo#|Ds4HsTrN-)q2sNeBDInue{#XDy(;X(iEwMm+7?fLiU_JHsS zF08)FhfRVs)3WNYvTv=REt@+>A;ASNWgUg4>TS@szj_RQSS*RqGHFe%JE1)M0yPN_ zJON7yAT_u_=(E9)SRJm+y7qTFp#fs%e1Y{eqTG!K4>O+hLp(C4?tWeVJ#ni?xzy|t zGEb8g{O|J8SfFCxH*Mwny1I8EEjf^RbR>iBHOEx%zeDTNf1*}ubb zUyFcc5J`)?tYbe}pBq!Pp4RDJiA~5gD!{TA1h%z1r4X>Ta(b z@4~>|vTV@?*DP-R;TIbgVb}cWPMm+HoT$2aF{UJ!uCyeGMA2Ei>sZ|ydX3w#WgleZ z;=J3#5HJ0w$-IZDA42*l92dQyRY)56#${Y~-ItASn))h`dI_G?AmR$kvOWvW!g4YQ z zYAKqau_|s6N|7pj_i|Z>M^y_Aj_X~|Xt6H-B_?dfcH@@QG-BC>H>{jt{5X~Ng%gpe z>^IQxpFcR-bfitQCZtrt@AfQ;08#+F)kTD>5`q{JHSZQoVU`6Fo1}oW~NuKMgC4}@`}5PHbr56u zh6&HBCdudX5P>IJv%>VXzB6p7v%w}2)NMzP-|^nwBJn`QXoSlCN3%C!X9oO8Dna9y zyn~F}6-}@N${SX^yuxj=Gq`VxKmu+@*135fP1Sr(}n(3%vtvK)xCLlGf+fd4`5df%@(0)XK)!=K2jXYF0`ywM zS#}$Sb5Oe@LPCmnC1M)J+4pXqB6=ey=O2=dw4U*ZIJlru-C)n$t7J2rdvU$~DJ3kmT<85>9*xM_KxY$dym=6RL5pNPl#R zJ-xOl+0O>c%>y6iJMK6{Qmhmsuh<7dZL%m7Ab?nEZ5%mYk|4$g9V;YqBG6XZNx;>L zemKC4knpw+IyzlI(ad0!&!aq3P$dnMcw5o0OVcF%K{O$VF}JE%J_yN_i(c%6H@tUD zqpe}vwblJs*&L$W=}s_tD&6md_3J1u?fM}%dul3mI2AdBoY@uXRcE%${WUYF<&Opv zSMq0DPI;6Bv-PHYwXj2WRoTAC>NBpDpD-C63uh2{{=$BQ!}kiq)kGfB>Lad%Ml%7q zgmrB}UVwXl;Yy0k#zY}@cq?!NX7CSUl<)IxqjFGrvF)}-hhHsvI{@2B1Tnw8bBxN0 zMCGZ$#D7^FT^FExFCMLoA549Ia-hp6P90m7xS!PF)={GQ2$%Ic^L~4%4U3hhreUI2g&sfuO(hCaK!9J=c_F;;?9`DO3<=vR~Ixqkcm3Z;i2kEV47EP>l9}D-86TaYZFp>@Xa?_4+k?$~DdqI#M5D=p50ygytNrxp^oWuJ9oHBf;V6x=S0&~WJNtSV@! zT2%@bE^JLhVD9&I%@W;Gd&`uiUEwt78h3+>bX)i*lG~P^1ARAG@JP#6vlE2F2?~Cw zbhr7X2b$u_#a0O}Hob^tAjUJF+!%+WOYq@{8H z?Kr!mEzL;Qa+rOj4N#i=QRT+=^?2cvWa(B^$6+`^%At7sLg5aryY-{AW07yNpwvRr z9N>H?aFWz`?8tNexO*zu^E306yamW+_B~1{cSibBgdlv;asjK1C+oVK()8)PJF~A_ zVgNeysdLD|D^rk$xQEd4*&WBqIlN-mpEfntxk($mOQ(dH|67^p_Y*5i89Z&ZC6>+} zZGG?S-}or)=C8JP5)#L*>fdSbJIu5;EGT{k&oPr0ze)NlnX~jbwOfu&X5(T@NX-4c zE;y~+80P%mc!0>GK?E}h(1x$=6*}E0jZg}wHprB7DAu1pPTJ5vnF1lzCkE8x&aj;a znkJg%c*of=wDgBBhO`DVFCSosk}EoYwSa*e{LFQD2S06%8ru#cXxXY}slTmAI8-D* zLT-!iUqexV&^DR88%bR7C6h_vp_$>C3n&{k$LL0ZCIcCeKs`=Cr!S@i7~6l9#8OF# z4>Ia<5_G$pyIVON5OHVsv9+4_he|&*&Xxe5a^?2oNT5D5x89qTxp%L>o^x!vCZZ8` zVXUE>Tp=!t|L9}WP0==>0FW#6Gi|j1#D$%D=l#QF6~?*=71=xG%*tVLZDz&{amAEE zSx<)Dh(pWTkhwV9WgAvrMDXVVtqm{c0MCJ)msx_J0WyCmTSzg&48?T^!ZAg_c-Yze z!`<>W32hUB7N;Y4W(W6{t30@?tnDHG2@4h{M?RpM#fVoA2vAhDJOi1}q4)(0{meee z)t+o*#;Q)M{L3>r1L?ZAt#)XAzLU->QrT_BeR;=0Xxh?KOy+HS@gG@waNMyU7rXKi zLZ>g57740vJ!nIJ)vaagz2S~avU(2F+Y+yv7fZ5*w>ZdZ990;~WcR;ue9g=ioxey@ z?GNS^E~*hlQN@@8wvv(Y{{bYSUla&zfyxa{NVtjnK93-Jk*TLG{!q)OLe%F{Jr0_h zIHqIb-uvoggs~-hxkkpJKPwS0K5bU!yVm}I`u$yuM>K1Jiv=4wPkTZ|=f?rc56>Lv zB&PBO%0s+-a8pJEQ44yUvC6;R=iJ1{1Va-$peqj){>i(Z4{DCG0%6-2>Fm})-Elem zLdb4{OWe;(ysK&QdiNXlkIDu3Ugg_yOU?RU{C_}}#Q=Jt?gc&Z0#pK(iZoehR} zr1aT=SdL2R<6o$5$*C{_nj*N~4WX}YwU0-QHz9Mlr^ABE{#qc_IBU_dSKS>{8MfyBIyNi3q6zZK|yy|!vw zV?xTIKmI3+;8Q>pMfF*Zs{(lRP0u{zyW9smU$=fmar-|&|k^LX)JRV_8W3dBs0D4iSmZC8v&!hL`=;d9w+voFf!Pd!3yZM(#t##t5UKqVDqO z^AYtc!^is5(n^qauHW^iq4>;PQ~s1v+9~6vh|Tb8k+<%m8)a>w1fq!MBh~z1rr?gK z?EMx_vp!+Yp^BJ0k{Wwo{gZd(0TtGgt8N}~*%!wHzXX&v?LWL!yzh=vcIzLkl2Bht zVa<~W0p5ySNrfP+3x5~%U1hu_J*4$$(4P~()6??c#o=yVd}l#a?RG{iQA)zNH8`<$D1Azt}|(BRoLC(^k6f9uOu#RRB=yV z9$-dL=FxtC8JW_OHhHY%sFh~D^l9SO^wT_D5+X#g z_|jtDf5|j@^hhi(R~piXhLC? zICjAzK!HNdPbsT!nT(;RI^KT;Jv}_lcLd;99B`pP?Gq2F-#0u(uLK6`TcX7OHf3o` zCRXOsG?GTNu|V1=k)PU(e>%;UwGC&!F1lkIj=hP}uH;ITXd4v zq<`>q+{odwOxZuGz*a|j!6u%7=d~_Ei&pbXX()TY9*OzS$%Jb9}l9`6YF`XYi{m<(f`>XZ=u6*;%;BL1`5vI`z)Jz z!RrRk!(>-!xbD6k%Tnp2d85@MabQuJ{y}K+&==%D95CpYD}hrm_4j>LUgnGEdlr~A zIQmx8J^(0XEodQYVa|Rj-7EDOQz(3fg4^&f*7v;`Jek{nw?S$J8`X~DDUz+WRfe7X z<~OCptAARF@o#$gzS7_-J~g@*5!#d&Y;9GzUw-X2xCsMFSy0<~(0i_AJ}+C%TXoOW|NBr0#T ztj*a{>A)E3Nb8sy=Ktz4H*!UH8O$lF04Qh`mLEwRUTQ9S3&o25et4sr?VdZ`Zpy0L zm=ve;wqqEuSZ&nk6?B$9r=#;Cn&Te?67|EiKSp?072efVW-?EsqnXI?2?6pk6)@+QVTgT#UD1JID#Z|p0Id&}mWLh+pVm7L)}%8YnsM)~K3gA~v&{s`gp z>s|nNF0*fAub_WPpFQxzajehwssD>sb%vM6UQ5cqH+e>L&DO_XNo5o)Q9FCV#x3m} z?YhV{yC{EYI-TWEsklW=@@j5+J>BZ~yhxdLJ^8%Wrqs{}rw}j5oFBh=SwHEIW$31> zG!)xWFY&0k?=#a(q35aqaMXX|P?hhk`Emnu?<=9WdNZOk?0;Fyn&05mg)vn}pNT2MeUkviztB{B*OdVAF`r5_ z)mXzy*odn~VIKR@&>Zk$y&>?*C47cVr@Qnc56kv!K4;V0Gkl>RMOujf8Xo)JRDYxJ zt=O=87h9Gv3aS}w^@|}>FX$U8wThz89%PpCyIu0WB6c2}1F9*WLi4%n9mY-%$6sK35UH8>GCY7(TPE#% zq{kPp?kL{_#i<(amCxEWzPI>kIEiO6gZv)alLwc@HaTU;1753m^bamhrrgZY^7ocK z9iLnveR^Y*;p4W!KL+R9;OJ=9Sy`I}HG`X4-sK0=J9Z9m>9C8NLnKtTlhJv0l<>w($fA=#^1%<}#KiOuxM{ln#$121NsSaw8b()pUe=$Ck5K>BZ zoW2Bz#zT(dkk@RoQ2Y{RrgpVj_(8yKYW3WzM_c#fR`>gr@>g)w`Bz738EckPzTkO~ z{?7Q~i$>$&<%nN2JsQCXNxs{MYGQUDo+ocN302_zN|M4M1(vH$q8l$nBw6m7E*}f7 zsR*{}BKk)gB?NNzF=wa6e?VVuVSmzX^80)>;yt#+$}hs?RMkxPhiu9)I+RtvZTs;=tUEQzAhx0zvIM^vg3JFsciiE zx4*2*$9OJWeRhjRJQ?(lbdJYtV-^y{Klv;PMBd==44(=SjjDw5yn^PK=e!NNQIp-_ zPM`m|=XSYPRlpJ3G)2uE*zmrmOK`kG;D3f{=A-L>DWPsTJYG>= z*2S`vTgUU#aQw^T6x1)n*sa=daLkhC9WucjX0HIC9}%m`BMaXDzYCDeufzXiGUrpt zTisDvFDFexno39?UQ*Y$eJOG-1k5}}#3i%+&pupc#V;S-A|Nku2aX5uWy?nZPhvVx zi^CAMEp{cJE9>Zos!NCS;rYnQGlxptu0egm7?Ub^^4zC8Ivg{oezP`q3@_R3eu<(G zcx4g4eWop-uF1<4ZpXdq@;3r6k+Bt_K=tc(=4D%(NCQay4h6K}FP#GTOj1-Ci--?Q zm_P+>TMA1QBGQ>t#&B*WvG?13YhTYGGS21*bz!q*@mRID2?)XliD_J9UL2<=~s|o!I0I1KB(Kt~gZDEEy z_=03&&la8^Gt6COo3mROXF^FRtK5?o9;Kks}8l*^V?Gv>Pj# z(ktMnb6-Azl(c)3F1;4vU_0SBNmz9|&J_Gu*k?UVYE}r3{r3XgVx>a7eUL!;tvdU2 zjfEWAYX9{?@nyTywjR+lLDW}yFhl~C_u5Z)iaJ|!L|fT#^u_D0Lp z*sBg(PieVK`R9t}^98$jOB?}MJX2R0x2(5Q{)XUrB$Ls)B~dPOeS|zjTNtyC*&_K> z1lx~KG9(NrzUe+OwUna2yU0=$o} zSXsTBgqslQi@u3;4UvQiye)oM-HyH3jQm``;wH#0a@FkeRS?=~twmrnbnnECWs%^QwkyGw4;(9fK zuYI|~nbl#K4CnK~a@EKJDp*5Lt(cDh56(x6;FfaAvk(lbBiYIxtK6-Nz5pG!6RUHL z1m%A1*#8=8Y#2YNiM1X@!LB zOqiD@X4TE-yoHoV0O3E|NDLhq<`Vhzde*y*6uB=CUcN1oN>y>&owyR`a5;+Nhw@&x zVSWXDgB@mC`>5=d5kEz7we_LSmF;3BqUUBXHV-KWkWp#`b^M4gA#^zf)io$8R`)-r z*<@ng(L*JMh4LNGTaIq}3(pVm(Ft*L8GW@s* zo~#N~I(d}QgideXvP?8s7y069hI-fZXs zc*=4s4Nue~_oq5Ey&*x&*Vk9p<3|C#F1$t#5sNiaEnu5b{+bI)Da z>E3bGhlvU6;jx$yXp5kSc|7{p|29r?1^!(KEO*q$4#BIo3x7XpV=?1L+E0$^Jj1#7 zg)bDwU_76!GKHxO$pc0?xDV~0gpsZ6X6nX~K}FMkgJxbPb@J913`dRIOqBudwlDJHQ2U83Hm;8i-uxjxjHms+W|f zH^$rs-Wo(uz^Y_5avAZds&3Xdzh49C$fQ1UYK$$hw6Zg5y?IV-(-$@?(taEQjJ$}Y ztOo78I0zzx3ZIJZ43R*~>uVDxX{MIpWd_SxcG!Z8GyewbhMznHvR&9Xiv1t>i?F*e z>w}R8`K;*LON%*vdS}-w$WN?xE~mfB%p<_q!)5UDcGW#M^B=E1f4Dbz4GQXquwAcK z6#kTQu3UCMSg~v&5qG-mr=jYe@rRw(2|=M=ffo+hj@g-`S|#H09p9K7m&KCZ9g*0O zgc_N*QB_w7wlsh;O>44fYtGEnHT#KOXbFo^b_e6!RS`}`>U%7Ri$H06T`qK(Dlv=y zBay6W8s|CL;4oF9pJ(EYyU7&0+tcBTzn|W*+jR|Sq%ZERv|DQIW&f$1W4zxG#EH51 ztdqJg0%d#f_sx{(O(Bi?ctP@Dt#4LOz2<&~kbn2Rx5JacP~@5|(Ued8^3Fz`tsos* zYlE(1_Ze~bWFSloC5Q9p50F_|LX8NTf;NtmhFN`%y;0qIyLrjqrU19)M2PqgF}_jOn4F%>c#8THZLN`t3lBkk}v1dGlz9a+%ur_AbG$g zxi~Af{36MRx9uTaVbE|`;zgIoe$im)C_}kakaw{56`l0)V^cvw`-5u7JoL{h2HU>PierC)hJ?x!8^Lu|Q-ayaz)%NAby zb0>CT)&q|b8)-Swf**x`{R*$DT$2D5a$KelM#awS`Tud_4q*K%{kcrW5{wk8`@Sq? zJc~aE#J8KHJE$;Gd@Rfeo-8wXUVm&$qzxhl=aDU(e7U^zWrwW+jy{vWx@N>=XJ{^e$ zOF>hiCmQ5DxF%jQC@2uaB2Noz9enyfFY7ILWEg6Dk?fYyTNU{}tr~Q{lUIrxxJDSi z#l9YizoJvcV6k|?wT+)roo)^r8i>pE|a)`Ij0?CScxwjEIR|d22k5w&Xq+ zRBqmD`}B0EzJha7rTG<6%alceGCZW;{7Z)@hx8!4-djCZHmw18D(8?e=v}*D?d)ApcReu)0^V72Suz=)~ zu*xk%QU6jws%oB(89l^M2#$p7L_$LPr(r!N814PhVl^S%O+eI46gwn)=v>DUg8t)1 zoFC_8F>)ekwaV|x6!7+qWVU-D!}7VWVPGfYdPFDojnRK14ZNN)Fy&N|`7zjkaqbk( zZ??+=@mc7n&M#?-li6?-7$sY!pdd9UeMU3_A*;fbl2jfSp2!Aw1Od$V3W0GCnBz-( zNul&|b|IPmLqyQp$|-4V+ab50$4>*4Mx(a-)&s|RrqIr|cVkrjr__ZPwvc4W=y_qP z`o!Y^;=bv}0v)|kiA^$K+rur#b@58;=RQ2BZtbK+u%u>8m|`GS)Y`j)z>Qox0Dre# zb@wRZ6Xfp79oZQ<5KL!v56L=o86Rvf4@e%gBmUvmORl?I0r?S7WBuP4Ug6toIgAUB zVKwB(;NS&EbTh)qk9BR@-}TN{>u57(JbS5_+{RIR2o#>Ynk-+RnvhD!+ZQ{k2CHsS zXiO;3)WR@d;cIBFVg69=!Q;Na8}`49li{0m)~k9-_YC)^w{(IY`j)s{bKh5fp2I)8 z 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 PdU!8X=JGAZ^DW?(U>RmAGT!sJ% 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

%@>82P zLRIaBj&QM$a`o?=UuWHdP~$>gAIiz=Z?O_oyac(g3SomNNoN`A+hOifVKKHLIZTaJ z^<1TIP|Ra)=RcK_qhuI6P-p*KSbIy;`1rgpb^MQhfQiJ9jLMjs6Ph>@^A<0Gc?Um%#TWU4Vy|XQLrxyZQceprH#Bmj z^U9)YlG}x`I{Lwt^R;Mdn2(tGPapxjzwS3 z3(uoPm1$h(5t-fy5loh_3XZ6TKyQusA`*T#1YK{AB9wHl&{=RSynZVAtU>~hP-5%O7V78OxhH> zr-UJMX`og|E=2ct#6J~vdpN@?`EYA8`|xv^ZAcd6-RlBCGpxFayu;WHVFC;k?7Y5R zC6tP>Ww?NHKd;5?2M>Goep#Z2GTu{OSqm+uK|Yl*(<2Ao_R&HYwvs3#>);g$0d$zHv5(8f5qKrD2Zb8| z>RdMzEv;R6tI5{pi+Kgd8Vm9E4R2WyN6ZhHqHcEP|7h}yX#oqy28iS4$h1}P?*udG z^FY_c-^t*?p7A6^D-*%%Y)d<1IX}1VW$=*=?lJaEr*}AG_xYJLL8^%9Z=$l?m2bMp zo3kVqHbN6p?f+;U9KS__`5S`kE2Fr(U9ugNoxfEbTeGKmTTY@_7TT-h6k!^kBx^vh zT_7R#U@R2orjJG}f8o3E{G!DAZy<@TY(#;Uz@6l1&2>Y|fYYx<jqkZ|seJM7fH5zVq!N+Xq%f_8&DLNVL|97P2PvrTi(`c>nX!kSO!#4z>+9 zuF*K`mzpD0ewapgyT!mO#TMU-h5+EF-s@6?)V>yx_i)|c73Wk|PeHR8h z>kD2$=ZDDL{DuK>I#XdnLNO15q;q&-3hIgHYQMGk37$LY+__ImZ<#wD#V=I?+>ABwHDVB&vZ)oN^@CY&H)O>RH~AacHKQ&FAYEErppFvfqSzg7K>N>>jXO= zu}MwKrT>%CMg1cy)gUBJZ6 zZ9xMDeBaY9@es#>FP5JsLL*gNl8Az??2|C+au67QrK&miQXx# zyoX+vQ>WFA2-jV zJSF2CGW!;pn%g<|-Zn~E9FQ1&%&ezIw^7cF7E?si`Y9M#i{4aS9xm4qJ}wEX(U)*hM|~J!^2R02tyU8;~(u-a7GZ+++BPhY<5tGD&yDhKT~yJI0kBcPQpn#So@~j z9>W0t?BOVi&bxUVku8U%Zn<+`W{Wa?;sm{%)$k>e&s`#pN}d>uzlH;SifsUrulEvK zNioO6Z<438)J#Cq{+@tc6{m~ySn(%^Nkgdrq{C28xh`8&l;i)RVS^Pt0i~@=r;8{j z@b{h};~s{KrPR56Xh1Pr;y-V3!Ms-VP1)MmfWB&$I!}715b?RG*hpoU3-mrl6}Fb( zVbQPU^LcwlI2{{fe7?$hHzfhleRQ?dUl)_`&`V_&k!!%jBgn7MMc$T79ow^6db7o+ zh_>W!)Zd%=r_)0@_B8Iy%|yo;%<#KN-jahs-$PE3RSo`Pc82X`|DwD}6M^~U)avs@ zMGX5`6O3MVbO$ZsTNiqVP_Gk5iUZVL2uO2%OO9pq5=>I;zh~?bXC{@(i93r(gS$OT z_eS%2RtPAHXjlTpt?9EQxo z1;rxSY3Q7W99Kx>9&!_AEtpCWIeDGF9Q)lrhi)+Qa@fwl@GAsAyS1T)N^#A2x)G@n zV006puD<0LQ>8duF72G^sVtXOKVh_t<0&-;&aS9awFwuf>kVBNL5U-WG0GUCNbR6z zC?LC#Iv1^Ig*FnFeP(t}T1ofLi52^0%vusTGqK9q}9q`_BJo}y9s#_^li!)7fB;4`y{%mO93}~eA z6m_@#(Tt^+k|Fm~6z{(ZE`}iKQC+$o7r7=wBqjhY=X~nd%6K zc^*-)4O~iCk^uHTXjx{ph-F5_h0sg8sv`!Pfan^&jqVM%dlgc(u@Y4ZLeL3x!!$BK z%t?zStC66reVw9ek!SoGBr9bqL|I(25s&+}5IMg(K~9Jqe$7$831UDZa~ulKC;Inu&V zP1iK=VEoI%bVI;Xei(7sus?B;QLZDk;XzY9B-g(nnkA24BgJyimdvHEM405WxnfvI z)OeW9uk~Q~0gx8lPU4J_u{#j%VZu8uTz-6d$3tszfB3CS;MqrAZm_fAT~ zGuwEW_lS*BC6RMiA8RFq`%F|0ZI-e_vsV#Kq{tuw1Tf%Hkw15?wY#f}k`u$h$Uw8=U@f~rH76wnR#3_r1yPJwt&2-n3bx+%!Vlkt<-&sW^0l4EtBoFEji0Kt zFR9>H#RO*~88*Yp{0MnpR~`UpL+}oBI@LB&&3f(WiHs(B-$Wd(mVV~tz=?5<74ON` zip~FL0RYykZJCU%=T09-C>v|b@I_>HmRoDeZe_9q=ZVza(u#bs3lItB{ajLx?j5lLNQ7)lQ@d3c3VE*r7Vf)+45feo-Z|OoWz3b zuR9wWsczs&cjwWnjR+U^Z*Ca5G;)-iq2H#y0}8*I4i9F)4Tv|2S@SWE*6Fo@cijYY4A>5)eGIL#?@g4JVA)%GzqMWRYs+v~iR2!BQ0R*=e|}fL zdbSnqz01_fXxR_0d9gV`uI~8;D37PV_cl^HeIBOd#)#kO#)kiscf~k^=8hVQ{c}#= zj(e>lC8`u4SFrf%GDPHAqg}fS@?dxrXx)T z!CbU5+KUzIza1=-Iu6U^i#HY^>O+mcRca$}|8PFmqthKde^8y|wb_&$g zbaZz@0)H4c9ez8XHGuf+Z!!73CTUUPVhee{8;%as`1!fbKFcDlH;h!$c6QbscEWuL z2m7I?yWT%C+k-U#o);W)y(?i`{S5vy4Bm!qq#ssR4%Uw}0#6(4zsu^PybEO+l9769 z;c(`gv-GPEcMD~|^uxj^p1vNhH7L5*G&MB!cwF%r%pG_7&)sS`T8~%yoJTb%cFU2z zP})Rgp2@qaq&G|q-S8tf zUNpm#2akJM628;k!XD@5=Ue^4T?JSB@!OhrQKb4Gb_QD3c+RZR9anZPy&BU7`xuz0bK69+DG%FiJZ-(aywlO8SAppo^b$2UhHn32AD#ku zjHx>@bJGxa6T=W^KTRPHernl$;P*Dc-0R-<*4}vcg*H;*z?}#7i>`z5*j=v(B_`q9 zjgw*s0nck#88!>&ezkl(s-J#?NkG?WQ!f^XLL|JF_x>Id0ua%4;Ag={ntNu8;n0#U_n6HnvNd7Pq)oJVybojz`wkWF5!O3hi2Es0W`zDEnbFk9?%Nr zcqP`UW-Lso{Wu}edjJ>l=od=|W~c8%Q-D*p-t9aP+J`vAK-<}2{|x$=JL1=Qe?$lB zdfaOVrJj+pypky#@xpQVqnl2&e5msa^7&+6H`Hn6XNkS`z>xj&aBJ`%%`g9=6FLWw zODe=?V&TzoR;ObU<0SI$8w9`LD|mJl)ADU^wwVIZpAN->bGM<%py{B`orAfOB#=tM zI@Na&tFQ`l>bK@0&_}x*v83fwEY-2y(ab@kXlX+`+@$cNcyb<{K7X3N6}`&E$`pCW zLEHFZ(WjqaTm}-9SJN!s$^8$Z-N7e!8_9H_^}a2X$k!Ek*=Yg%=XF5RW3%CPS*wa= zqv+t3MbWRojsLtIKV0PmqR*PbD<1E)!d(Sq+LX)`kWP&WF0L+79J#vA7qX>qNnlrK zr}MO;YIq5k;iaY_iL#!6>*{w321{0FLvN#1r)rB{Ge_IK3}X9PNT+k6imQP~iqPa_pw29-RM%+@+g>x-O48 zWrpjUKTYn95Q4>xeB0|c6=~U*JYidK(*vGCB#qi>Fe0Jd+bRNwA9qlS_K=HbVQc{{t?4^$tdnniVhvF#L|a}Tt4E- z2_udquWap94|2-d3pTn6!bBPX1~1;4@=e{RKgGEv5|fe~;cWUDkQc>p4C_ zke$$mZiWgdf&hMJyJCok6t*qNJ0i1l#z$F!0J0>a(lH_EPL*}T?8;q_UllAZmiOV& z)KBgm2P+)cD_*Hh0;_HsNA2Mu{)E^Rj~QJ|_FbV3g;09%v|)h3;Cvu$2fac%f?u68 z&Qn#vYra5??_e?cnh!gv3rK)8&+_}NfQpsk1z{SOgk$vLJo2_1S!jELBw-gxP(JTr z!}G*~)d~UTRu9s3B^!Jkq84UjI_D8F7niEJ?20-s5=6VL;Nq0o`uI0fOnoU{dzkl1 z!RbK*-0QczELZ=+=60p9S-ylb+SoHb@rY;)w1wO@E26`Ok2gaNkA_RvdGBN-BbeSN z$BDX0%(2Boe*E(c=f3zuGTIs)<+qDt&i04xLP2s@;&AZ^rM`g&kBbljW*wqqNkCRt zyRc|$(>rEW3w3e3!JQgb4PErP`m@v|-I?+E3_o?a`7}Vx#08GO?f@#Hm@5~E<&Ji? zUBGa0Gi5`&=E-)U{$jl2s(9mJi7cDOgrHCi_oq?Yc0X!N>z31z-zaF+d$Y`aK3|c+ zm^xUGI;$-$UXy*+b|=@U^FxPa#rb(2&Ed~dNIo7fEwK(3#8}#%3hjD!*R2OWviPB_ zmpm`!x-K*&6a<=Tqaiy0h?sP}&;A$%?^gu9ljBgk%KHy1Er*h#g*k$(LpL})>vo%` z{IAm$N3&z|aKv~{eFSa@R8(LLxnMZ3iw7S5V(C0_i9|k+%Jec=x;Bnbu}a^LlwQ8= z@GyrW&A&olMr^YwheAviPcywXuSSHo2?uV8OIzdMH3RiKVEV*}f2sY9UtYcTQ{GM9 zR4xuMs5xx}1kQD2&GyhSZlo*vb6LKBV`)6wxc-q*HsA-H1kXBJxBzz(q z>gqzk*i>>)z2M|fl5!ZVELCwaRd9Y&;*a|c?vkWYHFur7RipZDBaEA+dq*l6Z*mvU zm_^u^VC4rV0$P5g(J?e8cLEQ$ek=#=q%xk)(Pu~d4!VB2-ZDC2_#g0^LPlZ53d=Ed zH;r7k&{By}q^U&(lXx^q62AE2%<#a%mAu4dfwaa-&&UcHz^o0#Fagoa_h915=U6)E zk2Gm%tSkHz{UnS--YHRc zymEbmrkRl=OI_!2@_eDCDDz&+TG)dY&oAX$?fZAiw_vGF39sRoXj7^hIJpk_p130_ zL4@6N>Vmz=m;3Nu(kK_Em$avIx_FQpc+t+GmrO*b|G2=vDFyHee|otsJwtv#lKxni zf~FNB%Sqe3unZ_|#{M@p$kKM~yC`-^(;ZS;?Mw@hK3#8nujL(^f-4>YCLAgAC2ajX z9Nu;L+sqYIkD7<%5=7W$yiF=TYpSG0)O5rl|F}*5DJEHqwO?$sl{p<|q-2}=^@l+m z#_oEWvi=D&6l>>Pfn$xzLeE_re{j`N=A$$5PJktIWP9re@i|jeBjLc}&SJ#BH2$pm zKDAw!zA7^EW;KUEgF$-QS`&VDct?6G2K_yaO8K)kye}PfQU)X|i0DL5t4)>UorR{mE(IjI3PDtvO5GAC9`2*YD_T)h zntiwamt&DzN2$!vxE)->K&O`iOcBJN(LN34`$F^DYHo&5X*G|F#=uI)#6Q+HS9_XG zVyy6~NHz;Qyo$~W-DR`QF=+xN({?u_vSv^BD}0_<^r%5z0_Wb7Xf zq#mR>-_P}pH%cj#z9||uN-}xL#OT`rl=hnZFkWF}!Xae+T)YuiGSK6yks%ql*ctVd z#rMqU*7V1q^L)D-BJ=VfixDw6FB8EzH_Cxgo?af!bX9=qi%gW6o`~PWr|!y~k2LFq z3mIZrMX9p=)zwUT8dI`UyZm`bSZUB0K2xW)9Kdk@W*DOuNx96nTiHg{ z=l!yn#?pA@S*d;^5v2utJu?h)(hlpb+`kuioH+}2U4r>yyjHKoRNWjL2@mZ&zJ=dy z=K~C4{h{RfZ9I`_c&81Q6&sdJlj^gT`|0uJh24FKsr-B}TK67U>()HJRTK#84Z=AJps>;Tr;oa7&3KL}A` z4#&o$dKoUUw0_5^{KE0~cYsKm!64h)AZsPxS~o|+twxJpLe1v;=YTem`A&npyl~cy@XxZML&rN;b&;%EX}R8Q z+H%Qm@Ib@8tIRR=O}oV5AB5`^wyc4A3h!;4JrcB!X#LFX|1NBFdI(H`S`Alhdz#I% zBSur<(o_zDF-z8R?#IBUmCP4Mh6ihvvT2rSn!!diHG^w`n5a0UU##?lF;2Ru%JKN6 z#f}E8L`zqs1jal-9g)DlIAQWJdi+!3XVQFa&45RV&sJMw1hsAm6IG904CoS!Q z7*^%gY*Z_A)|^A`Bk_sECyXQ=q6PA+HvrWmUIrn6vZc(a1R-$>+Em-&Gp@6_d|315 zu9$5jp}%@=L4gNwkdYo|Gf9xOa!h6HERjpxF#^1z&4;>iLb?|0ld!ZoT4J2j3Ek^S zB*2xnBy0De__=8Q`K({CCfz^{epK%ZgSuiczuBdUye?@ejs2I-x4Jgu9s8{SS>C(c zMn@AQXg4XXZqVjMN!J{=&_jl;ulZUVYhV;K+S%w)wA?A8u4W%_xFmjf-7f*h6VuA5 z<1#Ue64uL?bKT7)UUlP6IvDw4;C4`R+_&zH+ve6ya{9Q=%mI3+I56f5Hz7&|z%ZTG zmxwOP^$Y_fIGTRNU4$iY$za_iDKuL4EAQ=CP^>&UL$TSY2fuNw+nb40ZFZ(U#O;BR zF&3JEe`8TPP2tLg6?C@WwCn6$~(Cd+qLzTKY^&!JXmNjLElxgaheU}h8YKV-% zheb=cAlK38uk^-jKH@Z>J~r1?qyDi^!+x_ek~-J2G*KznCV!Y-3)`C{c0`do$LixE zo6-iM3@03NmG&j^Ut>vt@Hrxm(8R2%OpPjeY4;wdUAd|>*a257 zMTZTopST~qTu#}yR?0cL&J|W!GDQQyWMV0tH--2(*fcY!!W3~YSc=x6bZa& zzcP*j#ATx;&?j~)v+r5XrhHk*GO=18*5uOpE1X%(1Y!B0&G%?{$l_%%S67v=o_BZf zUeo+rfY0zP=Pfiq68|*IOq!vc}lF-TG)fu=-u+!RMkhhvvPu?5fg#0&_)UU*kKA?)5cTfVlh~AAwn?Zz0av z#f3U-4KKKaIyc;D{csiBgUhWqUB@U16(FRtd{&l{G4A@S4sSf@#rGjYbpZy*Qpam@ zmuJgcV~D+)CHgMMe$`B{T>6vNmdxpR@`-MRIw8Tk=kN5;`|p!ZBViHJkU)^d3PE(Z zLuR@pCb!2ff?ssQmztLdGVAAh;0xfQwMT?dht~SLuHc~O9M*FA4z?3ILY)2=d!F~0 zd%6hz!KtcgE~XM`1%x&URppw|*}FBh)LM3v=I~ZezOW*gId0S-pZUIEV?{-zw1*Bd zQ`rwQHwlxeW}TaRZGzbPT=Km;zqW05-Mt<|%V+nW^;9mFLQqC%$Fqw}8W;rAToa zZS_fcp23#Z){h6idMp%BRtUC)=xpFf=idrwFw3T`*YTgGi1DiVz%A0*diGi!+qR%g z_rn_9h1`@R{dIR#eTn$X%7K$l(?ZqfhOP@Zs28;_kGp^iM^ywbzOlx$<(4^M3iwjY zVgk1F5xp1tv{=L~8S0jRMOi6lT%txoW2Vn-Lt@@uh6;-!Ij7NBZPmD{NjK7~@G86&kwu2!6l) zQgxiPRtYU$b?n;4>Fgu6p9bjW>!!zGKTe2f4dU-zj-vfawfsve%iTxs?9BFc?Qz#_ zUC3zV%5>~>2Rpn*0c8V8=(0^Oj#PGTvMff{@OreA`@@lA%JwiiVe_KwXHMHuiJoNa zCUFd4?M7{s8o~H1NyR%k_Ou^61G_0tiJ1?My`PF&Cy>ch4PBX zA0bmKj=g6eO*xOG5ec=dho+x1R~>upz?DJxzq7i_f@f3-9y*TDQ7lDH7pAF+- zwtz!*t91*+UoWQ6SXY&}K?x&3d+@o$oW7|)5*uy}9}4$nC#~h=`v{B6Q?1gnpYB*6 zchM?vZH}4E&!m@^X1eK}|Hhehx}Ia+rHt88j~d3b<+~)K);as(tq@v%9qLefMy5R( zN$NpjfdPM1e!_bgZ5vZpL5yKc+brl6%Yi~{RQs%Cc8(m*XGg*v+9Fw`+(fnXr9O_K z#f=3(j%$lON@nC6yXjb!My6im4X%bzFm$23}C^N#!KF5 z?JHWho;vn>Ug1;FI5aRNbJ&<*WapxDrNS_}##AuWVs`gK5;g0ejOCxDt-0?m6#|p7 z8-fXx<0SBt^uu*DME=U#%}mKXCI;?yR-K;S_m_>pUM|0mD={W0vqV)u#@dso662xPf)^H5p7Y-g%Ul^%Q98x-*{+%NXaTTercja)#&5!tEERPgnE6 zW_io_zET_W=+T>{vZ}g(mp2C;p*xugk>f(Q7uN14g(sT)pf z_Sff@x|f!g$Z*R07Z(UGQL% zuYw0Q)cf-MHM5}O*UsihtC}wszurE$dFAQOzKHi_rWe{kpk?vA0U^Z|8dtmH@fPAb zbgxy@^FrCBRQFoZ|7z=LT2};lxA`?>IW8%<#H^T?t;mQ&E4rJq}k+NI-qUjc)oddUJDV9Mw9)85l! z->j@?XlHg@97-58?VIvW>FETT29J=pXIPg6)|Zn#lUg~{dd|h3 zcZ$y7CTk-gAY6)?nHha$c%ngIlg1_YX4Sw#jiKT_8+UR54ppc{;P5^~^3cS$1z+G^_`VWB4HhThswZ{3*KK4`dof zt)q)+s7VZ`RVc-ve&$rQod&h`!?0{aBO|NM9myD{Ta2}38=Dl=V0&p{!ekcu6cp3y zDQ$wda_hYscCFxeuGINPs#u#$!p&isuyJnU=9}?1|MC&>22`-Wq+35C2m(=05Hkjm z@WDf!2sl`s4`C{d_~)d6(9yo?nj71X7jj9q?X@@zB$Mou%cH{TL{@9}6)Z;K@m%v* zm0DeI=Tz-Irf;gr^`nfeR$U(3<72m3OUrkdL2qD;5H|bp7fseQ+hrS_N= zN+MG8XQl-#Wqgz`S5}%yC*p-14t}5hxuRT}P&b=zAD{fy>hz7*Vq?_CRSgo*3ih#3 z{?iCO!BJ)YuCv{7WvE4Tro%{@a(!#QBb23Q82L-88oT2#amw?&0YWWJ>#xw-C|=os zZ~iKe-P+Q2!$9X6|BKQ+4T8#@+jfBNJ>Clx=$Pd55-sbxEp;FwR2vwdc^!{G6bWV> z9*4yIKMSBD44Js;t7A8V|7H>BVDRk5<4(_gsZ<=yo_94p4ZIooW0hd+h8+=;M8PuI z7e>5q4?=>EAQc2eQ2IvBC&6JL(O!2cx+v(pW*WOCRbnO5Oag^Oq7S!*Av$Z=5yOP6 zOlCHT(>m?%7h2bluPOqpQqo;5BgJ!6K1~bO`-ErVVI^|j5z5r@Wr0yx;nMN_m}75# zBbGm3zWKxE&#j2Hx-aq$d}CaP@GI)emdj8~TFykg@HQ0|$!AvqFJ{+P&v}VE;y%CY zQ0vsTXvNWrR_4efk-`AC)oa2wgCXQ^lKGww#`Zyf{KMgwP2Zy9a-h~BDcpmq<-&Pz z!{%91M>zk@d!;>dJxlh?`^q*!pfMT55Bq~>Y+EzZVqWc%@@3zCL0nYpshjrkw~Pmu z#2HS}I#;bs&?ki7oYh;1rlNJ6h!>6dYOL(Pc}x#jR*%A*`e=W!4zn{)>aZ_e;O246 z5BA6E>+BSYFL52zBnyuH(70`(`xztO!;A77T@v>vu}$~*0ppeBhL)kZLqMkAQzONqHC;FsT|jP>5J#c}C~ z@8}gK`gm)PyNCM&_O^CnS#sn1B&)~FrX7mna+Z{;ZeIC-w7Q~NV)*UEZ3z;Kei%d$ zzqBNzI=1L0<@!_-c6kT#+xMg1(_&TNJ>hVj8MxiIQFz*YDOzx2ZxPZU8@)0?e_0c# z8g&(VUh!yCED^5ie6S74xWpb|{s1qc-Gdn*ldPeUw&3Fb=UiA3a#CS*?PD@hsry|@ z$VK^|U!l!MEH%=B?%fkNX za+B~%MD^xqs%&pw=yj`fy++6G9?#G3x`x68mHhV2%gayL>)#Hc*V2g!p9A&%%T7hM z7u3gxr!qVlImGz_kWZ!dTI+%h&kCSL*Yo#&FG~cC`QPjT2>^p4n{Na)T$9>#Ps@j@= zqFY)bt)A{@I*$*ytB?c(`453VFSHf%Kj6-*yi-$4UC{M3R9jZJt6^Eb0<&=^!~|O~ zWItobDbmxrBNNhH$3^hX&43AKWeo`0NJNHMp$OGe(~V!3o#ys6*}S^O$*E)V@9oPD|i8Q(425jrt@VP^}RD*+!k9_ia{C>=b;bj~?tY z9CjKF$#{r>hN~OU>ZnFrd+5zw9{}1$X&4_|@fK@20p0qLIwdJL5_mArqF2ti@^JED4=QXGBCJ8k>c_D z+~=In$-5uybI-IK9-ch7a3ah7PTRMubiJu!gikntkrU0ZOVgsdx|r54&fpl~QD;?J zs`nbYf9dJhTzlWHw6LL*xBH<1p#Scr{H$O9#{9yXa?=l)iRu>efRLccd3`fVz>2ZyP3Kz9dfSK61HKxlPAV-AkIg=yv{axoQv6@ z;J;R0Y!^}BG>->_`TaJ_*+%YbV~*-ddMTdZkK+LdmH{J8YQ&Q@L^r4hSHJ(Ur*`;5 zGV(nHi=4ZN{!oBq$g?HVb?=)PAAuHNSp0zb+Oz7+*OHoa;SujR!P3+=6)II z9nI+fb4qgN!~v~SjfKt#L0mr0J1ogm2vL7gnaCmtLn1G1*t%;J3QW0AA*8F@K{REs z3P2YwFUk4N&viXNVT~mZzmg$|nnvkh_d~n2Q+40UNF?N(cHTTZS|dgPZt7LVif)1~^Stj?ie3;D=fv(-E>cJ!~l* zK9UvQJ1Tp@jnlrg@AaNfUTbUwAB<6}Ph8gmM_0VHPg?2x@@nIfX8h|{hm0cCD@q2p zB3OU_^XgySt8_@pE_dA1Jk%c7Zzq$8bJQRZG0_Z3h0jpbiB=m~gq(d=x{%q8$$``H z#$^jRZbMOq*O-;N7sprJY4r)m?xI^>n->A0HRKuFfo#jU#h+x2f0Kowaw_soX}{*# zii=rIY8tzzG;*;rJh1L}$OIj@(l}_485{leJqbbK1}eUBLvaP`<_<| z!o2nu&VwFehUKct7@p{Fzk-USYg(NfGAzGA>uZ?bm$u&BzW2M2R6*-BF5K)%HGL%< z<>S!yfsn2BeeSMX{zQLtyyzaNi@?&*1rFV1saoQ%@}EjIZ=`~#mATJSL7R0qWsPUb z+aUGlqVhl`63-;ib##3Kuz@e#a zRAN~5+(qON*J~LAbV?;XFILds=UMml+m+eUTk3+FAn}6FdlcKXDtT>+yw4ouBoCJ-w`j z7kt|8#LRzJMv($v;t^4yL@h^_dy1y&E)q18+o@3fjWhKzNVP*=@VznkVElcA*^Hhb z9^c79X)ZRJ07zd0fZfV=Li<|)scBWy4$m^%4(!rcPX@D$Eg~~JipuhDYqhIyYLXRR z@!H?Mxx995VJ$8PpBX z;2dsTc+&F@S89rGh;O%GlerA_Cfy^fe4IVjE*W6Qh6GXlgqE5JLrEQC;&KCS(gBr<( zAwJ}g%`-ekarwY7`?jWW(e;C2@NJDY2U?E5`)){!fhj@r55L;OoNdStk=$_NTfc^9f{Jvb&Y47YaG>>o5v8M$Ks{7yho|@(?a_iNP^N{mksR>;zgv zXZ4&{pW&On(&Y-o`3fF^EQ>g(&Ww=@$T=*+qJV^$R?pHeTNrf26c}^5lMx__hAb7q&{I*R>qf}Hi6xT7PyIe$ z)%sJTm_@3!;<#v~st0qsZUXT(BE3*$l6Z8zvt7E3t{a}G$U?U2E!lKo4GCbNcrkos zPdIru=YQn~J^McZ8A0a0?~&Y;D33Gdf0Vzc^kjKueP|}3?b55yO+0N-na;h)6u2nA zuh0Kcy>13$w_blg`_CILsI6$X#A2QHiskrDs}^VMsX62ZY7vdL+j+}cT|_z|mht-B z`B>G3(HwuY4~ZG%o@U0j+R;;lB4LKoI<2ux;pF4By3%Tg)_$ZQ=3v{q5iI{KeTy;u5WJIESz7ShuF4Ef=|)I_qlf z3vLZob0@9v{Z~l(!p!@A-uFV}s<}*BpfU@AE2tk%IQ7t4diqPRIs5KlDf?52t_&H( z(iiGtBU#zqn$T*O{^b2(8bVh-sdxxoETn3u+SW;mT_80Ax<2`yDrVp7EZ-)Bp*Bw# zmOWL1)zki!B;;78D0u0I;ZSl^L@xxM2ZbiQz?B1F#g#m^HZ9K$C0RrX_ri}j+yPlt z_!9iaA%Ll3&EpqW{mvy^h}c>(tS*XS)A~UcU_#9J#npGY#5?+Y>kVeUBwkqE!^o0L zU=?IYoDfznRsqY3_-qv@=sj6z(aRa5i@9Q3$z2h}F=g(CWZfj{N)|z~x(bUYDxcpm zRG{=^=_K-&#U=B@>4NCQYDpv$T`xZGTK3VoUu56?>h+<^PJQv2<1Xbdd0*7Up0Mpi zmTjVLLH)o*I*ZF=qe(6X7ic^gU*EL3UkOw1Mg)rYE1$|Si})j8{_e%Rdn#&OifN*e zMbPoa5l)&D!Rmvk)LuzjlvcEmgDL?tuao-t@ou~lxhqy829X4LMOEM;-aq|B{tDuu z*DsXraqu>mM{1>qUjLHkw%s=SoT=PbD$Hmy|FQ~meP=kn`}>Y3**`~T3~w@KvX zPH+8=Rlj@Vp7W&n&HUIk^?aHv`B=Vl9jD2B-+$d_q@Lf2TD z1(0GrXTsQ;8IHZIX%ToH6p}Ckm(Eo9d228>PU4JV3ByF7k4U5 zlHQUhKcY{b6+@Isq-B-~)clS_Alq@q4K5<7l(D{_+HnH&qA#a$D=UKSxk}oEl!M>*d?YI@$RxIF3RF6FfHVis3KVWlN3&xA-ar@9{rKTb;_3M#+g z%FprD9z{OF;zxDG!$u+#xY8^)#p0ru)zV1>ekalEC%1nsvfCxOS}wTq9G=&lT3-zD zevK=h99CIjw#7~B2Z>FeKJHt#Jyb+WAymV%&;?%(+;h@!q>T@6M2GqW$Q;j0)X)fd9*OuZkH=YxmMiIiuf%BxP8-*$^jv=+#? z-CT1(Ui&SIl~oeQ^ulTH0FrIrq^SKooxlju#j-04iW;Oo24(7g2Ywb_*0Z=YA{Sg0 zi}wnmtU{N6dYJ$fEOhynC!)~hmuFO=ORb#Ygsw1cDax%EYBz3=+-Hhh^gw&&{EzbY zBz%zo7Kf!TzFA9sMm1k2M@v?AWR7@S;nMoo*&6s=q<5wu>#7A;eU6w4um?DTWxb(KN&USJWp zXvIL6z!l*p%-V*sK<{MLw&2RM`Adds95BDt3%&b7EgqF@zo$a=!#w4F5Ln#^kK*yl z?7~!>l{2kzxUAzzKOlBN=u#!AW2y>INulC4ndOtOT025^laowOHA3xZOpoTvl~JXQ zLe|5m|1qrJB|ZdF$uu)W%fnp}6dDq`h#=R+{*7<5CGT9rM#qQb<0N3{n5!-ZIhoXh zxvTK(yFZfdwRZ3g--7v-VaXF>ksoi_K1G24gKsa#d6e36Lhq$ ze|N09=+^~`Q69IPf0ELEc|izTGc7A9K5}35fb#+oh@Bp=$?EDW-#(N5;;P@(-2F(r z^0VX$pEkJvC||Kc;u+^2!&BUI$73~dgM=>d&uBANmOS$y4kL;YCvnFNnGP#K=$f%12(<#o>;f34T`WBaqy=g+Ix z^#*rcWmp9+>LYs9ETFump&QbiW>#w?-4OrX>k3X$0 zC^}cM?C-0KSLBu`$|S7oR=jPxN>aTjA8T72f7+qGeKFvXw70i^rA9TY%W_}F8hruUlN`~+fsUA4fct{zsB=0`(jSDFU)ol!Vy81YWA316}`yqH1xb?>SYh|TAp&eezuIgvVVfr+=a< zTB68WuT(L)KzUJdT@*rBOH*g0c2cq80veFB`{*o3jy1@9+*n*z=mGm*PP^O{M4ZGU z5~*&z;l5PT`a$V0p8q3u{nd9#MJy7qzHr+2ZE?1oSVb$lAZYg5Q#@#SJ#U#nK=r$L z{xvosM+jVG)kT6wT+F&&%UudR>w5YR*k7vgtQw8A9704CkoZIGMdF_jf~*1;^~uHO zUCZNX$snQ0Sx?d4BvgH4{s4!h z|3ubt!5&KG1o>doIpM8LcAEYPHnZpd^WDdEUA(sHx>!YF==zWE`Zn1F>`dF*)WIfn z%#h|3-d)lE-0<8_(QQvgqQ9m@EQe;&zTy5(dK2KP zcknosWD-~|;f}=|f#p^3PaB~>EMIW9!rm@k^rbJnrSLHC)m|aTtE&v1{7Z_lWG_Rs zF({*c9A-IAaR0k7RA(32HQaxE{p9wqaVsuv1$N#wo_XzQ5s_Zu{Z^f~9WnY0$M_bj zGCD2r#9m}=)!p0W&R3x)DDUld-jc0!S@+q~(lL6f$5?7PhUyHYQiibSm=h8ig+&Ph3;P8NNJ>=g+xR>NbRT)dFW#B9*mB`ipuMoM4#OUXuxKdTvPSZ~cFLcEcxttdm zh+N?^OHkxedQ#L!JMb(hDt&rSsap;Su}JJxzfv5 zXOYXDW1I)k@M+2|a(V3$R_F>Na#?rq654`}tE{dh}UGj%GC7pSAwHY9EdOF43}EDpMlhvdtbuQQ;C=d1HvbN(ol z#>DD>erGnB7nKZ~FPTGScmdatVz@H0(ES)Bb*t|bh14=uqIpustV`-U=GT%ds1TKD z9jy5Pxn&H-%Q{-8a52k^w&n?JO4s|@s(~eJoQ*2vtY*ojlD4_h z!rEJUr27tSTJM{;qMd`Z6!wn=v*c2pW0j8=&5}#eEHGj}D$bwMq~XV@-*Lljk4u7< zT*_o^$rWe6^zw>qA0_?D{^ct#zQtEqBsbN!UR%l5uI`II!ztgVM5FON5vL6Dlw?h} zab%PWjt~67|A(QZj+q@n0zjkDLFh`aeWG4H^N-57i&%HhWYO*&5-dRCM@lzCmi`5! zmN@*we{$6=`;R|HMuF;6Iz}y9Bi8KR+}y%in%(OV8sp<^)7YkXWehxesytkx)fIKW zp#fP#7F`1)%UMga(^|_uPDlt_H}Xov(qYVj@ZeW>0L(z}_IO+%J1Xq@tAAgDU;d*# zXl6t5WecBUBil#kzKM&tZu+_8BznTrkW9ZkF{uBKbDDwIa|IocsWQln8Tq z$ls;J=~h)l$|ZE=vkZC@&nCxDgh*<}s5s=2#tI+#7*TqcGEcIk?ie-^E$=NFZp-8dkZDBQ z6kT8oI;T>qyCGsC1c_a`Uh9f7F5=fCzV-mQ%u3z5D}O!}{$bg@>tkJmRVi3|>VlW} z8!z+nh+GC)=;8zhpma3sJ}AqZFwAY)fws<;Y}z}oz1p~P>nsYzLDz?89fYn%Q5L(O zAQ#5CXS=L~D%NBym6@h6@?`^D7QK-7mTF7uEOw>mvgnngVX-cXFLA!Xkw2A-Qp4 zS9G!%kNF()@p=pAxD)-YyTXi9b>YbF#HoZPamfL}A=%9kCemR**70+Xd>QI-@%8Hd@_BU*3i(9cX7X)MkB)ls$XN}-Qa>y~ll ze%H&wi`gqsXH&A8snepBG}(us}b+WByN<)04p{oo;YnAjvuR}cRF3dmv*xRR3&b{#nItRjypmax! zQ67;CryeK=1=UFJbK%`N+ptC=%3za7GMM~G;M$|5PPen|rl%(SGDG3@kj*NuP zj=WwuZS_x}G0GK_3lG2m01bc@SA2>qa78Rjj;yyJU6hCTmR+z70}f!#6%uEeee84+ zZCmTPD{D7*IrMMca@w0kw>E-Jn4I7-6sqO4_Ir#r1`NlCT582?Nb@OK;CY;6AkSd@ z`hsVmoC9Ztd#b$E!&#wc(#tsRGaA zH$VUi3Qq3Q0D-GY4y?BzM*uJ4S$4syOMf!xqnsH4={0J7&cM{$)$7>ifpK={2X8y1 zy!T=j){W5?XmIZ3wP${MAi+{PvMQCkB5t_>06;g&JTK?LdMm3`po~NpyYdjLt5}cg za0+bHvC^cG=aE{Ru5yyE@fE(;(9glByZ4De?UfQXr=KQYvY1=|008s>0#|4>7r4qs zb5jSK)w2(q(7rXV`NpyJ?41pZ+2E#?9&Ly_5gE}R>2!Y>EVIxBYc41Hjs{V(YJ;ZM zuFe*ai)rzbpRo2F{cvv*ZE*$jR{qrXg2* zT#!K=@(^Gi*s=DR*%2gg?K1t7tgCf1+n&?9c4sfGxs|;)^m4>Dgg90#%ItuZb=_gj z6`e-j*Z8?GGTd|JjJiOny5yVT{ur3he*TqbmQ|}|x^0nmYa5YOVr!|&Wyxh=k^}$% zJt*sZ41p_u$oq^exSRr)V7tl3u)mM|h>eX8m%Z@-r#O#b+SSDMETnf^M=MXex^ zmvb9SK5AQS&(J)Orrf#D&ALw4g`R`7A(~BaF~BK};?H006mTn@LBpRRc@dz@`<7MbGK4 zqNx`-{OxjnAM27WxtA3eNS0`!v2~3HRaV!snTz+vc~0- z5k2gGG&EV@fg|4s?ur1E8n`Ngd?5rbR&@#6WwX;+ck4{e>!6#!72XjnKQl!!94WIW zA8i(`cT=ugE?pNJar~^0srQ(UR=RS{ZSLCYHowDVF$wf_WlX!3)5yOV&WR?7$)$|b zn-i~mzW~SmG4g)q(ptz(wx^ws3RY14J z!aw_Bc6QT9%dWIt7QOQ?@<@nkVN`a9UN_NNQeO)%r<%bW7GCu>fyjkdZeO6Jpz{+T zKequY0+%4zbx~t961V^;J~|0qWsJ|2C79KsVQIJA+;_o^v4{lsWSae~^Za40cNoDd z{88j7b!Zz|=}hZH1fB-~0FWZlFM``!g3PN@7rJKTr&CkAKg)Y?c|4qgoRT}CD{F9W z3lM-lm}oKhFvir$M_c(zH2T^e`IBVZ%VSo#j}X1B^loK)sY(-*%j^(LcmSB-TmX6# zMc@*U(6#Gkr?KaFjINb>R}=!51k6wQAvi7uP^E0~xezZYR~UJmn!`u#i+-GdW5jB| z5}zxQc5~Y=VJ@+`?(sHL9s9I>y!yUawokC+0tEyQNC4i)t9|ji8jL6aK$0XWa0$v~(FK7E z=!71YT{tVkfYxdhxv=Jf$`p^3R#{Aj;+*^LX4XAcSEE+B^}0rfiM(Y`FI)StQItyL zYW>5@j17%qMa7)I*zhQ8TkK_(fg3ac8c+E1Fw827VW|sUIb3xyVc<*#vIlOc`6BDS z!q@;spmF24@Mn;cS`ub;!Lq5fMt}=vljY@38>hV*+2W-Vxti7tvG&_uD7{FO_gBw< zKhG*dqZ*7T06-F?DR2qut1gyT=+eWc1`o951%00%Aauni+M0mcQ#O47-xELhve0;CU+~bWx)YAHNGT zI!oCExuY^X$|l_O57zd~YTO_LP#{{GIx?*c30-9aGbYfFFuyE=#!x~3#0G6xE)@FP zh;va+dpwnOyox%P>2Aqz{0*WaNy`#xGb5!QD6PWN_V{wvylev-`s5yLZ1w~VN(8)U zePtc%`PDyI^V;EnHo~JE07YeZ^gY(mG8z3F0?dd&e;@+rP5k~r4~HXKdu7qemSe;c zYCswk{yb9}bMjVDmt>L^Z^F^Y9vrv4S8?+561?J*WDk_iUC~POvOd=Hokv;6?JqJm zG*%7EhLY%Maa>z!Lx{F-#Btx~cYdoS$WAemxX@svHW32tb*STfa$cMLKBZq7Q7sdud zu8Ez0UdFl}T4n~A$2AXt(n12)^Y7lkx>{!hHo>ZaCH(JpQ$AYi0fQ+MItm5 zvIgyyXW+7!2h=QvoKAFkZks4&*Qc(|lBk?MP;;tOhBmQ|KfKHZuZ{c7X2XYU!^Wp{ zYEibbK-OBF4=rPzi&tRvL;yfd;2IrQx8y9l&;@}Ds!y#178N;M`h3xeXHv-nU(VFcD(@d#i0^0pU*$EYAKS2BlS4ZEMxy$2f^ zvrLX(e?htNq4ni8{MFU@0^79547PEP8C>{+;1wSdv`EH^nr+D$M9?Wt+C2!i6sqyy!h(tnHO`tY!HI zE^3ju1#2xoaEDMHiq_Z3)+b4UOAt@!g1`lmZh7=rvB1M%SoAytU}L5iIIp6DmP-$# zrcLHm_A1xtfXEdSvhr$sW+i_KMrZf3(JdyJf2*$|yEwMJ@*WqoC~$l$7q;HRjXVG# z6ln-tf}*-EVwTMUSt~c9<-Ha|2aN}hmARxLR!9XLE3oDQp^0%GXfWOk%R93uI01B| zWFl8KgRo_JAAd2ny!IWp_?kU|jZf`lV^g}g)tC8QJ_ImRxH1JTvdSVci-fJFp;4UL z04ULbGbPn~>E!AYWfjG+kkCcHzNxReh?%XN1a9h&EJOD_vISaM|qxANw%US!r-<}wgal)WMLAhB!{5pGQ!=h9LE&&N$V@k)tc?t50bL`?l zG?(DvHydp24BNSw2vxT)WmJwRYpWh>oIO1a%qAoJPq-}m?D$p6p?-v{7bI$ zbPH!%iMuQSa!F3CxcWxkNGvZE)(-t6U@y#hph!UU%8rB|r66<_6u2ycbb(ykScG*K z({z!wY{y5s)?Ff3S$&#PIU)c601LSLiw4>aBmu@zor>jE6m+Uf!et5dB!Y1s30oVZ z4b{=3tH_aJno3j~^oz-3Wa&?b2R6OWx_1uuwPB?FTl06>2*Q-L7hj+j1ZU!WUV zjmIpGQ5S4Poy4KL&=4)?1UG*AaViF5b(eNQlJpmN1Pi#285QzgFa|DSZxtwP&?2c zjRo!RP5#;@8=J1Yj~O+=3nCW)0000q1;UDcpih8|cw<6~5oLR3D#{oy$GM6b$xSkC zQk<5}M@<^(#F$6CTdE`?7p6V{fR(ZbCe{_q)#B(eo_BxgUx`UQgk&SZqpK^M;?RS++ZD zxxxaG3jk0uaKjJuBi&J{`ImXgX zxg3}1=Q2>7UN$WMS8y4SPy&$)-3|aKFt{fR0V2NWLk?=L+qoqx4{mW{kly2to)1!4 zmMY${)Kf#4PzP@8-0EROG0N{<&oiGpNvCLXgfY7_> z_YA2XT{kqZC-@=MvTU^xf3bsA8#yFrLv5h%c!sNC0x&7};^ zp9o-;MUXM23O*l%d^JYD+kqmlun3V00000;9RCYE1g-{AHW3Jdmm=w$kvPwRUSLF) z5d@zv(nmx7%WothsQH0zeTc z*O@H8@SEQhyCtx?A^-s75j?0SPa3vCf&9bIIhY=P(jC??MHt)q29?fu5l zK{jrTDc9SYc65A%Z5rFi-#1m7+2o!rSW8nIdvD+^wsCYQR9kkm_ArBuvvFfQbXt*~ zpt^|kRHn9;j%ryqveB_kq4Ndmw6%7ceK0=CMn^ZM)N)B)J>2;e`MOkakqdWk46Oh_ zF6rtqZ&U{Rhdqn0vQJXbv1pOvERNL>GP=?iIsSp229^hEf;u6WWXf{RX-pY%E=L(U z-t=X)(qa}AL9R@@4wn2i8IPOwZdZHXKfIc)9ayH6uBEw+ZPvSO?en_9ci8%&Rs4NV z#}wApHj%%d*fo=_>U%9znWpz{OA;3w+0@Tg^}QY{EitWkYyNj+(?BhKTT3UK*1Hvd zzkcvtwqa;>=zJSTe$Fitw|crJvDTJ0{(0lbAbW4ayA3aw8t#*Fyr8aqh{**2&;UrW ztorbF+-V_AG;dAV$WB19VIK30Q+1!Kn;IG+R&!~NW>?c3O{^N%E zY_9{}pVEim+OMa> zTjUzvw1K^|?nSn8{mZPcYTX5j3yE4&CvMKVJ9~K@H*PA5SA*dagT@P@?IR`^003wJ ziCbH5H

I{P2=raRG}gyJRjopZU_U{O>P+^vBE!PUWGpP#LGqn8a4ETo*AXSaE>_ zD4cag(D-RUg)MQr&bnY8e|yul_hokYEw-v#Z@uvJtF`wew9#Bd!rQbN6WOYj>r*O0 zj$PBVbX$y$dQYU(X9a7|GPo@I)v&i?GuA)6#y33)VW!2Gw{6SlSXyzIK=Rl}MA$Qc zTojv|TiB>E$_9tlvw@*LHe>46`RpgxIVq1@5Hgy9gvMS&3n_BpQ3C*wH+G)04KMLM zxBrz3O3W5>rar43ee8a0`ix2JiAP_o?UxmFJSr!>gk@Lm$#t;#l3wjHzh`o`bGiJN z$W4*Nq$eMHi3?0wL2inI7oL8_cGNdtUCDOZV{5k4oUPfag-@qgqU3MVgL5oun0kcY z2aSb-w3Bev(%jAi%9Ayg7k;jatQ!AnV%IGGerV%+tbcf|Yaa>@-`O^awKTW#u}?wo zDNdGZ;QNl&Zr0g0v6`Oo0Q14=gU>U{ud}U}wYPTHzN6S)1H^G74Z351O`b4|?>9EKiLD!OUq8A!CbG8X4%TcD6h}4d_qJ{SW?s*3)>;h^&v*>9AvQF;A=Kgnf{mMo z*t&t$Y;0^abXt8;yT6Gqcx4YPxl&^9{dQ+N?()7`=I<<9$^P;DYy2+&zzSq(#zihO zxT&9TMV4K{osq<_tP$2*TW>dmMRQons;?D~gXgV$f&R)InsY=9u6u9)TV_@nJMZy6 z{vv*H^_{G5{eW%z>J{r5+rxC-euSkda-~BiLRV?6xrzV;!8GU_TFH7lXP7RFZ4*63 zE)uZl#dx6lwLHkYlcq{bZH2>;O?|HIle@QYq#Nh^lMAFukow8po3rj(dQ8QmpbBbIY?GspgYge^w zT`rN!6w}PrDf>t5A|T~CwRbkp->jk#w8nW}U7eHJ+6~LurqK~gnkLp>6|9CvTG_;| z>0J0SH`?pj)zQl)bWP=H>QdP_YisS|!dU;{YBn(JEpj>`foouBJu@0|US>TX7`_&a zd6}6YawW)w-fs4p^G{|6AGtq&FXM^FpJ6v&_gnrK08nno^^Zg=v050b29*EMQG4?D zH(v8co4exC$C~@Tu;g`@7`ESs=CCu*J+AioihsX>Eqh}nJK@x$*nU-uh-GiCWY=AF zJA3O5Q*7U2>ly6$Paes3*<(9?4W<3ByZUziSB7v4+G@L*W$!u*Wff^fy)(GoN%aur zu+k#ezJre3o&ROrN_2$Xd&gq-;*vMnk;m<03fBvt=AW&Qz(sQoeP6TUs){Fb589ob zaqd6Y_WrNSZeq*dSjmq2L~Ry_Zeuo)xKwyV~k$$Bj`o zFua}_#u%$qnptMc5=fc%Pz*nqzzmcBN2>*DYL!I^Q*17-IhOzQzM%OYo9x+ z0vF?!UiQ!%R)LGsjEwZNvGGk@#OiAA<>J)jo|)|3b#g(E%0vPeiC~+?Mp$!8Yi(O+ zTMwJqJ-u4bab8dQ+f=Er&JHv0-tK8^)7U5%uTo!c;Vk&hb5tkgf77q|IXNt|L2>gfK`P;#vgIa0qhe;UBLD`XbwC7>!-5b zi9Pj94r1)cV-8@SJ@FFuyu&@nO1DLnQ%5r^uG}3dmpeP7mJ>F^d;9mdwp<6{`V25OQ6Bn&bz;l3td(yNW2iR zI0x;{1IVB9k+1N5KY!6FeAPtf_H#~Jz@D$h-6HXw_95%7OTYXR*0+9;dC?VVE{Z}< z-4-Ftl!ox5rJQlO`bSoCk&7U!s=lFjZQHE@=LbjDg?4MB^umpi(yr=zmAe^=k_?Qz z$ENpg8<2iRE&b}g*SVXcfYMLv4Ic}NyB7A$0+)b9E!sw6mJHfX)?Lqk z=^EQsYmq4MJSZ!97P#^^-^8_-JL|%EY_9`$7Ve=WJ!ARN4~-)R)sDT z`2z%%FFO#QtI@z^5yXY8l*mnyVseqimQ&=iT5a_Wzss$s!eC9me(;^Dz*WbLtF?+v z?2=o=ciYmh^hm$DCWNWd**<|=YK^gRwtjGxOT44c{llxdB^Oz3kw8V(S7ga0;&Rb< zLgXSbthw228~Tpi63rN2b(clqTIdw1=<~{Tuk$=e&~ieSSptf;B@?-ZH}=~Ft|}ev zJv9Ms!{8c6T(3&ivTGgd?Viem$qQ>R5QJqV8VNcIUJ$tw;N&wuY7@9#dj3^*$%X%E zi@zmY8RwmFctn0VqiWz^~wPVuOI0THV& zKJn-a(u!F{s=oF8?6d#p-?)%P7Z_TZ?C!^}b!@+c|7F!!T|d6%66FRPkUa2$qLXKV zOPxGFzdEhH$Wn{A>6-hbVvvZlMOIz1?X+?s@x)_pH%8{LCOnmu*rP-#h|64qU&_0>j8 zJgtGM7&glD7A}oeSH_JVA{XsL;ux)h*xqb)Js(#TT--EQSE8hTm^F2~YHn8Q0q#Lu z!U|s5QaF*T5!Z016_-=svhwTee#@R*R1Z2Y_9fxV8jDLn-#@U#jLG%HqG#BJpS?_) z@4Vv=Wd|R*AKPp0ZnnJXSa;w00DE%Lv(j|;KXp^>{ZFsBncaNdUF@v$Ph$Uc{Gqja z9k%BurN{fH<3G%H+_~;oPRD!rPm9>izqlLX7yuy%T3L}qFd>A=_Hnu;F1+h8TTHFK zbpx*LLf|sD_uIBR1J8?jb$Zn`DEkLX-6-2n`6<^o(Pyj-1LA86wE$UgksBh3S5JC~ zRIF+VMIx8eRgv5Pg)5+Q8e`%Ja*+T;!VRss$ZD>8YhoQYY%H&&(|e(Au~TPw z(*WybW}GV$yQr;%h$XDFhDZ8Y7Y|S`L@x6gk_0fB#n$8rvuf60obhpPeMS3^jc;Tf z?Y+rYKG&pqb|;Z{aQdtTFIaLV3|VH8IOHXC(W;71Cb+U9SzCSMd*`zqcX0v z*!(k#6&K@{T<=NunKrY&k4)rpx+*Sz!@keXbGCDAw?9z!PU`X9UMokntZ#aVapj;9 zY!=OB?8XJ6}XtgA}h?cq|$pqg3~+emImx) zpKF9rMOIv`%^j?@rPFjvWJXQo+Bi1Cx-7xy#b0ZndO=U;1Iv3D?NNwD zt5?`vbA+Jn74vHLR`xlkX2n&-Y3UVqdk{PAVY*TlX)eMjRtIeb;zHI)!cDQaa|Rc> z1Z3qEm61(#E7rCad2FeU)*jE?hb?ijywVFRsW1o^M-r-{h-5<>%^>d-z`mn;e5-&p zJYv45VDvqm_2BukxLBh6V`CfHn!aUxS6Y;0dKhbtP z+K()@`m6P#^t6ujocBT~;t+MEa5W>9N1f44@KEK2+QaPM1w;EGFGofpN5iB9p#il0kjkZW>~NaeH+b#C8c zE9abJ|DnteA>hf%U2I^@RZjBmvZybEBkQ=hMWT;s)iqv?*R?TnnXU1%Xa&VpeeQcZ z>k5iaHjNHi($8S4`rNB&_xPl*V?WU;cGiT>Y1QLTVjG6sLSAQEFWFWD^jd2YrHKc2}>bQMs-*{PU4fe}dowB+sQhY6E zj4fwSdS_ffr?4I-CYP|{GFOOPU#OlAt_c(>K|@;tDpCk6J=LIg^Lp470qAYtd8}xt z3ay;Du_{ziAp5Bkwyp(zr@vDtY!zt9C4{o})*d!>!j_KoTSl_vqI|{biM?H$u?d}1 zZ5CZ5ZcXZ$!Skl~yys)}ZuE*U~pvI=5?o{q_^w`*$X`qj%Y zRCA%6&^49ybWXBabdm7Y+cTZDwRW=3jtPv7rxW`OSP5s{Wkj+Ea|4kpA%6Yy-||%z zpYVydb;yzXv46ezEOyiH|0}jT;~_`vXZw8jZTCwprby@#LKUluRaR>(DUh%dl59{&va-;(Q*paWSD8DK661l7*meWd$nERnQwf8Sbw(n=z{`ezHWTjwx zAFvbu`^01aC}|It$%-q#lwI5s2+``mBlnPQr@-`Lo0q`Fd;+^$MJ$=C;oO6EcW*c3 z+ZR0&E>7v*2kglI+E;xlF*w#C$4`CqcOT0a=gf_2S?Wn4gOstR4RrtHX9 zTBO&c?pZZ)YF+;dY2bUS&_z~W&VceGj#U($p9KRW>udSrSPu-DCoiLkiK4k~i z+ck|1j=1A^g<;)>l{L3T61p~?cf|xDfs0MtsQrM9~ZN%t1mJxG|ga_|M=_dn-~6&J+$!gNCj{TRphGZ z1-VUch}H$1E5R-Mh_{5_xVtl4ff!!2S0uqOvzbt&33t8lj`1wmt zU<>b9%&oGzdfICO7l~W6UFPyPP!+d?JEN5#S4F3l)}n_kbB^IoAI6G{$|KwrpL7ZC z#c}(iX#rlR;aaTsa^zW{J zg-!0>oLh6*)34?)a%Bt)rC;6m7Pr*u?wnE+wFDG*i`*DDjk@D#v8tt(2pCUswA|YV zxr?I6*GuFg7sfSx%h{BknLLIUvjnQ|AAXPZ4X$Q0+b2lVszAck+P=5B)mArIiaBC) z4R0J^14HlCgfP%3!e7V2xHT3^+>gu&I15oM`dM2=3~LdBr7X!aJVAQc5Lr+EbZ?U!DJ7d zA3AbR{`ZN;UM#7rVp${<2wX+s#U*dDJ8yi1eeBeO_)3dnwMD@lH$K94-eYSn8p+~z z4SBdJGRew{t~q5Z$99J+qjSy)v$EnrRqL}SAA8Be0Ul}|P&_VrwY0ReN>sgdSXA8?HayZH zrG!W$%`gZkT}lcH0@6dbba#t%N_QjO-7$1XcQbT%^B$hx`(EGmoj-sJhS~d^*=z5$ z?sczwDQ>?dBg>!ScqFc{86vsRGyI%rd{JgRC7?e$j4G8UNjDbk>WHE3{#|jS;p$TCB|d?qn3&$` zf#9Lr(YKA6Ee%XjPO;_yjS^h>>_+oXZ_kTzPz2t;|$HdDndQno!-DQtjzZ z)#1}d5IVY&(jNF#WfQn^+jUDSL`GR$@s_M-#yZYiK!eaEiNI)%f%MW_c1pglRMANr zff7wk?nF!Q2GQ?9b88BE9wG5LP7(L+MzQuRj_4Ws^K_PzKCn1j!ME6m`VCmQqNwr8{-+8ronjd1Uc)#&c<0JAUUK+%HlR|5(V>k%;MK z^MYOr7ez&s0MDrK-LczOhD}0Mqd?^auhRlxxL+CR>!x!b$9o8Cs?&l6;hrNu z$cy)!a%U@yfiffbQC2s4 zh9j8U`QpCh|01u67y_Vd)@tTMe2-SkFMVqYPrIn^eu~nk+{l?o1+^Mr@yfz4Fy)W@ zI5y+Zcv;uS(}W^Z>^AuyKd(50qE=V^JhyHFgfC2}A=f=A4rsN>*L_zF27acg~=uqXJoQu5}HKjCAH`{w;0Qw#r&ioL`6Lp{%$qGZWJmZ&y( z)%mS0Ah)OQM{6sVJwju5ATT``-c`g3y*IgBR=!U(-`*>AzY0Bi2xeIvntp)D`|UUZ zulhKRUn{zDlT_L`P_z8Sh`dwFXLoWtTWZmF_5JCTKq-zABs0xLes^%T97gY>(;i$;h8lqIf1)tEnNex%r*PMh^KKIJFLG6QUo7j zr?Fe6G(|O;BG^$sO8Fd14QW15uhih;8{&%VS#Fr94YL-vlmEM+&yY&eZ~K=cFQ`#Q zisuWeOa;rqpcwo^M6K`Yb+${fBgJUS)Pm7rtk%WQ9?a1bb}OEIQkHyEI7D)2XHm4% zd%L?~8y0~QM%2FbfCQOjE)ZIkpSUb>ifiXe@e9&f?vyA#rfMToqJN$3KL#eJomP;nj0HZXC`C&}n zTjd#vDI=!WRf!jo_YLF=siR|oi~D!gH8qtrmk#RW>x0_sdRb=1PXD+(tIw9vW*|X1 zW7BJmK_i;gmMw~Jq)WsfDJhjCUcR%7tWzYaBfVL406_jZYa;w>#bE#5o!%Vty7 z0(9B)X+{gxt58JvNinNNUkf0l{tmN*b6uWFm~p3v+d?otIa&a-~s z4A)Il2HjL+n+NOD87)Su9cvvk9TK{REdS$6zMH}D3g7UBW!p(nAfT!+)?ziD2jG^F z6#GYdGv;?u@uD|s>t5)4;2=OytTwraHZo9@BTrrDNAKKTvI4}AK7~!zg`a7@(^IX> z;t_U4W%UA=K*iHH3c;IMbufltdGIvi74-tQ$aY1B#Lj9Wk}&Ve0sT78Le*zq$itYGoWGNcKj!b zLX+h+HhNZ%R?6o~n1?}va0cH--ONMl)dhlw@RyFTx;i6Df-7$4(9A|=aneFY;H!P4 zZ)2t-FY!-vCT0<62hZY{rk^o;>*osvjm&h%l==H5Z%zO)gSC1!@&Vpus%O*q689y)5YLF(xeHv+rhi);+ANVH9UHpi~#Ye(gCo)%h-I@R9h zZQQV7dt+9DCbE3V+MJ#$Djn#iaE!7{hPc_ronFuc@aKuAVK>B1C;(!7^q$Vd6Be! z{bag@x_Db4kK2y9^*jdRruvHSyDnw9E~eD9}58Vm$86UiDq(*K5yAm(X~WEsNJOGVD&$IuMLZ}4h4DC|_L<5h@I zTXRF9L@-Hxf+c*S0%!-qeeFm7ZAAP58zD{Tng)0cK_AA~3L@z{t_W|HWlrXD76h=$ z|MvbjSAY{n{jU^RtG;b9fWn-X-T>O<oGP|4El8T$bYo=a-!IdL zKGl2mB7;D*D76B@QaVT_{H22NbjT)gPz((oW5=#lX41JZ-jI)&bxJQH@NoeE9t6Tg zB(of(vdGUcUG_`w!s&xiteQ;Y+Wz7)CW)}6Oc&2ZGZOlb(neGF2^kOFUN68p*3%9j zDOj*1NM5K8+#n1s@$nTzM%Hg~Qv5lZ{u1QnGycOw=NZt-$q)U=Rb5Uu)s>jUOA`~z zuffG*!C>~fd}dQ-nx+}gdiOR;wVAQt@<>qgTs?!v!}G7xCe6>qjU|B`8(1sjzS$z! zDs5+RetK!ZF0uR4zqd~n!|_W`4y_{DdV7fS!bQIOc$=2svP_!2YKax$@6%Oj0Ui5fx=Jgh-ApuBOtt&|@F-hIY=CQVadt027 z*RUnK!;Ctchc(xkYRE#+A6OWY_!V=z7Ab>s>U8NkFM40I9r3-*Vx{q%NWCmped;9% z++xnkAL|FIi7VSfEsbpW?JI}~6N7fxRz>8xlA5No_^A^$x8idarJ24H1y_m1-6vU@ zD{8c*HnlwXn%CC$`q^e?zBd(rAxo+Zi`D#KDATrq6O}0m6c3nZNTWf`=P;l?`@Umw z(%T&(^Z;pM^H-)^{*MA(WmeOlKOwHR`Y5TkAW-?XSxT47ypatT%&a{W1PYAcGYvHx zeyI9Ya*qa8vZ1r{4*BBhw&H?ghrof4hJy~(AbYK1Dovusif9$<^U6CZJA20@sk=dq zo}f@36deeyXEd}_jIR0@BkL{gWopbzGhSk)8iLsEaDsNIz>gFM8ro#7*xfZg`hBO1 zvT~0C67@kUxr`IxsX~_`r1cDHd9M zvc2OGh55(${ZA7e-{WT$=D&g`{^l77FNzaE1Z_l1=H`%x*Qq34c8;cFqN7n$E}k`t}SCP>(3OQnR~hZ(RHjTHeD!K>fNC*U=`=q>R>c( zkryEE2m)mzY1X$GUcVLWs4BTHOigyD((%P4PB;k>zI|%L;rZg_-wLn_(=qYWFlkVS z&A-30(!)osSSt`cB?78+6wl-HdP2V?kXwS+*I%TxH)Al6sOaE z7K1=q+Aw4<$jS?DOr>*y9n|YHHRVuc z`*{U|0a}q(w*ipiAjm73JR4dw0%NOHprms&(v|6D=#pjBdNn(A9iDF{uy9EWwWEWj;V-n`0BcE zd@mz?9bTlPwHdGxKOZS>qq4wZijV3}F*x?BA?kIVU5j5QqGMK{D~_E*?TPXs8-^My zNSNuLR4}EWu^7mU9@yGxO-Z*OLHhoW;j1)u&Er=@oP}4yQ$GS*n;cIGp}NCwW#5lv z|J^p>HRvL9`IcDY_@<(`^H*TXewxfe+7O?$5U1%t{(Yn4l3J$+kisc@hCiyG+Rq#e zB~rNk1?;Xc_m|XT^_7Of*S&$RmGu-$k&AY4k^LQ5>Bk~cu{SW7`1lP+L{qFfMXy1* zeE$1RV>iCddae^uRM2sDPQDp%n5Q@OS_T68y3?7#K7)B%nSb{VNWl%68P<({ZfjKD zd#=+dL&FU#X+IH&M#ty-G(9X5OrK`wWq__Ir_)oMk}FcR2SftKK`#D-^DL9=pifqw z;%NeBw{Jpi8b?is%~hZ!2#m|mn{?_2W$k@*kR;+F`Pze}{~Cq{jaBg_7CR0*@^6%c zlTcuAwR8|Cd+^+e; zvFfg5WqRf#aj6>JEq0sLW}UY$ICV1lmgwslWoC=~1uCyuEc)QzS~N0an_GS#l0CkCN7s21^f-j8Mi9O?A&bw*maCw5 z0?MXXL;pXVc&#lZzItE9)K)j+^YbJpo#_of zJFPq_6A7D*8Co)AQommrxUVFjvN10o`eD+ti4k&8{Qx|1m2699)Ms`xcbPCErACmR z0WOW*C{s`&>f=&GMGPJ{&MpkQ(cHvV0Y6{{T0ubIxa=tXcx8zLwl~kxKCem)O%r(G5@i@m9^EuX-eduWa#ZG041i z?<)kVTHLiA|9M62zD?f3zWQ>}$JoHmhvJc?Y!hGs+yjK;u}ZLmOItU z(@N&+EB(=n$k$hE2=TaOvCTEzifMpil=qfnnaUR^YX1M@0{l5BKjO>}f`Xz^1}}0D z{}&+0=f*q6$z&8lth{X^Y8FN2AY?nyPt!uq5v`CXn33tS+`pSNkEg5q2R_T>xM!7wg|W5+Ux zlXzW^_|sv4jHB3X$ziVX5o5&$b*jdB?uXXd$#~@vu*(3o)g%>F;3btQ7{a954=3;+ zNIW{7hEFNQd7j8j$5TtQtX-xFK?urvcZ0hiHj3x3>zew-m))mKN zpPHzx?W?+*)f)RDyy$p4E6$BJaT2N_U}pVxvAYN-+Td|o6$OIYCMbbl(%Q;OfDyS1 z2GrzHdvu0EBvS}?UG6Q2%=`I4fDVY~&LJdZ6xuA`7RNHN&7i+!CSD=6gJwtHxP~@0 zf^$Vix*+N;8zl@PXevd!blbl~X{mIJ-5uMiQ)(uaMeWpOhL&<6H9WP;wgbzvPY?Y% z`~t8|-N~4@ae`Oau7;x|B@c`xM1^XmH&p$4mAI8EE$ES^^|DPR+xTs_s3(8eDTkaf z360ZFggtzK~KbiDE|3pCmT#+6FG9v%Xegd@tl{*oX&hB+xBG%+@h+V^*%MTsRKHt?8RT^+W zoUqK)x=}bGtghq6Qtv#1dg`GL?-9I9YXW|-cl8I^wEvY4FQmn5 zdo$Ad^W#N>TO%6#NC8`eqZt#f@qRdeLDVyCZCNernzzK?3|9 z(Nk-sJ$8EF>@2KI}~pDFc4f-l#+ z*YO(Hu4;+^!%lUa^e(^tUI1Njit;R&0^08f?mrvX;z+glD`hvAa##Cqg<-y5!P=}sSDbf8N8sowBEZ4EDcAm-?n(S#yzMonP2@Wk z`MZK}mlD9E!u3<8ekd#H3lc&H>nk$5s4I0=fknF)%(&XE3;34Y7 zjVA|zGJ(P-;6VUa+8c#-%7#c`pgWx*UYfpjiI1{Uk-FziaS?;Gbo*wXZZN{o_yC5g z!y;f-Ic$}WZqv5>LKrea)rn7uj(4+bs9KxU@wgSSd_Mhu0%&U~;cL!Sa zo1ZlSy3hnh)T7~4b9fXZa%z-~7~nObVGb%4c2za)?uzK+WC z5`zTwsaU}k1EeY!A}l~?vL0gQ|G_=NjJ+L-c%TUEL_xEz3J(sd4AU$3TK)MWUSAf6 z0Fh5V3JV7`4$jDdjy2Bzq(Z0C&!*fZuQL^i^1+@>aP;NVHnDOkgmorxL_3H9yRHWS zQ@%TCzXQIxoYtbop4ymiS&>WxK6?u89_>#fVNVm#9gKjd@Mew|m6^O}kFIhKxCROi zYJ}bvpY%<*V#TvEzrFg1!q%-XnK{hWsW1LT*RZ>*%aTstM}}_DO)e?|M)RBIC+VE= zD+AjD@gLcr^vgdH#tbpo`C_`aZVA-NEUL*UrZi5UJ_(E*xHj&Z*%w%_JlzQ$tzJXH z`fU4C6&-9%Gq8(7+CoGzE?hAwXMgX;xJ+-k8mg?S9?oPSQ2vEjyo}{BfFO4qOe|pIN)aF4;{<`B-ip7cft|I{Svl zfe1B+NQ5*)6)>m1FIYz(M>9fowcoYNlS8jjo6j1|`zhj~%w!MQ zl5h4aey$C~Xb}!Z>bjvGPbO_BYsHJaRuh8>{OjHi+^#Aam zUl^CUn~vWiQ)Cj$v*Qt|5)0q&OggOX4+RiX?y>4U_+C1A`NnJZP&4+5!+6xC#Y?=- zbOO>BJGrNm=XB6dw0KlBtol7|4gK}ux_r%tM(7nAN3D{90(01Hlbk0>u%r3J&FaUT zg}1J(1q0Sw(u^)b#r&2t1ASN5V~w(_cJ0d&iu3k+6Q;fvCYn7?CEKaKKDFv89eEla zd>^cA=X?i_J8RuqV-D@>uiP5prDV&gT(yd|-Tbf*1}8y&jG;%Zh6?j6=(EN47x!ug z5pIM{Gwp!b{*Rp5aLi`$zw<}iBGV_Eay6#buH>%o4&;0-z9jaP>m`j1n=56@5it(D z{F!$9b#Igx^Wg2>m_~(1>t6PRz?1s?P7Hk=g^xlG+0iGz*@06bqpg}av!{ff;DVP% z>hm9CH*9>YQ{$S(letgus>zgbvMvXRBw`We2&O8-UT$Gd3 zA1srl$A;}(3~s{_}WSmAfE;0H|&Jg^J`4qGUa000d6x>W+zI z3ig$~v1e@I*^~qf-goE)#DMpK>&-_83|fv7^#O7L%e-Gx`fZki+XxEyfQ$43l)kYd zgAV-pFGIv?hxE>Gx=pEmT89^)OswGtKt!sIS!D zKHR>Pmxyn_!hRkUzYgR11t7Fcdv$!v49wcUIS2@hXskK>yw)-=C>dAgu|bmWxsiRO zUc-C7@iY0qK+2j%Y(^CBYWo@u^5Sp*Nb&sdlpRhO8cveuFR0Ds+RIUd&AfyoGU}Ak z&wuiKvIGVQVCnM+fzb*Qt=Sf7w-RBYae-(sk_BE^y@uVrbBlYf5(TYEW&6Ed$n`lL zt9GS7k$QWbOMsD_K`Gv~f|~kA%D-xB<4U~yrTuW@3**%% z#=B-{kBpPHoT<3`$Dw$RVYBh|0jwHKT?dKBqXI=1M!z$P{m#!~A!8+Fvsli1+0o6ZO#sU}Rq42i6mw!)o=OGJWU0Ah;u#oCG&4D=&I9cP~v#-suoZ)53 zuI$BhifmS)|4dMD93aNfi~8U2Ui5E*NQ~B=l2x&fpr{{K2h@ zkHUbaGeG%T!-mroS%T&oOlqBs%B2Bcj)r8R`T3J8M~rjy{3j&*C;n}-HckKgip`fN z5ag0mUx7&GEYsg;-oa$*LRzQXi;dfOl}L2}=7L23?4yI7j!}8L)-%97;jsZj$V{D0 z$XmfKPi1BT_6JLmxf7x3k&}7Bh$kxZ{u2w=C?AXG@Mdb39$ZyU4QJ+0v5U=}Vz7^d z)}(|i+dpJ2iNF2O#Puyrfn{knsxpmzv(D`V#(A(-HP6t zyU6%n6@Z+WKE&9LWC=dVW)vq~{ySsly0O5@Q?FkWbE(h~ATu4Ps+4X0`tL^MZh0u5 z6$Co@zqy=ONL>qSzB5W~!|4U%+xz(o{ou6)x?}~fnDF*$MbU?7+BP+`YW#t zC&F_EHf6p?FDDI`kbTAhJO8fXYBkUjwEuhER0_w{;B?Haw>TQ^6mK^AH(M=oV9rLW zF<2VMZ=mi7Y`Fy~AEicr3+mp46AFBCRmZNM3N0lwoNx^=91)m?*7is;k9{SB+y*R{ zrh0l8zVvvo>HFEB)Bg3XqQF0(MnX~R?T^VgkE(5JgXR1c{&myBUjeYA>A}{2igc|W z*Tjx}oGR0BJ3yfDS9Shs6-B#K2|NLRye*gG(O9B%ozQG5f$$W@R4sYws=RztoMjKimx4KPVLagw}_0avr=IF0feS z8{Mye?T2RH>9ce0%ST>4$u={FO<2c$bouShtfa8L^Df}3B(tcmqxwQ>T&6sPOatsz zUUmVu9KjnPhh7%p4$kz!O4teW#V23lXO5?)pjKb92J0s9@{JQfw}PV}TkA6oQHIU7IW0go)9fjEqnd22fKRCSDSn4@0!Ffs1#PU|Dg{qx`o`=%OF$d6CrBMPYBWywY{{B2}?Z zbTWEjq&IHiqTOd3>oPy2`f~OF<`bu|u?7cQl}lFbHx_cRRlcmG^xRwx!aT|+`b^YV zmYuX$<*_*ALZNbsZ*Jz&31{12zakef!FcKu3~T;cf9dv_KPd*UUWv15qnzyVyd2F4sN5DV56o2{adds&btPZo3S~($ zS}IFBi_%yN;N#G6=5I8R(W*k>7YZz{_#^7}ign6a16!jy!^}n-UhZW*Y#lt=yE>f@VdFHdA3?kWl5HU>GxbkdxV? zog7MQcIBR1C#;%DmWW987svCd_3GIUaIIThu0C#}6ls=6dbnKuQ6uR>m{LA$nY({- zlupYK5{$Tkxr;x{elRdJWaz2p(hyx%zy24!Yg%a9}Ln#o<{o4^BxMQOzL(;CuI4}e?i4I z+w+?gs5WVSion6enK9{Fn<@_8`{q3m+VaQVX z+G9Wa(|MMn7Jg~DbF?LW4xk5@+z$ROr4y{7L3xOO>GZxgphv9RN{rQoB3P1#rhUh7@Px3Qv((eK#pOX(tO4rJgkOR59ay_Waqu@Ph{sUr{B=RL-T<#zB>1F=n>=m^ zJ@-B_TjRzD=qRg3T(%TQT*{nYB=-?9#Jm?n(f8vVm66i4bwc9bYEfW^?+qq$a8zslsTKsaw8Al6OOBZ{)CnIK%wINkpJ!p^S^r< z{F}zbW94f{szrKKV1__MdO+ZZ%tFY@jWXveO>#z_$`GlGmPJ0NWYOW#_}W8)=%|PD z-I7)Yg7HS%4I@2@S~AqbYMMXh|-fNM+ul52t>g; zQ=s#yiss);QLw;jqdZhsw2>Y$Bu2uTW5hhz1p#nBTaL4E9az*|o5kVzlg{~IxRTjT9-p_82 zJ-rIrxlVzjwucqo9cilLPsb=CtzJ5{i_jQNgcF<;WN$P1cdG&t&g4=i1co21JjQUG#`%SW(?_#>Rv)10FXC4(FvvnZQwKgn{ z^NbuISxa=UQ{&C=+8ID0sREJ6)P&ZFN(W`ddPYQB>pH;&>BssB?$(P12f4V>!G8uU z4aL}h3)>_{P8u<++mv4e5&Pgx;)5_kiPb)lxL~+$NFzFg%;`xw~*STT1JKO@O*{n!|MQFm&j46M}o&)5rUlJ55 z63W9#)W5v)IV7BepkQq*E<=V5olp(}ALZIqjll#WMY!8xjp~QWmhPGmu|ndDk5x{q zo!(^q9RMq30dZ2=ssBoL(aw7yr`up8mFo*qVJ(I#_^;J_*MucTn{TOXKHbC!uUh%U zAcWs@2T7>}pH95@S;wGD=D|W17(Xs+UJ|ZNE@CRr7_w~eSCn`l%4U#QCS?q=CTI$U z3EGc4bL!BkKk}U4<%G_O^s6*E?R&?4l;5RVSG9g}2{Z(kEYw^}Dc|*sQQC4ZupW9y zfd|fqD3v|F)TWlI2s#qJSSsG5g?8^dukWP#h0lsI53h%`!xaSsTPW6F!Fp#bAZcRd z)mWwQ38MsdderE8*rfQ9k|Tv-|GL-7)$&7CA*8g0UV3@i^1PYgkb|(UcYDC9?p$~# zf`d5-Pm>8PYUP#9ct8hq1PVP7&;Ss5$_5hPSSw!zQ04fiZWjEq`ZF!u zS89!`lA5@Z`t)URb*1=dcP^J12Wf?{{m{LdLbj{fO>j+vZE@=1Y7$(9(eXuwEhMMzptbQwITj@ zYB;^^`&@T>FqXFy-(f--&TQ(zD%E5>5F|drRuzWT3vfeOrSxe>;(@LJrcQGA?xikKECFEz zXX&zDzU{9Y=Qso7JjIo@b1231z#%(fo(i-MJ}kYnH~l14&ob5yJ7gp5D3W=v${MWw zHECulgaf=j+!yV+Za(hEVN@CZhiU$D4S65lVBqT5oa+(4ODEb^)Z2kDPoj<^UrV0i z7tqmxEwn;D<0x9ReuWyxDc9;P0J9MvoT)nsxTZZ`Y1u~%Q(V!Nkf)=Y!K3OgJMOe! za@&HPk4&?2omqJhMzX`h+4`4tqh)JO=|_q(N0wr(d2G^b8>Ze-pb^D@)23}x_DRR7 z6gK@54Gurv{bRB^F$--R6fEjLUrlDC9$AlVdn#yIHrTndj&1Q=pmI|Sf4#+q?j_1w zKlQ;ZgZM(vcy&=Z-nw=sh1MTb(UxQ5TwZA^wTQMFaNB69#q{fMC#qV$X{`+P-{!$q zvr#66?22Jyr)y!IPg@D0p_czH8)|>OxrEKL5?&m?ZxMWOoq?(dshtxgc^R4aP=!}u zrm9*yDS1uX+aM1W%`|!?5DdX%Ybrzr82MG7YEk}Y-JtLPA?mta1;0ajVP#GiGo@N( z=A^;g@)K&cE~djGh&)f#Tn6ObJgkj1Mb?c|MaH>)!KE0zp5C-i6zn(S#M7sV1WCrL zYqFb7B6SNSmP2Sz=+c^B_{?v4fy*|R+irJTnC}h2*>H6rluv6OsG?;j)#5i}6G0tU zrCq&HiZqR14S21)xJxEZ?8`D-HdI3uvZve%K@uR3?KQU!GJHi?=izbnHd3p(nAkg5 z4AtS+Y^^=wqV@7*=Ka9dw~1HvL48)ii2XcWtn=Z%UnBh%)xau!e}CNHOu>{fBE^Fg z!MGJ~-XXtX*A+df$pN3#bgT7OH$;w2cu$pD;B{c}l{x*T%8T)d#PuPc(GD=x3prJX zc3%FPvD*{dtSNstxO7$euXX9_i`?VB^Xn?nlCKFwYW;4|fXZF=o+R@%s!$vC*O!~{5C_9AD(`Q{ zPqC!Dr7M6y&QH&@fXbnd%8Lf+@8X(DbwgQEM@$^wz}IjT;0I`aY@sw!FhcRohRG%NY4?OjC2!=}0A_RRRT^K=IV%XM$Z>|5^Kt9IO+QhfZ0eS$(6Tdu{Dn^#SF)-(=lL<@cLMj~$MZwsUq!9Dc|Bnb2OO zXEWok9d_q#Nd=WPD!*d!B0BUZKz5{*NCrY!;8d4el#~J;d(oX4gI}*g6J0g9#$_)j#2-i=7?cP`d`&z zya-r?k|a48#ZhnIPVT~9* zuzbs(af#$t<&mp*wG0jcdEX z{Q!&5X)z8c;_LfHKq9W|C3%G;b%_Ei-kYWV!CSyeJMmR<2MCA(8ZGZjG?>HRjZ zz*j{@S^dnd_VtQI6`SRdI1xPO-W5F@eV`7sQwrnj)JOrZA~j~5&=gg4{_*Ra-)S+# zD6@2P#i=ffOiR(Obo_+@Yt>{^4$Dq^A6AE%HjlX!mn((!v9?ojNPAO5TCQI877g_L zoZ#9o5{zZfIU9fw&JK`nsC6H*JEWJ-Gouw&mg2kPM1>}+j`He9AhSA{p9BkSAq0P6 zKLP@C0T?a&*ljT@4NK2PRB5^!;Fd_eZW45q^FO2bsATEdzXAx zDM?GFIp$64PhCOT`8h7RIm(a8K}{8zEoP=`k4Gk+G*$(?QB!fZ)l>LbV+@ad?Ld8E z^^Q=5{iHKDaISt?wP{sFv*FX3Vi|7NNlsm9@(VcTry$9NO^V`M-N^pI!x7*IABUE& z6c**MeQLe!oLPV78mEo3!@HDHvg|y!+thLEB!A}L9I>%$50C-c>bUxgFQ2;Cb$bW^ zIO99|f4t|Ht25BFmL2NV4P79ZQXiXy>4w_5!lg^fo09PpTW3_nmbh~pd zIugmK|GLsyOk1AW_Vk8iR&PtsMsud0se-_x^+Rz2cp zx?~QNrU_py-H5JO3DI+Tp6TK_ElMSA-}!z9MX}YcfqK?-*@6)Vjqb|mFV@XB1e3YE z4;#O`g;Wkekg2AbtUUo$is$ z=+SpYG$?#QToTVUieJagifMR1Os$M673c=Tt*>j|oh4=_32bA!HqZ@o?rGMQz-yh6 z>l&t%8Sx1X@pl+ViTgKQ`V{K02;P%f>LC z)yC4g;PuT6!B`JFbuw}8-n!2y3=-}ne_>A=X+5%RIeT@xMS4pPs^G16=m10mLFw$2 z&vJHMxDFN{iA7$O#&f|4lT7VJ9;t~?tK(GGO;uNQBA0F|%L|*%aQf;s_(Er7@2ygk zBxA);lD8-?<=dh-=%Q9PqU_5eXsxjoqYsSAjZQkA2n_JY>kSu`QYeq$bllwaB*g2x zC#af)9T+3Y47F@=@w)7rgjWKn-?wZ|O~Q%BX1fsN%K?>g1H(HjU)*XZ2T8fZw$v68 zPLA@$%b8 zHs`>Pnz7R_gE&|?7;d+eN7A?BmN89Nu81!t`+ty9m;#6QzdVZuVPa#~xKYl-(%Cb* z+1N<7h3^<&E4Nbi)Hb`MXLNhMQmKel6O)I%50kLpTXSjH%$=)1C8)*LJA0+fO+HZ^ zT#C<1z$=3Pa9e&5z^i>$M!F`MKW4#+*!d^#T}X<4EhP2Z^uh<)E#c$wy^%4-E zd->H#{{*+2i{_8m$|W2MKKgBIgh)V035xj-Z|{nx^Gm1oD|ORh`+}jkuW~E2oc!$p zMc-%kjPL1atBdJFYf_bJ34Vi0SA*_SJ*NZ_rWV(d8h!uf2ylcTOz;kri6l(#Zcqoe z(M(G_0(c=b+(@g6w?#5Q?==964FfG#0yujetW=@7lRBLUW1+P&MA&};=PX~byg27q z%BKpP8L@2Y*KM8=PSz{7rgy4uk_0S$uE84OuL`YtKa+3OVwmu6gunFOJ$2ri`MH@9 z0)BNfYRKFw6>ZLv=10bO`260@M?C=v*c_eIBbifK?Ul7BAwf1uu&)X0?){{Cv3(}` zcih`ejW|6??#2Y!_qQI&S(`kz0Xg?4E zf59Zuq9u=Yev@qvfUu1@BTfxXk{eoLm_(jqy+ZO$`!{J9cFs2^ot6SJwJeXn-k|i| zH1}V_1Pb{zl)!d$~W*d`KXKq`nhHC2VN=RjIX5S@XB^!cNEfmv8*Qwal;wbo{sgH(&Jr?``=S?7$A& z{|+V~JNsx9hZn2~?zYn05x+g{IU>4o=4|idC=lfVmV#na9gFvn3W)f$~2Oj_P{(Stf=x}kL#`83;h zuW9wzNF?~VRqM7$zDxJT-aOaS)aHzhuKAyFnAq>&ezh77aw1~3%0tcTR!$uW3~0E( z@vDcm!;jA9X)%K}CF!Vff~ENK+$CcgTtfQY%1m5SE~=TYbn5@swY;>bvm9pn#wZj|UVwv&edPV^? zxQ=8zJ4x=3KF}^7sKl{!9h?kHZ&}_SzhW0uE7wce871!kMDc-hl2g9Z^;^}~<@Ho_ zNu$6+q|g5!g<(iKyIP>%t$=fb(>BU8bU4T5q3BRyE4FZKyG8(hSL*ns9ll3~<8sG4 zty*+%i)@~KPk$hpISonq|Irv67}XCn^gP@WT=IP1X*6oK zVE3PXw0mgEdCI(Sdl70i{Z~W2KSAx{%{HXCF@BWgwXi1q=jqQlX3s?9vtZ2|UnzOd zkpl56E{Y|d8l}VbWy~kC0DrLIyp>m&b5~GB<{ikwoQ$tw1Ghg#9Vh0ymn6@lt>@L4 zc;eChE$`}DRAwN>)XFLNN8jb$5G#WbGJoCCU!JdQ(v4PR_8fN`@5u(rWjDGpp;`c;O;g?7TXlVEBVm zrTqOQdGzPTw0RA5OrBJhgNlnko(a2`e7FB9m&aS4)aIl2G`}=rjI&Vv#hDDxHQD0) zvl*&1rnoTyA_?7#9W zb@KxZ!PhR;%s}o`2EenGv+6h0aqB4oc75bPGa7XqNdWWs;OV>RwrzhC4a*7X*9d*VOw^M{bH#U_=g`Q^^nek2rw#f3vSr9ju3%%)hHI z$gF}`jCleG!B!_8ZdN9*5de_`z^$Ipb`X0ujObrqDV?62pzus?5f$lg`5Mrh_BADL z_5bz=ZPaJb5)?y!zl#{~LGFzU2JwHJ?3WC?D}n#0Z6FX622#m)L_C0U1`2rjKf0TW zx7W?+CtLCCOmDsa2o)zN|D%n32&`HE+f*#8EZl{V{zmvEvhY~3tI-JpNE8)lheBzT ziP!Q5aGhcDBN=o~P`Iv+O{7 z#RN}*A+83GW5M5}tASJ|>692BF#xyE`v>-InQjf!*Z#%wW)}L$BC(1!3V2R->OD~Rx5{- zClF1z@gpwMGpRxt>>dAN;fGBxH5y_>ij-uCY+a$US!Q?4{I-hZudq*w?y$Sn2MITM z_@x!^3`1q{x8_i=hd`@M@F?nuy>P0cz>g-O*)kb4=u5z1$V5Iof1Yv#Lll=V))+R( z&!*_Y_uqL2ak#0`3Dkg>t)+wdG$v~FBXOiO2K0nZXBy@HG~vzjX#vc|$1ADunzDqz zio>$~Mt7DXwm5I;p>h2DmTdyaW?MIzEuV7&e27W>u-vK8^u)Q0iE4F;lUCd2ph{E! z??V$*00#i4Ja+uhoad`4#bWlL=bB zxff&8XKQq8aN5#7*JyOioNE~UP_X&3yr}pBac-tcn!9bnVEBDMwA4;Nw18Yv!6=k) z@3GFU8L*`tb2Rw^xAi=wz<7=3P^!?LxjHTEv4Y>q+cR>Fk}x=w&9MMYe|a+g|8Vuy zQBi$S+d~NoQWAo6=OCf9fPi#23?LvNQp3>QEg%h&(%m(5O1E@(gLK1p<@dg8z3W?x zKkpsxy=R|&_I~#B>@5OSzenaPwfcVL_83J!Se2#=Eq8icJE7yNdKA=X0@xU%*Y-wT z4PVSp$+TzwR^;+Htog`v-5$ji|M~zBBTn~zCtlA8p5GP7RsAvxM`5{!4xOp~dlaZGY+r%=UiJhj-Qex}rrf?V)Kq>L!0R z#kts-UT|ha%(A$<>ydEir|_%XRPlv+N1R7%vqdQd&B?;;xkuIdbSuQLd?Kq7_sk7e zmy8u&zPiWKJ^{#sf924x%7VhYLZzu+_eUe+g?c$tKbvmjPIbBVAjB%}IWxa~sg^>k zvf*8vOYrKouVa6{jjH3`9`iJfRzy7f`O8&ZO?EoKUGWd|i?TK2QMHHv;A-D0^;K3_%uryvDAbGibk zHAWO)VF8ue9{Js+)9JDp1$<#cseEEV5~d2IvT4cISgV7pxGiLwCm4e|P|C2P54v!V znGCg(XQwC5=-{_qtjyHrL+OA4jXk=pu_ujmIRm%<`8upv|IMSA<7n;viQLq%`$nH% z*6jhP%ExWEcf!EYT^Vc(9>Lh@MbIBN04E}ooXw?O$%LF($i7Z#^V^0zZ-Yaf$Hw*8g+;avoL z5-Xq2*P~|LbLSNOgS_bkhHWvqw*9mF%Zw$a{>SO$)9p3e1@}&4`65!${x|^^KQ3nA zqTFlr5)N^uUd2dLmisTgzGup7g(UzzJU@etnPwvnk70Tl2How%c9$*B+<-6|ydud4>7)^iQ0sGt_=FWy>(&jI!s5A50X{(05EU zzb-2f;mW_Ts6Rq&$77K`>)(T zxmU~lBjo^-BuF7NojFB4zYz&hvrM_CDXDcW7Z_~c|4y_mFgp(ko8buT=V&teCWUkK zgL;rcT#w*a^I3Jj->YE%(%)*Oqcw7_UG+*6zS}>q311u+I!tO+xpXm`G+Pe3?w~pf z$gbt4N^x$@$`RfdkIfYW)4)?BS|_Ts<~SaMDwC6-bKi`{30d2LLuv_qNcH z(+F*u@r9IWL7FRBG2|H6a;{1uNNj(%9(H)W>aKnd=M9FW=|Fkq5`Nm833SVs{kAl5 zed6Ag471kx9KzQSDg}p&=OuNL97lOoB*u$)qq`Kv9jrGHLsh@@W#HC^PD=s1z~})dukmEG}V~J zZ__)-9P@d!SUp(WOco1qo&M!ugbG%k7`vEE$g~G{^$V$cHejr2J@)r^%>GcCQy`<*n6t)nUi|7DovK}(T7%ZD_Vf3j@9Dz> zY1AkBT;{m<&Ryd*mbYU*3g`%c4f5#ELLGG77qaa-2tUXJo)6#5v3kF9!`KEW0&OZV zPol+Z=$I!xU9+)zAHW6?e>_oG>NnH(+5XS|K*2N*Rwb~yy0@x0b-aUAAi=VAUiQ1U zw~w4$CyRyt%blf<*T2&&5phFxf!BszW%!XAvdCImd+5X%2|oN(x61YIP{_=${4^#k znh>SAASVDBrqpFNtTEIjq3~%(nR}PSlXJp~>lWrrP>$ zF^)>;f=1%S%y^!msf|vZevRdoemgA0{Tl z-u0_?t?!N>;Tbh8guOE#;>~HbU&?sKE->167>9Jmb_rqYWO6VsN84nH{=O3OhIr#` zRh8Co7&=EgDY{{Uel5BXlO}dF;#5;889>%^c$Hn*-Gik=mf_j7W!;J0Zu?DQ)RsAk z^}Z}^h&zD3q9?{&w&cUTOJbU5O_sNw`J(Z|<2dc3%u>D&I*S-KiGtuwtU;+#2owQSX324Gp8k`v3{*^ge@$Z;`wA!j}Mo6d2bb?4b>|DHvzo%S&-yf@q8 zsKD~$`f3%6#q&!wCQeACTQWpl>2L%gFj^)uJ_X=XQ89dNE;<@Pa4cf2;DHy}S6p=- zHzY{JbHkCr9G%nzr9(;Y!ar$XRRlxEdb_SG5H$$YoIRkf;F2^NWiA%a_ta3v*;Cls zdp=L~mtiGj-$Ed`L_&Kb-j22fNi6au@o#Epk-@#dv94TO06yFAdui8$Bh=4^8BdZ? zXVFXj-dm=zkL8X9x8Xx7EG%aca%F zyUT{l@kzV+ZOKp9V5i3kg@-A;x}q}9&@M1pfzt?%jtr&}*ixzc2Z9Os7F1j}4+-bB_E7rRvb?s$??p z8Bg1MaWS-S8zch&F!b>+3Yq(vG__9o)|7fT=G-8kCu@3P#g){2y4o|As{BoNChA{m z@lgxNRVOq$?<$7y7|KIbXAXMme`7Lt(tssixT}{3r)UiX{GMuhzZ78a&@P)ugkzo* zXe3jz#n)tFTE$UM$Ju$lK_}Q9u2NSXqNn~#3Y8#VmN0?JI_)7>+l0ZcG#>nxBUvk| zvLKLXZ#bQ{Sl|R9`H}j4 z`Q-9`cgg)UT6{l*O}v?)dpQ8@DXGMkq4==%(SlSraxw1(Y6_||B?=f!t&;PzjE`D$jBds#T+yh*k&R6Vwfbh4Hz2(lQTgIkm zx2GaRT2CHanxL!4$-G#WK4fPe$<7k7XM_{x+po{=7-Fh(5Y9N^VxPjXWaSSv>0eR^ zfoXZmc4r%hK*&TH7S4O>3?9HNMEw0))|6E7_O8hyYf^QM9LAMpn3Z zc-P&SMtgeS#I1bapTCLV_h9lFI92>KG+aq{viHh%&kyY)9)Gy5?=$7T(BT!kuCk|h z0)FIaSbjckslrfG!b91e)Xiy#sim`%x;UmJ+sZ}7>))js+z07}n;rwx&HLA0{%<#1 z5vsq^tt4o#2X()z`u1a#t-A`MU9j?zkUS1k7l+u8iX7*NP!Tb$_G zm35=uD-%yi#BUnQ11hY*QK3^v{C_d;ue=X^o{^Olp+B? zACuYq^)^nAE|qwh`y>(O?d4lih(O`$PyEvQ6IawAjqX3noAwyw7(cbx(J=WGs6d|Y zF;yJ$GF)yskGrzAH-##x;@>sDUt3<)!q?z#%)tIVFS2H7d=cG&ct6G8MaO%m_>M)H zqu!(p%G(P%6EW8AePQ5I!qjwufp3_AA#A-g^nE0YSpKzNyd*6V2PEY4E~Ss?AjR>; z9Zb^r1ABRL+44DHSEHWuT2WNLuT&uY%1vQe1i3q|YzzxJ~4TOBbnf+n`rU%Mq-#k8LefI7r z){yD$1!y79c)JEJ_6IOjV&qvJUHQhUPfde|S)jaYZumwf;-x$q?%!8}^o;xKQ?9eW z(uu#t7r0&R-kMAlCA&^}+;W15lzGt_l<&NHh*0BVwNWX-4qxg3oo5|mf z4au}G8ZA@sG&CVU1s$V|8*WAjty@%)BXR{y)T=OMVm3T?E@o1_cWKA2xtyHzH(VwL zLTF6H2ZD$JHG)j0`Mx1isAlcF9-AK%K?QLf_iSwk%lOW^^xR}LlzZo;h8vun)8gQ+ z{u{BbC1Jf2!|KwaM>TfzG|^<)otegi;Xu*0ouO1#P<2C>pcF!PBgZL!@@H7iZ<$^5 zLCOeq&E*>)?d&Wp#HkELdH0YONC)JeYX#p3R z#Mg^B-rFfWx&|y>?$;N?i60YG@?5@6pwHOpKMDW{1|>xQ&I1VaMY!)fAe<4LIg>6% z?>{-Xyi`HcWwFwIZ|dzuOZ~rGfB+{0lddm5Ph-| zEKS6(wRX|D8}|9Lv|yhPwJk^MJWP&!XPQt+1)BkUdcmwHX03V&FpEX6Tq;OQzhR5X zR+1Y1GwhAl@;|aa>k+eDgRG6Y$^FbK?cC52ptA`v=Hq0xGGC+Cu3^^EYoY<<9|&9Vn=)wkqwhJw4C}`4yNP zfWlO$vezvB^8Hkd{nKW7*D^E^k|8KJXSSEK@Nv0*<3b?_bhaE)DS)JXXcSsGV9El3Qcd0s>x<2BetLeAw(H*xGh5AmO z@@WMCkCk}2vf+s%vZFOkY&4L-;JnT4Nl?iEn*n=U7{B_5386tA?>ryngFXY<(B6u% z^7PGvqlZuW>GS_p2!<7n;Q#JLr+~(Kk337kx?IFc)f)B85fzG`LXt_%25=p0vrm&> z{JsA%w9?|N)BP_8dSmw3D>DjYnV=?J6E6qtiVob_xkdq+v93`Bt7k7QG?G&B-f1*# zXZLz5DFYu}vy|%qpq!KvA`)%@yq)gV)#XzN0lE$@rto9;#@_ZtgOKG}=xpzK_l8_z z<2zqJ5UoB7vhxHZ+X>eXy%N1~2yu2G{`#N6A)UF)q;6h7T1nz#T`afeZLn zHVqAALUcHu5%SlmW@s63GMk(hn5qj*DA!yL0J`Lkkk6636eX8+V1C5&yHL128VdJsPEn5b-s}L$vGB6=+x(R#I_;9UL+1J++=VyZG3p=H!uag# z$MdX^s%j(>6($1i4!!=slV#3tv=(xQST(XoEnWLA^^c-_`ltBG&MvB5wEkuWJIuve zO7h2TSIcbG?N9$gKi`Mdb4;w%=&nmNch~Xjgvjr}0=|ZlX>Ixb|B~IEAw{0|C-0$n z#arlK{TeNT8*U-Bni=q53D*`C)$$Xq&0JEli_6iROaHLoYVu5+>i zW9{%_=q_yjS~+A<;muBay7Sd}V8H=AE|OJ-J8cM`RbT1TB?(^R!Y&@d!O853cG7t2 zBf=}qW(~wkSZULmt~emoO=(S4FgA|?)0JwWHaH0Jes-rn=gVB#Z!~0QGsi_Jhtnkeuy76iZi0#qvBtM zMfN@x%e|{T&ZEY52J*mi$ClKOod!0N^-b$gG0MX_2M>od+uQ6qWBZbs6CLd@)*7b7 zhB%K7wIqLSK4;?_n@lAdUu;|Gq{%af%SId}evM$~r;hIx#g0HhX54C)(?Ogr)G5hG zsVACS!>4FYDqkwvo3q?&xI&J%<{sBX0Xvu*pXLq2SklkSgDm#{R7_>|#pf&d)ONDBzSzhZFv}>)HEKKxs3aw(NCtM zTjL%F+oHFZj-+!6o)Y<`z1_%mEN}Z%HiH}poc|wHai(oX09T4+TDnoU&fue({jRQ! z5BTeEI1SLGO(SkN%35UIrw1P-20nT(yj}q`pLYrdW5Z$0j90Gen&{H3u*hPd&Q)Z* zv(6mR6Dy}eG>@>Ea^TYwD9nty?? z&F8rzC_L}1=VXvf6p<+eu3qM2&|t(Vf|v%fZNV9(OZJ@ZCJ!V)XYKGV`|D)0)zjJ7 zy|M=3p??$^XYU{epxE+do~%(B(WbBnuS(@rT`4Zzd=C&N8$u93cg`I_E)gu@wE0ObCQTV&|JR2ww%`vasb!F#9U^*WhfaJ%Q{4h1`Z>J*6U zi472kbq<6)R&Q^eC0>&g+B6Oo7nj?=K-b$}24+>C{Etr-9?~S`hf8>RO@oBFuG>gG z@eVeL@YXf9@b(U|%2 zTv<~VyG!>12LjlH!q;CfuQ99n^(gEp$o^H&u+5%oOV~u3%fxnlU4M46RJuZEmS%%U z0jdtjtFc!<1H3W(^(wgJE5)*L55qzE%crs!P1y@bRBB3LCq0@j-{&5~@|_>Ml1=sB zv%sXc!BKN_LRpuKOY+@90@%5O$iFDEuo}uepnk22dMx)ZMG(EPu@`J9o@x}oBxs>h ztJHP|R!t0Th*MrFIV!o)E;HH-#p58p>H5_0<`(`PT|B|R=SbzC)#NuAw9hD{mL>iv zrhk2U0ZG9}jQ8^|c~~$nrxuy{j0y}8iaI-duNU+gxQdb(85H4+OL!ccS;ZxZ$L(b;tx3qJF^7`%XggjAfxbQ$55;aJPh8#eFK2GgG?bH&a zlU-LnA)qLZC{`$wyVgC)%k8}Xbqsal!Nm7RgW#g+-gNG5cRTX#ETb_{<43Tg9G5Eo zbw>bQ;Y?Jr0AENLr|kfj;k)6}wXx5z(kZAutBWrqZn1&dQByg+$ezl+em;gT{{5H~ zGItwj+xG~lTzWY@ai)d482$gfu$t6z0B9qV1NL&&2H|DjCc*c%V?IJJ88f z_YkiTWq{_3d#^>9iDBg=64ZwD4zRZqh~CVe*h3UnCl#n27-SE8c>GKf#CYV7grH*- z-@`tPP7!P(r~`}jtkvdbU9)U}Yo&(U?$ahD0ruq84+r~-PsN1j|@{IoYi8qa^J z3&^V{s#et(l{}q>2$A?s4&+t$MB78ITR`WuByT2~uE&zUd)KRrhp^lT{8v!>i$gyV z$UiiZful~$XBD=7PvEk3wb{yX*<6eJQDfVC1SLdf0|I&8JlTc-xDN_zX-_s_JTeVP zKotR7O>^0$;oP}+vNl)9YXk)b@)1De4C=;z(?|DW)dQGA$&%sz;c0OwV%DjkQduMC zAN)$NU*){Xbr9J16=-Ew(W2Pw1R6z(ptTaw-Tarr^PS+-(O}nS2v1v4QaaGS5RgRr zL7gpNDyj^!$%(lnxH|lwb;x57TaFUm4neHrWhOJg-!6+drS7~ZaP`LSwrE6KOuJ4K z%)IG9n>~28j z3iJHeO9&4SF#b-7?U21NBfJ{)2w%7_YKpY4AU5t>E&>p!5A&Znb+#6}lKeA?wxUo2 zdZv$rs}4Kfza0F%&69<;$=_`Qw*BM3bySjOgi2A^`I8Ey&zJ?4J(Ctg=zax}0(Hhs z>zP3prD^EtpM?La;nYVh^5iwOaoHY>cH;4N14omqHST6>)auyt2HF$Uus2{}C{P zFq|krfKv61hHTLE^{~Udzr+u@@O?73#$|dm(CYJlHW~C1TiEN_FVE#}8w@+I&_cUx z1}{Z4FO(i58x%(hywJ5b0ANMovy6)zC5s#G>DG+^+CbhS!6uM)X8EMn7_@u&$}lhK zWMAgVNeGVx`7tA5rL5#c-J)V)0&WtV;WGHCVeLQrr-0FHY(C?*SwTkBunF!^>{2Fw z#Y3q2?2I22Okq-h{q#WiXjLz`f@Qyx3ViWL-^T(WJ~tb=h8pn3Q*7#px8b}<7Q2_m zdaBk*GDQOIz)Dn8rH_yVLcHf&wK_1HMJSYn1>{%&x8l=U3_Jl|^huhU4OuD4#@_80 z!62hN!;Lm)T94KVOyQ`1MjOOX$B2^7fOjQB?^jayik*i*%o06dK zCpA?Tea|#V%};n9A&7WTK$)VbugY1#PF$|O7pLy!<(Umo^gO?S;pJ7 zi`x2=-K>0?<9HZOL?JBQTDY@qLuj=1A8Gjcvlc0zRcsRpjSBL~p`t_P#Wb^NN)pw1 zazN|QRR-Mu3bRzUelkxqYNrVh5a9gn5sK;cv zg{|4D0$`Y79Gk9;#FC(i4qJ+rZ-I+*+^^^yT-AsD@Lzy<7S#ScfEf`)g=uAK&wJUf z#C4gYWwJ}|exw8}A!R|!p#a}y`>5eek~K-jhKxq=#()>4`*z>nP^Qv5->~yQ;IE_M zSGv$}n-|>_>xvrBsKN35ufL*w z02D7-xx_W0Zibrce^qw;)fze<)sr`L400!Oty4|NOoXl%(>kxSJr41HIvIR=y>>cu z6j$((NEN5m)4hNB7%hmkSfYOk6Smv|^mgux)5Yq2iHCZhPNIHyb%&+oOy94Ek z-Jwlm^gg2aI1%VHQBFJ~P=|2Bf7_3OvP`k-V|?#r(8Jmm_xM-QR$R#25R-va;m56l zqtGgSh*Ne#3QI%k*WdfcXA{GZK{fA=+I~eNzg;t2|9q)#e*n^{%+3tGK8QN6vFA8I z|CDZzZ@U?h+glk>KM93H^v?fyf4rN`O7I^ky#sh%mZC2_KZ-5g&nzWivT*pl#UyT7 zE_jr9#YQ4>N~mWd#5Rid)5H0t`+>E`x8DnflttZ)x_+*Ew@Xf)8>Mx!S?pw@c|C1{={C5VgZ-}J?n7=Mw4KLXRoM8-`O6dhicw!o}d-N^y7 zp`?-9)2K+=1%)N?De?f=5v^}8KRJR{)~cq~{yvPajAja)K;y?Ge_FLNPt`GF-#cIa z5fn}JV>};U^+PB`z4>o!KQJoRZ4->);5H|M8Q(;-1ithdJUfNkc{M+#FEk2ZgE*KXPOR%ba2+aQFIIM%~Xp_%Y zk}BBjk{&I065x;!KI-#c3e4Rgh`O$o^@auwUB$oV)=)M5QguW^5EEYAXpX7iR=J_8 z;s!hXM}b{0-%^~EkV%#)?Q zFOtDZadg;rWM1t-yILiU2Lb;g%I9rN%B0ShuiejWFGtlo!m8cJ$!@y(N|W}k+x`}& zwG5N2c9hpQ-<~Gf^;E3sj&PDy*;Cq2V00w_`Pte*1UfF9R zQ$R#taK5-<3ee`M@YAfDFRllEh=%XiG&z&s+ih6Zoa;X(rI`%NG+>Q8dc0rCMQwzJ z`iN|2jTW=bb{gnlN1*$?MZYdc;$me=f2LBzqdw^0apF0841Mnd`Lt%txodn zNy3f@1r!gJ^wI!)c%i#=8dK7|haia=>-4#&NuCi5$k%@{g-NgTRo16DU4~51vai_y z?(fs}jLz3BMe(iupv;1U`5tTHy_Dx73>;2@KXP=dPWzKKrIOu8$FK#RP=@y_1#uD5@wvGuD@%eO?|KDt$+< zzL@_IdeT-rr;zO2oheK@cmy2xo^SGJ3UVkCs&u!oX!?n*LCPfCn(|2qH!Z2Q9@T3U z4Cku&BM(Wt5LF%SnKg&wfgtr7-bsF>!GFi)umc~FrhNhY%aQy!R6d1kqy5oBX&H{} z;%Y!a7Eg!9M@|RLGHF}TynBj0pSLn8+l*XOAI%yqXo|lLceedg?$N54+vA@ANv~U` ztE`js?o~*SBDutdXI&ZF`}4x{JhI@Og(Yjnk@3)UK@Kj)Ym2N>AN}T zxZM!@g>aQ@iHn+=hzG|<%Y>*$?*=eV*?ztO9O3NPZ128Y=}9qF++de+G7`Ps+jhvh zoel3)%hf*S@PP`c+B+4_8{0PdxGMR$ zE?E>u-_4}(z|+)Ypy;*ztmxw#LaI1?d7xfSV}dcjQ`DHOy{B=2`;nmZasFUyRORKI z|6ZZYWw@%KeL8lX=KSjUq06j$|K;~w<9(-GnZ0b&+S|=b0IR)MY;9ZLP!wYW7F>>{ zm9Y42AD=3F?Fo+EqC7|77Of&)8!xNEs(sPFP~9tG4X-@B(bN&b<2y#~KFmvlc3ihA z!Q}`3LCz<#)oYrN;kV{2SbnEg|K(7V@~6~_>`DAaX$Yk|B&{j+qV*(&lR4y9P`=ms zhwBMZ{0WIsypF`*tFcpW0p;cf1@96P2GCT}t3vs`NZFmK*^@l;lX6!B9k5GQldPx3 zi_(ckgjJunjG&x|YOM2F6rF~`&(A_g+q1hw35qKjn#;b$W4F=0F&t@5fnBr}=~L-= zIBLL4PW$K{6Y*21)SI_xF>{3AR&`f*s=hAU)$%`~US6j+!Y>M0lrZ@sun)fdO$m8p z!#Ab^2no&v_qJI^1+}uPa0|X+lyDYHX5Z|ZSw?WA6}-Go$)5OMSd~vDX7B%M2nsUn zYU!`gMywh>sZ7kR>E+l$9QH^2T^x9I6L+C=C0-85Y@<}M87lS3l(SK`>cyz0gYJ`U zk@BY)^CDW!mAWDAeCxL(`ce7vQJWj^uP~^CZZ@49=!H>eL zse~J%=Z=yrV;=o#m*ZgMQuPv%Cup*BIu?SPxf2l?GF#!9gz5)b5^j!r5Z-?`oE2t*_m=#|n;8;aF~cTqh_;q@^6QNXpw55e*mV%IK{6vD|We z?!Ouy6~1PVF%K+eI2bqI4K?i&B%^7TmMF}Cr!uNGM>m_o=;htSEW0CI)|EHL4@_O_ z!&CTFa^+J7Ic7I*gCn-5ZT8N!?X9!M1FDAk%qx@k&TB?Zdu#u``UgV%(EN*T4>7Rm zXI^f=cQ9h7CK1I+^j2%??BBbvi=y3blwPJ%dO*m$^Vt0;y}GMdn?P#J^4X^4&iQ(? zaoi87u8u)fFACbVCQYE^fY5wRm6u+;K8o4)sJH@JpPsqlhNtNX96~b;60Q@RzSU zndste*$rXW6F~_OJver>jESgh$vlIIESTv|i*6|ak`*HmMI0R(LI>LETBi~>m%)$j zp8=;41aQ&C-|UA1cdf&u4QeO5w<0v2`3A^w!PnaMh{Ggzj}^60F@du7k?OhUVo2h#99bHoSXX`i-XyPBgP+ zz91PpeEEs&n5@yI>57Vo%b{wmd!z9G6tMUq!Neel&&)eoz zymo^8B|%_=reW(pfm(l&xdYWl-iT+)V)0`)Fv$YLnvYu}lVxEIhs#VT9LsLMo-O^z zdWs7^25)@)t{)~U2DkoUxWCCXYZI1qO)(aWeJAa)7&7G%7%D^VwuS%#GkJt}Br?kW z^Yp5Ki~ux3z4=i?$x3!*Mp>y`&$~7DRhy2l5kJ?m1pN=EmTYl6B+#sA!xxw7dT@5oU{YA+IDSJ(ZQG?}Qsq z8M;yLwYpMk7bCS@@YjaSIJju_0NmePc&1M9=n5j#uuA6+c}|0c{r>MuHgw~Lse<_j zKOhXvqo_*|N11=YFJ%}}B{48zOj~O!C%&Mllxea0yk z6YiK^*FZ=s!V`qaE_!N`$-pfx)f@)S98nv4qlqE^CuiSge3cREt*o4J@Bb@=Vs-fi zYLpm@IM^*1Aqe;C_a^c@gd*RM;;p-3zT{H3#wO*pCb7uKqygR-waI&)UJ|>I8DqkubnN$c`f}jQE^1AXWlxXf$UvH;G5dPCz zOVEijZ)o~lN}on|TI%Kk6&J~yIRIP|vV{LRj|#-z>Ot1dt%ZA(>h(`;n(=~6Q&cuP zfYnDhit0*ux`3ybpicOTVNFpSn;1xv5@^1dh_~!}RfffE&t3en<`Dnc98Gj~6 zd<;T_QRl@a{MYqVGTpwf%A?_>A@jh;>HxV_XFT3vi#NGJ)3d&$*&l#ZbHaY(ZfJ!d zM~sGbL;wQmeddnu0u@5FSpLj_jG=)H9Agyi^fxgc(}oG2`@!4katnuk!m&JkH<~_c zg^ZoV1&tTM)9+jI+jsb4211OP~Cbph8 zIv9-Y2^EV8VYp-o56J=$b*~EFB^*#5ixjD>pDh-s7YWOm7pI>*42sd2GD6#Cd(!( zcx}%WKGk{g23b>)7?%pRLWKe<^Pvn~LEic{f5^+|8F9AFRRqk}MTa1{$md4$*)cim zW+O-xB6r{+Fwh18t-gC+0?IRB*CUM8;mEOUqz1Fg3G%(fKSI@>y3Ijn>JF8sKhHoA z%vB2f(~BceLYXY)3p>h%!Rw?YS&)Y4*KR{9qmouh+Kz*}@r$jw4js`^I`9$l(0H7^ zaY5XKLGLzRDyG@k$uYUWiM-AE>?Q44TxPOSULmWJV4!rczvct-wF;mP))V_>-n0Wi z$s`#z>ewaMq%nj?8Ph6(?rp!9Mza;TP{2Vieo_4Cz%zn=?;PvGM+FKRILCF3!6(j0 zTR~+=^cwB08n|8wNZf>y7#lVO`2C~!tlou!?L);`p)ebQy45P{ew&mIMPQguQr&Qo zU<~mP+o1o=p)tw@u{Vj zjZP`wP`x8DQyke>cVIMTr5eXe)I_1oEiUP7d36s7-##Ytn~2bSMW$VL_j!NHx~g=~ zQ)E&6ju!y>m=#SyPne8AVX>Sb`)qpn+S>zZ#m9Gai*wJ=grLie(g7+yQ*BHud%(7O zjoyLRFUwmZSl7IR5ZOh37Qv0imuC0x820)RJ!EgvrixP%X;z9Ty|W3MGz&J1lUJFo zl>3s?TYPsHwf!pKO)OOn@ZpkTek6-kgxV-Y&dbp44TOND!QX zm$ILdI!ElZPaxTsAA|P*&D#6G9I=LuNJ!>%ij0|s?CS)HM0QsP_2P_Bz{I^GZc-@q zhS<(gJ0uicYg0pBLdjYgcdN|#?Y|0syNkb{Gd>NVabN@)KSS8gM7mJB`^r}Ec5VUf z6S-J7rr>s!)jLWUv`Y;+IKLHz33QS6VdZrJni+Qi#kK$gD>j@-%=MD&tgS2(;NMVp z;rlGjHJoF=+T-ctI>z?1(iL7T)(R^#>LunNh3YjpB(!Tx4Zg`+^RC@qN3xEGSA)b} zqWv62xP5_#iJHj9=ERUsf?Y=yT%6W%y&VscD*CfkiG5}vvSgclWba)B0k=<#KYs<6 zzFltjA!sOHEKOw)D=rJs@*i0&<|ifR*K15@(L2>T26wR$G--nN8qHDt*g!y)%FxzX zd7kp~3eran4zpY=`9_%(`CYY|V$a7+$I~8v)Z}TOary7T{cG<{)G(fHZAYcsHySX| zcttZ?PeWS6`Lrl zgao{P_Hv^?&`|&TeE@TfiYwpt?`$;hEov@Ex$d3^+mc9F7maiW{&>|<&o|-`BVv1j z9o0dBYumDO@o)Fg(oYZVR-8>}rnQ6r8c_?)jJ@U#g>4fY_Yflu|xV}$ETQ< z*j~O&;q@0@{>4Trxk`HjGgOKK4C!pQsqzvzp0bSzhin28f>U=yK7faT^VTNs-0SL= zy!)iJQ`ILJiJlGhitIKDF9?vWx2sPX+j-SYJDZ~SP=Yi3p27Dz@G+8wI&}Notbr;e zu1NV0lJF%R-*D1_@Klj3(=x6a&ZytA+7sqHEMW|7oJBG=N0*dl2}Yb+;A5I< z;F2f3Slav|WU;EGLtYniLVF>hwNHKu-6sTEzGK&Z>?$u`+nFX^Viw*9eCs-ub>#9c z6B+PfZnrs6(1E4U8^Z=VEq8(x<)Mum&jOg#QFwy^44 zg^}R1K!gK+gX$FZu9G4NuKtk6<_^OZn!g=Zs4q5 z&Lq|)o{j5CCv#(*H7gl=&6m^|!S{rTTO<;!j1wnC{W6`)u;18cK{NP+TCX!-Kp_5+ zx07p1e0?!|0N>>LM`NY5q36Ew<>arHTT{Njv7WxI_=cMMv-c_FW05=YbWO~Ffzba= zSB1<5lj;tS2GTDM=FbX^Mq#ch(KP z%^y=_-s%{NEmLOQTEoM_!``q#bQdYWgbYHdL&a6MZG+?R4VXpb{iCpi#$?|HWQy{j zh+TJmt_Q{o|B&(Ofcz?MI`zU47Ar)j0k@u>aNmU#9KLyZ(k!ZcpPIA#X2Fj5`d_l^ zIeu!b!C#)a$GE$+Ca^nAIX!BBHO>6zW@XXqq-n38RsV3CH$xy9GS+6CYIHX)6{t}& zWcOZysX+`ZdE2=kGRgA2_ZiktI8N|G`xGlc#nJc^T+#YwD3i@b9*hPV^+y^%YB4q# zYXB(Tu#A&h^5Yx(R8rmBhz|F9K@gKRf8u$v?}JPb;e7kt%~Ca+#b#IY1K^V zH41p-!HGF3A2Mpg1;p>`71Vxj^Uc>p&VF!Hsk}?Su{*{0S*cJa+jT%ypEZIrr|g_n zfEAMZEuF_1%l#Q;_=^H{-lt$N1!(GKXU}6bIMofMabT&j%xGYU;)^5%pYSpzZcT~t z!nIBHM2;f(>5*9x{QnNU;~tT?mzN+%1PNoRJ^+GWbu116zYAgWSME;jhueK<5GZs; zWS;d07dDhE29<={&j}*`*Hxh+8FHk{FN9nS>RSH$j$853^+-L&uMU!4h0I&0YEwI4 zoN86*a1J|dTIlFCHVc)QVGNA!cl%>Ebe4Bqt@OyWy1~bIXw3j{;qvb5tceLoX;y-I z@xkbhgEw%Iekd?}Z9B$3IC?OG6ejjG=G7CtI;|+QrX~ zqP#!=mu!1Aqhl$N7rZw7tEur;N4HVorYwH6~n6!KZq`ts!>oMsJ5n`EH~)$V%s(20l&m&vpJ1j zg@_j#adRP|?^A)hzsx~c_YgIhAA1r6@51Uo2T*q1je*4&; ze~BUk?3jjOJ}Ik8W|(XV1^v|Xq-dGU-%C?xgV znIBF=^8F$6RX5B!J_?r)4iR^~l<8YJgbl`R!@g!?U}f8I5p7i#brkv@r#eiu?ODi! zclM8N6NFmSzU*!~P_QW%SbF&(zN9ZD5^op`@~dF-l}ybWzX^7DLS`HdD zj^K}x+bbF$wU7v{JZ|^l7jwVBfTcK*n)33&XNA%ug~h3>wE>53_W4#@U-u=>tGr*F*uuQApe5m8EB1#i;l5eoamRky{mejl$BUd$%}(fA zb=Tn}-|kyCXP!zRcvF1o9xbUxAkHOId#O$P`?Zp8)Kq3Ar+pc6-1Q$ydk%Yn{6OoU zlquly;)&QP3-4;y)gX;RwT=3;VwF_0`^n8kp&tFI4u zY634joe~xwmeVUbJEKoUKaG)%{Z(XoUK+|QfLBvpXMk*wbJlIDJX{lu3x5!DwMMk+ zRhztTuD<+my2C5zXBTydj4O-y{4-rsJOn?FuTa%? z*{T3qJFSJ085!+Ijk2%}cUr!M9uCbT@&xDa9z3@Uf^ScG?xCCPrs5id6@4%v$6}+# zj}^{xdx}%jh5S_1m16dD^zp3ab5p{l;_A(m-AD`!-Q6H6-7O$P*U%u{UD7pxboV@04us9Qn0@h; zW|b5wbu?JZeNI%!RiY7-fNIElVj}8tD=s%hy_>96ybKVe*q{A%b?DZ575yg2$E!{7 z7qZOI%VLCa;`1ayXk{xDv*`W6YP03bjk!SVnKi zukPo(=6st`$~GP5`r!HA#u@F)<4@aO%1L@o1nEaN&wpzaj^3t zLUFpJ5rJbYQFyXR`S<~+Dz2;uR;>)%FV#U9w@D8xeCXvnNrbn*>b^8THbT|a#8S8N zIH7s7=@iV(#^c@ITOzHOYT7OfUPg4Olhq99Fx#3g5oCh5hMMl&T<&p7ooF>1}%-Lup@onBdJ%A=g->(~N;_8FC@q;jjD zsOCt6f!JVTI3rY38c{VUFilrvIDf9^IaxS6!5!AB_*8LavCstl8Y-`TL2D?42mFc` z;}Axg88BY|tPkgUW8k|hyLe{e;W<^tJpv+n9f%{^48hj|lZQmGg|Z_6ZsJGZg(j#ioshBxnATc zBL9ADfE@m}!Jzum#Plv~$065m$xmz;e|yOLb!*+1xDfD8^%d#SCTRcG$t2X#&mVhb z7^=R}^oGC7!tqF%PJUi4j(>tjbl8UIXhHn?bHS}k{@1P?pup+%xL@QyS-*ABX#JiN zxJuNMdk}27V?8L>Yc(BEpfx3zv1;dZOB6S;utO1Ihb4Woc~?4E*iSK8z}h-Z+`#6D zchcr2nisy+MkvmIFC5TcNG$4^yozd>-TQ|rZ8k@fn4ZWUL;!zmDsds zUZSZ8@3NLIp$>o+j$BmJNO!DD^`0K%iX*oKetVQpUFrO09dp%Vc8b4H&bFcf(~d=m zSs>1_V#i9*DkwQT-P530@R}uQt!&_6sJ=r+)1i{6--D*$xPAsm8XNx$86Gw< zJoxAZR0i>_n*|Wc2<;!-2wi>+PkeOT*WX>x@J%ReGL{OGnIO=7;aD5_!RvEV=HwQk zPmx}>1j_1Q|l%WkV}$*LLrrp#~7*AN3l)c9VBw;Vq*_t^M? z+ylDK{;s(U>?h9hmD?KZG#_d%;`qa>A?w}H@leBp1m?70Evk=N&pRsKRv=E>!sL^V zCAi?79v|#ClFx$V!^n4Jh+!-MaQfsc;mIO{Yx>)M&7Dux)+2Iwh3tfiaBAxbIUf4e zX=#ZBt+>B!VV%m z7o!W8*01qGNn+se?Se8&G-5kFn+cw7|oY%j1Ss!0&nTq!QXU$vwr2d_<3*{ z4vN0O-A%pe>w*^1S=K#?FMY zIBJr&5nc|SEX6++Wn%}j%!vx~IAU+J_*Hj(gw#!YpTSmEXJe)QRkMG`n}l0l)O%`{ z2CVJjXdwIQag#O*4!A}x{#IF;n~|tD^4`v!{X39(0_U9;GFZgEDiU&m&J$M`GTH>> zvbBp)I2)9$(VqFu*hK;3rW3clMH~&(Q$pD@9%NIX?KwJL>Z~=UnRcCwZ*5KxJQT*>npHTzK{S$dM^0Wl zP&jmqWmt}x8xHN_lRyDZQ(%;2$f+MH(R1aoq)Au0{P3~4xatitSg4yO$Fn~z&Qlg- znHw!@#*`Q)?noa6mwjTQtnZ@+^OmU>#-^+%aGS^sp{fRAl;cSng3Q1o&661qE7krO zNl()R)h1A~7WZNGrha5UIv%uO7=riT-GFg93r5B^@C?-BMh|j}0GZAv0$qHgmRHm4 zKQ3CfUDQd=JGx)q4bm@(gra8FD%)}BKnn80`6vrHX6OsxLBSgI7sYpgn@y$(4yS{( z*Y@UPH>rOIZ4{|uxU?WU;Z!ISbv zi)LotzXASjIdb`bjMW-LGuHC<(Zn8;obzdtE^O{rtGKL$)Kv&)g!G+%wMdt-*HRgG zClJ;?n{(`{VOqdMeU40~*5X))2CFPTpCQ0!q+x53TfPr5*7Kt^EWSc?>HbBcaci)PI0z+$k0tkZdc?PBX&|njAl93Gj5KgyzopQ|+EPy1xtomh-f)UYYBm&3iSU8cA-Uw`vJ{vGU#nsMi}d zxMd`bg8SOwFT?W-I7oY}UHpkQdDm_5k(GYgBi8J)P`Mr^tYlf%I6)R<##qjzAdNUZ zx(cW0mnT+7=#ad;)~3ajP5P-uTF5CTg#^gkY~#l+mNj67#Uqq_!n|B&!^8JGATQ>} zk4Db0ljs|c_LfUDMy8w9daagXvu7lh^f>_O?qcnyF9|FZ=)iDLHpXW}iR<=WR$(UJ zYv(H&1ZfhMY|;faDcvVrwSQ77zx86>bJg$YG2to!0c9R!=~PI>W#(o4dfwUq|B8Y$~A?G6ft z&9(E99XYFKABZ+IUH(tUJYa1J7zop3Br-tuBv+5G{q$LHdat)@tB}2=&So|-usB!> zb{ixL>DWUiQ5gdZv`p7{{{77Qsjy*y+IU+27aUPW^9vrXNfF{< zwNnzcqn7oaMsa5BOc^V}`m%inez;J|X>&*-JTlkc?_PmkBE32w@bKzm=^7@N%<~Uc z;{&tIBiduYg<3dM*UZnd>6%v5b@r1z*M$LX>hco+k#Q;J310=`Q)CpuM@$E+LQ>&Y znDIDE$@k#hfe|8|e*zL9KU;1O|27bi@WY-@dbI@g;Mb%@mTpNlKzh2^kil+zFA`tB zOBjX!MNLUA_W0E$@95>YxxKf1x2gtD48yS^(o%^aA%@@INvz8|k^CkT)k4QX`WOLY z{}~1wymmwlgtmAdbcZr~y1D4v;@vDci4(Me8cO^YvWcrz{2zKJrQmVH?+JwKPlM%SrAx_wf7^Xtj%DwB zYBSryL$<7+cR@bcY1m)9hi0me0n~w*2eF1#te0R@rlWqvaug>*L80oP8&Qw5=VuBU zD|iKMIrTBEOlUi+lRRi}kydn@>oP_byG;zsA*iJi#uIIaQkU*V-(uMdZx}kW=Oyf< z-H9}3j!({NFH${hvWUiHIS^(ed#9_1NxsSDQVTgn$tfky*+&|9)*A@Xf1b(dGgNJo zU2UnQT>k`B7n#M+LCr-RGa1dc`I$n?{PB227>+6QKF>1T))#-yQpNpB2)lfgpi5qf zO)cf5w*@wia#M%}lTFm2I&Q;m3{!T(r%j8nu`H2=VIi>Bb)e z8v#i zYKjKn-bCLIg`F0UANC$QsD(f+q;fLxle+t=5NDW2HHqY}7B0YrV=O(fQBek7D`K)4 z>@kT4#R>6t_&LhyVJ0E4B(*G=CtpO<8#v+RgtNugzZDgo@^F>)4Y|N5fORXcIx>y~22hyzD`;L$|Mq-ZFmh4ZRRhU=1W z_Lgqtm=M1_bYP24ueR2-d1vT=+4IppgOJ)JH5-gV&&qr5<2VFlJbq5yF3l8Ve4zKXbr4g$Q^S7lV!raBz zB8m(qHBYX&9lu0~qF>cp)!cA6udI266aG7j9YpwU&29O4lfNRxtQ2a9XYrX?f#ntP>z&;`b9uES4)a{{*BVMeOENXwpO{dKQK;iJZ6ld&p-XM5 zrXhuU?o-7)HK>_dHU`m4)LEv;GYSnX)#B6d^x`np-K_s6_)tHb1UP#? z#RIv0n=G%`u)#PXz{BshaIyDiaNCEJbR%G?0{L5dY}K0pxGEN=^PXT%+}1%{>7fSs znIyxWSF5p${1|niqIw{PcG`RM;ewI#J_XKSwg+;=aFY-qNyoK9;UBTvQ?4^whtQ3c zr_DPBtBV;mwz`WQC?Z7r65++5&rdt+)g7g&F9bg(QlNtjTF{YXczc9pHmVkdJ=QUB zAp7G8d5+U~=4{MlP8M)$Lw6&}@$oA;BgUrFm^^pA!~|P}#8(Y`>J(VPGUsDiyMonS z60KszRDl3plNoDm+nP20rxVW68LO^>x9a!m+t-8q!O83v-inFIE_>63eOu<;^V_W% zJ(YUW{@7iM$#`ZOmT506=n0d2h6~_pUt4K@HuYCimHA1GFY~w}5Ok^P=xfI6w=K_N z>~M;PeC*2}bu%(|9_w7;>$nv4J)@^#3_`IYS9Do_Dc?-KN?|tOroOpIXNa~sod{U_ zy3CnK1<5FwJm0^C-ZLmzEdzRf9bHGpFl(jXKSa9mh-TScTLL|Yy`6r{rDNuBzDI_@ z{yclQoG)Ud(|mfyahImqa_`tN@9p|r==!5_5xra`(*jn|CuBfKQ?k*he;R2*JToU% zv#l%QKGh@-nvo=iuZIBrz@Zy7854*h&SCxO39h^@bv{E6_l7L*m7mOx2P?42M=Y1r zrCzHpWl`wf7FaI&_QWlEtn3Kn^gAlv`Vc>a#*wi$1S>4!o1Y&~Mf`|^>yVXqg|ay{E5*cLaQbD*M&KyFr3Y`e?m3x%+H z0lhiJnr+(Qioq;)?oc)Mb$F6BoQaRjxy*%ZayJYN2 z>G-K{jOh1hEkhezLmEHTqK+?N7Kbh&uFpAE0AieL?i{EdrM1Yk|1 z1+r$_ot8+D^W|_+!Z<7QI;Hi66}L~D@&lM|4`vzK&>gp%iR=T-f~Es4cn)vqyIB4E zJ>cumS%mjpI^|zAJ>3{2bc2#mG(i0ZCEGj^^kG>4J%7OdGVLKq^QpT*e$#5${E7z~ z+#d`~8@G-TZq471au}W=%(yJcS|ga!ADH-+Kd^Uh*3MXpAJ%WOg6Snc7bTptmEoOS?L95(Q+2L`OD{AjFGZP>;EsRsuUo3>Cngx;O= z5OKSE{vVF$C?$oAmGK-OzZJ-BU-XM_BxPPL_Tjo4mb*1ZWncTctMgX)LwNN!Q=97L z@Q9kMBL|G~Aj%@P123|0JrLjXYMKWnBGqj{R~;;Jh}8S}R_kFQ3cyH1yUV=*b7-G= zeyMehyJeD=LA{kX{Zoo0w|5hT2jM@5#TYI|V$)@{aD$KC|I?;DlJf{!Le!IIGv!la zvQ+FQ6`~Ftv-*YyVobfnaaHk*w`@(SJmgprA%;%{18IO(;L}za2ey>}DOGo!FW+Du^ zuf`V_Q!Bav&dfTG?NZUQmTc2-D;nUm)o7h#oWUQ(n*C5|G5%c3Hl>ongz^yFBai=yk=CPu7$3!q!*NdBv-JHy_f zp?3DZYwfHnjpC|B2Ufk2v7V@>N%0g#FQgiH;Nd(T^=Nh5*= zj6Tq*6S{0RfpZ9Qt>*V4$@{R`@HGRXoVRaFqq$?n+zgoUA^nN_8sz&U8M8`lVwPQt zOmSO5WQEo}rF_?W$wx#6s`+Nif@I@0>%m$)7F zeTP`zT0^Du;DTPWwvuk#CS5;3=RGz6U@40OuU&`evA)kMj)GEcaW|bFXDt({r2XC8 z^oi(p-i}RPd26y16pimHV|KVnMs0WNw!aJ~S0Q-NLTs*9CFl*!GwaqoB%nkB-YyVi z?!fgzLT%wq*dfmLSiY1T^x9xD)%Ht^bxgrxXJ+8o7T5*S33mSxyR<*ta(A^loLc!Y z+xI$a>!Cx7?*XEkN!MB#H9~YJS0Obx!0S|Ux72ynHG&WtOtmc#%BZZDr@*y*$UqGU zYoPbqu@#?V9qDT&5qb$&oz<#u#CZ@Yg6YIr531KWn_7 zVRc{Mu9k47O59e55sNbK{r=;T;^+AHep<+xBg?4aCAI8ACFRZ!mtSAry^K^pBuWOA`2MS`{GfJZMj}DfCp2Ja{3zdeSaiHb<{cFjMKo+@n)xw5T1^onca(^NNcMcGQ{951|AJ>+t)X>-UapM68a6Y<| z-9^k+eic1V`qN{nhl24w!7sU(_Z^~ZCNsBqf?c_sY+oYQFD9e*2DcH*2MjTA87}Ddks~j)0mJ zNKcU%>q8(P9eDTM6pqN@*UuGz;q$S(dBFmwRMeGYZfj0*h)7N}VzdCf&oQ3S?W>Nh zqMH($B!U@QZ!&wSCJ1}HY-xBL=dnXzea9rZ8b}*D%@;R^lOwLm*r9ohB_O1m_wMy@ z{isr#X^aVZus}Q|CenM5`UuMPJoA;RjvM#$g^pKjR%MJiBRh0l=DI~syr*#Sft+Yk z#{D%4Wvkmdg)wp~5P9dQD`uHM_e$YCN>OI2rsCbWehaou=PQ1VD!s13gzCYOV=gmC zQ0uOcN4+(Zv6GBKv|BPBJZ0soWp+|{;L2be-VS&FN#_H-j3w{RsOe|;VXf`0q4nhuc83(}Ue$C_6vX@)2P*kuL9z_kH_849$CyDvmci>Mj5U*QDaPV{K5%`B;KVJjylM1V1@t_ zD*8i!I0l0i!Lms<9#zC}m3>}7WVg5Zhyk;ZMMMZB!5YWXJ_GYX6si5Ucw)wCtyIl7 zV|Qo299(y{UJqn4J3>~#V)pwq8YD^F`!t7NmN}g;2HVRTuY1a>uW@5a)h6-xk!SAY zz`RXN)~(sLf3^*&B>h@#=e5RB>BI@Ni?mk*`Ao>RiX1|J}d6|a~))fBr{i3;XYtL0Df9z^N};+yATTy+M2 zE=A;NS0I;O611=ItJm>zUhLBDH?t}t zsz}-_TYp7%R*V_S=or$j1$bXmzF*ei7008cxL79h%2t_hR5}U0ia+wYN+Z}wMg`Q* z-Im93PgJ`R;6E9xkq%DqOF>pNL9||{X=v~RuyW0g{aHW~9+)+Kva;|szh%~eza%Us zZ_w&-iwU4B*?9Og`Rt%A?Tv4Ba=szf6--p|d)-M%^%84d3Nk8ub5+$`Cf>Uw)g(9b zs&Y_ZY)Hg03rT)<{7DJnrkU;#R3`{4!w7 zJnSHIRZU}a60k8rzWrjX=k$@3FwaxsD>6-_rpLP8THq;h+~)SwW4Q7eR=lQemoJQ} zow8exssqua02NL6>!Dd&CG>4celoW00jTPSAOrT}Ch;nWNL7K5F_svOxIXRlv4RhW z6=MY+>$rGeh>JZQSeO`Y=0Qx<+!Bs?H>BqguMZ(=n(=Wqsd{++ET!p%l^?8>PECsrVD0bQpW_)*9Ug$Zdo?Jg$y!M1h{keC| zP-_ewfA26!z$xsI-0`c8?f}ML*PT@YLVrQM#6+x(8t^xr+e6C^bRvLeY-n&I>V`4W z9rgeSWy*!ULWXGunA-|b$*@81t(=HBkd5v4DnHf|D5r+jupKhlp_Fn4Ds+Va)&5L% zrxffU!n`Eqe0&VNDWV!HQ%ZrJtepKH4?-8O9%^}s!Yth6Ex0%iyy)w+4W4f?IleS3 zbMz*QdFPYHCwl$RM(mr%j@VHVuHDf;EQ#vzSR~oxeqsB#rv6J1V~hS;p3L$>e&6`x zWnaThR2E;`>~O&0X^A#TSwlNnl6NXWAux0?>uzzu3`f@$-L~EpzxRyQ>)uYnqm+~D z_}b!fwj6kIIyOJ|9u#bk{5Te&GJ20ZR6o; zjVmwdldp1Ker@vQkH~CjQgSZZ)p+fN(^FY&QPWx7vzFD|*tM`Ir1ckbce1{ol!W!@ zITK35@+hEny*3q2P}fjUM!u?Rxn!Gjaf@w#LqT;uJ&Vfp0kY+7sM zt5M;&ElIc*ctDnYaTj<$D}AdRBPh=0&qRu#*XC|Wbte^|G%5qGb3WHX<>|SDr8Nm#1|SblzJ!w$?^N` zPC)o02<_89aIjx9s;AmH%z0TM-+*&yY$OBG^IQXlaz1j+Aror?#@@T3<2AT z>JImZy@>>sw)3ZJTjUK57c*c6{Xz-1-By0bwY^L!-CRY78hI|M(Ur2vE6Iv4&5;W_ zpWS-hcyBwhE(x+g!gcN4WpMgCF$t&&u|ep8U*Y5sp&xcD|3;o)x7DonA3Y)iNi64R z-*d}o3%A=Vo{p+#*TX_?h8!^i`|)5Gh@QZeGT$Tl!Hl zi>HK-Pj4k+eGZkPe$VqU%IRd(_vzly&3fD53EO;~OX9iY+!a=J^rfFuaI9|`4e9S| zOZ$13)$fHmJuefOC8TmYjrUC6di>G30@CFRe@9jrbxyuFSD>Z@qLEbie<;G)A%>yZ z$t+gwnP<)r4o-1+eV#s;Gk+{#?WLg8*nLOx1CpgPB23UV$srzkkN1WZPUpVBe zPD;^J^`yhEb#3=@Lq0LgGD$Xu1Is%kM~bjvlq+n}k7Iv;>Mz+xb>9Q;8RRF)$zzpy z!5m%nTQMbSm*jx>S(9Ja|OHy^5Bc^oSV*fljH}po#tP6z_h~YS>cWor@>u)ov@{a zf_Uq*hw-B17iJLy%t}e>;F=YN`3`SR9Ggu44t_`FicFSRx|JNUPHhm);6Q~_>2|nX zufz>@XuUSryZ=ZZU~4!|U<-U)y2j+c4}i!~Xq@BL^SKH8%^c~=E+AFgyhSLDK&+5F zE6_9Kj2(fM)4I-Ho{tQwozEYh{NeL~u1rL;M@bC6ct8deSjDYdTVKUSiB&U5C4BUg zax*LMA0>Lf!XPzBhkvpgF>%IR7?XGF16t9JP`>bF91UUwbqZ^>&|j}K`E8UtP(M6= z&&m(8$l{0n&4_)&-B_BUl}1;#^QO@BU|&zs)%z~v9z%t8I#XBmcUNIe5PPkRn`b=d zsEkkc5M94U5HQms{e5b2SNJ&jo^s2>r;D|H(Uzo?aOrs7DVOeUJQ7Xi|F7{JO zA@fjRi@>4#b`y4lavpKmF*<9<`QR< z7DA!>DT>o%G;C1-9KZS<&%FpZ5CWXc-7hoF;e5eW$u+4qwO`yvt@_C5356u_ggsvQ z=E%?zYEX1<;i#{C3z4WXC8o}fLT;~H+tz0T!Pl0T4{~@(0b)NXB2XcAT%28%bVJ&M zRo6pdNyj(sT>E7hgB&U|J-Hk1@Tfb%u0Ul2LYXI1BsN&*pnKFZg4noEJb6yxii<96 zn9=tjVx4#~{ikdB;oF(q#1#dqZ~a>z$vJJ4(KsV2liOA$P{}Ns^-4+qR5z9dz4P0$ zy^q~kBY|gAD0r}QCq_(K6nwl9rYKpg@599xmnzz3!Pb$gi=Rx?!1unJ9d%;~-BaBl zf6qjT%jq#*WfIMbzE)}H$CIb(K`)F2@L_Y; z@Wcn%%%3qD`JDLQ9rg6DuYc@fE|>o5qnLJu_!zSM2LyfpKjbN-5GX0sw)jbFc({=e z58H>L`G=(v?~Z0pq(_PHMau7)w}v2jB+-eCy3;lg)`0{c4I{&yKng)nWkB=q3hG$k6m&VL*uc|utDe!x@9opz#> zeYd7Wu%$Kz+Y7_8%P!4nUzATDqZks#cS@e!H)-OiXrq^f;DM`=wRh#5WR*i=G!#v- zT#_jzsXCcgiUe1+LpT!2wy^HRgSzfa1&f#okfAs=oxXRfT6!y^YYAx~F!J>4!Blsj zHHc4x!gRxAy*R35vg30Ru%re;TmY4yq?McOGr863(Vz&j6IaQYL)Dm?>OQ_R)1c5? z$Gs$10Y|sezf6H&uMU~Ua+hWO6tmCF)5Hc5CKu{3R;()#p+|58t;K{K)g`!<36{?2 zvpB6qKa+7~xRWAr$;DZji31hX4gItLewRR}({ulEd&_hoYWj~g*aAZ7mPZh=hKFLi zy-|$za7B8i+r#n(5qW}typpbjmI@-3YG@MN>-%n+@d-;=qSk)OB7jpOxe%K+)R!$G zD`>u!9<$y?FfVg#VXsDUbDbzm?izy1=rUUx@_ULcL!qbAw#z;Wt#`V71hXz*Bil#v2{quXcNC(K>NyWf*);PzHGQpT zy;j8Oi%0!kpy8ta6laJ8WA}l_xryv#liX` zx|Xbgu&q=yBwy=4{X9U9`&UD1U>j^tSL)5?!Ymdf<~^>r)3Y&L%IB4ofipBRc+UVe zl-SJ+h1g*`40+uhB-HybVcU$3TuvPW9cV|c@lCA1c>Do!Bt~PrNiYjQID;s1H$3|AM}|WlbtOKYg69(xJAQFk2-+nLgY^ztu7r= zWBcDgLxtMpbH^f*T#qu8;AgbYl+Jt(b2+Sg6AAutEphG}AWWC(e>!KacRZ6&h_lqwou$S(fo8By9S zY=>m742$#VnfGG^;4x{7rb16QFb$uBHmMO&|F>iR8!s3MBl|c%m3^k|poTGN4j4}F zE8)}LYd_P02$6-k`Qt5*OGCWuDhGx5m+81ywYnMu>pWP69D!T`>cB4-OE&L>s$#;bbLXV) zP>||r;av>Ilio06ojaor^!@*`(E#v_?a#L2no34|F1XP+c>>mG5tb!=-Xfu2+$pP0 znkKS#giDNPcd~b^2Dd#DZ}UAJYzNi*p`y_ICkhg{T9B+Ink0XA3?d3vi;&YMSb23v z0e!oY1FM{mjd!D6wouW3Io_^sY?SsEJwD_k_5Va(?9xH#C&94?oE>fJNNVq`%Qs#m zg76JlIzYe<9VXb`b;!EoaH)xPaHbn=Qua%p0nc3MoPAL;)h={Y|B0&UdCmS`ewfvh#0!NMN0Dq{ z=SLMsbqdE4(oFVfb(`!l6#{3B_tulHmfwnPXXV(lmiJDJF7du_Ovv)3+SRI#Bg`tj z)PV%J^J7A~LeSe`$cd~C$ZVADP3IXk3i zK@zq9i(WDsH*X33@7t+87Y_gq6#wIU?FBvS5c`?u@}AlDyMZ(JV41&s(pBn#-jd#| zdkl!Y{1l&u-Apmz^jo?ofpQegRtK{6jCLeRMzvfcxg?p2yLz)k`V~qajgGVCH?ZPU z&?`mZv8g@g!}c@@9rv@)^%f zro(U>taji;-0#EhnRJ5RF7BT{Xr|~dD-#{wp$>B$xj6L&`lYzFA&@Nh@Bg_nXi>m@ zp{bS63p&J@0B~6qVxh4jZTak)fu{UGp2tt;Py5FXMM;F|u#ot)&~je081yGaFJSthzO&BJ0;n9H`%{?ngB^naebBHC71O zphafTe+C@pMTzCD2sqb&mj~RJ8g-DE%d7>Pj2p}DMs_ObIR10lkf+hFttf^pse?we zuKXYGhTO2vtT>Yi84O7N-RE&8U=cx-b^qDU#}Q*+h>o~n^9Orbdt_;=bpnxDr27X& zr_-`D&-XLd)^RKpPtzopWGLj>sWYIG)<(fz?~co(Tr9~&0H*zb!9KA3ic+k7QqiG+ z8Bcx8+7_0LOpS8RX0{;@Wyfjfzr+6@jSm3p>O$#sBvt$#hE^uywlf8P)d?0KakpV; zJ8H@cJf+%pY+WxpmERc~f&w1c`z?}D0+dG_g`%w^AwQEUMNd4v8VKWRQL5T80`oY^71FNKC8eoS9 z6qD{1@OSZXvhE?~b!V@V+W+OC<3gA0^;HdgVWaoP75AU5w`YzVatb-5xCh$@gs1x@ z}Uo*H;ww@Xb#R({{zBrng`G%fmX03KPt#G?ZK zcVRyaE~o9rH?l^L(s38VJC)i3%#%dXVO9fxh6P^Lj~NOPaEx(LPS}9B9>vGAGWvJZ zv933pvMcB)zZuVl$SNFJTvKH1_R*GbEn7#pB$VT5 z@A+d~wZ{564d2`Lj^^82;v+3kl-3bn5Ac16~blUiW?}M3(C;a5!Ri{qh8j+dpKq)($8X;hPF$bXDFN>s& z{?DRlgS=n318h(7 zhw<;1a?9F#tjqZG0~g-;FhOFJ>OAw<9nP;jc7I{Gu!+#t9 ztJe8MhFl`&^YhMspS`E&n(oF$N{HpKdkvw>O=LvCehSiG82dKJP{%CMLs)bZ>wLMG zg*K!ASTQd6=})eOzN4{`jy%U}L?D|6s=N-wxFnYv`6{NKMZac%3d)C9diyX)Oz7R= z`l4^%*P+`%Bw;BM%#$UW>u&@?W8Jns&#@ z$?0FbNN&wIkC!eTXUtW-w6r(dR7~JZC`LM{r5p>1224@FoyV=~-6~aeGdcA|r4C$s z3B;Ui;KO_^(7D`tM69RG6*E+dN3sgS^rluUIU;SDIfaYW9vM$tGelk#%$fpUD>kdiN_uR-2~sa`7~61@(}!2{V}{AC08C+if;!&T^^i)(NhrLa zK+di_@SIKGc`dkDN>t$uVLw+P3W{!)-*nYN?$D8w3uUem?o7v@w{{Jd>Dr1YS54TB+{6A|AHEx@OI)={&D3(929mgcn`LN_(qPkQ z471fZODtyuhW0n>irt@sjCesZ6jLGLx4IDaI%eM$Tog{&M91guKh_EAFw4w4%reQ1 zRNPH;{6XhYKN^?U_!Zm8_w`VZ7%{ZM7!9l1@?=((2+>~!sgafD`iw?btbZH-QH8|r z!PW_V-Q10r4A($Aohvf(K7x0H)m~3A06s7Y@`*8&$eKw{q@vb*MKpaVaPhr}5idWF zmJ?W`l~OZll%vT+u~P{a8Jqgu--Ef=8_;z%cG&V1nm8Evb_P_TswQAJo-t$E!vExS z!^NvPyu=V)YATfEmukYs!&G#xmAdvy#dlHzT>F8bdpD9QR}lR1q?yeZZnC^%JRZB# z)$4-ZyBla7bJF zxL0QF?Em}60Z=?XJG_apPw z*!QM3^bQO`e^1=7vUsrsjMZH0>Q!1E*MQuGYAjh)0Tw%1IT|9ZiJnUlxSQC0l=uLv-m@o@a1f)Z z(QpFgY%ZsCdu~)SCg{>~*p{HMk#IKy4K)#*YFk<0K|8$|E*VnRB-%Ol;zz3XS@&yN zO-FGC4Mcd&VCAM#YS7DI8%1`*4$1ce06&}Fkd3%1!Eb22XOR3i#LZOJzk>jR;=1Dc;10=jPCyp-nx1J+*L-Flo( zkj$kgI#Ks?U(vHo!#qt5%g>C8jD0y9L=z)BPYHmewV+abXiJG>547^7?I1Q9u5ohD_^qgfzI9#+oJAEn?3F%*e4g2;dkf9967;q9QF?UXTWL#;!DiJP{yR!KkAde+bzd4# zO|;+BW_V3JuiwtJGQTNRFf_FCBKOBmwH;@vKrN}!q(BiqsNk_WD8^Q1B*rOZ2R!@L zV3uvcbRwapFq;4);(u4ML{vuHi0W9m|45gWdlK(bG z5)aU9y}CzV&IgITx=$Rf4Zm?%EC1Ng)si;+TZ?tGVXM^FA7aTV3ONc@GIkG#2) zgGd31L=$AAe$#Vm$XeYpLl63ligggS0aXWgFd?0vKjDb@JFGYRxXArDk+%&7#uvYprx8x-oBNGOHC$dDMhIXFIr(iKZ^={v6lHSbV z=DC7iKSCuNr%v zh<-Ixy~8>M`=e`+C*3Jiy$lziW73u-qhRJ^$uYC%p7S zF5Bez4J-b~s5YQc$Zx$)d7!;$sdYs?mi!0iCf@7aQ;Cu_+-FtoJQq7Ms%m=JAolil z!cE1xmeN-~wJrdh?wTkra>?a^9tH~kJ|T2(rHwPi8`mU~_sH@<&K`B);BsLY6b7fBhS=sZ0*3Hvba{Qp#x|)u~|!<~w{>j*)&};aLt#7RDz^fE~OA zs33D}HZnr$Hjs!|jWU`9@t;5Rpdk49M4pWcIiJ;7O&_swR#?{u=4Z%;GX%x0Ftf@(sQL!RI_Hg3{O}!DnO0I0Q3N4s*cgR>9^6j3p=qjJxi=ddUiUzf> zZ;A6i1)mH^jq2Uq8}Xaikzj+J2NkJbI0?uyQ*X8k$Cc|MXH& z%@~n|5?i$K*x=^dMUZ>@xj*7;OatnJIeW;z$$fYwx=$lJyVgAvho+w}XsZce&{v)tk>*yHZ+}~9Yp*-ECL9PB_ zoj3P!`1xtU`W+W-oDHlqeErh}dBHcLT2Ep+RwW*Zl$$nEWJo~Ao*>I}7#(G;0CvNq z@PGkBA#R|?vJu6dQu|~kR96#Beo&3hr2YT!^wnWe1?$60w{)pANG~CvERBTHwJfoO zAl==KNC}E`NH;9qsWeD;NOwqgeTRF$``dr^*?DHqnVI*Ux1;an&o^CMx(be1Vv7zq z+`6DDRWDln*Hu?9^N5iJ1EXq2#AMc5EOyQ7t^M6~toUK`ljI+_Fq0+mF!TuO<)YF2 zjaZ7>o>?eQ0xF9mCGL&=+jJg^(kV=1$okz{EAG~P@oSKhm=R=@c zFw`-^Dc5HZFC5p)ms`x+-9su{O{E#HDPfsY_fF9vr?ZGXjeoIxMWf>NLSZBm%-sMY z51#b;sWUXbqz?U^`_-?Y%B;Xj;pGD{UE5Z4UZ^f=K=HB`Z+1Bb&Xoi^_Iq@j%+A8_ z$kEkRxcr`o*ijWHNIYrdS0Il~1=ccQ1%-~@u#VoAQ^L5V=lm_sdn~KOb23x}y>VZp z3=Uj++C_ahAX&?Sb&U)E-_miYXZ!EfmpiyM3H;?iJxE3)-)l^l8fs15KZF%bUk2=b zYXS-9ecNM^&9uxV;F4A`FQN1%dvSE9%T>GB2*g_jPic1ZYaPeg+p}JKi@jG{ttl2M zq~6q@a5=h+%`46|U8|wX$fAy|6V(@yB@;}|v(L5~Xb=yEg4w7J_{V_*ydYX0@3~bY zzq||5FH4HM?-g}RYc=)s?YlwTBsDdQMQRUo9QMD$2QpnR$4zw|0@nGb4!K6hcvA+&IL@b?4j4H($>))Uj&MXIxfnaj~euh(G>GieSUHm~2QTb;*ir zG|vsYCLxAhaW9(rP<#v_Nz)i#*>s`5>YstQ`Q(EHALg4a=_%Hd`XYHkO}JDfj}BZXqv3jupdK4F9@vqBp~9Oy zt|3mE%);;dXt%p;9gRRLz5%pqy9mdo@XaBLo6pdXf{&7u@<^)1$P>OBQkd`xKK*63 zpxw7AUjXv}HrVzYBcdBS93_6MA(G~&^iw74PvJv1d{xy;1Wnyu<9t&oc~MiP(oD<= zrL@i~eJpqvC?9lp5kCWA-wI?WIA{#$G$+5!MF6Ocqs8ZwOb;wpxn-cEv?l%*CuE7! z7UaM8QSj-p>&WCy^&?$xz>Z&?dkUv1bHPj1)E0B*-F>DE_2S#eU8CKyH1FRYWUcrJ zpN!!H^bJ)`U6mcNk0?@XW0s!QsLd@?)ngNb7#A6_kmdal9l`U{ZCuQ6ZMD|2Cw(JA zMU;&D1m;wGz|-&U;HMYyGdR&c$r~v%ElY*ttmSQNBWAn;nD|T7K%p?Ct5G$8l{yI$ zaD@_QB}+V^#PXQ+Tw}nS<&}g;ad%mak*gpTxb`MP&32MEUj(eU@L?6!fSl9ns1bbC zY^saHr2Vr~z@yQ-@B*Ro_SIXpLfvpg6I;(`l%hr3&f}^X+GN8r9nJA->E*=G%8F_q zl?l_VYUAHP{a#4fhk;B-#8!%arB$G?NM0h%d9CJm>dB#&GnWE21CC!V^fxa_H`Q0* zazSB z+vB|El0t^Se{WPjT_@XhK@S&^cM9fZ*i@bXH?Pz8;N9~KYGIosq*+vG?r z$8-Ud>E$k`Jv4uMqV7@P;70fK zVqTc~coOnyVmJn;`iJ$9j=KmAkQoTOgO1BO$#?x`6`iG11aeX zk)4K0=U^OeLOk@Kkn)POWA?o9AfvVtT@wzKw|EO7 ze5iNU`zMeO1`f3*OR=ux!BF+)ueqC=Aoao~QfT%+Gpr#;P;8hB3%m62H#ArtA)O^jJv-@rj2UEw|0m} zA;9V^?c^K&)r^V>$3x+d=Pyv@KPk(%RvY2_>e)iL;-;8b^d7(qDy;Oy!Im>H{$}v4 zERhyK8$qDbT+&s|NgH)q`-WIn`x=QNmbqDP;=O7MP5Alo4=BlB%rB=wqCjnQaRj%{ z^FKJmBh}Bop63xWMHzg=tO4m@-UyqsmR2kTw#OxF3MTcm(0W;F=Cj@kc`8AB5lk|S zn($7FbBsZPhU6yOPkqg+SqUSQW@(#n)rr$pgyv17wU*G^f1clLn^#_Rvx6MC1u}9UaKB=g)HbH6 zKHrHNKN0`e#E$t1Ero0{SaU;&t24n!!Y3$XtP!mDO}J`TvuS>cZ6N~P4AY){B$b=uG9V2;$gGj z{tDIEwX$DB@@H^TZ7)d#(f5egf|Vgr&n_6l@g-q6SR&$@rQ{kdFv*w588Ou-vBB+e zxDxuyUy320rpUe-=K%J3Bvz9jlCh-Z<1Wu}(UWr2(P$k_+QU-bV50%SC&vwcZzJzF zC!`bH3@*tazSbfCnl}(C==GTB{&)r^6=GT$`gXz^%nQj@&2=$kH$5r_VHQaXFr3Wd zU2%H!3}+oL>?soh`~Y?V{IAMQKz?xqhk?gEM&-v-iWhj%Og8cHWEh2$;bR zaXq!y73)oh)x*L`o5`Z$U}0q2dsy?o{8an9s`u;2yVWMWf^FWxnr8x7Z7CGmCRhK) zl5T`8aVKqPoimvk(KPiyBuabAZ!qC~g#hBDYF@8c-h1eQ;;L5Ju(ce}C@Cp(mGaq@ zB&G|O42Brfiu@-@U;6`PJ_LQO<9!e7M2Q@^hcEq37}77VS69glC2-2v99B2+NXxD- z47HqgjFxo0bGvqUDx5qsBnNzpu|mVR;=`cOIiXA=^wBD@3@b<|kz!n_v0cKPv zzbP#cDr!@?O0VT;@@^zN0!N3p)w|=(Hilc1WCB&Zvg+B*YURqU-EHR1kG<9=nj9%brWmng*QKqtnZ~DHOLX+Qn2FK?vYUa0Fo9b|)o6aA&1P{d?cV6stzp%}!YhJ@U za}x7wP)EShF69Hy!1?L7*8|&;H1oUiz_c~n#^Z>2^WlH@ffFYc&n=?)r)$}yzWgs1 zKvjq5Rjc?pWQ~ufa<2SJ4NX9p6L4|SlG$NMEP>FnCjQQGtNb?P23$JaiWRIocpt1v z>;1_U$IaoqzU$jTzH24*nDnp<`vDH{Ga&oWw(mR$7pA#BrAc#lCA1S+RU6W}c3rdF|$yEgmLnR6L#k{y!lF2M(*We z7RM#s1&jntQJe3|+UvzUMQS1z*(EP)RMrd6iXyH-tX!OlSy+zfK|J`^u@zKi4)gge zrZl?XWz8%QAc3SSiTrzSoJ~At5uVzWyQ%F!n8$94Qny&SB00<~>ZV6GwC15R?RRlc z7a-4A?y$1^Zn}+uw-p9=Rw`*fPvY`nWVF9u{&!Gqb}72l`sVQ;^em*fjG!~n04F3s z*Gc+%akZH90+Q{*B8O^ojYd?Un$Y8?zz(Qq$-B-{A*WXFPvQoPkWmq?Sn$L=3M}8Z zAo%k0lni}k+wtn=>i3O{sidSW=DM0Kf5w|S%!2!=Cy76(W3$Ndh$_B{6!KmTSyLNm zev7}^DsSLK=(By}_PKR)mAr1jbD!{Zk}SQGwb9G&cIE4kmv8E8X&(FKrZTT89>q~b zJB<6$8ow1xB_M7Zqs;G%9fYZFb5&E%)uVZw)aL5aZPBsrIE=v?EItM>Z6p_d_B^t^xap0C`c*FHr;p zcYJN)kfbjfhlbiOc31r`_qs^EJh>S0;xLI(0-v9K-S+b$l7#+*WTPa~z_1900k7u) z?DFJ?S@jy&tfFfClYACz)ei(7DxrEmatdSd$UM13Bc;97z8c)6c}5fl|CoFSe;{3r zpKx-IMo?7AErnZ7+s`va$+H@)&`4?Agz79jc!w=Ag&Ev8eqR-?(o}o7^Y#5ZM+Ylc zeZEr#P6NvZ6)V~9)qzBAe41|OF5LRH_@?d7!N*S}@!Ox3_0AyiTPyVjr73L}X_>?u z<0LJ}zV=MdO3hq0>dn@h&@_gIvf#f_&;vc6*1Fz2V2J!^q1E zC)B#_o8Fq+ZNH^6*0m}@pJU!%)zY}(Apy#|sk#uUAK6x)E9_;@*n0%V_D??QXrwlV zlJ$MjnXt0S3u9@ZyulZIW-k&{IrABoZ1tG}%!Uvn`UZ*hT1iw`?`mjU?DU3}oiN*1y?} z@J_Guxz}9blLkA_#%p~FgH}R`8&qBq)xRyPKYF=jmej^c{pC$d0!EaTK-XUmfKf2` z*io{BqY$rCN2kdbym7JxbZ~E^&Ogk^^s7&abB@H+vYuLJ%uVEc)nT=t1YyGCnA>8= zpkKObpinO~^7>cZ`KV-YUox_-P#zIpg}(tzun_xz2s>umMRQCYv%49Kv+xN0-4yWq zkdf-|h{pwt?T+a?!M`2@dWF0MBt=&m(v;qF>r7>>BiHfD%-;ItH!DBQEmkpJWiBdmSb!CU40P198-GLFtESUSINUYqaK#M zuRmE9x77=cNR0$mKI?n`_Bf`uDB`vNhpjnlWC+1Wygg*Vi8$q>;2XzJAP1R+WtFzpI0%KWzE#h5=c*8Hxolh(ymWivCd0~j|l2%-f$~p zE0@`ms#rxOFT0xPv<^<|1E13=l5tg6MW?VxaAaB(C4hf7Q{0Wx3m0X~x-bQ^7tv3g&Ra;@zB4`s?VZ6%1^;14kei@C$20dF(A@bex~`pYGz zwbrIujIsITb$b=ig6#Cd*vH)9`k5}yCQaqkPbFg%{C^2!@p3BMf6L1R<$Y6~|NZ=f zbyA$?4c$uE?p1g#^U@(9~*c=}^u@7uLj*hZ^AKH?4BC-><6zovmb=bu||`aiTpJn}vK z`s@3Bz!k!^I@sn#+Oo3C9;x`xy>%zni4wj|^E!`fSK+{DYSfc&QCFh4TREqOIDaI( z0T>~*fn#>MA$=+`qI#R>}m zfh~6u12yaBUrUu%jAA9HCgv6P#l{@?#5GEqtGP*6E07=Sj zcUi9wMymH4qiTKbg`9ghmz?Ogia8wvBK!_Fq7o-b8%X2L+2|ktd`7_F=G{GAC2o3` zrZ>Oy+x9W-yq7S<9+Z|G-YgysYM^cIIArc^kSDLkAGkjN;?Buuua3zweu0#fHeVrt zH-Ayf#Tu&+*2-YO@iKS(R6}Q2`1{`Vt1I(YPRbQ#$~dzZuSRD0iAq4TSRv}CGJgq! z)pZScy;JAPkSHHaX<4%3Z^Be#xl|Q%2K~IfLgys;*+fRFlWMyN@K;tYFfS$IPZr)s z7v;Owyw*6Vk3D90t24aIQpzGwBox~*sqjBgxmK8;sx+>WbhhpM@z{u>jd+`?H{>kQ z3K??yjuGO-w5^<6E`p4aUz!|cB*M~pi0-hqAG{d4C;yet=9QBCOLcd6{!LC)-)I zMAT$Uu*p*DPDtGeT?n zZmLI;scvP*=dQ|cS>A5=pU=>ltmx;_rd@{NfqCDZAQ=i`vQTY}%M~Am%&-YG5a+7; z#7B!Sc^0<`+c5c>o0ESlWZJ|GRoNH#-`T%?`6GoWXC(FtT~3jSfPb%>uap8S&oqX^ zlj}I0x9nQ!6ZR9Y>|H}QHkfpD^!e`W!*0~L!RIFhXYw^`!K@)C5NB%9NWha@eqgnf zsqDLc8b-gm8qaQjJ$rGk`}sD=x31pY?#H-)zkjRkBQhKjISd`?mx^K0!Y+v>4D z;im{yjGaWl9>erQoa{2PNqcEyz52~;Zcx8E#U9e1>Ed@n^T;9u6DY4{+K)6mEDh8N z?tZJz6)?#cw^dJkN;WdJAz>ESkRY8C`(-ZMs zrD24jOP0mx8lTO%tm`Ulb^6 zNXyLugSc>kb~x@Clg>5`V5>7P=^s4^-g3^bBf-uu(%C(thT_y-X-I9THtpxvwDyh2 zFssWWI7+=@@{Ij{EXK(Hieh%~Rg)s~u-E8&t;ieiJpD^;RauV^JB@MttVpVf8h&b5 zS$&>lCsd%z9sCS8`|f=gy%^h%+5H)DPUm$GWj%xbPj8y>HZ(lAlbtQ0@r;D^A-(VF z9b?dxk4oU2vNmixtCrS1EaY4O+sj<)H895@OCU+}O4q z{rVDYAvp6H$MMHOu&*r(R}EX@tTlzv!Ru^9V0j_2OF z%U<*(9YLXhHBP#*4rCLj%m3I^hT&d%D8Lj*{7UoLpD_@@jI;DB_-q=DT5Y}`I!n)v zJI3X)^ZF4eQ+B#lHP5S>SjNpQI**f94dlPAEx01SIFIsv4&B$+yP+dV>6a?M5)NHe z+LQf2X5g%_+CiiMi)=Z#%AXHY8}x0=3OD@OQ z=o3gn;e_JrS@GfU#x1-4AfGE~#1Vi0eI7P_LOX)aez8`0U2bezj;sN)D$GdUkcDw; znXAC&__>SL8-LV)HpQ%k3$Mkj)g~CT>B}fO@4iEq5LAD=;}FF2+O4e zb~qd*cVaAD$d(d~vt%!)iiHlp6A7^Pb!UN{!?yP<;(vbbjl&A#XjmQl(z_AHN$@F= z*UX|Xg_NKnL|GXv6yE3G8^@8y0UY6lV^RmCM@IV;~ z{gf&s36_c&3j8gcK>f>b0R?rA=UNVUIP3X0DDnt&e_|dSl?Yn)k%aXO+ajbq-oRRw zpXrcP6KwHiOTmH?KW+ED1k-fZnK+-trIC&~E7ZwEsh$NOOdd zcTvXrkD(!)IVW!}y7;;r&0DHGfDrrj_81%xO*t=;wp!dnu&*9@f6YFT9jF?6p}Q)(zVGvfvhi7o=82Ml$-^y81v(% z=DDD8PJ36{8J{H=slesi!%?d-&dzRBHrR=Q|B$fQ^M8r#7X%a@xZn@XVRrFJo}9co(Au!-bb-;bgR2O_bOK=OzX?fCEqqoX#j4e^ zq9g`oi#@fwwJaPh$$04aqZ19js2+ChJ2(LY$iDSz$Y!T5fMPa?Mi12X%C^BrqgXJ- z3P!N0EzX5b>csJ2hw7iB;UDczv><5h&$(^$rz$ z6@dNCqsb`Q=sTb6az7>TLb4JBCWs|=cge_}m_)t8b964FS;I_Ppd=TgAJwM}mCfVp z=XR!7A4P$oLf#F}tg8sIn`QC)>H5E+M4=!H<&kGXOk0q8;P5wf)E;77@Ebgq~a zLr~tuDx1`>&PeS@BcAOk2h=T@tl*#y~k&C|uSIawQ=SDB|UBVQ=@N_&aoMsKR zkeJL2zwRQDCRb2bkj~9#B}>vDvRGNkIwyE)ep~PYNNA}j#u7t7i9+=Uvwib*UVxt+ zlrQ#^W5U75E&w`q1X_fjqqu1C(>ewOw)f%hD#dj&Vd{mMcVS2J?gwVK`CAtr>b10> zY*+$~W}N`{KC|9JAg5s$S~wDLbwDiY{Fyi`3^lu!5ttK^j*^Ri(0hQL6mRL00abmqrlXwc~!YHQkyZ$=a)Fz9iVYL#r?T}26}Sl_ zn6%DF-$V$S=7M*j)sZ_fHl#Zf=6lN@)c*Cm1)m+n`N_XqK2Zmv9mytH2pKa`frK(l z0Q};{K*A8<3EoF`jDdU5X$GuVq}M}n3F_}+Iqho-MUriy&`+KOKm9*ooC7X7YVO~t zYDY(?AeIQo?cXBD))&jexX7@YvC=cXuB^TWK7fi5JuQdDesmBOQx8pL>(}$4*Ps)$ ztwj01Wr9%h`XZ_DJHCG&xtqw--wfscaWA(bJ>^V*KvL%Q2AlYKGsqxJa$P!?GGYZ~ z1sNzRLI9FHOaSZ@EMlNnMXz?2i&lgu1s>t$ECw1nc; zCrqLNXv&F7&hm|5n+$D~1P2{%46^@qO@NPhff^u>r)6*QJ|y=yU)Smw`{1l_0r3;- z1CbhzLJ1TrLVxoqjJ#?lmp$`xu~(mmvuB_{wb=ZKnprlqK0HBYxK zTA&k&|1Js+BR9~Y6JXtOJV1`|z!`vwBmhq7;DRFtF(hFvzXY*CAVoBoyR;lpeX_hR z5I;(#<$xpz;06c}Lz29JsN5R~ihNH6@cS61V1!OMhd{CvvG3RlhXyWtHae=*a6me?c#Ui?rKI zM3rgcx==5+EIR6Fj}0TQRup!5P<@--Y!#)bn!q=8?v3sNIDJ7QME%5#6nN(P^Rf|h z5@QxvRL?-P!3ON{JBi1W^g;@+t0QF0nG`KjzQQ7lcEuY7c>fVwa}AD*u8Dv^{;w7Y zo%hm|6m$hlxCD$s^=ZYPD0(}0C#IhK9AWaL>$?SHP)=ZkzU)i~pNy6HXV=D$2WUm_ zBkM^W%9i7GduEkFbwQvJcZ!|47zg!{85WKvN5Cx(0^vq{I{MvJie^JoL=J?=L^vnL z&-jg79&qfAGO|_kvV`gq+B;Z%e^#4=0B|~y+h{I}uE#vYguIvNJ>b;(h87U;C$jdb zSSGD{eJ+08?(XY9rs{fyeg4O^ryFd`pln^G=4$xPzU(KtZ1F% zup-FoNCbym#g_r}FkF~!m_e&V0Wvi~wC}EV!%pXZ_F_^R=j=6B0Zwk&aX#Zc*QSY` zUcWEv_?Cg$6JF*B@1&nCMYbX>zm*rn&gm;QUKAd^A5?$fj!6>M_!3t(9}pK;)o7^~8NLKU@&K`5`_ zo8FF32jCC&Rkbr^A{^PXi!;!6AXzo^=c#0gH#wT0afa3ON$f12_134OxNj8{N3)PH}2Xfd7! zfX)m5H}Ev0&?0*o`FkIl3-A=9L^GhdIk3PdMum$OjBpKV1b&KPAtI8^P?jI<4)p_> z8g_+_&Cb<18^03_+rA(`uHh#B+4jBpNU5^r2-(8=kbszYk%CoAP~1I!j-5+mZZL<^O^N6$Ug|K>Oj}a6pC}@TECgV8VWK*p{rK8Sd`MJW4w?@g<5ljG_-s z;!bN>t+e?kXhM$lQrHyl^n1U<9A7abEA?Y4<99FVzEuXO(Q)W5)aGNc)SOft}j zC`T8Z^MA1bbmVE-#Z5SYV30sAg}F<9E_oFXN!t-l+qe7c^hb{e6mHX=eV>f@uqtFw zc;gbcc_T%Z(7$>HucKcW2fBu5!EooX3BycZ0%xR1Ex+d=MbdX}mw(;nd)l{6Y+*SA z&hNb>pJRz*G?0Gh`9L>q@UUSpci3J)*(Z%pF+J%ai{Ch0FCnZ+_jT@v=?^>Ure&=+Mc5&veDBVr=MR3Txh*EOG2iv2--R6_aa&4) zAqSdYpd*tWfnXL==2r%HtK_GCH@9t%xBJl#+tJUIG%N3aB)t9Tani?JCHAl;_A^C& z!_9Zgtz?vlkIlB@<6{i&vL2Ml8J@u zU5lsf*?kc-SZ)5hticEp+XXf1J{-G$LsXd?*?;N+tCcN zQJ-X^sX1BgQsXEiCfXx5*Ry2dWq(_ryV$l3JHd%VA-X{6ei_Pd|1 z8uq=Yy5757a8mX~6Z=q?**>Fy@wzU4_7}^vX47)5tG|dO*wYk7)yd*PJV* z^Evk?VrL}W%pU4@heUmaD9ppp59=J&4 z{C9O7#lIG_7L-vIHS5%_sVLyG$juMOrQmc>P`4xig%~{wAr z)!dfc^jp|ew~71ML3q1uy$hj#+NdU|odBSEe+iudhBHD$M_#U*Hwtj13^Ylw;U#de zfE2;Fjx3PTeGmxH5Vn*?ekxF+lR_LQg-1`UA^EKtQbuGq5=d+CJ=id)Q6OvJ1Ch9x z0*)96R17>94}cXwYCR;uGb{meHoy}=peaKo@J#)4C-oZ3={-Au7LPcY^ynx*M*<0S zya&&O>tV1VQvvfr6noLK>9&zG@YHRvK_edkE>gPl+a^e)6<9eZkr5K;o?$((bocj% zAYyWmsRcR6|04mwig6|5%KOdrL5B5z0GWHlOU4)pgb9e~Aka2IjGw++nAedZImLDJ z^>~1kl(82K7w^Gr1Z}@QKzm{~5mBQ&jKIQ2-l+qJyPxL+o)d%1m8PEUkU0G|9n_0bXz^VEJ2a)mR zKd1WARlx^zPa-kh*@}{ZOfCyD#08cSjnxR!k}5|788fUSdk%g0leqBMjxyU&wN*K8 zHuNcht1Y(0``Xd(qvY-S4K3cd60Y;tiTU{l$l=(MlcxDsz0e+iX!L zm0x@fp38ogZ}-A0j=77<>G{R!l)Tb>ifGZ}Vs z-AsU%9&MPgv}#T@6lnx8mBp8q&7JHeWd1hWs%`k-hd3cO+t@1dsVj;%e3;zHk+Vpd zkor6v-se-MU&h<@?C4EDu;;_|R;8WrskQ6*Zrq~AOhW6O#^T4jzr$iY(;pQcYu{UM zoeqnn`d^1H@Gjh})(`D?%-8HF0E4<$C=_4p?)}Ab5WY#e$KA0$nqF~d zExg6?e57gUr%+0oh!^e_?lzs%Bm1Fg+Nm2al(XtK>s< z^ePgnL6duhLt3RG5WbtKx|7@3v+EL_pg8~KmCd`C@@p4&Z!hvMc%lM$PTVF-_vVYz zp&NGDidwL=joOC4Q16pbWvW=aG?z)vErI!)S4+AD?|RYrF*O^z9=7AR-};=WM{iP< zS&Lj5`)GRUR7mgBj@l*X>PjGoW^YS(@jxk2ya%Z;y&J#ErG zwfn)QwTP_6angq(7yjaz9ZrPZ-+Q8Ht!PzZ9%Q=7gJ0V%)WV)VFFjpR8qkfm)PzQ5 zw2o$(Mg6!vnSe&pB~iw5v!S`KdIm~lZbzzZLTw^5Xlt2DUyJy>jc+PYoP*x~v20Q- zC{k*g+H{2xX2%Zy6cM^id%qWcs2y8&<)v1aI&ZyK6#{^GAQe91FPI6yc&4S2J!sZf zmPN*`lpSJQ_>QD5v~zN3!lQWA>6WTt+ug^;Pg^^Adbbb9Bi~AU7To46=x1;PzY}}- z2{9g}uf>tc0OqWep5CxQJC(M1 zEXS}PuBIp5kli|lrCd~eh!Ffnu^0c!zxMIhcOG`Oc|9lP>`GCq*vnb%?2v;|!bqjbtjr?|aK5w&yI14K z+Q;>dBk`3^jwwp2w(Ugl&Hgl4^shNhZj_0@>o>3)Cue%UwKicjPig0in#y_l6Q$E| z$E~_F{f5R$>j6lM%|3a-C!CQvnmkg#IsaK~7WDBm)$*eWa#=(0yov@{2v%-`G zO>!+>zC4(kbb$AT4wQ56)gJS_LyAhio|RS8^mp(K$%e$p>*38ZGL-zrjRjNP^qQlV z&y5QROx!44ayPTtQezjp(TJ$U#kfPW(`U8{<OZO9KL^Cm_GP6XKLv<$zptvHWdxA_GHY;Dru26GdwqMK19c za{|r6r*;NctEH-9(1R>r*T1i-M-ik6Fq5Wf7mE+=#OGw>r$9%MzjkUvHnr#4H~`uL z_n4EQsQst>?I|Qyd+K{JJw)yry0~>|YY}>$b1k*H&H}NkVt&uc82;U$E6jJGdi0|r z!z@CtsrAf<>u{LA^3UQA;(;Y%n8=!?mA09~Mc4-i9Pv0^20M{a3y+3`q%@G*EOb_H zpB!CbZJvEV2B-`2k;o+~!G+J}#aOdEp}UmF8uQ<7DlrSuyjuRkbiFz(#km?AAFj$I zRt(KB9C()}{J+Lk_GVH(+OG0FBZ{(WFGw{ct< zWlp?mq#7AA@b2rqKZBxk`sR(L{P@j|Rmw=sp>%RWu{mr5?$%~|>xGl_4aZ*~SFqYB zX2Q9P8}eo;HHoCgX0$<08NKl_z(9E0y32;*IP}cMHDe3{D|BRnY<6gw{S4>J;+#)! zV??f8g;Pa9TA%|h3ZA&`e@d$^&+>*7L|eVdZ$JMevcwyz9Bm!2&9v10v1USLQ-i14 z?d+u$jE27-Z5{>rdZMq)@biUb_7ij`ET(JkTY4|H-rZ`})|V6)xULsbMiMk$FqFhOvkQVfJ8TlDijiHGNAk;&-S!X#3HTu)vArv?>X(AP6s>R zO0y}?mu_*6WigO~ogJecw!#Ww!x96KH$t0tMODf3kJ;1 z)YIZcj_aZXcFm@3B-31N=9ePu4}BsA-soP;j;gr~Gz`}Iexww*YWXY$0MJZY7L3pY zr{st{aJpQX3VB*+hzFZQY!-%2kHZOV-tQ?WbF-;?lep`uQE?_)8P9sZsoKz=xc+*7 z^v3U2Qq*Igw~BbR=OnyNec!09{a?dTd}nCX)rSDsouHC?UE$Nx@@(EcKd#(Ptl$6O z?ozES)?`V%TWvM}p#SMsITAk6bKS|{wG?K={Xf+5wxc6-#mdTCG}7h7ot<>93ow@25aE|gWB|`rWV{_|FF8HOV?vB z-YLb#r#9%2lW}w12vzvDJf*SGz}uja5kZva&;BYQ`WZAi!RX?HWEG6W%x7)Z?9`)i z_0;d;&ufo-&dr=qLGINL(mUT5j&pw3dT-$W><5I!H+4hX`?<2VJvZ~uEQ}Vbwo|(y z4?T|yx^@%OD7VTMcT+J9_LY))(t5*F&>MJc%Py8hGnZ{gsFJ61z1Zp18b+qck9(p4 z#k$Jw6M(f{kErv{5`Gy({-v3~F9Pf`$0pIIV8GyR(&^faVLP;~=XNcTawFQ<>V<%+ zSc)Zaymp=5eAgxY??o-M5-w^E;thG?YO`Agnuq}PAC9(FrArr=WJC-N6j*74w!6E& zNjF2zQqI0v9kCGILSyGgUyP%Lv zVM0NhM%@mpqV#Mt@`~JU*((8t6eYrSTk*n>ixJ9kn?#aE>c(B(4ql>Th zB({Nm$f}hIb61>Y`TAt#IaJs8o>${)e?j2Q&b;QsYRMh^+Re(v2Rcu#El{d5VYzgO zp3dnb?`1~jWKz()Ezr+B`*^tPqsi}C)FLL=YG<;+M(w1Z(wzGD&*qj)y~CP}>*?m8 zr^&~m{kXopTc8PS&;Hi5hvP@R(Xb}BM_2!P$)?gMxbwGh##Wv!>9js4b-l^Lt;W6n zsTr<9+dA#CCfD7G!ZD%+!E19@Vcq-Ap@pJN$FJ|Us;dE+*vV$@0xisPkG(i$deKv` zDKl+5RUj&1&vH({x{7mN`rg{|cFJPfwc;h}7>z3K5dbkZ_X~ftK z{s)#Mjy8tXao?v1i;RXPvVgK)hmPqXcR28rQ5y%~Aq*KER8zjWEj%>P}oS@1M;^2K!+|BCs z2w4(66<}e`Ct0Q-0&^tsHzJLyqHB!4hV1&{j4+M%zg5HgPeg6Sa-a8oA z13v>={z&9oEYJ+KGAuZ^aYWE9@X7X23>d4~DM!)TwHii{L1$l{Oxv-jTA=pwCmRL& zJ9{)xWP)Hr26Lm=+}LD{V%k0u!)hW1h;}`Yn$UT2B?oX^7~%rbjmY?4*6k)?!PcQ|7;`?xSy?+L1 z-UA6-ZmnsxhaZ81A9)vufS~GWoQ8d&>7(|&`hM2}D}xWV9`C=-E^FZO0hHOtwwnR` zgJurr6mgt>!6pxvX}1fh|}<+_q}Gob?lPL4K9QNYq|*!;5N3GV#iyI zka54$I<9pwZcX(nKM5}LD*p=J7#z<(GmPd-fcjdsbj1~2pe-W{?EWn68;+;a2wFSu zZ+5`y9}MRP1%g9fz4CkfP0qEhdyb(j5~tVVX<~~r{*ruH^j2ZV`(?V%YS{k5tkdl2 zuvkLN)o+|HqQp+_ouw~%E;UQ`PBs!M%k-Mx*6q6+DA>Mm^6Nyc>+<9B1q*szz%Q2H z;hW&^D+{~;>ovwcSr&BCXy5ev9r|pY9^iV_Y3cXZc_ax8ke^@94vTz$6x;QfY_wR) zB9O1I!Ljs7F^!&dz`X&?7p7aoO9^eR8@q9LiPe^^d7>|6r?p{e0#?NH+I9MSz?5_d zi}9q(`NyT6J$%tCl|?hbsy1a~G113`(_9}0z}m?U{?F@KRY_~orV-$=ao(!9FN(sC6}JO1+r zOXfx))&Kr-SnT@}(X155?Pc4Y#{X;UyTh7lzO4_4ilQK*1VrQo6qF)GKm;U+6a@j5 zCMEPLy$cvXK~bu7DG?Ou5K4g1gDBFQ)KHaP0+AMaawqR|@Av$^=idC4Q<5{Y_ng^# z?X~6{6S#8UI{620^z6!w6-TT=1KwS!#kjF~m%hUL250yT+l7`d_?gio{N$Sm>6=LF zY|aP!?w1ihh?Po%jsbi(-!{OP=?&7@hH^B3xN~|PRb5D~;=n&mZ{&1RO^0(fh!x(j zdB6ebzP|b3>B$mjRVlQc%1IG)nN1HD8H+E-VT$*h1OT!Uj?=>@bT4LP7gRiHSW$0h zi{_u==<_lqfx*;a8jcH{UidPT+=O`{VCi^2o;&hVc(;eA9W`u4q8qa{-Qtf{U?Mgm z4ZDiug=Ybt;4LZ^9O3-lm^pRc@h?}FGlHv3snS{kBznzb`5r&J6q=#rTcuAo9_IGhmlu(#RyLb066f}o0a z(ZM@nJwJzh;z_+t&Ms5AXWoVU0XDL}zM_>}@d+XaPf7k-Cb>FMo(GESo7VE!sXbv6 zMC49O53G#AAGN4;*RVD?-DM>~&^M=HB&J&{$fPFi2!E?*mUC@d=IP$F)ju+w%^S$2 zPHlhGw(1oVKlSjS@O5U#imW0j3%$!sl(E30fqNgADHN3e!Go!}%$Gb>4``kYWzN{4 zq^!ZHOqLnLe>GVN+YdkI;?1GGyET}T-raHG^W)LC4TOVT?1dj)B>i7Lvh@puYK-E| z>(XBo&00O%@#sZ4l@=#&JLKV>I)gLAGrq_s8BE~VG+|?!xK0$~SFQ~7|5hjw>mYJH z6}y&pRac4qi=%Hf>$v=fq11ML)q#heFJ?}Cu;v`Y58JE=Cy0=dl^y|AFSQn|>-^@H zn_|IZwUY8G%axrfnK5AY!DR6^*+jQsR+YG-GRK~4w+~Eo*KCg}o&FfMA-b4syQ$CX z`P}fQ6ZUfs1NJ_vGP{LrO2~In9Z+$m=d}2F1I-6p$a^rYwqNt>L7{}ZU~2VUH=^3A z$veq0=190I`xo9CJCg_vSZEIX&`x5>Wxm{(j$G%{-SqoPvcbl=TN`+`~66?rPiEN z8V~*$b;iZa-!sUzKN(0`(sZj;bOV|QBP~>oi9ZU%vR&hMrm%q87^yy=OMi4L4{vg* zVkffWi)z=r(MH7@KjKalRP7w@-QS+rmXhd#v2Hpm-vRI~>=NAmikR6a0F8!(QU|2? zf)V=0V)dkIhm)C@jrZnU<133+=9WJ2x2P z%o0gy;q9?BiObds3t1Ka<(D+-%$wqRc_IQaxWZ$<)@^{q?}&{G?n{f&iZjiSf~$Am z|1FTd%~qmH1%@|Q;numGW!&TrrIuU7fxEkp1Dd6p(9?8vV)q<9A=AmgWgSnQ6?8FL zP``LKx^T)f=T@bpSGOgi6xBQ?(jl{$_fq3)TeKxPtv=@wvSC~G+x^-QLqyqoDV{Oh zS;s*)JE=#D-`zZooYazQsIzaXv=5l+iyYULi!Qik1y#5>*~JS_46%)!N1_&4nin$D zN)fs)>~Bg%`C(9zfdovM?unP|lD(4Nc=ktU<(GR|9Uhb`6mJTns$153o0-Z`4Ye`0 zZFacs0!)3*LA+RX6f1^zD!h$|e7p9MHDEDTqnsHZX2jVq94q!bdzVc0&tP_ZUMk5@M~Q1u7_vqa+oiF*-?&aR=2UA zaH_AdpC{|gX{XA}4}y`3@5F^t#&}J%HXQ~M_<9f$BCYvP&V!+c+N!EK`WJq+t%~pQ zc8M5EKQoCtmHD~BBIDY?a&YC?J4Z^D5noi&Qkx%URq_A7skY9tY6wu?tCAXEm~YQb zM|&lnI`lOlNOY=fvfMBQVa@Es_l(x#CqBHLza67kxV4qraiDcM#cRn-VwfBUGj*is zHRD;nmTCSaST^Ha|1^z1d`J%Y$^hG7NmS;y(*5cb8Rb%H$+eBi^|)))P^J83+kN|UqdC!Q5<0DXvA9=d5ZC5OqADQG^H9FwJ6jg$7#QDq|7gYnLAkShcP9H zAo(gwmmk^!z;*Gx%zKvL9y#)^p0k$unUH5XuvZ3j$HktnY^YZeOtT*t`4^Ja++2+|)S6no z?h}7X+VNlZa!I)}Jy+K^Yk67I_yhyNgUxC{OlvD3DMoD=D8 z?@0*6>J94;mT9S1`g`T&7n?U6Zd!|o+&4g6fE!huX@;fH-QJcr%3>_|L>idnlDvIT z(T2sO;tzXw{+r4y#6D(JvXzwC{c|fCuD37oWq0SrRM|tn8L8KQ3vhLZLs7~^b>3q( z#VJYk3oLs-Dx3{hVf<=+ z1~&_8b+=hjM-uJbN?WNORBU5CB?hpKg}dL{w(}1qFZELVFMU%#|G5{dMM)Tr(f4{? zS5hqo)Yq$6TX6J2?V}M5msL~CZ|IH|S}!}=PWT~o;Nd1(ao84ji;eARJ8W*8MCnT- z>rU?yV)%i`dn9E$99Dt7>rMD?qLst-e~4BN9rvhbddK_A^mEk7m5%nhLk6oJSq^D} z4m09%H)hYf7ws5u4=XC7w}-1Ib4X;}R%IBN_t0N(#_lV#g?PrTFJrK$3)nD=P+6HR z`=`?%(=8|d3MCNt$(H>~Qr!CfA;#YyvtIc+V>oDOksg()I~p&pJ60&Lg04YntW-qN zhiRtY!BmKo%%}Phis&PsQ`M|Ejn;~Y4-S2{Z;aI^2dh5_3Qp8)CtjQV;-3;?9HAbl zh?W`>nzg9N&-9?FQE9E9pwEUF&jZTQYV^9^o15UWCQmNO+$@nJf zR{_8>C+3wqgacSs)B0nx*I{DGYGv)1=*ufOS_r`hsQwkb-oautj^!f6+NT03Owm`Ho%8&$ zqU{4+)y}MdGFkv59Bgh=xc{pyV*eN$%p4%d_a7KeWEG&c8$uquRtz#{0Z{S-RR?sQ zhXyo87-9psv&0%SLh4=y;AH`I> z^x&&Eb??YO;36fQ&iZsUP8LyqLFDs5MmA=771qndvY-al&OpXSHIFknj|D{nX%Z@C zpUiO5`OZCP1Ufl1#Qy3GB+CuRYTM;QD1+wnMMzW=*e4E{VFlO(`uO6?Vqspt6jalc z0D~6gc&mfDZ{;%tp?Y^Ag<@bZ6Cm3ual3R0T9o95^>R2P=rVMveY!x!(lh@I&<5QD zS3UOIMg?N+m4h1XUexf2o^!UL%P1&+0%Tb#;9#sKk8$Nmv!oD1sDuIRa9C8&nP@xS zX!gjs7J~A{Vi}&r^*x0g-(>@ZD?l*=R%JfW^GoKN<`H6$Bgi%EfV~>e*SqkfC~E@* zP1R3{@+jVc678?3Q@!jHV%*pY`1g<2<-i|rJ}|Ix--C&|cQC%neBh*{4T&l#-ZcA~ z_8a28I&~5{L3oE^DAx)CqQ1xTtuY(dZKj{=Sb{U|XJ?+Sjk4iyH--Cou2|E&wS8hM z{fN)(JBn_O^5eH_2j z8z%hL5MgL|w}mf99gcOR(2B}+bf4wpN%=YOPh&(4KU@`~jgPs86{_Jpo+~KxJzQl! zt@Z6Ccgg-Yj|&!eXSbTXc}S(+v}U{0b!O{tB6*$l9bXMy$jDeb)t9$~e?#$}22VE? zZ5*8*Db2kl*9N-DPh>-8k(N|`S|6y((ug{`MVQKjIrw$n&Ny!PH0XS&R(w869M!pI z_##1G#XL>UR~)d}AFK6)629dY~^1d^+!x6&gN+6&Cv|5_NRBDwa9LNa4mzWcC(Xy zD@BB^+f$v{{p)hC&OZ}wDiXj-w^(grwYpcURBrnmURsV3(=?m(o;|{EV@+;QcG_k$ zQ17I8Mo+KODZrJDJ_YC@WsWj?l)m?N`4iv3r=^IbZz z{4Qg5E2h?{u-4*T*+gHqWw@*6qqSB|&9(LbnWMg@ov#IC=*-krS(~Ok*1U&7iOqIs zpmi~0nUvpi1qG|Yf>cta&wWey4?A>boHp--9~4{VDw*te-ai#gH=$=1JQtk$nNHUP z=_#x3cJsoMIMdUXteO)!zqMSpD%v3Na&@bE(uivA(ci@0sMKsd?%C<88LFuT|A0yk zXuTS%VA+DXg-5B%C-yWCUR1G?jGJGmIcmMLO4peCXv4LG9^K`Nf%o3)FX}nfZ@g!W z5K|qN&F1O|5Z}8euQe>;kFgy)PIww(l*31C16>=pyJ2%*peJwwJ;q1u*1S?L=zmls zi0A0%a^QzfIF!NtR&s~DgF)L>b^TM!cRG_~(Y;ghNK{aFN7wpZvLr>%ciG@wZLH%2s}CMcps%lJvY5&Gu=)nW00mDfUg#i$b@! zIW2(`3H_&C1d-|!HTLo8q}^pB`@V3I<(I;Gdbf3POe@0K2wo>leh@Pt5fc70=$4#C^2p51K2|NVq7mxBBb|zv0taSK|tQq)yf$RSI~SR&EI# zWCjSCP_EWb${QK<7#Zj__h^I%I=Np>N5539?a0?3+9GKSYig{ped^lC-TWDaiSy+_T-p503Qz+iUrr(}4-o!X$! z=b(s5v+u(HYMBU+=c4{v(bv!8&z^fh)61)#DqPB{p#L$BAwxt!F7`5HmmI{9aXVs` zb}@ATKU91osEd8;%{3Ig*+)=HMM}OiVzW)IWf+m*C#8y&_;Jp%u(05cHI{(DwD0&K zvnB+gz>(JJG6bz)Eik;lX&1rN+<5Mc6ydz5Q>a-Cw<|4F`)i3IO6<(~vKuTK$+c4TQIfGpMQ-3bnFb~n0`yWj`sooQx(YK*PyTPPyAk>SL* zQ@%cDUYJJkjJF@k(`532L&vaUw5Z?z3?Pn8-3|`0u$bOq0I@^#Ttc=z%$vq&&aB^w zcLW}st|Px*djbSxC~W^o3Ae{y!0H%X5^f@T(r8E8ZfoiR>9Z??Sv=^i$9|v%@&!Yp zV>AJTJ#VL^xcNWg?t<(p8oP+&*U!7t2n`UQAT~YUvWE*yZF8Tr2^eNimJC3>F@nB> z20c?#J^wRvjpz@HVu{j?=xuj(c%b!&F5@&cQucDGe=k~!#nFg*QnQ;y6!Xv9O~Q~K zRc@vr5+PB;Ze4XP`xsR~qVWE+Mh#Q1J};xJ-dm&lMI1CR1!_vf`T*rTtVGNq zV*C>8A65lzuv_okqR@N@on81$+lz(qG9t|=4^{MD#Ns%sX97=7JhXrCk_j3G#te%5 zc-KwrG-E5>CCm^#cAg?d*T4X!{zE zM#zt}zvPE10jCGa>dLJ%`_UW|+c!E7xRJ(6P;}1F4l!x$J&P3IQ>r>%;shGCDDfFa zNX+=cX~|xZu-6R{K7fKjr1*-?Scpl90c}`C)ivfIMrL=AT5R^PZk2x{<*M7M5Xvgm zLQ_k}W9b!=z~9Q)R#~QpAjYx-KBtXjv1V36i_!o?@}E86!{J%d+r|YQD}OQ#%QZet zV7h3@QJpnGyT}7hu#L355Y-=oNRGZlvwVg1r-#t+a~e;;=4NdEl=Jd`li@O*mWiYl zt?3jw{JHC8+O)%%!36xj)fg5Rj%T^Gz%6{M7*;!- z5w;u*{9jkKbAo^W#_~=12XTWzD0&@}BOKbZ_rt7ndGi!H&V!^YpQZsMnvRDcYEe1s zZvsqpAqa`S+4r%UX!}=Y1$>f_DBwfDu**NO>G0l5yaEyx2iwwS@vvT1?CZ-hjF2T5 z!9jPzZAr9?mjEq7p!y~->}n^o6Ah9Zs1$+j5F*{NPPz7%*4trS4BvMNY6tg}+3{Df z63*#@<$;T$#y~0D746~Du$Nt5m(5!*APfn78Npq!2!8m4?H=h_Xp1O!ifPy1b*ojcH#4&mI)=A zaFVi-Nr+6JlrHDw*Syj*xz{a=>9?IstY81hfv<2Vwk7)ZAn@7|0)Sw)(i8qhNjb?&tI_%};VM2y!UJ1x=L||I8(> ziK+K&WWa4s+2Ne-pn&~WBv)s^{1LIMm0HLG_npLiLW7ZFik8kOl5GIaYZXrGCg=->O3KDhLw-v{t^Ebr@r>Fa3B!X%19 z38WM!ZN?bxO#19JIYoizjtvf%1s;;%bAi!+?PHiGH_3zz_@SkIm_y7?;BRC3Wx>e5 zVSP3`$gNL=HKuy_!9n1``nMd-Ptq}zF(1m3KOP5cx98_FNg&CY12E9Y>S%Sdc$8Ny zh!o#baJ*3(C0z7Qgd4+}S28ps=C zq(xULujd?O)`w*_kb8U@l8(Mp4ps@O@RyQIc^er8RuaQ2#S~TV?RMPk3K>4Nhr_43 zG)V4zx=?wsBZ*9&?|e}7f~ZdUyGlqP9%{>T>34Qre5DTrzW}Q72g=%(!yFqASwVPw4nzNItzqHV-U_p4 z^J4Ls3w&@1X{!maX=@z#INEPo7b>+7k%Je9}7t$TJH}l|DpL zbNwEgXFP0-DK0vI@aa&?rOu7_pv5H+drpG0C%D9)c+mUJf%&QOgUVLm=&8h^O~I)> zXL*X=Bl$pwWO$ot`b7_SWeC`Q&+=q(0ObI_xFw%9j%;bMHB8+zxkshQ`Tmn4Z{S9m z>Qyu)C4Fvx)cAi8fBZ!M>tEu9=;E@O-}AR31rAErh<^1I!hQ>16{|-Nqx21b{q%lp=sL*K z?zd`CF*kfFIGYNm8yfxdZX*B8i#!5f*K46mNG&= zS2rk6lj$fn&AvI%HC>ZiO8AAnXj1ssAAw95Y}a+-Sh%|1yGxUpsFm(d#nhvK$>1A@ME)J8CQ2>$?~O5 z-ab9 z4Bwx@bNB-2Of(3eG#=+$WR?R=YyRFfDn8ROxr()EB_RG?OaMh_n%c&le^MepbqV?j za<#?>)mbsylBZhomCjmsoPY8-+JzCC0T(x$O{1p;DT83(m2!bnXLJ>P;u%b;lrmMXq9PUl={6j(t2>~zMnu>XJh}S zYU1q-qKXVqC6LI0Cn}!@)ux+NtJ;o_(toGcV{U?+Qo)wGu!cbqs0~0y1bKe)tvBy-GLh3&Ql2@VYnYV!K4S*JTp3XCN?O8nBh zh~e%4GN#5m&n&xl1>!P4SPK@G-Q7+A@96&4e!GO=QyCjJ_1-VvQOkN$HMUGk&tLz~ zpnbDN0-5ZxLCUuuByK*R!`b$yv|!o=;&E2UYt1Qvrub9=t`;VdynR0X!+^mT!{ua> zj?U0Iz3ciND}~x`YdV}sd8ZFDyA*N>V8NDMp4!}~r{Cac1NzsP(2-Xj;%&PwW zKEgAAw}aKx **Who is this information for?** -> Although technically anyone can submit the governance proposal to recover an expired client, often it will be **relayer operators** (at least coordinating the submission). - -## Preconditions - -- There exists an active client (with a known client identifier) for the same counterparty chain as the expired client. -- The governance deposit. - -## Steps - -### Step 1 - -Check if the client is attached to the expected `chain_id`. For example, for an expired Tendermint client representing the Akash chain the client state looks like this on querying the client state: - -```text -{ - client_id: 07-tendermint-146 - client_state: - '@type': /ibc.lightclients.tendermint.v1.ClientState - allow_update_after_expiry: true - allow_update_after_misbehaviour: true - chain_id: akashnet-2 -} -``` - -The client is attached to the expected Akash `chain_id`. Note that although the parameters (`allow_update_after_expiry` and `allow_update_after_misbehaviour`) exist to signal intent, these parameters have been deprecated and will not enforce any checks on the revival of client. See ADR-026 for more context on this deprecation. - -### Step 2 - -Anyone can submit the governance proposal to recover the client by executing the following via CLI. -If the chain is on an ibc-go version older than v8, please see the [relevant documentation](https://ibc.cosmos.network/v7/ibc/proposals.html). - -- From ibc-go v8 onwards - - ```shell - tx gov submit-proposal [path-to-proposal-json] - ``` - - where `proposal.json` contains: - - ```json - { - "messages": [ - { - "@type": "/ibc.core.client.v1.MsgRecoverClient", - "subject_client_id": "", - "substitute_client_id": "", - "signer": "" - } - ], - "metadata": "", - "deposit": "10stake" - "title": "My proposal", - "summary": "A short summary of my proposal", - "expedited": false - } - ``` - -The `` identifier is the proposed client to be updated. This client must be either frozen or expired. - -The `` represents a substitute client. It carries all the state for the client which may be updated. It must have identical client and chain parameters to the client which may be updated (except for latest height, frozen height, and chain ID). It should be continually updated during the voting period. - -After this, all that remains is deciding who funds the governance deposit and ensuring the governance proposal passes. If it does, the client on trial will be updated to the latest state of the substitute. - -## Important considerations - -Please note that if the counterparty client is also expired, that client will also need to update. This process updates only one client. diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/07-relayer.md b/docs/versioned_docs/version-v8.0.x/01-ibc/07-relayer.md deleted file mode 100644 index f40e9e671a3..00000000000 --- a/docs/versioned_docs/version-v8.0.x/01-ibc/07-relayer.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Relayer -sidebar_label: Relayer -sidebar_position: 7 -slug: /ibc/relayer ---- - -# Relayer - -:::note - -## Pre-requisite readings - -- [IBC Overview](01-overview.md) -- [Events](https://github.com/cosmos/cosmos-sdk/blob/main/docs/learn/advanced/08-events.md) - -::: - -## Events - -Events are emitted for every transaction processed by the base application to indicate the execution -of some logic clients may want to be aware of. This is extremely useful when relaying IBC packets. -Any message that uses IBC will emit events for the corresponding TAO logic executed as defined in -the [IBC events document](/events/events). - -In the SDK, it can be assumed that for every message there is an event emitted with the type `message`, -attribute key `action`, and an attribute value representing the type of message sent -(`channel_open_init` would be the attribute value for `MsgChannelOpenInit`). If a relayer queries -for transaction events, it can split message events using this event Type/Attribute Key pair. - -The Event Type `message` with the Attribute Key `module` may be emitted multiple times for a single -message due to application callbacks. It can be assumed that any TAO logic executed will result in -a module event emission with the attribute value `ibc_` (02-client emits `ibc_client`). - -### Subscribing with Tendermint - -Calling the Tendermint RPC method `Subscribe` via [Tendermint's Websocket](https://docs.tendermint.com/main/rpc/) will return events using -Tendermint's internal representation of them. Instead of receiving back a list of events as they -were emitted, Tendermint will return the type `map[string][]string` which maps a string in the -form `.` to `attribute_value`. This causes extraction of the event -ordering to be non-trivial, but still possible. - -A relayer should use the `message.action` key to extract the number of messages in the transaction -and the type of IBC transactions sent. For every IBC transaction within the string array for -`message.action`, the necessary information should be extracted from the other event fields. If -`send_packet` appears at index 2 in the value for `message.action`, a relayer will need to use the -value at index 2 of the key `send_packet.packet_sequence`. This process should be repeated for each -piece of information needed to relay a packet. - -## Example Implementations - -- [Golang Relayer](https://github.com/cosmos/relayer) -- [Hermes](https://github.com/informalsystems/ibc-rs/tree/master/crates/relayer) diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/08-proto-docs.md b/docs/versioned_docs/version-v8.0.x/01-ibc/08-proto-docs.md deleted file mode 100644 index e1e87fb2845..00000000000 --- a/docs/versioned_docs/version-v8.0.x/01-ibc/08-proto-docs.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Protobuf Documentation -sidebar_label: Protobuf Documentation -sidebar_position: 8 -slug: /ibc/proto-docs ---- - - -# Protobuf documentation - -See [ibc-go Buf Protobuf documentation](https://buf.build/cosmos/ibc/docs/main). diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/09-roadmap.md b/docs/versioned_docs/version-v8.0.x/01-ibc/09-roadmap.md deleted file mode 100644 index cfb537adcca..00000000000 --- a/docs/versioned_docs/version-v8.0.x/01-ibc/09-roadmap.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -title: Roadmap -sidebar_label: Roadmap -sidebar_position: 9 -slug: /ibc/roadmap ---- - -# Roadmap ibc-go - -*Lastest update: September 12th, 2023* - -This document endeavours to inform the wider IBC community about plans and priorities for work on ibc-go by the team at Interchain GmbH. It is intended to broadly inform all users of ibc-go, including developers and operators of IBC, relayer, chain and wallet applications. - -This roadmap should be read as a high-level guide, rather than a commitment to schedules and deliverables. The degree of specificity is inversely proportional to the timeline. We will update this document periodically to reflect the status and plans. For the latest expected release timelines, please check [here](https://github.com/cosmos/ibc-go/wiki/Release-timeline). - -## v8.0.0 - -Follow the progress with the [milestone](https://github.com/cosmos/ibc-go/milestone/38). - -This release main additions are: - -- Upgrade to Cosmos SDK v0.50. -- [Migration of gov proposals from v1beta1 to v1](https://github.com/cosmos/ibc-go/issues/1282). -- [Migration of params to be self managed](https://github.com/cosmos/ibc-go/issues/2010). - -## 08-wasm/v0.1.0 - -Follow the progress with the [milestone](https://github.com/cosmos/ibc-go/milestone/40). - -The first release of this new module will add support for Wasm light clients. The first Wasm client developed on top of ibc-go/v7 02-client refactor and stored as Wasm bytecode will be the GRANDPA light client used for Cosmos x Substrate IBC connections. This feature will be used also for a NEAR light client in the future. - -This feature has been developed by Composable and Strangelove. - -## v9.0.0 - -### Channel upgradability - -Channel upgradability will allow chains to renegotiate an existing channel to take advantage of new features without having to create a new channel, thus preserving all existing packet state processed on the channel. This feature will enable, for example, the adoption of existing channels of features like [path unwinding](https://github.com/cosmos/ibc/discussions/824) or fee middleware. - -Follow the progress with the [alpha milestone](https://github.com/cosmos/ibc-go/milestone/29) or the [project board](https://github.com/orgs/cosmos/projects/7/views/17). - ---- - -This roadmap is also available as a [project board](https://github.com/orgs/cosmos/projects/7/views/25). - -For the latest expected release timelines, please check [here](https://github.com/cosmos/ibc-go/wiki/Release-timeline). - -For the latest information on the progress of the work or the decisions made that might influence the roadmap, please follow the [Announcements](https://github.com/cosmos/ibc-go/discussions/categories/announcements) category in the Discussions tab of the repository. - ---- - -**Note**: release version numbers may be subject to change. diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/10-troubleshooting.md b/docs/versioned_docs/version-v8.0.x/01-ibc/10-troubleshooting.md deleted file mode 100644 index 0504a993b17..00000000000 --- a/docs/versioned_docs/version-v8.0.x/01-ibc/10-troubleshooting.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Troubleshooting -sidebar_label: Troubleshooting -sidebar_position: 10 -slug: /ibc/troubleshooting ---- - -# Troubleshooting - -## Unauthorized client states - -If it is being reported that a client state is unauthorized, this is due to the client type not being present -in the [`AllowedClients`](https://github.com/cosmos/ibc-go/blob/v6.0.0/modules/core/02-client/types/client.pb.go#L345) array. - -Unless the client type is present in this array, all usage of clients of this type will be prevented. diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/11-capability-module.md b/docs/versioned_docs/version-v8.0.x/01-ibc/11-capability-module.md deleted file mode 100644 index d8bd27108ce..00000000000 --- a/docs/versioned_docs/version-v8.0.x/01-ibc/11-capability-module.md +++ /dev/null @@ -1,139 +0,0 @@ ---- -title: Capability Module -sidebar_label: Capability Module -sidebar_position: 11 -slug: /ibc/capability-module ---- - -# Capability Module - -## Overview - -`modules/capability` is an implementation of a Cosmos SDK module, per [ADR 003](https://github.com/cosmos/cosmos-sdk/blob/main/docs/architecture/adr-003-dynamic-capability-store.md), that allows for provisioning, tracking, and authenticating multi-owner capabilities at runtime. - -The keeper maintains two states: persistent and ephemeral in-memory. The persistent -store maintains a globally unique auto-incrementing index and a mapping from -capability index to a set of capability owners that are defined as a module and -capability name tuple. The in-memory ephemeral state keeps track of the actual -capabilities, represented as addresses in local memory, with both forward and reverse indexes. -The forward index maps module name and capability tuples to the capability name. The -reverse index maps between the module and capability name and the capability itself. - -The keeper allows the creation of "scoped" sub-keepers which are tied to a particular -module by name. Scoped keepers must be created at application initialization and -passed to modules, which can then use them to claim capabilities they receive and -retrieve capabilities which they own by name, in addition to creating new capabilities -& authenticating capabilities passed by other modules. A scoped keeper cannot escape its scope, -so a module cannot interfere with or inspect capabilities owned by other modules. - -The keeper provides no other core functionality that can be found in other modules -like queriers, REST and CLI handlers, and genesis state. - -## Initialization - -During application initialization, the keeper must be instantiated with a persistent -store key and an in-memory store key. - -```go -type App struct { - // ... - - capabilityKeeper *capability.Keeper -} - -func NewApp(...) *App { - // ... - - app.capabilityKeeper = capabilitykeeper.NewKeeper(codec, persistentStoreKey, memStoreKey) -} -``` - -After the keeper is created, it can be used to create scoped sub-keepers which -are passed to other modules that can create, authenticate, and claim capabilities. -After all the necessary scoped keepers are created and the state is loaded, the -main capability keeper must be sealed to prevent further scoped keepers from -being created. - -```go -func NewApp(...) *App { - // ... - - // Creating a scoped keeper - scopedIBCKeeper := app.CapabilityKeeper.ScopeToModule(ibchost.ModuleName) - - // Seal the capability keeper to prevent any further modules from creating scoped - // sub-keepers. - app.capabilityKeeper.Seal() - - return app -} -``` - -## Contents - -- [`modules/capability`](#capability-module) - - [Overview](#overview) - - [Initialization](#initialization) - - [Contents](#contents) - - [Concepts](#concepts) - - [Capabilities](#capabilities) - - [Stores](#stores) - - [State](#state) - - [Persisted KV store](#persisted-kv-store) - - [In-memory KV store](#in-memory-kv-store) - -## Concepts - -### Capabilities - -Capabilities are multi-owner. A scoped keeper can create a capability via `NewCapability` -which creates a new unique, unforgeable object-capability reference. The newly -created capability is automatically persisted; the calling module need not call -`ClaimCapability`. Calling `NewCapability` will create the capability with the -calling module and name as a tuple to be treated the capabilities first owner. - -Capabilities can be claimed by other modules which add them as owners. `ClaimCapability` -allows a module to claim a capability key which it has received from another -module so that future `GetCapability` calls will succeed. `ClaimCapability` MUST -be called if a module which receives a capability wishes to access it by name in -the future. Again, capabilities are multi-owner, so if multiple modules have a -single Capability reference, they will all own it. If a module receives a capability -from another module but does not call `ClaimCapability`, it may use it in the executing -transaction but will not be able to access it afterwards. - -`AuthenticateCapability` can be called by any module to check that a capability -does in fact correspond to a particular name (the name can be un-trusted user input) -with which the calling module previously associated it. - -`GetCapability` allows a module to fetch a capability which it has previously -claimed by name. The module is not allowed to retrieve capabilities which it does -not own. - -### Stores - -- MemStore -- KeyStore - -## State - -### Persisted KV store - -1. Global unique capability index -2. Capability owners - -Indexes: - -- Unique index: `[]byte("index") -> []byte(currentGlobalIndex)` -- Capability Index: `[]byte("capability_index") | []byte(index) -> ProtocolBuffer(CapabilityOwners)` - -### In-memory KV store - -1. Initialized flag -2. Mapping between the module and capability tuple and the capability name -3. Mapping between the module and capability name and its index - -Indexes: - -- Initialized flag: `[]byte("mem_initialized")` -- RevCapabilityKey: `[]byte(moduleName + "/rev/" + capabilityName) -> []byte(index)` -- FwdCapabilityKey: `[]byte(moduleName + "/fwd/" + capabilityPointerAddress) -> []byte(capabilityName)` diff --git a/docs/versioned_docs/version-v8.0.x/01-ibc/_category_.json b/docs/versioned_docs/version-v8.0.x/01-ibc/_category_.json deleted file mode 100644 index 066f3af93b1..00000000000 --- a/docs/versioned_docs/version-v8.0.x/01-ibc/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": "Using IBC-Go", - "position": 1, - "link": null -} \ No newline at end of file diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/01-overview.md b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/01-overview.md deleted file mode 100644 index 994850822b4..00000000000 --- a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/01-overview.md +++ /dev/null @@ -1,134 +0,0 @@ ---- -title: Overview -sidebar_label: Overview -sidebar_position: 1 -slug: /apps/transfer/overview ---- - -# Overview - -:::note Synopsis -Learn about what the token Transfer module is -::: - -## What is the Transfer module? - -Transfer is the Cosmos SDK implementation of the [ICS-20](https://github.com/cosmos/ibc/tree/master/spec/app/ics-020-fungible-token-transfer) protocol, which enables cross-chain fungible token transfers. - -## Concepts - -### Acknowledgements - -ICS20 uses the recommended acknowledgement format as specified by [ICS 04](https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics#acknowledgement-envelope). - -A successful receive of a transfer packet will result in a Result Acknowledgement being written -with the value `[]byte{byte(1)}` in the `Response` field. - -An unsuccessful receive of a transfer packet will result in an Error Acknowledgement being written -with the error message in the `Response` field. - -### Denomination trace - -The denomination trace corresponds to the information that allows a token to be traced back to its -origin chain. It contains a sequence of port and channel identifiers ordered from the most recent to -the oldest in the timeline of transfers. - -This information is included on the token's base denomination field in the form of a hash to prevent an -unbounded denomination length. For example, the token `transfer/channelToA/uatom` will be displayed -as `ibc/7F1D3FCF4AE79E1554D670D1AD949A9BA4E4A3C76C63093E17E446A46061A7A2`. The human readable denomination -is stored using `x/bank` module's [denom metadata](https://docs.cosmos.network/v0.50/build/modules/bank#denom-metadata) -feature. You may display the human readable denominations by querying balances with the `--resolve-denom` flag, as in: - -```shell -simd query bank balances [address] --resolve-denom -``` - -Each send to any chain other than the one it was previously received from is a movement forwards in -the token's timeline. This causes trace to be added to the token's history and the destination port -and destination channel to be prefixed to the denomination. In these instances the sender chain is -acting as the "source zone". When the token is sent back to the chain it previously received from, the -prefix is removed. This is a backwards movement in the token's timeline and the sender chain is -acting as the "sink zone". - -It is strongly recommended to read the full details of [ADR 001: Coin Source Tracing](/architecture/adr-001-coin-source-tracing) to understand the implications and context of the IBC token representations. - -## UX suggestions for clients - -For clients (wallets, exchanges, applications, block explorers, etc) that want to display the source of the token, it is recommended to use the following alternatives for each of the cases below: - -### Direct connection - -If the denomination trace contains a single identifier prefix pair (as in the example above), then -the easiest way to retrieve the chain and light client identifier is to map the trace information -directly. In summary, this requires querying the channel from the denomination trace identifiers, -and then the counterparty client state using the counterparty port and channel identifiers from the -retrieved channel. - -A general pseudo algorithm would look like the following: - -1. Query the full denomination trace. -2. Query the channel with the `portID/channelID` pair, which corresponds to the first destination of the - token. -3. Query the client state using the identifiers pair. Note that this query will return a `"Not -Found"` response if the current chain is not connected to this channel. -4. Retrieve the client identifier or chain identifier from the client state (eg: on - Tendermint clients) and store it locally. - -Using the gRPC gateway client service the steps above would be, with a given IBC token `ibc/7F1D3FCF4AE79E1554D670D1AD949A9BA4E4A3C76C63093E17E446A46061A7A2` stored on `chainB`: - -1. `GET /ibc/apps/transfer/v1/denom_traces/7F1D3FCF4AE79E1554D670D1AD949A9BA4E4A3C76C63093E17E446A46061A7A2` -> `{"path": "transfer/channelToA", "base_denom": "uatom"}` -2. `GET /ibc/apps/transfer/v1/channels/channelToA/ports/transfer/client_state"` -> `{"client_id": "clientA", "chain-id": "chainA", ...}` -3. `GET /ibc/apps/transfer/v1/channels/channelToA/ports/transfer"` -> `{"channel_id": "channelToA", port_id": "transfer", counterparty: {"channel_id": "channelToB", port_id": "transfer"}, ...}` -4. `GET /ibc/apps/transfer/v1/channels/channelToB/ports/transfer/client_state" -> {"client_id": "clientB", "chain-id": "chainB", ...}` - -Then, the token transfer chain path for the `uatom` denomination would be: `chainA` -> `chainB`. - -### Multiple hops - -The multiple channel hops case applies when the token has passed through multiple chains between the original source and final destination chains. - -The IBC protocol doesn't know the topology of the overall network (i.e connections between chains and identifier names between them). For this reason, in the multiple hops case, a particular chain in the timeline of the individual transfers can't query the chain and client identifiers of the other chains. - -Take for example the following sequence of transfers `A -> B -> C` for an IBC token, with a final prefix path (trace info) of `transfer/channelChainC/transfer/channelChainB`. What the paragraph above means is that even in the case that chain `C` is directly connected to chain `A`, querying the port and channel identifiers that chain `B` uses to connect to chain `A` (eg: `transfer/channelChainA`) can be completely different from the one that chain `C` uses to connect to chain `A` (eg: `transfer/channelToChainA`). - -Thus the proposed solution for clients that the IBC team recommends are the following: - -- **Connect to all chains**: Connecting to all the chains in the timeline would allow clients to - perform the queries outlined in the [direct connection](#direct-connection) section to each - relevant chain. By repeatedly following the port and channel denomination trace transfer timeline, - clients should always be able to find all the relevant identifiers. This comes at the tradeoff - that the client must connect to nodes on each of the chains in order to perform the queries. -- **Relayer as a Service (RaaS)**: A longer term solution is to use/create a relayer service that - could map the denomination trace to the chain path timeline for each token (i.e `origin chain -> -chain #1 -> ... -> chain #(n-1) -> final chain`). These services could provide merkle proofs in - order to allow clients to optionally verify the path timeline correctness for themselves by - running light clients. If the proofs are not verified, they should be considered as trusted third - parties services. Additionally, client would be advised in the future to use RaaS that support the - largest number of connections between chains in the ecosystem. Unfortunately, none of the existing - public relayers (in [Golang](https://github.com/cosmos/relayer) and - [Rust](https://github.com/informalsystems/ibc-rs)), provide this service to clients. - -:::tip -The only viable alternative for clients (at the time of writing) to tokens with multiple connection hops, is to connect to all chains directly and perform relevant queries to each of them in the sequence. -::: - -## Locked funds - -In some [exceptional cases](/architecture/adr-026-ibc-client-recovery-mechanisms#exceptional-cases), a client state associated with a given channel cannot be updated. This causes that funds from fungible tokens in that channel will be permanently locked and thus can no longer be transferred. - -To mitigate this, a client update governance proposal can be submitted to update the frozen client -with a new valid header. Once the proposal passes the client state will be unfrozen and the funds -from the associated channels will then be unlocked. This mechanism only applies to clients that -allow updates via governance, such as Tendermint clients. - -In addition to this, it's important to mention that a token must be sent back along the exact route -that it took originally in order to return it to its original form on the source chain (eg: the -Cosmos Hub for the `uatom`). Sending a token back to the same chain across a different channel will -**not** move the token back across its timeline. If a channel in the chain history closes before the -token can be sent back across that channel, then the token will not be returnable to its original -form. - -## Security considerations - -For safety, no other module must be capable of minting tokens with the `ibc/` prefix. The IBC -transfer module needs a subset of the denomination space that only it can create tokens in. diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/02-state.md b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/02-state.md deleted file mode 100644 index 916e99b46c3..00000000000 --- a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/02-state.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: State -sidebar_label: State -sidebar_position: 2 -slug: /apps/transfer/state ---- - -# State - -The IBC transfer application module keeps state of the port to which the module is binded and the denomination trace information as outlined in [ADR 001](/architecture/adr-001-coin-source-tracing). - -- `Port`: `0x01 -> ProtocolBuffer(string)` -- `DenomTrace`: `0x02 | []bytes(traceHash) -> ProtocolBuffer(DenomTrace)` diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/03-state-transitions.md b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/03-state-transitions.md deleted file mode 100644 index 7c73b8da21c..00000000000 --- a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/03-state-transitions.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: State Transitions -sidebar_label: State Transitions -sidebar_position: 3 -slug: /apps/transfer/state-transitions ---- - -# State transitions - -## Send fungible tokens - -A successful fungible token send has two state transitions depending if the transfer is a movement forward or backwards in the token's timeline: - -1. Sender chain is the source chain, *i.e* a transfer to any chain other than the one it was previously received from is a movement forwards in the token's timeline. This results in the following state transitions: - - - The coins are transferred to an escrow address (i.e locked) on the sender chain. - - The coins are transferred to the receiving chain through IBC TAO logic. - -2. Sender chain is the sink chain, *i.e* the token is sent back to the chain it previously received from. This is a backwards movement in the token's timeline. This results in the following state transitions: - - - The coins (vouchers) are burned on the sender chain. - - The coins are transferred to the receiving chain through IBC TAO logic. - -## Receive fungible tokens - -A successful fungible token receive has two state transitions depending if the transfer is a movement forward or backwards in the token's timeline: - -1. Receiver chain is the source chain. This is a backwards movement in the token's timeline. This results in the following state transitions: - - - The leftmost port and channel identifier pair is removed from the token denomination prefix. - - The tokens are unescrowed and sent to the receiving address. - -2. Receiver chain is the sink chain. This is a movement forwards in the token's timeline. This results in the following state transitions: - - - Token vouchers are minted by prefixing the destination port and channel identifiers to the trace information. - - The receiving chain stores the new trace information in the store (if not set already). - - The vouchers are sent to the receiving address. diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/04-messages.md b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/04-messages.md deleted file mode 100644 index 483384a09fe..00000000000 --- a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/04-messages.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: Messages -sidebar_label: Messages -sidebar_position: 4 -slug: /apps/transfer/messages ---- - -# Messages - -## `MsgTransfer` - -A fungible token cross chain transfer is achieved by using the `MsgTransfer`: - -```go -type MsgTransfer struct { - SourcePort string - SourceChannel string - Token sdk.Coin - Sender string - Receiver string - TimeoutHeight ibcexported.Height - TimeoutTimestamp uint64 - Memo string -} -``` - -This message is expected to fail if: - -- `SourcePort` is invalid (see [24-host naming requirements](https://github.com/cosmos/ibc/blob/master/spec/core/ics-024-host-requirements/README.md#paths-identifiers-separators). -- `SourceChannel` is invalid (see [24-host naming requirements](https://github.com/cosmos/ibc/blob/master/spec/core/ics-024-host-requirements/README.md#paths-identifiers-separators)). -- `Token` is invalid (denom is invalid or amount is negative) - - `Token.Amount` is not positive. - - `Token.Denom` is not a valid IBC denomination as per [ADR 001 - Coin Source Tracing](/architecture/adr-001-coin-source-tracing). -- `Sender` is empty. -- `Receiver` is empty. -- `TimeoutHeight` and `TimeoutTimestamp` are both zero. - -This message will send a fungible token to the counterparty chain represented by the counterparty Channel End connected to the Channel End with the identifiers `SourcePort` and `SourceChannel`. - -The denomination provided for transfer should correspond to the same denomination represented on this chain. The prefixes will be added as necessary upon by the receiving chain. - -### Memo - -The memo field was added to allow applications and users to attach metadata to transfer packets. The field is optional and may be left empty. When it is used to attach metadata for a particular middleware, the memo field should be represented as a json object where different middlewares use different json keys. - -For example, the following memo field is used by the [callbacks middleware](../../04-middleware/02-callbacks/01-overview.md) to attach a source callback to a transfer packet: - -```jsonc -{ - "src_callback": { - "address": "callbackAddressString", - // optional - "gas_limit": "userDefinedGasLimitString", - } -} -``` - -You can find more information about other applications that use the memo field in the [chain registry](https://github.com/cosmos/chain-registry/blob/master/_memo_keys/ICS20_memo_keys.json). diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/05-events.md b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/05-events.md deleted file mode 100644 index cdadc5753c8..00000000000 --- a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/05-events.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: Events -sidebar_label: Events -sidebar_position: 5 -slug: /apps/transfer/events ---- - - -# Events - -## `MsgTransfer` - -| Type | Attribute Key | Attribute Value | -|--------------|---------------|-----------------| -| ibc_transfer | sender | \{sender\} | -| ibc_transfer | receiver | \{receiver\} | -| message | action | transfer | -| message | module | transfer | - -## `OnRecvPacket` callback - -| Type | Attribute Key | Attribute Value | -|-----------------------|---------------|-----------------| -| fungible_token_packet | module | transfer | -| fungible_token_packet | sender | \{sender\} | -| fungible_token_packet | receiver | \{receiver\} | -| fungible_token_packet | denom | \{denom\} | -| fungible_token_packet | amount | \{amount\} | -| fungible_token_packet | success | \{ackSuccess\} | -| fungible_token_packet | memo | \{memo\} | -| denomination_trace | trace_hash | \{hex_hash\} | - -## `OnAcknowledgePacket` callback - -| Type | Attribute Key | Attribute Value | -|-----------------------|-----------------|-------------------| -| fungible_token_packet | module | transfer | -| fungible_token_packet | sender | \{sender\} | -| fungible_token_packet | receiver | \{receiver\} | -| fungible_token_packet | denom | \{denom\} | -| fungible_token_packet | amount | \{amount\} | -| fungible_token_packet | memo | \{memo\} | -| fungible_token_packet | acknowledgement | \{ack.String()\} | -| fungible_token_packet | success / error | \{ack.Response\} | - -## `OnTimeoutPacket` callback - -| Type | Attribute Key | Attribute Value | -|-----------------------|-----------------|-----------------| -| fungible_token_packet | module | transfer | -| fungible_token_packet | refund_receiver | \{receiver\} | -| fungible_token_packet | denom | \{denom\} | -| fungible_token_packet | amount | \{amount\} | -| fungible_token_packet | memo | \{memo\} | diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/06-metrics.md b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/06-metrics.md deleted file mode 100644 index 104e5b4d3bc..00000000000 --- a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/06-metrics.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Metrics -sidebar_label: Metrics -sidebar_position: 6 -slug: /apps/transfer/metrics ---- - - -# Metrics - -The IBC transfer application module exposes the following set of [metrics](https://github.com/cosmos/cosmos-sdk/blob/main/docs/learn/advanced/09-telemetry.md). - -| Metric | Description | Unit | Type | -|:--------------------------------|:------------------------------------------------------------------------------------------|:----------------|:--------| -| `tx_msg_ibc_transfer` | The total amount of tokens transferred via IBC in a `MsgTransfer` (source or sink chain) | token | gauge | -| `ibc_transfer_packet_receive` | The total amount of tokens received in a `FungibleTokenPacketData` (source or sink chain) | token | gauge | -| `ibc_transfer_send` | Total number of IBC transfers sent from a chain (source or sink) | transfer | counter | -| `ibc_transfer_receive` | Total number of IBC transfers received to a chain (source or sink) | transfer | counter | diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/07-params.md b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/07-params.md deleted file mode 100644 index 635344edea4..00000000000 --- a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/07-params.md +++ /dev/null @@ -1,94 +0,0 @@ ---- -title: Params -sidebar_label: Params -sidebar_position: 7 -slug: /apps/transfer/params ---- - - -# Parameters - -The IBC transfer application module contains the following parameters: - -| Name | Type | Default Value | -| ---------------- | ---- | ------------- | -| `SendEnabled` | bool | `true` | -| `ReceiveEnabled` | bool | `true` | - -The IBC transfer module stores its parameters in its keeper with the prefix of `0x03`. - -## `SendEnabled` - -The `SendEnabled` parameter controls send cross-chain transfer capabilities for all fungible tokens. - -To prevent a single token from being transferred from the chain, set the `SendEnabled` parameter to `true` and then, depending on the Cosmos SDK version, do one of the following: - -- For Cosmos SDK v0.46.x or earlier, set the bank module's [`SendEnabled` parameter](https://github.com/cosmos/cosmos-sdk/blob/release/v0.46.x/x/bank/spec/05_params.md#sendenabled) for the denomination to `false`. -- For Cosmos SDK versions above v0.46.x, set the bank module's `SendEnabled` entry for the denomination to `false` using `MsgSetSendEnabled` as a governance proposal. - -::: warning -Doing so will prevent the token from being transferred between any accounts in the blockchain. -::: - -## `ReceiveEnabled` - -The transfers enabled parameter controls receive cross-chain transfer capabilities for all fungible tokens. - -To prevent a single token from being transferred to the chain, set the `ReceiveEnabled` parameter to `true` and then, depending on the Cosmos SDK version, do one of the following: - -- For Cosmos SDK v0.46.x or earlier, set the bank module's [`SendEnabled` parameter](https://github.com/cosmos/cosmos-sdk/blob/release/v0.46.x/x/bank/spec/05_params.md#sendenabled) for the denomination to `false`. -- For Cosmos SDK versions above v0.46.x, set the bank module's `SendEnabled` entry for the denomination to `false` using `MsgSetSendEnabled` as a governance proposal. - -::: warning -Doing so will prevent the token from being transferred between any accounts in the blockchain. -::: - -## Queries - -Current parameter values can be queried via a query message. - - - -```protobuf -// proto/ibc/applications/transfer/v1/query.proto - -// QueryParamsRequest is the request type for the Query/Params RPC method. -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; -} -``` - -To execute the query in `simd`, you use the following command: - -```bash -simd query ibc-transfer params -``` - -## Changing Parameters - -To change the parameter values, you must make a governance proposal that executes the `MsgUpdateParams` message. - - - -```protobuf -// proto/ibc/applications/transfer/v1/tx.proto - -// MsgUpdateParams is the Msg/UpdateParams request type. -message MsgUpdateParams { - // signer address (it may be the address that controls the module, which defaults to x/gov unless overwritten). - 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 {} -``` diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/08-authorizations.md b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/08-authorizations.md deleted file mode 100644 index bd7a5b9269c..00000000000 --- a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/08-authorizations.md +++ /dev/null @@ -1,53 +0,0 @@ ---- -title: Authorizations -sidebar_label: Authorizations -sidebar_position: 8 -slug: /apps/transfer/authorizations ---- -# `TransferAuthorization` - -`TransferAuthorization` implements the `Authorization` interface for `ibc.applications.transfer.v1.MsgTransfer`. It allows a granter to grant a grantee the privilege to submit `MsgTransfer` on its behalf. Please see the [Cosmos SDK docs](https://docs.cosmos.network/v0.47/modules/authz) for more details on granting privileges via the `x/authz` module. - -More specifically, the granter allows the grantee to transfer funds that belong to the granter over a specified channel. - -For the specified channel, the granter must be able to specify a spend limit of a specific denomination they wish to allow the grantee to be able to transfer. - -The granter may be able to specify the list of addresses that they allow to receive funds. If empty, then all addresses are allowed. - -It takes: - -- a `SourcePort` and a `SourceChannel` which together comprise the unique transfer channel identifier over which authorized funds can be transferred. - -- a `SpendLimit` that specifies the maximum amount of tokens the grantee can transfer. The `SpendLimit` is updated as the tokens are transferred, unless the sentinel value of the maximum value for a 256-bit unsigned integer (i.e. 2^256 - 1) is used for the amount, in which case the `SpendLimit` will not be updated (please be aware that using this sentinel value will grant the grantee the privilege to transfer **all** the tokens of a given denomination available at the granter's account). The helper function `UnboundedSpendLimit` in the `types` package of the `transfer` module provides the sentinel value that can be used. This `SpendLimit` may also be updated to increase or decrease the limit as the granter wishes. - -- an `AllowList` list that specifies the list of addresses that are allowed to receive funds. If this list is empty, then all addresses are allowed to receive funds from the `TransferAuthorization`. - -Setting a `TransferAuthorization` is expected to fail if: - -- the spend limit is nil -- the denomination of the spend limit is an invalid coin type -- the source port ID is invalid -- the source channel ID is invalid -- there are duplicate entries in the `AllowList` - -Below is the `TransferAuthorization` message: - -```go -func NewTransferAuthorization(allocations ...Allocation) *TransferAuthorization { - return &TransferAuthorization{ - Allocations: allocations, - } -} - -type Allocation struct { - // the port on which the packet will be sent - SourcePort string - // the channel by which the packet will be sent - SourceChannel string - // spend limitation on the channel - SpendLimit sdk.Coins - // allow list of receivers, an empty allow list permits any receiver address - AllowList []string -} - -``` diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/09-client.md b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/09-client.md deleted file mode 100644 index 64ec2bd6ad1..00000000000 --- a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/09-client.md +++ /dev/null @@ -1,69 +0,0 @@ ---- -title: Client -sidebar_label: Client -sidebar_position: 9 -slug: /apps/transfer/client ---- - -# Client - -## CLI - -A user can query and interact with the `transfer` module using the CLI. Use the `--help` flag to discover the available commands: - -### Query - -The `query` commands allow users to query `transfer` state. - -```shell -simd query ibc-transfer --help -``` - -#### `total-escrow` - -The `total-escrow` command allows users to query the total amount in escrow for a particular coin denomination regardless of the transfer channel from where the coins were sent out. - -```shell -simd query ibc-transfer total-escrow [denom] [flags] -``` - -Example: - -```shell -simd query ibc-transfer total-escrow samoleans -``` - -Example Output: - -```shell -amount: "100" -``` - -## gRPC - -A user can query the `transfer` module using gRPC endpoints. - -### `TotalEscrowForDenom` - -The `TotalEscrowForDenom` endpoint allows users to query the total amount in escrow for a particular coin denomination regardless of the transfer channel from where the coins were sent out. - -```shell -ibc.applications.transfer.v1.Query/TotalEscrowForDenom -``` - -Example: - -```shell -grpcurl -plaintext \ - -d '{"denom":"samoleans"}' \ - localhost:9090 \ - ibc.applications.transfer.v1.Query/TotalEscrowForDenom -``` - -Example output: - -```shell -{ - "amount": "100" -} -``` diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/_category_.json b/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/_category_.json deleted file mode 100644 index d643a498cdf..00000000000 --- a/docs/versioned_docs/version-v8.0.x/02-apps/01-transfer/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": "Transfer", - "position": 1, - "link": null -} \ No newline at end of file diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/01-overview.md b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/01-overview.md deleted file mode 100644 index e8edada979f..00000000000 --- a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/01-overview.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Overview -sidebar_label: Overview -sidebar_position: 1 -slug: /apps/interchain-accounts/overview ---- - - -# Overview - -:::note Synopsis -Learn about what the Interchain Accounts module is -::: - -## What is the Interchain Accounts module? - -Interchain Accounts is the Cosmos SDK implementation of the ICS-27 protocol, which enables cross-chain account management built upon IBC. - -- How does an interchain account differ from a regular account? - -Regular accounts use a private key to sign transactions. Interchain Accounts are instead controlled programmatically by counterparty chains via IBC packets. - -## Concepts - -`Host Chain`: The chain where the interchain account is registered. The host chain listens for IBC packets from a controller chain which should contain instructions (e.g. Cosmos SDK messages) for which the interchain account will execute. - -`Controller Chain`: The chain registering and controlling an account on a host chain. The controller chain sends IBC packets to the host chain to control the account. - -`Interchain Account`: An account on a host chain created using the ICS-27 protocol. An interchain account has all the capabilities of a normal account. However, rather than signing transactions with a private key, a controller chain will send IBC packets to the host chain which signals what transactions the interchain account should execute. - -`Authentication Module`: A custom application module on the controller chain that uses the Interchain Accounts module to build custom logic for the creation & management of interchain accounts. It can be either an IBC application module using the [legacy API](10-legacy/03-keeper-api.md), or a regular Cosmos SDK application module sending messages to the controller submodule's `MsgServer` (this is the recommended approach from ibc-go v6 if access to packet callbacks is not needed). Please note that the legacy API will eventually be removed and IBC applications will not be able to use them in later releases. - -## SDK security model - -SDK modules on a chain are assumed to be trustworthy. For example, there are no checks to prevent an untrustworthy module from accessing the bank keeper. - -The implementation of ICS-27 in ibc-go uses this assumption in its security considerations. - -The implementation assumes other IBC application modules will not bind to ports within the ICS-27 namespace. diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/02-development.md b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/02-development.md deleted file mode 100644 index c42696cc514..00000000000 --- a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/02-development.md +++ /dev/null @@ -1,40 +0,0 @@ ---- -title: Development Use Cases -sidebar_label: Development Use Cases -sidebar_position: 2 -slug: /apps/interchain-accounts/development ---- - - -# Development use cases - -The initial version of Interchain Accounts allowed for the controller submodule to be extended by providing it with an underlying application which would handle all packet callbacks. -That functionality is now being deprecated in favor of alternative approaches. -This document will outline potential use cases and redirect each use case to the appropriate documentation. - -## Custom authentication - -Interchain accounts may be associated with alternative types of authentication relative to the traditional public/private key signing. -If you wish to develop or use Interchain Accounts with a custom authentication module and do not need to execute custom logic on the packet callbacks, we recommend you use ibc-go v6 or greater and that your custom authentication module interacts with the controller submodule via the [`MsgServer`](05-messages.md). - -If you wish to consume and execute custom logic in the packet callbacks, then please read the section [Packet callbacks](#packet-callbacks) below. - -## Redirection to a smart contract - -It may be desirable to allow smart contracts to control an interchain account. -To facilitate such an action, the controller submodule may be provided an underlying application which redirects to smart contract callers. -An improved design has been suggested in [ADR 008](https://github.com/cosmos/ibc-go/pull/1976) which performs this action via middleware. - -Implementers of this use case are recommended to follow the ADR 008 approach. -The underlying application may continue to be used as a short term solution for ADR 008 and the [legacy API](03-auth-modules.md#registerinterchainaccount) should continue to be utilized in such situations. - -## Packet callbacks - -If a developer requires access to packet callbacks for their use case, then they have the following options: - -1. Write a smart contract which is connected via an ADR 008 or equivalent IBC application (recommended). -2. Use the controller's underlying application to implement packet callback logic. - -In the first case, the smart contract should use the [`MsgServer`](05-messages.md). - -In the second case, the underlying application should use the [legacy API](10-legacy/03-keeper-api.md). diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/03-auth-modules.md b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/03-auth-modules.md deleted file mode 100644 index 31231952208..00000000000 --- a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/03-auth-modules.md +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: Authentication Modules -sidebar_label: Authentication Modules -sidebar_position: 3 -slug: /apps/interchain-accounts/auth-modules ---- - - -# Building an authentication module - -:::note Synopsis -Authentication modules enable application developers to perform custom logic when interacting with the Interchain Accounts controller sumbmodule's `MsgServer`. -::: - -The controller submodule is used for account registration and packet sending. It executes only logic required of all controllers of interchain accounts. The type of authentication used to manage the interchain accounts remains unspecified. There may exist many different types of authentication which are desirable for different use cases. Thus the purpose of the authentication module is to wrap the controller submodule with custom authentication logic. - -In ibc-go, authentication modules can communicate with the controller submodule by passing messages through `baseapp`'s `MsgServiceRouter`. To implement an authentication module, the `IBCModule` interface need not be fulfilled; it is only required to fulfill Cosmos SDK's `AppModuleBasic` interface, just like any regular Cosmos SDK application module. - -The authentication module must: - -- Authenticate interchain account owners. -- Track the associated interchain account address for an owner. -- Send packets on behalf of an owner (after authentication). - -## Integration into `app.go` file - -To integrate the authentication module into your chain, please follow the steps outlined in [`app.go` integration](04-integration.md#example-integration). diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/04-integration.md b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/04-integration.md deleted file mode 100644 index 974e7f978df..00000000000 --- a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/04-integration.md +++ /dev/null @@ -1,199 +0,0 @@ ---- -title: Integration -sidebar_label: Integration -sidebar_position: 4 -slug: /apps/interchain-accounts/integration ---- - - -# Integration - -:::note Synopsis -Learn how to integrate Interchain Accounts host and controller functionality to your chain. The following document only applies for Cosmos SDK chains. -::: - -The Interchain Accounts module contains two submodules. Each submodule has its own IBC application. The Interchain Accounts module should be registered as an `AppModule` in the same way all SDK modules are registered on a chain, but each submodule should create its own `IBCModule` as necessary. A route should be added to the IBC router for each submodule which will be used. - -Chains who wish to support ICS-27 may elect to act as a host chain, a controller chain or both. Disabling host or controller functionality may be done statically by excluding the host or controller submodule entirely from the `app.go` file or it may be done dynamically by taking advantage of the on-chain parameters which enable or disable the host or controller submodules. - -Interchain Account authentication modules (both custom or generic, such as the `x/gov`, `x/group` or `x/auth` Cosmos SDK modules) can send messages to the controller submodule's [`MsgServer`](05-messages.md) to register interchain accounts and send packets to the interchain account. To accomplish this, the authentication module needs to be composed with `baseapp`'s `MsgServiceRouter`. - -![ica-v6.png](./images/ica-v6.png) - -## Example integration - -```go -// app.go - -// Register the AppModule for the Interchain Accounts module and the authentication module -// Note: No `icaauth` exists, this must be substituted with an actual Interchain Accounts authentication module -ModuleBasics = module.NewBasicManager( - ... - ica.AppModuleBasic{}, - icaauth.AppModuleBasic{}, - ... -) - -... - -// Add module account permissions for the Interchain Accounts module -// Only necessary for host chain functionality -// Each Interchain Account created on the host chain is derived from the module account created -maccPerms = map[string][]string{ - ... - icatypes.ModuleName: nil, -} - -... - -// Add Interchain Accounts Keepers for each submodule used and the authentication module -// If a submodule is being statically disabled, the associated Keeper does not need to be added. -type App struct { - ... - - ICAControllerKeeper icacontrollerkeeper.Keeper - ICAHostKeeper icahostkeeper.Keeper - ICAAuthKeeper icaauthkeeper.Keeper - - ... -} - -... - -// Create store keys for each submodule Keeper and the authentication module -keys := sdk.NewKVStoreKeys( - ... - icacontrollertypes.StoreKey, - icahosttypes.StoreKey, - icaauthtypes.StoreKey, - ... -) - -... - -// Create the scoped keepers for each submodule keeper and authentication keeper -scopedICAControllerKeeper := app.CapabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName) -scopedICAHostKeeper := app.CapabilityKeeper.ScopeToModule(icahosttypes.SubModuleName) -scopedICAAuthKeeper := app.CapabilityKeeper.ScopeToModule(icaauthtypes.ModuleName) - -... - -// Create the Keeper for each submodule -app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper( - appCodec, keys[icacontrollertypes.StoreKey], app.GetSubspace(icacontrollertypes.SubModuleName), - app.IBCKeeper.ChannelKeeper, // may be replaced with middleware such as ics29 fee - app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, - scopedICAControllerKeeper, app.MsgServiceRouter(), -) -app.ICAHostKeeper = icahostkeeper.NewKeeper( - appCodec, keys[icahosttypes.StoreKey], app.GetSubspace(icahosttypes.SubModuleName), - app.IBCKeeper.ChannelKeeper, // may be replaced with middleware such as ics29 fee - app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, - app.AccountKeeper, scopedICAHostKeeper, app.MsgServiceRouter(), -) - -// Create Interchain Accounts AppModule -icaModule := ica.NewAppModule(&app.ICAControllerKeeper, &app.ICAHostKeeper) - -// Create your Interchain Accounts authentication module -app.ICAAuthKeeper = icaauthkeeper.NewKeeper(appCodec, keys[icaauthtypes.StoreKey], app.MsgServiceRouter()) - -// ICA auth AppModule -icaAuthModule := icaauth.NewAppModule(appCodec, app.ICAAuthKeeper) - -// Create controller IBC application stack and host IBC module as desired -icaControllerStack := icacontroller.NewIBCMiddleware(nil, app.ICAControllerKeeper) -icaHostIBCModule := icahost.NewIBCModule(app.ICAHostKeeper) - -// Register host and authentication routes -ibcRouter. - AddRoute(icacontrollertypes.SubModuleName, icaControllerStack). - AddRoute(icahosttypes.SubModuleName, icaHostIBCModule) -... - -// Register Interchain Accounts and authentication module AppModule's -app.moduleManager = module.NewManager( - ... - icaModule, - icaAuthModule, -) - -... - -// Add Interchain Accounts to begin blocker logic -app.moduleManager.SetOrderBeginBlockers( - ... - icatypes.ModuleName, - ... -) - -// Add Interchain Accounts to end blocker logic -app.moduleManager.SetOrderEndBlockers( - ... - icatypes.ModuleName, - ... -) - -// Add Interchain Accounts module InitGenesis logic -app.moduleManager.SetOrderInitGenesis( - ... - icatypes.ModuleName, - ... -) - -// initParamsKeeper init params keeper and its subspaces -func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino, key, tkey sdk.StoreKey) paramskeeper.Keeper { - ... - paramsKeeper.Subspace(icahosttypes.SubModuleName) - paramsKeeper.Subspace(icacontrollertypes.SubModuleName) - ... -} -``` - -If no custom athentication module is needed and a generic Cosmos SDK authentication module can be used, then from the sample integration code above all references to `ICAAuthKeeper` and `icaAuthModule` can be removed. That's it, the following code would not be needed: - -```go -// Create your Interchain Accounts authentication module -app.ICAAuthKeeper = icaauthkeeper.NewKeeper(appCodec, keys[icaauthtypes.StoreKey], app.MsgServiceRouter()) - -// ICA auth AppModule -icaAuthModule := icaauth.NewAppModule(appCodec, app.ICAAuthKeeper) -``` - -### Using submodules exclusively - -As described above, the Interchain Accounts application module is structured to support the ability of exclusively enabling controller or host functionality. -This can be achieved by simply omitting either controller or host `Keeper` from the Interchain Accounts `NewAppModule` constructor function, and mounting only the desired submodule via the `IBCRouter`. -Alternatively, submodules can be enabled and disabled dynamically using [on-chain parameters](06-parameters.md). - -The following snippets show basic examples of statically disabling submodules using `app.go`. - -#### Disabling controller chain functionality - -```go -// Create Interchain Accounts AppModule omitting the controller keeper -icaModule := ica.NewAppModule(nil, &app.ICAHostKeeper) - -// Create host IBC Module -icaHostIBCModule := icahost.NewIBCModule(app.ICAHostKeeper) - -// Register host route -ibcRouter.AddRoute(icahosttypes.SubModuleName, icaHostIBCModule) -``` - -#### Disabling host chain functionality - -```go -// Create Interchain Accounts AppModule omitting the host keeper -icaModule := ica.NewAppModule(&app.ICAControllerKeeper, nil) - - -// Optionally instantiate your custom authentication module if needed, or not otherwise -... - -// Create controller IBC application stack -icaControllerStack := icacontroller.NewIBCMiddleware(nil, app.ICAControllerKeeper) - -// Register controller route -ibcRouter.AddRoute(icacontrollertypes.SubModuleName, icaControllerStack) -``` diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/05-messages.md b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/05-messages.md deleted file mode 100644 index e94dc7c41fc..00000000000 --- a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/05-messages.md +++ /dev/null @@ -1,78 +0,0 @@ ---- -title: Messages -sidebar_label: Messages -sidebar_position: 5 -slug: /apps/interchain-accounts/messages ---- - - -# Messages - -## `MsgRegisterInterchainAccount` - -An Interchain Accounts channel handshake can be initiated using `MsgRegisterInterchainAccount`: - -```go -type MsgRegisterInterchainAccount struct { - Owner string - ConnectionID string - Version string -} -``` - -This message is expected to fail if: - -- `Owner` is an empty string. -- `ConnectionID` is invalid (see [24-host naming requirements](https://github.com/cosmos/ibc/blob/master/spec/core/ics-024-host-requirements/README.md#paths-identifiers-separators)). - -This message will construct a new `MsgChannelOpenInit` on chain and route it to the core IBC message server to initiate the opening step of the channel handshake. - -The controller submodule will generate a new port identifier and claim the associated port capability. The caller is expected to provide an appropriate application version string. For example, this may be an ICS-27 JSON encoded [`Metadata`](https://github.com/cosmos/ibc-go/blob/v6.0.0/proto/ibc/applications/interchain_accounts/v1/metadata.proto#L11) type or an ICS-29 JSON encoded [`Metadata`](https://github.com/cosmos/ibc-go/blob/v6.0.0/proto/ibc/applications/fee/v1/metadata.proto#L11) type with a nested application version. -If the `Version` string is omitted, the controller submodule will construct a default version string in the `OnChanOpenInit` handshake callback. - -```go -type MsgRegisterInterchainAccountResponse struct { - ChannelID string - PortId string -} -``` - -The `ChannelID` and `PortID` are returned in the message response. - -## `MsgSendTx` - -An Interchain Accounts transaction can be executed on a remote host chain by sending a `MsgSendTx` from the corresponding controller chain: - -```go -type MsgSendTx struct { - Owner string - ConnectionID string - PacketData InterchainAccountPacketData - RelativeTimeout uint64 -} -``` - -This message is expected to fail if: - -- `Owner` is an empty string. -- `ConnectionID` is invalid (see [24-host naming requirements](https://github.com/cosmos/ibc/blob/master/spec/core/ics-024-host-requirements/README.md#paths-identifiers-separators)). -- `PacketData` contains an `UNSPECIFIED` type enum, the length of `Data` bytes is zero or the `Memo` field exceeds 256 characters in length. -- `RelativeTimeout` is zero. - -This message will create a new IBC packet with the provided `PacketData` and send it via the channel associated with the `Owner` and `ConnectionID`. -The `PacketData` is expected to contain a list of serialized `[]sdk.Msg` in the form of `CosmosTx`. Please note the signer field of each `sdk.Msg` must be the interchain account address. -When the packet is relayed to the host chain, the `PacketData` is unmarshalled and the messages are authenticated and executed. - -```go -type MsgSendTxResponse struct { - Sequence uint64 -} -``` - -The packet `Sequence` is returned in the message response. - -## Atomicity - -As the Interchain Accounts module supports the execution of multiple transactions using the Cosmos SDK `Msg` interface, it provides the same atomicity guarantees as Cosmos SDK-based applications, leveraging the [`CacheMultiStore`](https://docs.cosmos.network/main/learn/advanced/store#cachemultistore) architecture provided by the [`Context`](https://docs.cosmos.network/main/learn/advanced/context.html) type. - -This provides atomic execution of transactions when using Interchain Accounts, where state changes are only committed if all `Msg`s succeed. diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/06-parameters.md b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/06-parameters.md deleted file mode 100644 index 5ab4fdd8478..00000000000 --- a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/06-parameters.md +++ /dev/null @@ -1,65 +0,0 @@ ---- -title: Parameters -sidebar_label: Parameters -sidebar_position: 6 -slug: /apps/interchain-accounts/parameters ---- - - -# Parameters - -The Interchain Accounts module contains the following on-chain parameters, logically separated for each distinct submodule: - -## Controller Submodule Parameters - -| Name | Type | Default Value | -|------------------------|------|---------------| -| `ControllerEnabled` | bool | `true` | - -### ControllerEnabled - -The `ControllerEnabled` parameter controls a chains ability to service ICS-27 controller specific logic. This includes the sending of Interchain Accounts packet data as well as the following ICS-26 callback handlers: - -- `OnChanOpenInit` -- `OnChanOpenAck` -- `OnChanCloseConfirm` -- `OnAcknowledgementPacket` -- `OnTimeoutPacket` - -## Host Submodule Parameters - -| Name | Type | Default Value | -|------------------------|----------|---------------| -| `HostEnabled` | bool | `true` | -| `AllowMessages` | []string | `["*"]` | - -### HostEnabled - -The `HostEnabled` parameter controls a chains ability to service ICS-27 host specific logic. This includes the following ICS-26 callback handlers: - -- `OnChanOpenTry` -- `OnChanOpenConfirm` -- `OnChanCloseConfirm` -- `OnRecvPacket` - -### AllowMessages - -The `AllowMessages` parameter provides the ability for a chain to limit the types of messages or transactions that hosted interchain accounts are authorized to execute by defining an allowlist using the Protobuf message type URL format. - -For example, a Cosmos SDK-based chain that elects to provide hosted Interchain Accounts with the ability of governance voting and staking delegations will define its parameters as follows: - -```json -"params": { - "host_enabled": true, - "allow_messages": ["/cosmos.staking.v1beta1.MsgDelegate", "/cosmos.gov.v1beta1.MsgVote"] -} -``` - -There is also a special wildcard `"*"` value which allows any type of message to be executed by the interchain account. This must be the only value in the `allow_messages` array. - -```json -"params": { - "host_enabled": true, - "allow_messages": ["*"] -} -``` diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/07-tx-encoding.md b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/07-tx-encoding.md deleted file mode 100644 index 5be03af2f8e..00000000000 --- a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/07-tx-encoding.md +++ /dev/null @@ -1,58 +0,0 @@ ---- -title: Transaction Encoding -sidebar_label: Transaction Encoding -sidebar_position: 7 -slug: /apps/interchain-accounts/tx-encoding ---- - -# Transaction Encoding - -When orchestrating an interchain account transaction, which comprises multiple `sdk.Msg` objects represented as `Any` types, the transactions must be encoded as bytes within [`InterchainAccountPacketData`](https://github.com/cosmos/ibc-go/blob/v7.2.0/proto/ibc/applications/interchain_accounts/v1/packet.proto#L21-L26). - -```protobuf -// InterchainAccountPacketData is comprised of a raw transaction, type of transaction and optional memo field. -message InterchainAccountPacketData { - Type type = 1; - bytes data = 2; - string memo = 3; -} -``` - -The `data` field must be encoded as a [`CosmosTx`](https://github.com/cosmos/ibc-go/blob/v7.2.0/proto/ibc/applications/interchain_accounts/v1/packet.proto#L28-L31). - -```protobuf -// CosmosTx contains a list of sdk.Msg's. It should be used when sending transactions to an SDK host chain. -message CosmosTx { - repeated google.protobuf.Any messages = 1; -} -``` - -The encoding method for `CosmosTx` is determined during the channel handshake process. If the channel version [metadata's `encoding` field](https://github.com/cosmos/ibc-go/blob/v7.2.0/proto/ibc/applications/interchain_accounts/v1/metadata.proto#L22) is marked as `proto3`, then `CosmosTx` undergoes protobuf encoding. Conversely, if the field is set to `proto3json`, then [proto3 json](https://protobuf.dev/programming-guides/proto3/#json) encoding takes place, which generates a JSON representation of the protobuf message. - -## Protobuf Encoding - -Protobuf encoding serves as the standard encoding process for `CosmosTx`. This occurs if the channel handshake initiates with an empty channel version metadata or if the `encoding` field explicitly denotes `proto3`. In Golang, the protobuf encoding procedure utilizes the `proto.Marshal` function. Every protobuf autogenerated Golang type comes equipped with a `Marshal` method that can be employed to encode the message. - -## (Protobuf) JSON Encoding - -The proto3 JSON encoding presents an alternative encoding technique for `CosmosTx`. It is selected if the channel handshake begins with the channel version metadata `encoding` field labeled as `proto3json`. In Golang, the Proto3 canonical encoding in JSON is implemented by the `"github.com/cosmos/gogoproto/jsonpb"` package. Within Cosmos SDK, the `ProtoCodec` structure implements the `JSONCodec` interface, leveraging the `jsonpb` package. This method generates a JSON format as follows: - -```json -{ - "messages": [ - { - "@type": "/cosmos.bank.v1beta1.MsgSend", - "from_address": "cosmos1...", - "to_address": "cosmos1...", - "amount": [ - { - "denom": "uatom", - "amount": "1000000" - } - ] - } - ] -} -``` - -Here, the `"messages"` array is populated with transactions. Each transaction is represented as a JSON object with the `@type` field denoting the transaction type and the remaining fields representing the transaction's attributes. diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/08-client.md b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/08-client.md deleted file mode 100644 index 023495a2aec..00000000000 --- a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/08-client.md +++ /dev/null @@ -1,183 +0,0 @@ ---- -title: Client -sidebar_label: Client -sidebar_position: 8 -slug: /apps/interchain-accounts/client ---- - -# Client - -## CLI - -A user can query and interact with the Interchain Accounts module using the CLI. Use the `--help` flag to discover the available commands: - -```shell -simd query interchain-accounts --help -``` - -> Please not that this section does not document all the available commands, but only the ones that deserved extra documentation that was not possible to fit in the command line documentation. - -### Controller - -A user can query and interact with the controller submodule. - -#### Query - -The `query` commands allow users to query the controller submodule. - -```shell -simd query interchain-accounts controller --help -``` - -#### Transactions - -The `tx` commands allow users to interact with the controller submodule. - -```shell -simd tx interchain-accounts controller --help -``` - -#### `send-tx` - -The `send-tx` command allows users to send a transaction on the provided connection to be executed using an interchain account on the host chain. - -```shell -simd tx interchain-accounts controller send-tx [connection-id] [path/to/packet_msg.json] -``` - -Example: - -```shell -simd tx interchain-accounts controller send-tx connection-0 packet-data.json --from cosmos1.. -``` - -See below for example contents of `packet-data.json`. The CLI handler will unmarshal the following into `InterchainAccountPacketData` appropriately. - -```json -{ - "type":"TYPE_EXECUTE_TX", - "data":"CqIBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEoEBCkFjb3Ntb3MxNWNjc2hobXAwZ3N4MjlxcHFxNmc0em1sdG5udmdteXU5dWV1YWRoOXkybmM1emowc3psczVndGRkehItY29zbW9zMTBoOXN0YzV2Nm50Z2V5Z2Y1eGY5NDVuanFxNWgzMnI1M3VxdXZ3Gg0KBXN0YWtlEgQxMDAw", - "memo":"" -} -``` - -Note the `data` field is a base64 encoded byte string as per the tx encoding agreed upon during the channel handshake. - -A helper CLI is provided in the host submodule which can be used to generate the packet data JSON using the counterparty chain's binary. See the [`generate-packet-data` command](#generate-packet-data) for an example. - -### Host - -A user can query and interact with the host submodule. - -#### Query - -The `query` commands allow users to query the host submodule. - -```shell -simd query interchain-accounts host --help -``` - -#### Transactions - -The `tx` commands allow users to interact with the controller submodule. - -```shell -simd tx interchain-accounts host --help -``` - -##### `generate-packet-data` - -The `generate-packet-data` command allows users to generate protobuf or proto3 JSON encoded interchain accounts packet data for input message(s). The packet data can then be used with the controller submodule's [`send-tx` command](#send-tx). The `--encoding` flag can be used to specify the encoding format (value must be either `proto3` or `proto3json`); if not specified, the default will be `proto3`. The `--memo` flag can be used to include a memo string in the interchain accounts packet data. - -```shell -simd tx interchain-accounts host generate-packet-data [message] -``` - -Example: - -```shell -simd tx interchain-accounts host generate-packet-data '[{ - "@type":"/cosmos.bank.v1beta1.MsgSend", - "from_address":"cosmos15ccshhmp0gsx29qpqq6g4zmltnnvgmyu9ueuadh9y2nc5zj0szls5gtddz", - "to_address":"cosmos10h9stc5v6ntgeygf5xf945njqq5h32r53uquvw", - "amount": [ - { - "denom": "stake", - "amount": "1000" - } - ] -}]' --memo memo -``` - -The command accepts a single `sdk.Msg` or a list of `sdk.Msg`s that will be encoded into the outputs `data` field. - -Example output: - -```json -{ - "type":"TYPE_EXECUTE_TX", - "data":"CqIBChwvY29zbW9zLmJhbmsudjFiZXRhMS5Nc2dTZW5kEoEBCkFjb3Ntb3MxNWNjc2hobXAwZ3N4MjlxcHFxNmc0em1sdG5udmdteXU5dWV1YWRoOXkybmM1emowc3psczVndGRkehItY29zbW9zMTBoOXN0YzV2Nm50Z2V5Z2Y1eGY5NDVuanFxNWgzMnI1M3VxdXZ3Gg0KBXN0YWtlEgQxMDAw", - "memo":"memo" -} -``` - -## gRPC - -A user can query the interchain account module using gRPC endpoints. - -### Controller - -A user can query the controller submodule using gRPC endpoints. - -#### `InterchainAccount` - -The `InterchainAccount` endpoint allows users to query the controller submodule for the interchain account address for a given owner on a particular connection. - -```shell -ibc.applications.interchain_accounts.controller.v1.Query/InterchainAccount -``` - -Example: - -```shell -grpcurl -plaintext \ - -d '{"owner":"cosmos1..","connection_id":"connection-0"}' \ - localhost:9090 \ - ibc.applications.interchain_accounts.controller.v1.Query/InterchainAccount -``` - -#### `Params` - -The `Params` endpoint users to query the current controller submodule parameters. - -```shell -ibc.applications.interchain_accounts.controller.v1.Query/Params -``` - -Example: - -```shell -grpcurl -plaintext \ - localhost:9090 \ - ibc.applications.interchain_accounts.controller.v1.Query/Params -``` - -### Host - -A user can query the host submodule using gRPC endpoints. - -#### `Params` - -The `Params` endpoint users to query the current host submodule parameters. - -```shell -ibc.applications.interchain_accounts.host.v1.Query/Params -``` - -Example: - -```shell -grpcurl -plaintext \ - localhost:9090 \ - ibc.applications.interchain_accounts.host.v1.Query/Params -``` diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/09-active-channels.md b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/09-active-channels.md deleted file mode 100644 index 3cb521b4bf3..00000000000 --- a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/09-active-channels.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: Active Channels -sidebar_label: Active Channels -sidebar_position: 9 -slug: /apps/interchain-accounts/active-channels ---- - -# Understanding Active Channels - -The Interchain Accounts module uses [ORDERED channels](https://github.com/cosmos/ibc/tree/master/spec/core/ics-004-channel-and-packet-semantics#ordering) to maintain the order of transactions when sending packets from a controller to a host chain. A limitation when using ORDERED channels is that when a packet times out the channel will be closed. - -In the case of a channel closing, a controller chain needs to be able to regain access to the interchain account registered on this channel. `Active Channels` enable this functionality. - -When an Interchain Account is registered using `MsgRegisterInterchainAccount`, a new channel is created on a particular port. During the `OnChanOpenAck` and `OnChanOpenConfirm` steps (on controller & host chain respectively) the `Active Channel` for this interchain account is stored in state. - -It is possible to create a new channel using the same controller chain portID if the previously set `Active Channel` is now in a `CLOSED` state. This channel creation can be initialized programmatically by sending a new `MsgChannelOpenInit` message like so: - -```go -msg := channeltypes.NewMsgChannelOpenInit(portID, string(versionBytes), channeltypes.ORDERED, []string{connectionID}, icatypes.HostPortID, authtypes.NewModuleAddress(icatypes.ModuleName).String()) -handler := keeper.msgRouter.Handler(msg) -res, err := handler(ctx, msg) -if err != nil { - return err -} -``` - -Alternatively, any relayer operator may initiate a new channel handshake for this interchain account once the previously set `Active Channel` is in a `CLOSED` state. This is done by initiating the channel handshake on the controller chain using the same portID associated with the interchain account in question. - -It is important to note that once a channel has been opened for a given interchain account, new channels can not be opened for this account until the currently set `Active Channel` is set to `CLOSED`. - -## Future improvements - -Future versions of the ICS-27 protocol and the Interchain Accounts module will likely use a new channel type that provides ordering of packets without the channel closing in the event of a packet timing out, thus removing the need for `Active Channels` entirely. -The following is a list of issues which will provide the infrastructure to make this possible: - -- [IBC Channel Upgrades](https://github.com/cosmos/ibc-go/issues/1599) -- [Implement ORDERED_ALLOW_TIMEOUT logic in 04-channel](https://github.com/cosmos/ibc-go/issues/1661) -- [Add ORDERED_ALLOW_TIMEOUT as supported ordering in 03-connection](https://github.com/cosmos/ibc-go/issues/1662) -- [Allow ICA channels to be opened as ORDERED_ALLOW_TIMEOUT](https://github.com/cosmos/ibc-go/issues/1663) diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md deleted file mode 100644 index e9bf7038647..00000000000 --- a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/01-auth-modules.md +++ /dev/null @@ -1,274 +0,0 @@ ---- -title: Authentication Modules -sidebar_label: Authentication Modules -sidebar_position: 1 -slug: /apps/interchain-accounts/legacy/auth-modules ---- - - -# Building an authentication module - -## Deprecation Notice - -**This document is deprecated and will be removed in future releases**. - -:::note Synopsis -Authentication modules play the role of the `Base Application` as described in [ICS-30 IBC Middleware](https://github.com/cosmos/ibc/tree/master/spec/app/ics-030-middleware), and enable application developers to perform custom logic when working with the Interchain Accounts controller API. -::: - -The controller submodule is used for account registration and packet sending. It executes only logic required of all controllers of interchain accounts. The type of authentication used to manage the interchain accounts remains unspecified. There may exist many different types of authentication which are desirable for different use cases. Thus the purpose of the authentication module is to wrap the controller submodule with custom authentication logic. - -In ibc-go, authentication modules are connected to the controller chain via a middleware stack. The controller submodule is implemented as [middleware](https://github.com/cosmos/ibc/tree/master/spec/app/ics-030-middleware) and the authentication module is connected to the controller submodule as the base application of the middleware stack. To implement an authentication module, the `IBCModule` interface must be fulfilled. By implementing the controller submodule as middleware, any amount of authentication modules can be created and connected to the controller submodule without writing redundant code. - -The authentication module must: - -- Authenticate interchain account owners. -- Track the associated interchain account address for an owner. -- Send packets on behalf of an owner (after authentication). - -> Please note that since ibc-go v6 the channel capability is claimed by the controller submodule and therefore it is not required for authentication modules to claim the capability in the `OnChanOpenInit` callback. When the authentication module sends packets on the channel created for the associated interchain account it can pass a `nil` capability to the legacy function `SendTx` of the controller keeper (see section [`SendTx`](03-keeper-api.md#sendtx) for more information). - -## `IBCModule` implementation - -The following `IBCModule` callbacks must be implemented with appropriate custom logic: - -```go -// OnChanOpenInit implements the IBCModule interface -func (im IBCModule) OnChanOpenInit( - ctx sdk.Context, - order channeltypes.Order, - connectionHops []string, - portID string, - channelID string, - chanCap *capabilitytypes.Capability, - counterparty channeltypes.Counterparty, - version string, -) (string, error) { - // since ibc-go v6 the authentication module *must not* claim the channel capability on OnChanOpenInit - - // perform custom logic - - return version, nil -} - -// OnChanOpenAck implements the IBCModule interface -func (im IBCModule) OnChanOpenAck( - ctx sdk.Context, - portID, - channelID string, - counterpartyVersion string, -) error { - // perform custom logic - - return nil -} - -// OnChanCloseConfirm implements the IBCModule interface -func (im IBCModule) OnChanCloseConfirm( - ctx sdk.Context, - portID, - channelID string, -) error { - // perform custom logic - - return nil -} - -// OnAcknowledgementPacket implements the IBCModule interface -func (im IBCModule) OnAcknowledgementPacket( - ctx sdk.Context, - packet channeltypes.Packet, - acknowledgement []byte, - relayer sdk.AccAddress, -) error { - // perform custom logic - - return nil -} - -// OnTimeoutPacket implements the IBCModule interface. -func (im IBCModule) OnTimeoutPacket( - ctx sdk.Context, - packet channeltypes.Packet, - relayer sdk.AccAddress, -) error { - // perform custom logic - - return nil -} -``` - -The following functions must be defined to fulfill the `IBCModule` interface, but they will never be called by the controller submodule so they may error or panic. That is because in Interchain Accounts, the channel handshake is always initiated on the controller chain and packets are always sent to the host chain and never to the controller chain. - -```go -// OnChanOpenTry implements the IBCModule interface -func (im IBCModule) OnChanOpenTry( - ctx sdk.Context, - order channeltypes.Order, - connectionHops []string, - portID, - channelID string, - chanCap *capabilitytypes.Capability, - counterparty channeltypes.Counterparty, - counterpartyVersion string, -) (string, error) { - panic("UNIMPLEMENTED") -} - -// OnChanOpenConfirm implements the IBCModule interface -func (im IBCModule) OnChanOpenConfirm( - ctx sdk.Context, - portID, - channelID string, -) error { - panic("UNIMPLEMENTED") -} - -// OnChanCloseInit implements the IBCModule interface -func (im IBCModule) OnChanCloseInit( - ctx sdk.Context, - portID, - channelID string, -) error { - panic("UNIMPLEMENTED") -} - -// OnRecvPacket implements the IBCModule interface. A successful acknowledgement -// is returned if the packet data is successfully decoded and the receive application -// logic returns without error. -func (im IBCModule) OnRecvPacket( - ctx sdk.Context, - packet channeltypes.Packet, - relayer sdk.AccAddress, -) ibcexported.Acknowledgement { - panic("UNIMPLEMENTED") -} -``` - -## `OnAcknowledgementPacket` - -Controller chains will be able to access the acknowledgement written into the host chain state once a relayer relays the acknowledgement. -The acknowledgement bytes contain either the response of the execution of the message(s) on the host chain or an error. They will be passed to the auth module via the `OnAcknowledgementPacket` callback. Auth modules are expected to know how to decode the acknowledgement. - -If the controller chain is connected to a host chain using the host module on ibc-go, it may interpret the acknowledgement bytes as follows: - -Begin by unmarshaling the acknowledgement into `sdk.TxMsgData`: - -```go -var ack channeltypes.Acknowledgement -if err := channeltypes.SubModuleCdc.UnmarshalJSON(acknowledgement, &ack); err != nil { - return err -} - -txMsgData := &sdk.TxMsgData{} -if err := proto.Unmarshal(ack.GetResult(), txMsgData); err != nil { - return err -} -``` - -If the `txMsgData.Data` field is non nil, the host chain is using SDK version \<\= v0.45. -The auth module should interpret the `txMsgData.Data` as follows: - -```go -switch len(txMsgData.Data) { -case 0: - // see documentation below for SDK 0.46.x or greater -default: - for _, msgData := range txMsgData.Data { - if err := handler(msgData); err != nil { - return err - } - } -... -} -``` - -A handler will be needed to interpret what actions to perform based on the message type sent. -A router could be used, or more simply a switch statement. - -```go -func handler(msgData sdk.MsgData) error { -switch msgData.MsgType { -case sdk.MsgTypeURL(&banktypes.MsgSend{}): - msgResponse := &banktypes.MsgSendResponse{} - if err := proto.Unmarshal(msgData.Data, msgResponse}; err != nil { - return err - } - - handleBankSendMsg(msgResponse) - -case sdk.MsgTypeURL(&stakingtypes.MsgDelegate{}): - msgResponse := &stakingtypes.MsgDelegateResponse{} - if err := proto.Unmarshal(msgData.Data, msgResponse}; err != nil { - return err - } - - handleStakingDelegateMsg(msgResponse) - -case sdk.MsgTypeURL(&transfertypes.MsgTransfer{}): - msgResponse := &transfertypes.MsgTransferResponse{} - if err := proto.Unmarshal(msgData.Data, msgResponse}; err != nil { - return err - } - - handleIBCTransferMsg(msgResponse) - -default: - return -} -``` - -If the `txMsgData.Data` is empty, the host chain is using SDK version > v0.45. -The auth module should interpret the `txMsgData.Responses` as follows: - -```go -... -// switch statement from above -case 0: - for _, any := range txMsgData.MsgResponses { - if err := handleAny(any); err != nil { - return err - } - } -} -``` - -A handler will be needed to interpret what actions to perform based on the type URL of the Any. -A router could be used, or more simply a switch statement. -It may be possible to deduplicate logic between `handler` and `handleAny`. - -```go -func handleAny(any *codectypes.Any) error { -switch any.TypeURL { -case banktypes.MsgSend: - msgResponse, err := unpackBankMsgSendResponse(any) - if err != nil { - return err - } - - handleBankSendMsg(msgResponse) - -case stakingtypes.MsgDelegate: - msgResponse, err := unpackStakingDelegateResponse(any) - if err != nil { - return err - } - - handleStakingDelegateMsg(msgResponse) - - case transfertypes.MsgTransfer: - msgResponse, err := unpackIBCTransferMsgResponse(any) - if err != nil { - return err - } - - handleIBCTransferMsg(msgResponse) - -default: - return -} -``` - -## Integration into `app.go` file - -To integrate the authentication module into your chain, please follow the steps outlined in [`app.go` integration](02-integration.md#example-integration). diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/02-integration.md b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/02-integration.md deleted file mode 100644 index 90a645aaabd..00000000000 --- a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/02-integration.md +++ /dev/null @@ -1,201 +0,0 @@ ---- -title: Integration -sidebar_label: Integration -sidebar_position: 2 -slug: /apps/interchain-accounts/legacy/integration ---- - - -# Integration - -## Deprecation Notice - -**This document is deprecated and will be removed in future releases**. - -:::note Synopsis -Learn how to integrate Interchain Accounts host and controller functionality to your chain. The following document only applies for Cosmos SDK chains. -::: - -The Interchain Accounts module contains two submodules. Each submodule has its own IBC application. The Interchain Accounts module should be registered as an `AppModule` in the same way all SDK modules are registered on a chain, but each submodule should create its own `IBCModule` as necessary. A route should be added to the IBC router for each submodule which will be used. - -Chains who wish to support ICS-27 may elect to act as a host chain, a controller chain or both. Disabling host or controller functionality may be done statically by excluding the host or controller module entirely from the `app.go` file or it may be done dynamically by taking advantage of the on-chain parameters which enable or disable the host or controller submodules. - -Interchain Account authentication modules are the base application of a middleware stack. The controller submodule is the middleware in this stack. - -![ica-pre-v6.png](./images/ica-pre-v6.png) - -> Please note that since ibc-go v6 the channel capability is claimed by the controller submodule and therefore it is not required for authentication modules to claim the capability in the `OnChanOpenInit` callback. Therefore the custom authentication module does not need a scoped keeper anymore. - -## Example integration - -```go -// app.go - -// Register the AppModule for the Interchain Accounts module and the authentication module -// Note: No `icaauth` exists, this must be substituted with an actual Interchain Accounts authentication module -ModuleBasics = module.NewBasicManager( - ... - ica.AppModuleBasic{}, - icaauth.AppModuleBasic{}, - ... -) - -... - -// Add module account permissions for the Interchain Accounts module -// Only necessary for host chain functionality -// Each Interchain Account created on the host chain is derived from the module account created -maccPerms = map[string][]string{ - ... - icatypes.ModuleName: nil, -} - -... - -// Add Interchain Accounts Keepers for each submodule used and the authentication module -// If a submodule is being statically disabled, the associated Keeper does not need to be added. -type App struct { - ... - - ICAControllerKeeper icacontrollerkeeper.Keeper - ICAHostKeeper icahostkeeper.Keeper - ICAAuthKeeper icaauthkeeper.Keeper - - ... -} - -... - -// Create store keys for each submodule Keeper and the authentication module -keys := sdk.NewKVStoreKeys( - ... - icacontrollertypes.StoreKey, - icahosttypes.StoreKey, - icaauthtypes.StoreKey, - ... -) - -... - -// Create the scoped keepers for each submodule keeper and authentication keeper -scopedICAControllerKeeper := app.CapabilityKeeper.ScopeToModule(icacontrollertypes.SubModuleName) -scopedICAHostKeeper := app.CapabilityKeeper.ScopeToModule(icahosttypes.SubModuleName) - -... - -// Create the Keeper for each submodule -app.ICAControllerKeeper = icacontrollerkeeper.NewKeeper( - appCodec, keys[icacontrollertypes.StoreKey], app.GetSubspace(icacontrollertypes.SubModuleName), - app.IBCKeeper.ChannelKeeper, // may be replaced with middleware such as ics29 fee - app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, - scopedICAControllerKeeper, app.MsgServiceRouter(), -) -app.ICAHostKeeper = icahostkeeper.NewKeeper( - appCodec, keys[icahosttypes.StoreKey], app.GetSubspace(icahosttypes.SubModuleName), - app.IBCKeeper.ChannelKeeper, // may be replaced with middleware such as ics29 fee - app.IBCKeeper.ChannelKeeper, &app.IBCKeeper.PortKeeper, - app.AccountKeeper, scopedICAHostKeeper, app.MsgServiceRouter(), -) - -// Create Interchain Accounts AppModule -icaModule := ica.NewAppModule(&app.ICAControllerKeeper, &app.ICAHostKeeper) - -// Create your Interchain Accounts authentication module -app.ICAAuthKeeper = icaauthkeeper.NewKeeper(appCodec, keys[icaauthtypes.StoreKey], app.ICAControllerKeeper) - -// ICA auth AppModule -icaAuthModule := icaauth.NewAppModule(appCodec, app.ICAAuthKeeper) - -// ICA auth IBC Module -icaAuthIBCModule := icaauth.NewIBCModule(app.ICAAuthKeeper) - -// Create controller IBC application stack and host IBC module as desired -icaControllerStack := icacontroller.NewIBCMiddleware(icaAuthIBCModule, app.ICAControllerKeeper) -icaHostIBCModule := icahost.NewIBCModule(app.ICAHostKeeper) - -// Register host and authentication routes -ibcRouter. - AddRoute(icacontrollertypes.SubModuleName, icaControllerStack). - AddRoute(icahosttypes.SubModuleName, icaHostIBCModule). - AddRoute(icaauthtypes.ModuleName, icaControllerStack) // Note, the authentication module is routed to the top level of the middleware stack - -... - -// Register Interchain Accounts and authentication module AppModule's -app.moduleManager = module.NewManager( - ... - icaModule, - icaAuthModule, -) - -... - -// Add fee middleware to begin blocker logic -app.moduleManager.SetOrderBeginBlockers( - ... - icatypes.ModuleName, - ... -) - -// Add fee middleware to end blocker logic -app.moduleManager.SetOrderEndBlockers( - ... - icatypes.ModuleName, - ... -) - -// Add Interchain Accounts module InitGenesis logic -app.moduleManager.SetOrderInitGenesis( - ... - icatypes.ModuleName, - ... -) - -// initParamsKeeper init params keeper and its subspaces -func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino, key, tkey sdk.StoreKey) paramskeeper.Keeper { - ... - paramsKeeper.Subspace(icahosttypes.SubModuleName) - paramsKeeper.Subspace(icacontrollertypes.SubModuleName) - ... -``` - -## Using submodules exclusively - -As described above, the Interchain Accounts application module is structured to support the ability of exclusively enabling controller or host functionality. -This can be achieved by simply omitting either controller or host `Keeper` from the Interchain Accounts `NewAppModule` constructor function, and mounting only the desired submodule via the `IBCRouter`. -Alternatively, submodules can be enabled and disabled dynamically using [on-chain parameters](../06-parameters.md). - -The following snippets show basic examples of statically disabling submodules using `app.go`. - -### Disabling controller chain functionality - -```go -// Create Interchain Accounts AppModule omitting the controller keeper -icaModule := ica.NewAppModule(nil, &app.ICAHostKeeper) - -// Create host IBC Module -icaHostIBCModule := icahost.NewIBCModule(app.ICAHostKeeper) - -// Register host route -ibcRouter.AddRoute(icahosttypes.SubModuleName, icaHostIBCModule) -``` - -### Disabling host chain functionality - -```go -// Create Interchain Accounts AppModule omitting the host keeper -icaModule := ica.NewAppModule(&app.ICAControllerKeeper, nil) - -// Create your Interchain Accounts authentication module, setting up the Keeper, AppModule and IBCModule appropriately -app.ICAAuthKeeper = icaauthkeeper.NewKeeper(appCodec, keys[icaauthtypes.StoreKey], app.ICAControllerKeeper) -icaAuthModule := icaauth.NewAppModule(appCodec, app.ICAAuthKeeper) -icaAuthIBCModule := icaauth.NewIBCModule(app.ICAAuthKeeper) - -// Create controller IBC application stack -icaControllerStack := icacontroller.NewIBCMiddleware(icaAuthIBCModule, app.ICAControllerKeeper) - -// Register controller and authentication routes -ibcRouter. - AddRoute(icacontrollertypes.SubModuleName, icaControllerStack). - AddRoute(icaauthtypes.ModuleName, icaControllerStack) // Note, the authentication module is routed to the top level of the middleware stack -``` diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/03-keeper-api.md b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/03-keeper-api.md deleted file mode 100644 index 252c7eaf7ff..00000000000 --- a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/03-keeper-api.md +++ /dev/null @@ -1,125 +0,0 @@ ---- -title: Keeper API -sidebar_label: Keeper API -sidebar_position: 3 -slug: /apps/interchain-accounts/legacy/keeper-api ---- - - -# Keeper API - -## Deprecation Notice - -**This document is deprecated and will be removed in future releases**. - -The controller submodule keeper exposes two legacy functions that allow respectively for custom authentication modules to register interchain accounts and send packets to the interchain account. - -## `RegisterInterchainAccount` - -The authentication module can begin registering interchain accounts by calling `RegisterInterchainAccount`: - -```go -if err := keeper.icaControllerKeeper.RegisterInterchainAccount(ctx, connectionID, owner.String(), version); err != nil { - return err -} - -return nil -``` - -The `version` argument is used to support ICS-29 fee middleware for relayer incentivization of ICS-27 packets. Consumers of the `RegisterInterchainAccount` are expected to build the appropriate JSON encoded version string themselves and pass it accordingly. If an empty string is passed in the `version` argument, then the version will be initialized to a default value in the `OnChanOpenInit` callback of the controller's handler, so that channel handshake can proceed. - -The following code snippet illustrates how to construct an appropriate interchain accounts `Metadata` and encode it as a JSON bytestring: - -```go -icaMetadata := icatypes.Metadata{ - Version: icatypes.Version, - ControllerConnectionId: controllerConnectionID, - HostConnectionId: hostConnectionID, - Encoding: icatypes.EncodingProtobuf, - TxType: icatypes.TxTypeSDKMultiMsg, -} - -appVersion, err := icatypes.ModuleCdc.MarshalJSON(&icaMetadata) -if err != nil { - return err -} - -if err := keeper.icaControllerKeeper.RegisterInterchainAccount(ctx, controllerConnectionID, owner.String(), string(appVersion)); err != nil { - return err -} -``` - -Similarly, if the application stack is configured to route through ICS-29 fee middleware and a fee enabled channel is desired, construct the appropriate ICS-29 `Metadata` type: - -```go -icaMetadata := icatypes.Metadata{ - Version: icatypes.Version, - ControllerConnectionId: controllerConnectionID, - HostConnectionId: hostConnectionID, - Encoding: icatypes.EncodingProtobuf, - TxType: icatypes.TxTypeSDKMultiMsg, -} - -appVersion, err := icatypes.ModuleCdc.MarshalJSON(&icaMetadata) -if err != nil { - return err -} - -feeMetadata := feetypes.Metadata{ - AppVersion: string(appVersion), - FeeVersion: feetypes.Version, -} - -feeEnabledVersion, err := feetypes.ModuleCdc.MarshalJSON(&feeMetadata) -if err != nil { - return err -} - -if err := keeper.icaControllerKeeper.RegisterInterchainAccount(ctx, controllerConnectionID, owner.String(), string(feeEnabledVersion)); err != nil { - return err -} -``` - -## `SendTx` - -The authentication module can attempt to send a packet by calling `SendTx`: - -```go -// Authenticate owner -// perform custom logic - -// Construct controller portID based on interchain account owner address -portID, err := icatypes.NewControllerPortID(owner.String()) -if err != nil { - return err -} - -// Obtain data to be sent to the host chain. -// In this example, the owner of the interchain account would like to send a bank MsgSend to the host chain. -// The appropriate serialization function should be called. The host chain must be able to deserialize the transaction. -// If the host chain is using the ibc-go host module, `SerializeCosmosTx` should be used. -msg := &banktypes.MsgSend{FromAddress: fromAddr, ToAddress: toAddr, Amount: amt} -data, err := icatypes.SerializeCosmosTx(keeper.cdc, []proto.Message{msg}) -if err != nil { - return err -} - -// Construct packet data -packetData := icatypes.InterchainAccountPacketData{ - Type: icatypes.EXECUTE_TX, - Data: data, -} - -// Obtain timeout timestamp -// An appropriate timeout timestamp must be determined based on the usage of the interchain account. -// If the packet times out, the channel will be closed requiring a new channel to be created. -timeoutTimestamp := obtainTimeoutTimestamp() - -// Send the interchain accounts packet, returning the packet sequence -// A nil channel capability can be passed, since the controller submodule (and not the authentication module) -// claims the channel capability since ibc-go v6. -seq, err = keeper.icaControllerKeeper.SendTx(ctx, nil, portID, packetData, timeoutTimestamp) -``` - -The data within an `InterchainAccountPacketData` must be serialized using a format supported by the host chain. -If the host chain is using the ibc-go host chain submodule, `SerializeCosmosTx` should be used. If the `InterchainAccountPacketData.Data` is serialized using a format not supported by the host chain, the packet will not be successfully received. diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/_category_.json b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/_category_.json deleted file mode 100644 index 70500795bf8..00000000000 --- a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": "Legacy", - "position": 10, - "link": null -} diff --git a/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/images/ica-pre-v6.png b/docs/versioned_docs/version-v8.0.x/02-apps/02-interchain-accounts/10-legacy/images/ica-pre-v6.png deleted file mode 100644 index acd00d1294b3e1034b5d75b0969a42cc4b342917..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34698 zcmc$G^;?x&)a|AeQ9`5yN$EyPIs^oyQ<0LEmhKV-q@+u_Hv%FcT~Y!9N=k#2bV*8l zbD!_If5Cn3bAM3J!Ts)c#awfaG3Ho?si{21#UaN*AP~3;@-i9-1p0OOMTd|={J0cWM_{{yvpt=Vc#ipWWbytcoq>r5Vh<@^y9iATBfiA2@5-#8kf(Iq>^A!v`^dk<`TNeqt;52xI_HIBJ@ z>N}1rHZ!U{I;ws6@2UjZa2UaZ8o)PfX4D^QSpOe?Lm=VhlCQ;+!9eIrZg^^}uD9 z<;K%8=^l>!RJKw5n}>$s$5#DMO57Im^o-}K-;?XEH~H*Hj1xJhvjFL5!KM0 zu+MQ;c(+&nDa0qrH{IPEA&?sG@|@8$P1ID^&?@Voh-KbmUGSy#Y}684avvS#(!8S) zN4GhwSS+nu_lHSLW7x_$T$IN%Nk3BH@aHlEW79VS`;Y`~r5GgD& zzAa*WYm7v1S|Gni(1{gw=W*|l8_}{+mEadLy4=5tf!3)3I~L%qsh zHM45VM02#V#G!hfo?=OS$kz5#VJ1158q4S9tAf$)xfy)R^&8_0XMVg!8w}0D(nYF> zP*v8d$myx}ecWX)^O>B<&lWTtlGqMrtCQ}D$hHVoXNGFiw&>kSG!5f-rU7H zvezjQ6_*;-Phz~XMy5U~@!Lw>Fo_@9D0%trmwbdqw3wRv`}OCpfBPqGPi7{2odjv= zhdv%}<@;GydVMa6FHzglIjio}ODia-Et_O4cnW6@9hk-b$F)91h?}AACJ@drjq<=c%;NeX1%66e5?G# zM(I}hTW)@xvOCQMD!zwYt$0O=1L3FV*Q#v}4{n)Vj8};lxFsV4KaNqAUuDb4GQ_OD zC!joZMXO4+@@%+nM7$g$lj@ogkLmEr!`n$=%C}hMcK#@4mY#qA=z#aa{%P!=Q?@_I z!x<;)O;;?Wpp$Ay-iCid@|LRaaZ=!MIJlBx?!#w8t z2JrK$aaBcoh*j6%Mxvpj7nGpP84JlxdF>{nkdjw--5;C~!7T3pJX zN_?QB-DUH-gY0lQ?Z#*6&+DBl<4h+bPc)zMBNJnpYWgZ)aI0k+l-m{!#OWd$n}fe> z6wZFUW-Q@Bthcv8d_7d5qalt}gcvPr^1^Sdjy!^Zwf@;Q)>LO@LgGpnffiO%h8#Z+ zA0&?`0hjuQR~tvSo7*z2-!@u*;{9EdiI2OdVzBW+XRbU$ zxvPril@n^^r6_^2%1QT~ch?)htLK7aE0P;SKhk?ow| zv;+ZClkVqCL|LnG)@=)4kGuh^A*@Q8psEMjOr(iVGU|w#>s1hlTAbK#$sG}LQVv

-X0lt-%*Y^>T_m~>6d~+yx&*Qo+&8Y7S|QQ1 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 Lt8i2_F8RWS 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�6fslqOEhRSQJK6rLluuhu+>zDy@VbCsxkb|NX~ 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 It is important to note that `Misbehaviour` in this particular context is referring to misbehaviour on the chain level intended to fool the light client. This will be defined by each light client. - -## `VerifyClientMessage` - -`VerifyClientMessage` must verify a `ClientMessage`. A `ClientMessage` could be a `Header`, `Misbehaviour`, or batch update. To understand how to implement a `ClientMessage`, please refer to the [Implementing the `ClientMessage` interface](#implementing-the-clientmessage-interface) section. - -It must handle each type of `ClientMessage` appropriately. Calls to `CheckForMisbehaviour`, `UpdateState`, and `UpdateStateOnMisbehaviour` will assume that the content of the `ClientMessage` has been verified and can be trusted. An error should be returned if the `ClientMessage` fails to verify. - -For an example of a `VerifyClientMessage` implementation, please check the [Tendermint light client](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/update.go#L20). - -## `CheckForMisbehaviour` - -Checks for evidence of a misbehaviour in `Header` or `Misbehaviour` type. It assumes the `ClientMessage` has already been verified. - -For an example of a `CheckForMisbehaviour` implementation, please check the [Tendermint light client](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/misbehaviour_handle.go#L19). - -> The Tendermint light client [defines `Misbehaviour`](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/misbehaviour.go) as two different types of situations: a situation where two conflicting `Header`s with the same height have been submitted to update a client's `ConsensusState` within the same trusting period, or that the two conflicting `Header`s have been submitted at different heights but the consensus states are not in the correct monotonic time ordering (BFT time violation). More explicitly, updating to a new height must have a timestamp greater than the previous consensus state, or, if inserting a consensus at a past height, then time must be less than those heights which come after and greater than heights which come before. - -## `UpdateStateOnMisbehaviour` - -`UpdateStateOnMisbehaviour` should perform appropriate state changes on a client state given that misbehaviour has been detected and verified. This method should only be called when misbehaviour is detected, as it does not perform any misbehaviour checks. Notably, it should freeze the client so that calling the `Status` function on the associated client state no longer returns `Active`. - -For an example of a `UpdateStateOnMisbehaviour` implementation, please check the [Tendermint light client](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/update.go#L199). - -## `UpdateState` - -`UpdateState` updates and stores as necessary any associated information for an IBC client, such as the `ClientState` and corresponding `ConsensusState`. It should perform a no-op on duplicate updates. - -It assumes the `ClientMessage` has already been verified. - -For an example of a `UpdateState` implementation, please check the [Tendermint light client](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/update.go#L131). - -## Putting it all together - -The `02-client` `Keeper` module in ibc-go offers a reference as to how these functions will be used to [update the client](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/02-client/keeper/client.go#L48). - -```go -if err := clientState.VerifyClientMessage(clientMessage); err != nil { - return err -} - -foundMisbehaviour := clientState.CheckForMisbehaviour(clientMessage) -if foundMisbehaviour { - clientState.UpdateStateOnMisbehaviour(clientMessage) - // emit misbehaviour event - return -} - -clientState.UpdateState(clientMessage) // expects no-op on duplicate header -// emit update event -return diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/05-upgrades.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/05-upgrades.md deleted file mode 100644 index a6fc3858c3d..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/05-upgrades.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Handling Upgrades -sidebar_label: Handling Upgrades -sidebar_position: 5 -slug: /ibc/light-clients/upgrades ---- - - -# Handling upgrades - -It is vital that high-value IBC clients can upgrade along with their underlying chains to avoid disruption to the IBC ecosystem. Thus, IBC client developers will want to implement upgrade functionality to enable clients to maintain connections and channels even across chain upgrades. - -## Implementing `VerifyUpgradeAndUpdateState` - -The IBC protocol allows client implementations to provide a path to upgrading clients given the upgraded `ClientState`, upgraded `ConsensusState` and proofs for each. This path is provided in the `VerifyUpgradeAndUpdateState` method: - -```go -// NOTE: proof heights are not included as upgrade to a new revision is expected to pass only on the last height committed by the current revision. Clients are responsible for ensuring that the planned last height of the current revision is somehow encoded in the proof verification process. -// This is to ensure that no premature upgrades occur, since upgrade plans committed to by the counterparty may be cancelled or modified before the last planned height. -// If the upgrade is verified, the upgraded client and consensus states must be set in the client store. -func (cs ClientState) VerifyUpgradeAndUpdateState( - ctx sdk.Context, - cdc codec.BinaryCodec, - store sdk.KVStore, - newClient ClientState, - newConsState ConsensusState, - proofUpgradeClient, - proofUpgradeConsState []byte, -) error -``` - -> Please refer to the [Tendermint light client implementation](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/upgrade.go#L27) as an example for implementation. - -It is important to note that light clients **must** handle all management of client and consensus states including the setting of updated `ClientState` and `ConsensusState` in the client store. This can include verifying that the submitted upgraded `ClientState` is of a valid `ClientState` type, that the height of the upgraded client is not greater than the height of the current client (in order to preserve BFT monotonic time), or that certain parameters which should not be changed have not been altered in the upgraded `ClientState`. - -Developers must ensure that the `MsgUpgradeClient` does not pass until the last height of the old chain has been committed, and after the chain upgrades, the `MsgUpgradeClient` should pass once and only once on all counterparty clients. - -### Upgrade path - -Clients should have **prior knowledge of the merkle path** that the upgraded client and upgraded consensus states will use. The height at which the upgrade has occurred should also be encoded in the proof. -> The Tendermint client implementation accomplishes this by including an `UpgradePath` in the `ClientState` itself, which is used along with the upgrade height to construct the merkle path under which the client state and consensus state are committed. - -## Chain specific vs client specific client parameters - -Developers should maintain the distinction between client parameters that are uniform across every valid light client of a chain (chain-chosen parameters), and client parameters that are customizable by each individual client (client-chosen parameters); since this distinction is necessary to implement the `ZeroCustomFields` method in the [`ClientState` interface](02-client-state.md): - -```go -// Utility function that zeroes out any client customizable fields in client state -// Ledger enforced fields are maintained while all custom fields are zero values -// Used to verify upgrades -func (cs ClientState) ZeroCustomFields() ClientState -``` - -Developers must ensure that the new client adopts all of the new client parameters that must be uniform across every valid light client of a chain (chain-chosen parameters), while maintaining the client parameters that are customizable by each individual client (client-chosen parameters) from the previous version of the client. `ZeroCustomFields` is a useful utility function to ensure only chain specific fields are updated during upgrades. - -## Security - -Upgrades must adhere to the IBC Security Model. IBC does not rely on the assumption of honest relayers for correctness. Thus users should not have to rely on relayers to maintain client correctness and security (though honest relayers must exist to maintain relayer liveness). While relayers may choose any set of client parameters while creating a new `ClientState`, this still holds under the security model since users can always choose a relayer-created client that suits their security and correctness needs or create a client with their desired parameters if no such client exists. - -However, when upgrading an existing client, one must keep in mind that there are already many users who depend on this client's particular parameters. **We cannot give the upgrading relayer free choice over these parameters once they have already been chosen. This would violate the security model** since users who rely on the client would have to rely on the upgrading relayer to maintain the same level of security. - -Thus, developers must make sure that their upgrade mechanism allows clients to upgrade the chain-specified parameters whenever a chain upgrade changes these parameters (examples in the Tendermint client include `UnbondingPeriod`, `TrustingPeriod`, `ChainID`, `UpgradePath`, etc), while ensuring that the relayer submitting the `MsgUpgradeClient` cannot alter the client-chosen parameters that the users are relying upon (examples in Tendermint client include `TrustLevel`, `MaxClockDrift`, etc). The previous paragraph discusses how `ZeroCustomFields` helps achieve this. - -### Document potential client parameter conflicts during upgrades - -Counterparty clients can upgrade securely by using all of the chain-chosen parameters from the chain-committed `UpgradedClient` and preserving all of the old client-chosen parameters. This enables chains to securely upgrade without relying on an honest relayer, however it can in some cases lead to an invalid final `ClientState` if the new chain-chosen parameters clash with the old client-chosen parameter. This can happen in the Tendermint client case if the upgrading chain lowers the `UnbondingPeriod` (chain-chosen) to a duration below that of a counterparty client's `TrustingPeriod` (client-chosen). Such cases should be clearly documented by developers, so that chains know which upgrades should be avoided to prevent this problem. The final upgraded client should also be validated in `VerifyUpgradeAndUpdateState` before returning to ensure that the client does not upgrade to an invalid `ClientState`. diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/06-proofs.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/06-proofs.md deleted file mode 100644 index 636e2b70e80..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/06-proofs.md +++ /dev/null @@ -1,66 +0,0 @@ ---- -title: Existence/Non-Existence Proofs -sidebar_label: Existence/Non-Existence Proofs -sidebar_position: 6 -slug: /ibc/light-clients/proofs ---- - - -# Existence and non-existence proofs - -IBC uses merkle proofs in order to verify the state of a remote counterparty state machine given a trusted root, and [ICS-23](https://github.com/cosmos/ics23/tree/master/go) is a general approach for verifying merkle trees which is used in ibc-go. - -Currently, all Cosmos SDK modules contain their own stores, which maintain the state of the application module in an IAVL (immutable AVL) binary merkle tree format. Specifically with regard to IBC, core IBC maintains its own IAVL store, and IBC apps (e.g. transfer) maintain their own dedicated stores. The Cosmos SDK multistore therefore creates a simple merkle tree of all of these IAVL trees, and from each of these individual IAVL tree root hashes it derives a root hash for the application state tree as a whole (the `AppHash`). - -For the purposes of ibc-go, there are two types of proofs which are important: existence and non-existence proofs, terms which have been used interchangeably with membership and non-membership proofs. For the purposes of this guide, we will stick with "existence" and "non-existence". - -## Existence proofs - -Existence proofs are used in IBC transactions which involve verification of counterparty state for transactions which will result in the writing of provable state. For example, this includes verification of IBC store state for handshakes and packets. - -Put simply, existence proofs prove that a particular key and value exists in the tree. Under the hood, an IBC existence proof comprises of two proofs: an IAVL proof that the key exists in IBC store/IBC root hash, and a proof that the IBC root hash exists in the multistore root hash. - -## Non-existence proofs - -Non-existence proofs verify the absence of data stored within counterparty state and are used to prove that a key does NOT exist in state. As stated above, these types of proofs can be used to timeout packets by proving that the counterparty has not written a packet receipt into the store, meaning that a token transfer has NOT successfully occurred. - -Some trees (e.g. SMT) may have a sentinel empty child for non-existent keys. In this case, the ICS-23 proof spec should include this `EmptyChild` so that ICS-23 handles the non-existence proof correctly. - -In some cases, there is a necessity to "mock" non-existence proofs if the counterparty does not have ability to prove absence. Since the verification method is designed to give complete control to client implementations, clients can support chains that do not provide absence proofs by verifying the existence of a non-empty sentinel `ABSENCE` value. In these special cases, the proof provided will be an ICS-23 `Existence` proof, and the client will verify that the `ABSENCE` value is stored under the given path for the given height. - -## State verification methods: `VerifyMembership` and `VerifyNonMembership` - -The state verification functions for all IBC data types have been consolidated into two generic methods, `VerifyMembership` and `VerifyNonMembership`. - -From the [`ClientState` interface definition](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/exported/client.go#L68-L91), we find: - -```go -VerifyMembership( - ctx sdk.Context, - clientStore sdk.KVStore, - cdc codec.BinaryCodec, - height Height, - delayTimePeriod uint64, - delayBlockPeriod uint64, - proof []byte, - path Path, - value []byte, -) error - -// VerifyNonMembership is a generic proof verification method which verifies the absence of a given CommitmentPath at a specified height. -// The caller is expected to construct the full CommitmentPath from a CommitmentPrefix and a standardized path (as defined in ICS 24). -VerifyNonMembership( - ctx sdk.Context, - clientStore sdk.KVStore, - cdc codec.BinaryCodec, - height Height, - delayTimePeriod uint64, - delayBlockPeriod uint64, - proof []byte, - path Path, -) error -``` - -Both are expected to be provided with a standardised key path, `exported.Path`, as defined in [ICS-24 host requirements](https://github.com/cosmos/ibc/tree/main/spec/core/ics-024-host-requirements). Membership verification requires callers to provide the value marshalled as `[]byte`. Delay period values should be zero for non-packet processing verification. A zero proof height is now allowed by core IBC and may be passed into `VerifyMembership` and `VerifyNonMembership`. Light clients are responsible for returning an error if a zero proof height is invalid behaviour. - -Please refer to the [ICS-23 implementation](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/23-commitment/types/merkle.go#L131-L205) for a concrete example. diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/07-proposals.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/07-proposals.md deleted file mode 100644 index a5af1b4c705..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/07-proposals.md +++ /dev/null @@ -1,36 +0,0 @@ ---- -title: Handling Proposals -sidebar_label: Handling Proposals -sidebar_position: 7 -slug: /ibc/light-clients/proposals ---- - - -# Handling proposals - -It is possible to update the client with the state of the substitute client through a governance proposal. [This type of governance proposal](https://ibc.cosmos.network/main/ibc/proposals.html) is typically used to recover an expired or frozen client, as it can recover the entire state and therefore all existing channels built on top of the client. `CheckSubstituteAndUpdateState` should be implemented to handle the proposal. - -## Implementing `CheckSubstituteAndUpdateState` - -In the [`ClientState`interface](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/exported/client.go), we find: - -```go -// CheckSubstituteAndUpdateState must verify that the provided substitute may be used to update the subject client. -// The light client must set the updated client and consensus states within the clientStore for the subject client. -CheckSubstituteAndUpdateState( - ctx sdk.Context, - cdc codec.BinaryCodec, - subjectClientStore, - substituteClientStore sdk.KVStore, - substituteClient ClientState, -) error -``` - -Prior to updating, this function must verify that: - -- the substitute client is the same type as the subject client. For a reference implementation, please see the [Tendermint light client](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/proposal_handle.go#L32). -- the provided substitute may be used to update the subject client. This may mean that certain parameters must remain unaltered. For example, a [valid substitute Tendermint light client](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/proposal_handle.go#L84) must NOT change the chain ID, trust level, max clock drift, unbonding period, proof specs or upgrade path. Please note that `AllowUpdateAfterMisbehaviour` and `AllowUpdateAfterExpiry` have been deprecated (see ADR 026 for more information). - -After these checks are performed, the function must [set the updated client and consensus states](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/proposal_handle.go#L77) within the client store for the subject client. - -Please refer to the [Tendermint light client implementation](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/proposal_handle.go#L27) for reference. diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/08-genesis.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/08-genesis.md deleted file mode 100644 index 5c7c611e729..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/08-genesis.md +++ /dev/null @@ -1,45 +0,0 @@ ---- -title: Handling Genesis -sidebar_label: Handling Genesis -sidebar_position: 8 -slug: /ibc/light-clients/genesis ---- - -# Genesis metadata - -:::note Synopsis -Learn how to implement the `ExportMetadata` interface -::: - -:::note - -## Pre-requisite readings - -- [Cosmos SDK module genesis](https://docs.cosmos.network/v0.47/building-modules/genesis) - -::: - -`ClientState` instances are provided their own isolated and namespaced client store upon initialisation. `ClientState` implementations may choose to store any amount of arbitrary metadata in order to verify counterparty consensus state and perform light client updates correctly. - -The `ExportMetadata` method of the [`ClientState` interface](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/exported/client.go#L47) provides light client modules with the ability to persist metadata in genesis exports. - -```go -ExportMetadata(clientStore sdk.KVStore) []GenesisMetadata -``` - -`ExportMetadata` is provided the client store and returns an array of `GenesisMetadata`. For maximum flexibility, `GenesisMetadata` is defined as a simple interface containing two distinct `Key` and `Value` accessor methods. - -```go -type GenesisMetadata interface { - // return store key that contains metadata without clientID-prefix - GetKey() []byte - // returns metadata value - GetValue() []byte -} -``` - -This allows `ClientState` instances to retrieve and export any number of key-value pairs which are maintained within the store in their raw `[]byte` form. - -When a chain is started with a `genesis.json` file which contains `ClientState` metadata (for example, when performing manual upgrades using an exported `genesis.json`) the `02-client` submodule of core IBC will handle setting the key-value pairs within their respective client stores. [See `02-client` `InitGenesis`](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/02-client/genesis.go#L18-L22). - -Please refer to the [Tendermint light client implementation](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/genesis.go#L12) for an example. diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/09-setup.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/09-setup.md deleted file mode 100644 index 904a53262d1..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/09-setup.md +++ /dev/null @@ -1,133 +0,0 @@ ---- -title: Setup -sidebar_label: Setup -sidebar_position: 9 -slug: /ibc/light-clients/setup ---- - - -# Setup - -:::note Synopsis -Learn how to configure light client modules and create clients using core IBC and the `02-client` submodule. -::: - -A last step to finish the development of the light client, is to implement the `AppModuleBasic` interface to allow it to be added to the chain's `app.go` alongside other light client types the chain enables. - -Finally, a succinct rundown is given of the remaining steps to make the light client operational, getting the light client type passed through governance and creating the clients. - -## Configuring a light client module - -An IBC light client module must implement the [`AppModuleBasic`](https://github.com/cosmos/cosmos-sdk/blob/main/types/module/module.go#L50) interface in order to register its concrete types against the core IBC interfaces defined in `modules/core/exported`. This is accomplished via the `RegisterInterfaces` method which provides the light client module with the opportunity to register codec types using the chain's `InterfaceRegistry`. Please refer to the [`07-tendermint` codec registration](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/light-clients/07-tendermint/codec.go#L11). - -The `AppModuleBasic` interface may also be leveraged to install custom CLI handlers for light client module users. Light client modules can safely no-op for interface methods which it does not wish to implement. - -Please refer to the [core IBC documentation](../../01-ibc/02-integration.md#integrating-light-clients) for how to configure additional light client modules alongside `07-tendermint` in `app.go`. - -See below for an example of the `07-tendermint` implementation of `AppModuleBasic`. - -```go -var _ module.AppModuleBasic = AppModuleBasic{} - -// AppModuleBasic defines the basic application module used by the tendermint light client. -// Only the RegisterInterfaces function needs to be implemented. All other function perform -// a no-op. -type AppModuleBasic struct{} - -// Name returns the tendermint module name. -func (AppModuleBasic) Name() string { - return ModuleName -} - -// RegisterLegacyAminoCodec performs a no-op. The Tendermint client does not support amino. -func (AppModuleBasic) RegisterLegacyAminoCodec(*codec.LegacyAmino) {} - -// RegisterInterfaces registers module concrete types into protobuf Any. This allows core IBC -// to unmarshal tendermint light client types. -func (AppModuleBasic) RegisterInterfaces(registry codectypes.InterfaceRegistry) { - RegisterInterfaces(registry) -} - -// DefaultGenesis performs a no-op. Genesis is not supported for the tendermint light client. -func (AppModuleBasic) DefaultGenesis(cdc codec.JSONCodec) json.RawMessage { - return nil -} - -// ValidateGenesis performs a no-op. Genesis is not supported for the tendermint light client. -func (AppModuleBasic) ValidateGenesis(cdc codec.JSONCodec, config client.TxEncodingConfig, bz json.RawMessage) error { - return nil -} - -// RegisterGRPCGatewayRoutes performs a no-op. -func (AppModuleBasic) RegisterGRPCGatewayRoutes(clientCtx client.Context, mux *runtime.ServeMux) {} - -// GetTxCmd performs a no-op. Please see the 02-client cli commands. -func (AppModuleBasic) GetTxCmd() *cobra.Command { - return nil -} - -// GetQueryCmd performs a no-op. Please see the 02-client cli commands. -func (AppModuleBasic) GetQueryCmd() *cobra.Command { - return nil -} -``` - -## Creating clients - -A client is created by executing a new `MsgCreateClient` transaction composed with a valid `ClientState` and initial `ConsensusState` encoded as protobuf `Any`s. -Generally, this is performed by an off-chain process known as an [IBC relayer](https://github.com/cosmos/ibc/tree/main/spec/relayer/ics-018-relayer-algorithms) however, this is not a strict requirement. - -See below for a list of IBC relayer implementations: - -- [cosmos/relayer](https://github.com/cosmos/relayer) -- [informalsystems/hermes](https://github.com/informalsystems/hermes) -- [confio/ts-relayer](https://github.com/confio/ts-relayer) - -Stateless checks are performed within the [`ValidateBasic`](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/02-client/types/msgs.go#L48) method of `MsgCreateClient`. - -```protobuf -// MsgCreateClient defines a message to create an IBC client -message MsgCreateClient { - option (gogoproto.goproto_getters) = false; - - // light client state - google.protobuf.Any client_state = 1 [(gogoproto.moretags) = "yaml:\"client_state\""]; - // consensus state associated with the client that corresponds to a given - // height. - google.protobuf.Any consensus_state = 2 [(gogoproto.moretags) = "yaml:\"consensus_state\""]; - // signer address - string signer = 3; -} -``` - -Leveraging protobuf `Any` encoding allows core IBC to [unpack](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/keeper/msg_server.go#L28-L36) both the `ClientState` and `ConsensusState` into their respective interface types registered previously using the light client module's `RegisterInterfaces` method. - -Within the `02-client` submodule, the [`ClientState` is then initialized](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/02-client/keeper/client.go#L30-L32) with its own isolated key-value store, namespaced using a unique client identifier. - -In order to successfully create an IBC client using a new client type, it [must be supported](https://github.com/cosmos/ibc-go/blob/v7.0.0/modules/core/02-client/keeper/client.go#L19-L25). Light client support in IBC is gated by on-chain governance. The allow list may be updated by submitting a new governance proposal to update the `02-client` parameter `AllowedClients`. - -See below for example: - -```shell -%s tx gov submit-proposal --from -``` - -where `proposal.json` contains: - -```json -{ - "title": "IBC Clients Param Change", - "summary": "Update allowed clients", - "messages": [ - { - "@type": "/ibc.core.client.v1.MsgUpdateParams", - "signer": "cosmos1...", // The gov module account address - "params": { - "allowed_clients": ["06-solomachine", "07-tendermint", "0x-new-client"] - } - } - ], - "metadata": "AQ==", - "deposit": "100stake" -} -``` diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/_category_.json b/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/_category_.json deleted file mode 100644 index 9be9c3c3a08..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/01-developer-guide/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": "Developer Guide", - "position": 1, - "link": null -} \ No newline at end of file diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/01-overview.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/01-overview.md deleted file mode 100644 index d32ccb01684..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/01-overview.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Overview -sidebar_label: Overview -sidebar_position: 1 -slug: /ibc/light-clients/localhost/overview ---- - - -# `09-localhost` - -## Overview - -:::note Synopsis -Learn about the 09-localhost light client module. -::: - -The 09-localhost light client module implements a localhost loopback client with the ability to send and receive IBC packets to and from the same state machine. - -### Context - -In a multichain environment, application developers will be used to developing cross-chain applications through IBC. From their point of view, whether or not they are interacting with multiple modules on the same chain or on different chains should not matter. The localhost client module enables a unified interface to interact with different applications on a single chain, using the familiar IBC application layer semantics. - -### Implementation - -There exists a [single sentinel `ClientState`](03-client-state.md) instance with the client identifier `09-localhost`. - -To supplement this, a [sentinel `ConnectionEnd` is stored in core IBC](04-connection.md) state with the connection identifier `connection-localhost`. This enables IBC applications to create channels directly on top of the sentinel connection which leverage the 09-localhost loopback functionality. - -[State verification](05-state-verification.md) for channel state in handshakes or processing packets is reduced in complexity, the `09-localhost` client can simply compare bytes stored under the standardized key paths. - -### Localhost vs *regular* client - -The localhost client aims to provide a unified approach to interacting with applications on a single chain, as the IBC application layer provides for cross-chain interactions. To achieve this unified interface though, there are a number of differences under the hood compared to a 'regular' IBC client (excluding `06-solomachine` and `09-localhost` itself). - -The table below lists some important differences: - -| | Regular client | Localhost | -| -------------------------------------------- | --------------------------------------------------------------------------- | --------- | -| Number of clients | Many instances of a client *type* corresponding to different counterparties | A single sentinel client with the client identifier `09-localhost`| -| Client creation | Relayer (permissionless) | `ClientState` is instantiated in the `InitGenesis` handler of the 02-client submodule in core IBC | -| Client updates | Relayer submits headers using `MsgUpdateClient` | Latest height is updated periodically through the ABCI [`BeginBlock`](https://docs.cosmos.network/v0.47/building-modules/beginblock-endblock) interface of the 02-client submodule in core IBC | -| Number of connections | Many connections, 1 (or more) per client | A single sentinel connection with the connection identifier `connection-localhost` | -| Connection creation | Connection handshake, provided underlying client | Sentinel `ConnectionEnd` is created and set in store in the `InitGenesis` handler of the 03-connection submodule in core IBC | -| Counterparty | Underlying client, representing another chain | Client with identifier `09-localhost` in same chain | -| `VerifyMembership` and `VerifyNonMembership` | Performs proof verification using consensus state roots | Performs state verification using key-value lookups in the core IBC store | -| Integration | Expected to register codec types using the `AppModuleBasic` interface | Registers codec types within the core IBC module | diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/02-integration.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/02-integration.md deleted file mode 100644 index 01f77fce67e..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/02-integration.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -title: Integration -sidebar_label: Integration -sidebar_position: 2 -slug: /ibc/light-clients/localhost/integration ---- - - -# Integration - -The 09-localhost light client module registers codec types within the core IBC module. This differs from other light client module implementations which are expected to register codec types using the `AppModuleBasic` interface. - -The localhost client is added to the 02-client submodule param [`allowed_clients`](https://github.com/cosmos/ibc-go/blob/v7.0.0/proto/ibc/core/client/v1/client.proto#L102) by default in ibc-go. - -```go -var ( - // DefaultAllowedClients are the default clients for the AllowedClients parameter. - DefaultAllowedClients = []string{exported.Solomachine, exported.Tendermint, exported.Localhost} -) -``` diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/03-client-state.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/03-client-state.md deleted file mode 100644 index 19e03b62aa9..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/03-client-state.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: ClientState -sidebar_label: ClientState -sidebar_position: 3 -slug: /ibc/light-clients/localhost/client-state ---- - - -# `ClientState` - -The 09-localhost `ClientState` maintains a single field used to track the latest sequence of the state machine i.e. the height of the blockchain. - -```go -type ClientState struct { - // the latest height of the blockchain - LatestHeight clienttypes.Height -} -``` - -The 09-localhost `ClientState` is instantiated in the `InitGenesis` handler of the 02-client submodule in core IBC. -It calls `CreateLocalhostClient`, declaring a new `ClientState` and initializing it with its own client prefixed store. - -```go -func (k Keeper) CreateLocalhostClient(ctx sdk.Context) error { - var clientState localhost.ClientState - return clientState.Initialize(ctx, k.cdc, k.ClientStore(ctx, exported.LocalhostClientID), nil) -} -``` - -It is possible to disable the localhost client by removing the `09-localhost` entry from the `allowed_clients` list through governance. - -## Client updates - -The latest height is updated periodically through the ABCI [`BeginBlock`](https://docs.cosmos.network/v0.47/building-modules/beginblock-endblock) interface of the 02-client submodule in core IBC. - -[See `BeginBlocker` in abci.go.](https://github.com/cosmos/ibc-go/blob/09-localhost/modules/core/02-client/abci.go#L12) - -```go -func BeginBlocker(ctx sdk.Context, k keeper.Keeper) { - // ... - - if clientState, found := k.GetClientState(ctx, exported.Localhost); found { - if k.GetClientStatus(ctx, clientState, exported.Localhost) == exported.Active { - k.UpdateLocalhostClient(ctx, clientState) - } - } -} -``` - -The above calls into the 09-localhost `UpdateState` method of the `ClientState` . -It retrieves the current block height from the application context and sets the `LatestHeight` of the 09-localhost client. - -```go -func (cs ClientState) UpdateState(ctx sdk.Context, cdc codec.BinaryCodec, clientStore sdk.KVStore, clientMsg exported.ClientMessage) []exported.Height { - height := clienttypes.GetSelfHeight(ctx) - cs.LatestHeight = height - - clientStore.Set(host.ClientStateKey(), clienttypes.MustMarshalClientState(cdc, &cs)) - - return []exported.Height{height} -} -``` - -Note that the 09-localhost `ClientState` is not updated through the 02-client interface leveraged by conventional IBC light clients. diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/04-connection.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/04-connection.md deleted file mode 100644 index 160c814d229..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/04-connection.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Connection -sidebar_label: Connection -sidebar_position: 4 -slug: /ibc/light-clients/localhost/connection ---- - - -# Localhost connections - -The 09-localhost light client module integrates with core IBC through a single sentinel localhost connection. -The sentinel `ConnectionEnd` is stored by default in the core IBC store. - -This enables channel handshakes to be initiated out of the box by supplying the localhost connection identifier (`connection-localhost`) in the `connectionHops` parameter of `MsgChannelOpenInit`. - -The `ConnectionEnd` is created and set in store via the `InitGenesis` handler of the 03-connection submodule in core IBC. -The `ConnectionEnd` and its `Counterparty` both reference the `09-localhost` client identifier, and share the localhost connection identifier `connection-localhost`. - -```go -// CreateSentinelLocalhostConnection creates and sets the sentinel localhost connection end in the IBC store. -func (k Keeper) CreateSentinelLocalhostConnection(ctx sdk.Context) { - counterparty := types.NewCounterparty(exported.LocalhostClientID, exported.LocalhostConnectionID, commitmenttypes.NewMerklePrefix(k.GetCommitmentPrefix().Bytes())) - connectionEnd := types.NewConnectionEnd(types.OPEN, exported.LocalhostClientID, counterparty, types.GetCompatibleVersions(), 0) - - k.SetConnection(ctx, exported.LocalhostConnectionID, connectionEnd) -} -``` - -Note that connection handshakes are disallowed when using the `09-localhost` client type. diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/05-state-verification.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/05-state-verification.md deleted file mode 100644 index ddf4f03de10..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/05-state-verification.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -title: State Verification -sidebar_label: State Verification -sidebar_position: 5 -slug: /ibc/light-clients/localhost/state-verification ---- - - -# State verification - -The localhost client handles state verification through the `ClientState` interface methods `VerifyMembership` and `VerifyNonMembership` by performing read-only operations directly on the core IBC store. - -When verifying channel state in handshakes or processing packets the `09-localhost` client can simply compare bytes stored under the standardized key paths defined by [ICS-24](https://github.com/cosmos/ibc/tree/main/spec/core/ics-024-host-requirements). - -For existence proofs via `VerifyMembership` the 09-localhost client will retrieve the value stored under the provided key path and compare it against the value provided by the caller. In contrast, non-existence proofs via `VerifyNonMembership` assert the absence of a value at the provided key path. - -Relayers are expected to provide a sentinel proof when sending IBC messages. Submission of nil or empty proofs is disallowed in core IBC messaging. -The 09-localhost light client module defines a `SentinelProof` as a single byte. Localhost client state verification will fail if the sentinel proof value is not provided. - -```go -var SentinelProof = []byte{0x01} -``` diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/_category_.json b/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/_category_.json deleted file mode 100644 index 0dc062d29e6..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/02-localhost/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": "Localhost", - "position": 2, - "link": null -} \ No newline at end of file diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/01-solomachine.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/01-solomachine.md deleted file mode 100644 index 394e5ec6efb..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/01-solomachine.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Solomachine -sidebar_label: Solomachine -sidebar_position: 1 -slug: /ibc/light-clients/solomachine/solomachine ---- - - -# `solomachine` - -## Abstract - -This paper defines the implementation of the ICS06 protocol on the Cosmos SDK. For the general -specification please refer to the [ICS06 Specification](https://github.com/cosmos/ibc/tree/master/spec/client/ics-006-solo-machine-client). - -This implementation of a solo machine light client supports single and multi-signature public -keys. The client is capable of handling public key updates by header and governance proposals. -The light client is capable of processing client misbehaviour. Proofs of the counterparty state -are generated by the solo machine client by signing over the desired state with a certain sequence, -diversifier, and timestamp. - -## Contents - -1. **[Concepts](02-concepts.md)** -2. **[State](03-state.md)** -3. **[State Transitions](04-state_transitions.md)** diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/02-concepts.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/02-concepts.md deleted file mode 100644 index 270dab232a6..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/02-concepts.md +++ /dev/null @@ -1,168 +0,0 @@ ---- -title: Concepts -sidebar_label: Concepts -sidebar_position: 2 -slug: /ibc/light-clients/solomachine/concepts ---- - - -# Concepts - -## Client State - -The `ClientState` for a solo machine light client stores the latest sequence, the frozen sequence, -the latest consensus state, and client flag indicating if the client should be allowed to be updated -after a governance proposal. - -If the client is not frozen then the frozen sequence is 0. - -## Consensus State - -The consensus states stores the public key, diversifier, and timestamp of the solo machine light client. - -The diversifier is used to prevent accidental misbehaviour if the same public key is used across -different chains with the same client identifier. It should be unique to the chain the light client -is used on. - -## Public Key - -The public key can be a single public key or a multi-signature public key. The public key type used -must fulfill the tendermint public key interface (this will become the SDK public key interface in the -near future). The public key must be registered on the application codec otherwise encoding/decoding -errors will arise. The public key stored in the consensus state is represented as a protobuf `Any`. -This allows for flexibility in what other public key types can be supported in the future. - -## Counterparty Verification - -The solo machine light client can verify counterparty client state, consensus state, connection state, -channel state, packet commitments, packet acknowledgements, packet receipt absence, -and the next sequence receive. At the end of each successful verification call the light -client sequence number will be incremented. - -Successful verification requires the current public key to sign over the proof. - -## Proofs - -A solo machine proof should verify that the solomachine public key signed -over some specified data. The format for generating marshaled proofs for -the SDK's implementation of solo machine is as follows: - -1. Construct the data using the associated protobuf definition and marshal it. - -For example: - -```go -data := &ClientStateData{ - Path: []byte(path.String()), - ClientState: protoAny, -} - -dataBz, err := cdc.Marshal(data) -``` - -The helper functions `...DataBytes()` in [proof.go](https://github.com/cosmos/ibc-go/blob/main/modules/light-clients/06-solomachine/proof.go) handle this -functionality. - -2. Construct the `SignBytes` and marshal it. - -For example: - -```go -signBytes := &SignBytes{ - Sequence: sequence, - Timestamp: timestamp, - Diversifier: diversifier, - DataType: CLIENT, - Data: dataBz, -} - -signBz, err := cdc.Marshal(signBytes) -``` - -The helper functions `...SignBytes()` in [proof.go](https://github.com/cosmos/ibc-go/blob/main/modules/light-clients/06-solomachine/proof.go) handle this functionality. -The `DataType` field is used to disambiguate what type of data was signed to prevent potential -proto encoding overlap. - -3. Sign the sign bytes. Embed the signatures into either `SingleSignatureData` or `MultiSignatureData`. -Convert the `SignatureData` to proto and marshal it. - -For example: - -```go -sig, err := key.Sign(signBz) -sigData := &signing.SingleSignatureData{ - Signature: sig, -} - -protoSigData := signing.SignatureDataToProto(sigData) -bz, err := cdc.Marshal(protoSigData) -``` - -4. Construct a `TimestampedSignatureData` and marshal it. The marshaled result can be passed in -as the proof parameter to the verification functions. - -For example: - -```go -timestampedSignatureData := &solomachine.TimestampedSignatureData{ - SignatureData: sigData, - Timestamp: solomachine.Time, -} - -proof, err := cdc.Marshal(timestampedSignatureData) -``` - -NOTE: At the end of this process, the sequence associated with the key needs to be updated. -The sequence must be incremented each time proof is generated. - -## Updates By Header - -An update by a header will only succeed if: - -- the header provided is parseable to solo machine header -- the header sequence matches the current sequence -- the header timestamp is greater than or equal to the consensus state timestamp -- the currently registered public key generated the proof - -If the update is successful: - -- the public key is updated -- the diversifier is updated -- the timestamp is updated -- the sequence is incremented by 1 -- the new consensus state is set in the client state - -## Updates By Proposal - -An update by a governance proposal will only succeed if: - -- the substitute provided is parseable to solo machine client state -- the new consensus state public key does not equal the current consensus state public key - -If the update is successful: - -- the subject client state is updated to the substitute client state -- the subject consensus state is updated to the substitute consensus state -- the client is unfrozen (if it was previously frozen) - -NOTE: Previously, `AllowUpdateAfterProposal` was used to signal the update/recovery options for the solo machine client. However, this has now been deprecated because a code migration can overwrite the client and consensus states regardless of the value of this parameter. If governance would vote to overwrite a client or consensus state, it is likely that governance would also be willing to perform a code migration to do the same. - -## Misbehaviour - -Misbehaviour handling will only succeed if: - -- the misbehaviour provided is parseable to solo machine misbehaviour -- the client is not already frozen -- the current public key signed over two unique data messages at the same sequence and diversifier. - -If the misbehaviour is successfully processed: - -- the client is frozen by setting the frozen sequence to the misbehaviour sequence - -NOTE: Misbehaviour processing is data processing order dependent. A misbehaving solo machine -could update to a new public key to prevent being frozen before misbehaviour is submitted. - -## Upgrades - -Upgrades to solo machine light clients are not supported since an entirely different type of -public key can be set using normal client updates. diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/03-state.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/03-state.md deleted file mode 100644 index 90d017473c3..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/03-state.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: State -sidebar_label: State -sidebar_position: 3 -slug: /ibc/light-clients/solomachine/state ---- - - -# State - -The solo machine light client will only store consensus states for each update by a header -or a governance proposal. The latest client state is also maintained in the store. diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/04-state_transitions.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/04-state_transitions.md deleted file mode 100644 index 22a456fcc0e..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/04-state_transitions.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: State Transitions -sidebar_label: State Transitions -sidebar_position: 4 -slug: /ibc/light-clients/solomachine/state_transitions ---- - - -# State Transitions - -## Client State Verification Functions - -Successful state verification by a solo machine light client will result in: - -- the sequence being incremented by 1. - -## Update By Header - -A successful update of a solo machine light client by a header will result in: - -- the public key being updated to the new public key provided by the header. -- the diversifier being updated to the new diviersifier provided by the header. -- the timestamp being updated to the new timestamp provided by the header. -- the sequence being incremented by 1 -- the consensus state being updated (consensus state stores the public key, diversifier, and timestamp) - -## Update By Governance Proposal - -A successful update of a solo machine light client by a governance proposal will result in: - -- the client state being updated to the substitute client state -- the consensus state being updated to the substitute consensus state (consensus state stores the public key, diversifier, and timestamp) -- the frozen sequence being set to zero (client is unfrozen if it was previously frozen). - -## Upgrade - -Client udgrades are not supported for the solo machine light client. No state transition occurs. - -## Misbehaviour - -Successful misbehaviour processing of a solo machine light client will result in: - -- the frozen sequence being set to the sequence the misbehaviour occurred at diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/_category_.json b/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/_category_.json deleted file mode 100644 index de0a6927408..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/03-solomachine/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": "Solomachine", - "position": 3, - "link": null -} \ No newline at end of file diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/01-overview.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/01-overview.md deleted file mode 100644 index c3677fa162a..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/01-overview.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Overview -sidebar_label: Overview -sidebar_position: 1 -slug: /ibc/light-clients/wasm/overview ---- - -# `08-wasm` - -## Overview - -Learn about the `08-wasm` light client proxy module. - -### Context - -Traditionally, light clients used by ibc-go have been implemented only in Go, and since ibc-go v7 (with the release of the 02-client refactor), they are [first-class Cosmos SDK modules](../../../../architecture/adr-010-light-clients-as-sdk-modules.md). This means that updating existing light client implementations or adding support for new light clients is a multi-step, time-consuming process involving on-chain governance: it is necessary to modify the codebase of ibc-go (if the light client is part of its codebase), re-build chains' binaries, pass a governance proposal and have validators upgrade their nodes. - -### Motivation - -To break the limitation of being able to write light client implementations only in Go, the `08-wasm` adds support to run light clients written in a Wasm-compilable language. The light client byte code implements the entry points of a [CosmWasm](https://docs.cosmwasm.com/docs/) smart contract, and runs inside a Wasm VM. The `08-wasm` module exposes a proxy light client interface that routes incoming messages to the appropriate handler function, inside the Wasm VM, for execution. - -Adding a new light client to a chain is just as simple as submitting a governance proposal with the message that stores the byte code of the light client contract. No coordinated upgrade is needed. When the governance proposal passes and the message is executed, the contract is ready to be instantiated upon receiving a relayer-submitted `MsgCreateClient`. The process of creating a Wasm light client is the same as with a regular light client implemented in Go. - -### Use cases - -- Development of light clients for non-Cosmos ecosystem chains: state machines in other ecosystems are, in many cases, implemented in Rust, and thus there are probably libraries used in their light client implementations for which there is no equivalent in Go. This makes the development of a light client in Go very difficult, but relatively simple to do it in Rust. Therefore, writing a CosmWasm smart contract in Rust that implements the light client algorithm becomes a lower effort. diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/02-concepts.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/02-concepts.md deleted file mode 100644 index ac9fa18f1f6..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/02-concepts.md +++ /dev/null @@ -1,74 +0,0 @@ ---- -title: Concepts -sidebar_label: Concepts -sidebar_position: 2 -slug: /ibc/light-clients/wasm/concepts ---- - -# Concepts - -Learn about the differences between a proxy light client and a Wasm light client. - -## Proxy light client - -The `08-wasm` module is not a regular light client in the same sense as, for example, the 07-tendermint light client. `08-wasm` is instead a *proxy* light client module, and this means that the module acts a proxy to the actual implementations of light clients. The module will act as a wrapper for the actual light clients uploaded as Wasm byte code and will delegate all operations to them (i.e. `08-wasm` just passes through the requests to the Wasm light clients). Still, the `08-wasm` module implements all the required interfaces necessary to integrate with core IBC, so that 02-client can call into it as it would for any other light client module. These interfaces are `ClientState`, `ConsensusState` and `ClientMessage`, and we will describe them in the context of `08-wasm` in the following sections. For more information about this set of interfaces, please read section [Overview of the light client module developer guide](../01-developer-guide/01-overview.md#overview). - -### `ClientState` - -The `08-wasm`'s `ClientState` data structure contains three fields: - -- `Data` contains the bytes of the Protobuf-encoded client state of the underlying light client implemented as a Wasm contract. For example, if the Wasm light client contract implements the GRANDPA light client algorithm, then `Data` will contain the bytes for a [GRANDPA client state](https://github.com/ComposableFi/composable-ibc/blob/02ce69e2843e7986febdcf795f69a757ce569272/light-clients/ics10-grandpa/src/proto/grandpa.proto#L35-L60). -- `Checksum` is the sha256 hash of the Wasm contract's byte code. This hash is used as an identifier to call the right contract. -- `LatestHeight` is the latest height of the counterparty state machine (i.e. the height of the blockchain), whose consensus state the light client tracks. - -```go -type ClientState struct { - // bytes encoding the client state of the underlying - // light client implemented as a Wasm contract - Data []byte - // sha256 hash of Wasm contract byte code - Checksum []byte - // latest height of the counterparty ledger - LatestHeight types.Height -} -``` - -See section [`ClientState` of the light client module developer guide](../01-developer-guide/01-overview.md#clientstate) for more information about the `ClientState` interface. - -### `ConsensusState` - -The `08-wasm`'s `ConsensusState` data structure maintains one field: - -- `Data` contains the bytes of the Protobuf-encoded consensus state of the underlying light client implemented as a Wasm contract. For example, if the Wasm light client contract implements the GRANDPA light client algorithm, then `Data` will contain the bytes for a [GRANDPA consensus state](https://github.com/ComposableFi/composable-ibc/blob/02ce69e2843e7986febdcf795f69a757ce569272/light-clients/ics10-grandpa/src/proto/grandpa.proto#L87-L94). - -```go -type ConsensusState struct { - // bytes encoding the consensus state of the underlying light client - // implemented as a Wasm contract. - Data []byte -} -``` - -See section [`ConsensusState` of the light client module developer guide](../01-developer-guide/01-overview.md#consensusstate) for more information about the `ConsensusState` interface. - -### `ClientMessage` - -`ClientMessage` is used for performing updates to a `ClientState` stored on chain. The `08-wasm`'s `ClientMessage` data structure maintains one field: - -- `Data` contains the bytes of the Protobuf-encoded header(s) or misbehaviour for the underlying light client implemented as a Wasm contract. For example, if the Wasm light client contract implements the GRANDPA light client algorithm, then `Data` will contain the bytes of either [header](https://github.com/ComposableFi/composable-ibc/blob/02ce69e2843e7986febdcf795f69a757ce569272/light-clients/ics10-grandpa/src/proto/grandpa.proto#L96-L104) or [misbehaviour](https://github.com/ComposableFi/composable-ibc/blob/02ce69e2843e7986febdcf795f69a757ce569272/light-clients/ics10-grandpa/src/proto/grandpa.proto#L106-L112) for a GRANDPA light client. - -```go -type ClientMessage struct { - // bytes encoding the header(s) or misbehaviour for the underlying light client - // implemented as a Wasm contract. - Data []byte -} -``` - -See section [`ClientMessage` of the light client module developer guide](../01-developer-guide/01-overview.md#clientmessage) for more information about the `ClientMessage` interface. - -## Wasm light client - -The actual light client can be implemented in any language that compiles to Wasm and implements the interfaces of a [CosmWasm](https://docs.cosmwasm.com/docs/) contract. Even though in theory other languages could be used, in practice (at least for the time being) the most suitable language to use would be Rust, since there is already good support for it for developing CosmWasm smart contracts. - -At the moment of writing there are two contracts available: one for [Tendermint](https://github.com/ComposableFi/composable-ibc/tree/master/light-clients/ics07-tendermint-cw) and one [GRANDPA](https://github.com/ComposableFi/composable-ibc/tree/master/light-clients/ics10-grandpa-cw) (which is being used in production in [Composable Finance's Centauri bridge](https://github.com/ComposableFi/composable-ibc)). And there are others in development (e.g. for Near). diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/03-integration.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/03-integration.md deleted file mode 100644 index 12fb3f14418..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/03-integration.md +++ /dev/null @@ -1,376 +0,0 @@ ---- -title: Integration -sidebar_label: Integration -sidebar_position: 3 -slug: /ibc/light-clients/wasm/integration ---- - -# Integration - -Learn how to integrate the `08-wasm` module in a chain binary and about the recommended approaches depending on whether the [`x/wasm` module](https://github.com/CosmWasm/wasmd/tree/main/x/wasm) is already used in the chain. The following document only applies for Cosmos SDK chains. - -## `app.go` setup - -The sample code below shows the relevant integration points in `app.go` required to setup the `08-wasm` module in a chain binary. Since `08-wasm` is a light client module itself, please check out as well the section [Integrating light clients](../../01-ibc/02-integration.md#integrating-light-clients) for more information: - -```go -// app.go -import ( - ... - "github.com/cosmos/cosmos-sdk/runtime" - - cmtos "github.com/cometbft/cometbft/libs/os" - - ibcwasm "github.com/cosmos/ibc-go/modules/light-clients/08-wasm" - ibcwasmkeeper "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/keeper" - ibcwasmtypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" - ... -) - -... - -// Register the AppModule for the 08-wasm module -ModuleBasics = module.NewBasicManager( - ... - ibcwasm.AppModuleBasic{}, - ... -) - -// Add 08-wasm Keeper -type SimApp struct { - ... - WasmClientKeeper ibcwasmkeeper.Keeper - ... -} - -func NewSimApp( - logger log.Logger, - db dbm.DB, - traceStore io.Writer, - loadLatest bool, - appOpts servertypes.AppOptions, - baseAppOptions ...func(*baseapp.BaseApp), -) *SimApp { - ... - keys := sdk.NewKVStoreKeys( - ... - ibcwasmtypes.StoreKey, - ) - - // Instantiate 08-wasm's keeper - // This sample code uses a constructor function that - // accepts a pointer to an existing instance of Wasm VM. - // This is the recommended approach when the chain - // also uses `x/wasm`, and then the Wasm VM instance - // can be shared. - app.WasmClientKeeper = ibcwasmkeeper.NewKeeperWithVM( - appCodec, - runtime.NewKVStoreService(keys[ibcwasmtypes.StoreKey]), - app.IBCKeeper.ClientKeeper, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - wasmVM, - app.GRPCQueryRouter(), - ) - app.ModuleManager = module.NewManager( - // SDK app modules - ... - ibcwasm.NewAppModule(app.WasmClientKeeper), - ) - app.ModuleManager.SetOrderBeginBlockers( - ... - ibcwasmtypes.ModuleName, - ... - ) - app.ModuleManager.SetOrderEndBlockers( - ... - ibcwasmtypes.ModuleName, - ... - ) - genesisModuleOrder := []string{ - ... - ibcwasmtypes.ModuleName, - ... - } - app.ModuleManager.SetOrderInitGenesis(genesisModuleOrder...) - app.ModuleManager.SetOrderExportGenesis(genesisModuleOrder...) - ... - - // initialize BaseApp - app.SetInitChainer(app.InitChainer) - ... - - // must be before Loading version - if manager := app.SnapshotManager(); manager != nil { - err := manager.RegisterExtensions( - ibcwasmkeeper.NewWasmSnapshotter(app.CommitMultiStore(), &app.WasmClientKeeper), - ) - if err != nil { - panic(fmt.Errorf("failed to register snapshot extension: %s", err)) - } - } - ... - - if loadLatest { - ... - - ctx := app.BaseApp.NewUncachedContext(true, cmtproto.Header{}) - - // Initialize pinned codes in wasmvm as they are not persisted there - if err := ibcwasmkeeper.InitializePinnedCodes(ctx); err != nil { - cmtos.Exit(fmt.Sprintf("failed initialize pinned codes %s", err)) - } - } -} -``` - -## Keeper instantiation - -When it comes to instantiating `08-wasm`'s keeper there are two recommended ways of doing it. Choosing one or the other will depend on whether the chain already integrates [`x/wasm`](https://github.com/CosmWasm/wasmd/tree/main/x/wasm) or not. - -### If `x/wasm` is present - -If the chain where the module is integrated uses `x/wasm` then we recommend that both `08-wasm` and `x/wasm` share the same Wasm VM instance. Having two separate Wasm VM instances is still possible, but care should be taken to make sure that both instances do not share the directory when the VM stores blobs and various caches, otherwise unexpected behaviour is likely to happen. - -In order to share the Wasm VM instance please follow the guideline below. Please note that this requires `x/wasm`v0.41 or above. - -- Instantiate the Wasm VM in `app.go` with the parameters of your choice. -- [Create an `Option` with this Wasm VM instance](https://github.com/CosmWasm/wasmd/blob/db93d7b6c7bb6f4a340d74b96a02cec885729b59/x/wasm/keeper/options.go#L21-L25). -- Add the option created in the previous step to a slice and [pass it to the `x/wasm NewKeeper` constructor function](https://github.com/CosmWasm/wasmd/blob/db93d7b6c7bb6f4a340d74b96a02cec885729b59/x/wasm/keeper/keeper_cgo.go#L36). -- Pass the pointer to the Wasm VM instance to `08-wasm` [`NewKeeperWithVM` constructor function](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/keeper/keeper.go#L39-L47). - -The code to set this up would look something like this: - -```go -// app.go -import ( - ... - "github.com/cosmos/cosmos-sdk/runtime" - - wasmvm "github.com/CosmWasm/wasmvm" - wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" - wasmtypes "github.com/CosmWasm/wasmd/x/wasm/types" - - ibcwasmkeeper "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/keeper" - ibcwasmtypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" - ... -) - -... - -// instantiate the Wasm VM with the chosen parameters -wasmer, err := wasmvm.NewVM( - dataDir, - availableCapabilities, - contractMemoryLimit, - contractDebugMode, - memoryCacheSize, -) -if err != nil { - panic(err) -} - -// create an Option slice (or append to an existing one) -// with the option to use a custom Wasm VM instance -wasmOpts = []wasmkeeper.Option{ - wasmkeeper.WithWasmEngine(wasmer), -} - -// the keeper will use the provided Wasm VM instance, -// instead of instantiating a new one -app.WasmKeeper = wasmkeeper.NewKeeper( - appCodec, - keys[wasmtypes.StoreKey], - app.AccountKeeper, - app.BankKeeper, - app.StakingKeeper, - distrkeeper.NewQuerier(app.DistrKeeper), - app.IBCFeeKeeper, // ISC4 Wrapper: fee IBC middleware - app.IBCKeeper.ChannelKeeper, - &app.IBCKeeper.PortKeeper, - scopedWasmKeeper, - app.TransferKeeper, - app.MsgServiceRouter(), - app.GRPCQueryRouter(), - wasmDir, - wasmConfig, - availableCapabilities, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - wasmOpts..., -) - -app.WasmClientKeeper = ibcwasmkeeper.NewKeeperWithVM( - appCodec, - runtime.NewKVStoreService(keys[ibcwasmtypes.StoreKey]), - app.IBCKeeper.ClientKeeper, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - wasmer, // pass the Wasm VM instance to `08-wasm` keeper constructor - app.GRPCQueryRouter(), -) -... -``` - -### If `x/wasm` is not present - -If the chain does not use [`x/wasm`](https://github.com/CosmWasm/wasmd/tree/main/x/wasm), even though it is still possible to use the method above from the previous section -(e.g. instantiating a Wasm VM in app.go an pass it to 08-wasm's [`NewKeeperWithVM` constructor function](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/keeper/keeper.go#L39-L47), since there would be no need in this case to share the Wasm VM instance with another module, you can use the [`NewKeeperWithConfig` constructor function](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/keeper/keeper.go#L88-L96) and provide the Wasm VM configuration parameters of your choice instead. A Wasm VM instance will be created in `NewKeeperWithConfig`. The parameters that can set are: - -- `DataDir` is the [directory for Wasm blobs and various caches](https://github.com/CosmWasm/wasmvm/blob/1638725b25d799f078d053391945399cb35664b1/lib.go#L25). In `wasmd` this is set to the [`wasm` folder under the home directory](https://github.com/CosmWasm/wasmd/blob/36416def20effe47fb77f29f5ba35a003970fdba/app/app.go#L578). -- `SupportedCapabilities` is a comma separated [list of capabilities supported by the chain](https://github.com/CosmWasm/wasmvm/blob/1638725b25d799f078d053391945399cb35664b1/lib.go#L26). [`wasmd` sets this to all the available capabilities](https://github.com/CosmWasm/wasmd/blob/36416def20effe47fb77f29f5ba35a003970fdba/app/app.go#L586), but 08-wasm only requires `iterator`. -- `MemoryCacheSize` sets [the size in MiB of an in-memory cache for e.g. module caching](https://github.com/CosmWasm/wasmvm/blob/1638725b25d799f078d053391945399cb35664b1/lib.go#L29C16-L29C104). It is not consensus-critical and should be defined on a per-node basis, often in the range 100 to 1000 MB. [`wasmd` reads this value of](https://github.com/CosmWasm/wasmd/blob/36416def20effe47fb77f29f5ba35a003970fdba/app/app.go#L579). Default value is 256. -- `ContractDebugMode` is a [flag to enable/disable printing debug logs from the contract to STDOUT](https://github.com/CosmWasm/wasmvm/blob/1638725b25d799f078d053391945399cb35664b1/lib.go#L28). This should be false in production environments. Default value is false. - -Another configuration parameter of the Wasm VM is the contract memory limit (in MiB), which is [set to 32](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/types/config.go#L8), [following the example of `wasmd`](https://github.com/CosmWasm/wasmd/blob/36416def20effe47fb77f29f5ba35a003970fdba/x/wasm/keeper/keeper.go#L32-L34). This parameter is not configurable by users of `08-wasm`. - -The following sample code shows how the keeper would be constructed using this method: - -```go -// app.go -import ( - ... - "github.com/cosmos/cosmos-sdk/runtime" - - ibcwasmkeeper "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/keeper" - ibcwasmtypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" - ... -) - -... - -// homePath is the path to the directory where the data -// directory for Wasm blobs and caches will be created -wasmConfig := ibcwasmtypes.WasmConfig{ - DataDir: filepath.Join(homePath, "ibc_08-wasm_client_data"), - SupportedCapabilities: "iterator", - ContractDebugMode: false, -} -app.WasmClientKeeper = ibcwasmkeeper.NewKeeperWithConfig( - appCodec, - runtime.NewKVStoreService(keys[ibcwasmtypes.StoreKey]), - app.IBCKeeper.ClientKeeper, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - wasmConfig, - app.GRPCQueryRouter(), -) -``` - -Check out also the [`WasmConfig` type definition](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/types/config.go#L21-L31) for more information on each of the configurable parameters. Some parameters allow node-level configurations. There is additionally the function [`DefaultWasmConfig`](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/types/config.go#L36-L42) available that returns a configuration with the default values. - -### Options - -The `08-wasm` module comes with an options API inspired by the one in `x/wasm`. -Currently the only option available is the `WithQueryPlugins` option, which allows registration of custom query plugins for the `08-wasm` module. The use of this API is optional and it is only required if the chain wants to register custom query plugins for the `08-wasm` module. - -#### `WithQueryPlugins` - -By default, the `08-wasm` module does not support any queries. However, it is possible to register custom query plugins for [`QueryRequest::Custom`](https://github.com/CosmWasm/cosmwasm/blob/v1.5.0/packages/std/src/query/mod.rs#L45) and [`QueryRequest::Stargate`](https://github.com/CosmWasm/cosmwasm/blob/v1.5.0/packages/std/src/query/mod.rs#L54-L61). - -Assuming that the keeper is not yet instantiated, the following sample code shows how to register query plugins for the `08-wasm` module. - -We first construct a [`QueryPlugins`](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/types/querier.go#L78-L87) object with the desired query plugins: - -```go -queryPlugins := ibcwasmtypes.QueryPlugins { - Custom: MyCustomQueryPlugin(), - // `myAcceptList` is a `[]string` containing the list of gRPC query paths that the chain wants to allow for the `08-wasm` module to query. - // These queries must be registered in the chain's gRPC query router, be deterministic, and track their gas usage. - // The `AcceptListStargateQuerier` function will return a query plugin that will only allow queries for the paths in the `myAcceptList`. - // The query responses are encoded in protobuf unlike the implementation in `x/wasm`. - Stargate: ibcwasmtypes.AcceptListStargateQuerier(myAcceptList), -} -``` - -You may leave any of the fields in the `QueryPlugins` object as `nil` if you do not want to register a query plugin for that query type. - -Then, we pass the `QueryPlugins` object to the `WithQueryPlugins` option: - -```go -querierOption := ibcwasmtypes.WithQueryPlugins(&queryPlugins) -``` - -Finally, we pass the option to the `NewKeeperWithConfig` or `NewKeeperWithVM` constructor function during [Keeper instantiation](#keeper-instantiation): - -```diff -app.WasmClientKeeper = ibcwasmkeeper.NewKeeperWithConfig( - appCodec, - runtime.NewKVStoreService(keys[ibcwasmtypes.StoreKey]), - app.IBCKeeper.ClientKeeper, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - wasmConfig, - app.GRPCQueryRouter(), -+ querierOption, -) -``` - -```diff -app.WasmClientKeeper = ibcwasmkeeper.NewKeeperWithVM( - appCodec, - runtime.NewKVStoreService(keys[ibcwasmtypes.StoreKey]), - app.IBCKeeper.ClientKeeper, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), - wasmer, // pass the Wasm VM instance to `08-wasm` keeper constructor - app.GRPCQueryRouter(), -+ querierOption, -) -``` - -## Updating `AllowedClients` - -In order to use the `08-wasm` module chains must update the [`AllowedClients` parameter in the 02-client submodule](https://github.com/cosmos/ibc-go/blob/v8.0.0/proto/ibc/core/client/v1/client.proto#L64) of core IBC. This can be configured directly in the application upgrade handler with the sample code below: - -```go -import ( - ... - ibcwasmtypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" - ... -) - -... - -func CreateWasmUpgradeHandler( - mm *module.Manager, - configurator module.Configurator, - clientKeeper clientkeeper.Keeper, -) upgradetypes.UpgradeHandler { - return func(ctx context.Context, _ upgradetypes.Plan, vm module.VersionMap) (module.VersionMap, error) { - sdkCtx := sdk.UnwrapSDKContext(ctx) - // explicitly update the IBC 02-client params, adding the wasm client type - params := clientKeeper.GetParams(ctx) - params.AllowedClients = append(params.AllowedClients, ibcwasmtypes.Wasm) - clientKeeper.SetParams(ctx, params) - - return mm.RunMigrations(ctx, configurator, vm) - } -} -``` - -Or alternatively the parameter can be updated via a governance proposal (see at the bottom of section [`Creating clients`](../01-developer-guide/09-setup.md#creating-clients) for an example of how to do this). - -## Adding the module to the store - -As part of the upgrade migration you must also add the module to the upgrades store. - -```go -func (app SimApp) RegisterUpgradeHandlers() { - - ... - - if upgradeInfo.Name == UpgradeName && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) { - storeUpgrades := storetypes.StoreUpgrades{ - Added: []string{ - ibcwasmtypes.ModuleName, - }, - } - - // configure store loader that checks if version == upgradeHeight and applies store upgrades - app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &storeUpgrades)) - } -} -``` - -## Adding snapshot support - -In order to use the `08-wasm` module chains are required to register the `WasmSnapshotter` extension in the snapshot manager. This snapshotter takes care of persisting the external state, in the form of contract code, of the Wasm VM instance to disk when the chain is snapshotted. [This code](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/testing/simapp/app.go#L775-L782) should be placed in `NewSimApp` function in `app.go`. - -## Pin byte codes at start - -Wasm byte codes should be pinned to the WasmVM cache on every application start, therefore [this code](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/testing/simapp/app.go#L825-L830) should be placed in `NewSimApp` function in `app.go`. diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/04-messages.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/04-messages.md deleted file mode 100644 index 6b8321583c2..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/04-messages.md +++ /dev/null @@ -1,75 +0,0 @@ ---- -title: Messages -sidebar_label: Messages -sidebar_position: 4 -slug: /ibc/light-clients/wasm/messages ---- - -# Messages - -## `MsgStoreCode` - -Uploading the Wasm light client contract to the Wasm VM storage is achieved by means of `MsgStoreCode`: - -```go -type MsgStoreCode struct { - // signer address - Signer string - // wasm byte code of light client contract. It can be raw or gzip compressed - WasmByteCode []byte -} -``` - -This message is expected to fail if: - -- `Signer` is an invalid Bech32 address, or it does not match the designated authority address. -- `WasmByteCode` is empty or it exceeds the maximum size, currently set to 3MB. - -Only light client contracts stored using `MsgStoreCode` are allowed to be instantiated. An attempt to create a light client from contracts uploaded via other means (e.g. through `x/wasm` if the module shares the same Wasm VM instance with 08-wasm) will fail. Due to the idempotent nature of the Wasm VM's `StoreCode` function, it is possible to store the same byte code multiple times. - -When execution of `MsgStoreCode` succeeds, the checksum of the contract (i.e. the sha256 hash of the contract's byte code) is stored in an allow list. When a relayer submits [`MsgCreateClient`](https://github.com/cosmos/ibc-go/blob/v8.0.0/proto/ibc/core/client/v1/tx.proto#L25-L37) with 08-wasm's `ClientState`, the client state includes the checksum of the Wasm byte code that should be called. Then 02-client calls [08-wasm's implementation of `Initialize` function](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/02-client/keeper/client.go#L36) (which is an interface function part of `ClientState`), and it will check that the checksum in the client state matches one of the checksums in the allow list. If a match is found, the light client is initialized; otherwise, the transaction is aborted. - -## `MsgMigrateContract` - -Migrating a contract to a new Wasm byte code is achieved by means of `MsgMigrateContract`: - -```go -type MsgMigrateContract struct { - // signer address - Signer string - // the client id of the contract - ClientId string - // the SHA-256 hash of the new wasm byte code for the contract - Checksum []byte - // the json-encoded migrate msg to be passed to the contract on migration - Msg []byte -} -``` - -This message is expected to fail if: - -- `Signer` is an invalid Bech32 address, or it does not match the designated authority address. -- `ClientId` is not a valid identifier prefixed by `08-wasm`. -- `Checksum` is not exactly 32 bytes long or it is not found in the list of allowed checksums (a new checksum is added to the list when executing `MsgStoreCode`), or it matches the current checksum of the contract. - -When a Wasm light client contract is migrated to a new Wasm byte code the checksum for the contract will be updated with the new checksum. - -## `MsgRemoveChecksum` - -Removing a checksum from the list of allowed checksums is achieved by means of `MsgRemoveChecksum`: - -```go -type MsgRemoveChecksum struct { - // signer address - Signer string - // Wasm byte code checksum to be removed from the store - Checksum []byte -} -``` - -This message is expected to fail if: - -- `Signer` is an invalid Bech32 address, or it does not match the designated authority address. -- `Checksum` is not exactly 32 bytes long or it is not found in the list of allowed checksums (a new checksum is added to the list when executing `MsgStoreCode`). - -When a checksum is removed from the list of allowed checksums, then the corresponding Wasm byte code will not be available for instantiation in [08-wasm's implementation of `Initialize` function](https://github.com/cosmos/ibc-go/blob/v8.0.0/modules/core/02-client/keeper/client.go#L36). diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/05-governance.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/05-governance.md deleted file mode 100644 index dc2d0ce5f8e..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/05-governance.md +++ /dev/null @@ -1,126 +0,0 @@ ---- -title: Governance -sidebar_label: Governance -sidebar_position: 5 -slug: /ibc/light-clients/wasm/governance ---- - -# Governance - -Learn how to upload Wasm light client byte code on a chain, and how to migrate an existing Wasm light client contract. - -## Setting an authority - -Both the storage of Wasm light client byte code as well as the migration of an existing Wasm light client contract are permissioned (i.e. only allowed to an authority such as governance). The designated authority is specified when instantiating `08-wasm`'s keeper: both [`NewKeeperWithVM`](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/keeper/keeper.go#L39-L47) and [`NewKeeperWithConfig`](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/keeper/keeper.go#L88-L96) constructor functions accept an `authority` argument that must be the address of the authorized actor. For example, in `app.go`, when instantiating the keeper, you can pass the address of the governance module: - -```go -// app.go -import ( - ... - "github.com/cosmos/cosmos-sdk/runtime" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" - govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" - - ibcwasmkeeper "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/keeper" - ibcwasmtypes "github.com/cosmos/ibc-go/modules/light-clients/08-wasm/types" - ... -) - -// app.go -app.WasmClientKeeper = ibcwasmkeeper.NewKeeperWithVM( - appCodec, - runtime.NewKVStoreService(keys[ibcwasmtypes.StoreKey]), - app.IBCKeeper.ClientKeeper, - authtypes.NewModuleAddress(govtypes.ModuleName).String(), // authority - wasmVM, - app.GRPCQueryRouter(), -) -``` - -## Storing new Wasm light client byte code - - If governance is the allowed authority, the governance v1 proposal that needs to be submitted to upload a new light client contract should contain the message [`MsgStoreCode`](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/proto/ibc/lightclients/wasm/v1/tx.proto#L23-L30) with the base64-encoded byte code of the Wasm contract. Use the following CLI command and JSON as an example: - -```shell -simd tx gov submit-proposal --from -``` - -where `proposal.json` contains: - -```json -{ - "title": "Upload IBC Wasm light client", - "summary": "Upload wasm client", - "messages": [ - { - "@type": "/ibc.lightclients.wasm.v1.MsgStoreCode", - "signer": "cosmos1...", // the authority address (e.g. the gov module account address) - "wasm_byte_code": "YWJ...PUB+" // standard base64 encoding of the Wasm contract byte code - } - ], - "metadata": "AQ==", - "deposit": "100stake" -} -``` - -To learn more about the `submit-proposal` CLI command, please check out [the relevant section in Cosmos SDK documentation](https://docs.cosmos.network/main/modules/gov#submit-proposal). - -Alternatively, the process of submitting the proposal may be simpler if you use the CLI command `store-code`. This CLI command accepts as argument the file of the Wasm light client contract and takes care of constructing the proposal message with `MsgStoreCode` and broadcasting it. See section [`store-code`](./08-client.md#store-code) for more information. - -## Migrating an existing Wasm light client contract - -If governance is the allowed authority, the governance v1 proposal that needs to be submitted to migrate an existing new Wasm light client contract should contain the message [`MsgMigrateContract`](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/proto/ibc/lightclients/wasm/v1/tx.proto#L52-L63) with the checksum of the Wasm byte code to migrate to. Use the following CLI command and JSON as an example: - -```shell -simd tx gov submit-proposal --from -``` - -where `proposal.json` contains: - -```json -{ - "title": "Migrate IBC Wasm light client", - "summary": "Migrate wasm client", - "messages": [ - { - "@type": "/ibc.lightclients.wasm.v1.MsgMigrateContract", - "signer": "cosmos1...", // the authority address (e.g. the gov module account address) - "client_id": "08-wasm-1", // client identifier of the Wasm light client contract that will be migrated - "checksum": "a8ad...4dc0", // SHA-256 hash of the Wasm byte code to migrate to, previously stored with MsgStoreCode - "msg": "{}" // JSON-encoded message to be passed to the contract on migration - } - ], - "metadata": "AQ==", - "deposit": "100stake" -} -``` - -To learn more about the `submit-proposal` CLI command, please check out [the relevant section in Cosmos SDK documentation](https://docs.cosmos.network/main/modules/gov#submit-proposal). - -## Removing an existing checksum - -If governance is the allowed authority, the governance v1 proposal that needs to be submitted to remove a specific checksum from the list of allowed checksums should contain the message [`MsgRemoveChecksum`](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/proto/ibc/lightclients/wasm/v1/tx.proto#L39-L46) with the checksum (of a corresponding Wasm byte code). Use the following CLI command and JSON as an example: - -```shell -simd tx gov submit-proposal --from -``` - -where `proposal.json` contains: - -```json -{ - "title": "Remove checksum of Wasm light client byte code", - "summary": "Remove checksum", - "messages": [ - { - "@type": "/ibc.lightclients.wasm.v1.MsgRemoveChecksum", - "signer": "cosmos1...", // the authority address (e.g. the gov module account address) - "checksum": "a8ad...4dc0", // SHA-256 hash of the Wasm byte code that should be removed from the list of allowed checksums - } - ], - "metadata": "AQ==", - "deposit": "100stake" -} -``` - -To learn more about the `submit-proposal` CLI command, please check out [the relevant section in Cosmos SDK documentation](https://docs.cosmos.network/main/modules/gov#submit-proposal). diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/06-events.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/06-events.md deleted file mode 100644 index 518a3a94c02..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/06-events.md +++ /dev/null @@ -1,26 +0,0 @@ ---- -title: Events -sidebar_label: Events -sidebar_position: 6 -slug: /ibc/light-clients/wasm/events ---- - -# Events - -The `08-wasm` module emits the following events: - -## `MsgStoreCode` - -| Type | Attribute Key | Attribute Value | -|------------------|----------------|--------------------------| -| store_wasm_code | wasm_checksum | \{hex.Encode(checksum)\} | -| message | module | 08-wasm | - -## `MsgMigrateContract` - -| Type | Attribute Key | Attribute Value | -|------------------|----------------|-----------------------------| -| migrate_contract | client_id | \{clientId\} | -| migrate_contract | wasm_checksum | \{hex.Encode(checksum)\} | -| migrate_contract | new_checksum | \{hex.Encode(newChecksum)\} | -| message | module | 08-wasm | diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/07-contracts.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/07-contracts.md deleted file mode 100644 index 9edddff1385..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/07-contracts.md +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: Contracts -sidebar_label: Contracts -sidebar_position: 7 -slug: /ibc/light-clients/wasm/contracts ---- - -# Contracts - -Learn about the expected behaviour of Wasm light client contracts and the between with `08-wasm`. - -## API - -The `08-wasm` light client proxy performs calls to the Wasm light client via the Wasm VM. The calls require as input JSON-encoded payload messages that fall in the three categories described in the next sections. - -## `InstantiateMessage` - -This is the message sent to the contract's `instantiate` entry point. It contains the bytes of the protobuf-encoded client and consensus states of the underlying light client, both provided in [`MsgCreateClient`](https://github.com/cosmos/ibc-go/blob/v8.0.0/proto/ibc/core/client/v1/tx.proto#L40-L52). Please note that the bytes contained within the JSON message are represented as base64-encoded strings. - -```go -type InstantiateMessage struct { - ClientState []byte `json:"client_state"` - ConsensusState []byte `json:"consensus_state"` - Checksum []byte `json:"checksum" -} -``` - -The Wasm light client contract is expected to store the client and consensus state in the corresponding keys of the client-prefixed store. - -## `QueryMsg` - -`QueryMsg` acts as a discriminated union type that is used to encode the messages that are sent to the contract's `query` entry point. Only one of the fields of the type should be set at a time, so that the other fields are omitted in the encoded JSON and the payload can be correctly translated to the corresponding element of the enumeration in Rust. - -```go -type QueryMsg struct { - Status *StatusMsg `json:"status,omitempty"` - ExportMetadata *ExportMetadataMsg `json:"export_metadata,omitempty"` - TimestampAtHeight *TimestampAtHeightMsg `json:"timestamp_at_height,omitempty"` - VerifyClientMessage *VerifyClientMessageMsg `json:"verify_client_message,omitempty"` - CheckForMisbehaviour *CheckForMisbehaviourMsg `json:"check_for_misbehaviour,omitempty"` -} -``` - -```rust -#[cw_serde] -pub enum QueryMsg { - Status(StatusMsg), - ExportMetadata(ExportMetadataMsg), - TimestampAtHeight(TimestampAtHeightMsg), - VerifyClientMessage(VerifyClientMessageRaw), - CheckForMisbehaviour(CheckForMisbehaviourMsgRaw), -} -``` - -To learn what it is expected from the Wasm light client contract when processing each message, please read the corresponding section of the [Light client developer guide](../01-developer-guide/01-overview.md): - -- For `StatusMsg`, see the section [`Status` method](../01-developer-guide/02-client-state.md#status-method). -- For `ExportMetadataMsg`, see the section [Genesis metadata](../01-developer-guide/08-genesis.md#genesis-metadata). -- For `TimestampAtHeightMsg`, see the section [`GetTimestampAtHeight` method](../01-developer-guide/02-client-state.md#gettimestampatheight-method). -- For `VerifyClientMessageMsg`, see the section [`VerifyClientMessage`](../01-developer-guide/04-updates-and-misbehaviour.md#verifyclientmessage). -- For `CheckForMisbehaviourMsg`, see the section [`CheckForMisbehaviour` method](../01-developer-guide/02-client-state.md#checkformisbehaviour-method). - -## `SudoMsg` - -`SudoMsg` acts as a discriminated union type that is used to encode the messages that are sent to the contract's `sudo` entry point. Only one of the fields of the type should be set at a time, so that the other fields are omitted in the encoded JSON and the payload can be correctly translated to the corresponding element of the enumeration in Rust. - -The `sudo` entry point is able to perform state-changing writes in the client-prefixed store. - -```go -type SudoMsg struct { - UpdateState *UpdateStateMsg `json:"update_state,omitempty"` - UpdateStateOnMisbehaviour *UpdateStateOnMisbehaviourMsg `json:"update_state_on_misbehaviour,omitempty"` - VerifyUpgradeAndUpdateState *VerifyUpgradeAndUpdateStateMsg `json:"verify_upgrade_and_update_state,omitempty"` - VerifyMembership *VerifyMembershipMsg `json:"verify_membership,omitempty"` - VerifyNonMembership *VerifyNonMembershipMsg `json:"verify_non_membership,omitempty"` - MigrateClientStore *MigrateClientStoreMsg `json:"migrate_client_store,omitempty"` -} -``` - -```rust -#[cw_serde] -pub enum SudoMsg { - UpdateState(UpdateStateMsgRaw), - UpdateStateOnMisbehaviour(UpdateStateOnMisbehaviourMsgRaw), - VerifyUpgradeAndUpdateState(VerifyUpgradeAndUpdateStateMsgRaw), - VerifyMembership(VerifyMembershipMsgRaw), - VerifyNonMembership(VerifyNonMembershipMsgRaw), - MigrateClientStore(MigrateClientStoreMsgRaw), -} -``` - -To learn what it is expected from the Wasm light client contract when processing each message, please read the corresponding section of the [Light client developer guide](../01-developer-guide/01-overview.md): - -- For `UpdateStateMsg`, see the section [`UpdateState`](../01-developer-guide/04-updates-and-misbehaviour.md#updatestate). -- For `UpdateStateOnMisbehaviourMsg`, see the section [`UpdateStateOnMisbehaviour`](../01-developer-guide/04-updates-and-misbehaviour.md#updatestateonmisbehaviour). -- For `VerifyUpgradeAndUpdateStateMsg`, see the section [`GetTimestampAtHeight` method](../01-developer-guide/05-upgrades.md#implementing-verifyupgradeandupdatestate). -- For `VerifyMembershipMsg`, see the section [`VerifyMembership` method](../01-developer-guide/02-client-state.md#verifymembership-method). -- For `VerifyNonMembershipMsg`, see the section [`VerifyNonMembership` method](../01-developer-guide/02-client-state.md#verifynonmembership-method). -- For `MigrateClientStoreMsg`, see the section [Implementing `CheckSubstituteAndUpdateState`](../01-developer-guide/07-proposals.md#implementing-checksubstituteandupdatestate). - -### Migration - -The `08-wasm` proxy light client exposes the `MigrateContract` RPC endpoint that can be used to migrate a given Wasm light client contract (specified by the client identifier) to a new Wasm byte code (specified by the hash of the byte code). The expected use case for this RPC endpoint is to enable contracts to migrate to new byte code in case the current byte code is found to have a bug or vulnerability. The Wasm byte code that contracts are migrated have to be uploaded beforehand using `MsgStoreCode` and must implement the `migrate` entry point. See section[`MsgMigrateContract`](./04-messages.md#msgmigratecontract) for information about the request message for this RPC endpoint. - -## Expected behaviour - -The `08-wasm` proxy light client modules expects the following behaviour from the Wasm light client contracts when executing messages that perform state-changing writes: - -- The contract must not delete the client state from the store. -- The contract must not change the client state to a client state of another type. -- The contract must not change the checksum in the client state. - -Any violation of these rules will result in an error returned from `08-wasm` that will abort the transaction. diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/08-client.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/08-client.md deleted file mode 100644 index dd24108f2d0..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/08-client.md +++ /dev/null @@ -1,141 +0,0 @@ ---- -title: Client -sidebar_label: Client -sidebar_position: 7 -slug: /ibc/light-clients/wasm/client ---- - -# Client - -## CLI - -A user can query and interact with the `08-wasm` module using the CLI. Use the `--help` flag to discover the available commands: - -### Transactions - -The `tx` commands allow users to interact with the `08-wasm` submodule. - -```shell -simd tx ibc-wasm --help -``` - -#### `store-code` - -The `store-code` command allows users to submit a governance proposal with a `MsgStoreCode` to store the byte code of a Wasm light client contract. - -```shell -simd tx ibc-wasm store-code [path/to/wasm-file] [flags] -``` - -`path/to/wasm-file` is the path to the `.wasm` or `.wasm.gz` file. - -### Query - -The `query` commands allow users to query `08-wasm` state. - -```shell -simd query ibc-wasm --help -``` - -#### `checksums` - -The `checksums` command allows users to query the list of checksums of Wasm light client contracts stored in the Wasm VM via the `MsgStoreCode`. The checksums are hex-encoded. - -```shell -simd query ibc-wasm checksums [flags] -``` - -Example: - -```shell -simd query ibc-wasm checksums -``` - -Example Output: - -```shell -checksums: -- c64f75091a6195b036f472cd8c9f19a56780b9eac3c3de7ced0ec2e29e985b64 -pagination: - next_key: null - total: "1" -``` - -#### `code` - -The `code` command allows users to query the Wasm byte code of a light client contract given the provided input checksum. - -```shell -./simd q ibc-wasm code -``` - -Example: - -```shell -simd query ibc-wasm code c64f75091a6195b036f472cd8c9f19a56780b9eac3c3de7ced0ec2e29e985b64 -``` - -Example Output: - -```shell -code: AGFzb...AqBBE= -``` - -## gRPC - -A user can query the `08-wasm` module using gRPC endpoints. - -### `Checksums` - -The `Checksums` endpoint allows users to query the list of checksums of Wasm light client contracts stored in the Wasm VM via the `MsgStoreCode`. - -```shell -ibc.lightclients.wasm.v1.Query/Checksums -``` - -Example: - -```shell -grpcurl -plaintext \ - -d '{}' \ - localhost:9090 \ - ibc.lightclients.wasm.v1.Query/Checksums -``` - -Example output: - -```shell -{ - "checksums": [ - "c64f75091a6195b036f472cd8c9f19a56780b9eac3c3de7ced0ec2e29e985b64" - ], - "pagination": { - "total": "1" - } -} -``` - -### `Code` - -The `Code` endpoint allows users to query the Wasm byte code of a light client contract given the provided input checksum. - -```shell -ibc.lightclients.wasm.v1.Query/Code -``` - -Example: - -```shell -grpcurl -plaintext \ - -d '{"checksum":"c64f75091a6195b036f472cd8c9f19a56780b9eac3c3de7ced0ec2e29e985b64"}' \ - localhost:9090 \ - ibc.lightclients.wasm.v1.Query/Code -``` - -Example output: - -```shell -{ - "code": AGFzb...AqBBE= -} -``` diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/09-migrations.md b/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/09-migrations.md deleted file mode 100644 index 2e85079168e..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/09-migrations.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: Migrations -sidebar_label: Migrations -sidebar_position: 9 -slug: /ibc/light-clients/wasm/migrations ---- - -# Migrations - -This guide provides instructions for migrating 08-wasm versions. - -## From ibc-go v7.3.x to ibc-go v8.0.x - -## Chains - -In the 08-wasm versions compatible with ibc-go v7.3.x and above from the v7 release line, the checksums of the uploaded Wasm bytecodes are all stored under a single key. From ibc-go v8.0.x the checksums are stored using [`collections.KeySet`](https://docs.cosmos.network/v0.50/build/packages/collections#keyset), whose full functionality became available in Cosmos SDK v0.50. There is therefore an [automatic migration handler](https://github.com/cosmos/ibc-go/blob/57fcdb9a9a9db9b206f7df2f955866dc4e10fef4/modules/light-clients/08-wasm/module.go#L115-L118) configured in the 08-wasm module to migrate the stored checksums to `collections.KeySet`. diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/_category_.json b/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/_category_.json deleted file mode 100644 index 6dc3d24d11a..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/04-wasm/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": "Wasm", - "position": 4, - "link": null -} \ No newline at end of file diff --git a/docs/versioned_docs/version-v8.0.x/03-light-clients/_category_.json b/docs/versioned_docs/version-v8.0.x/03-light-clients/_category_.json deleted file mode 100644 index 8e1f221f353..00000000000 --- a/docs/versioned_docs/version-v8.0.x/03-light-clients/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": "IBC Light Clients", - "position": 3, - "link": null -} \ No newline at end of file diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/01-overview.md b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/01-overview.md deleted file mode 100644 index 5b576061a04..00000000000 --- a/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/01-overview.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -title: Overview -sidebar_label: Overview -sidebar_position: 1 -slug: /middleware/ics29-fee/overview ---- - -# Overview - -:::note Synopsis -Learn about what the Fee Middleware module is, and how to build custom modules that utilize the Fee Middleware functionality -::: - -## What is the Fee Middleware module? - -IBC does not depend on relayer operators for transaction verification. However, the relayer infrastructure ensures liveness of the Interchain network — operators listen for packets sent through channels opened between chains, and perform the vital service of ferrying these packets (and proof of the transaction on the sending chain/receipt on the receiving chain) to the clients on each side of the channel. - -Though relaying is permissionless and completely decentralized and accessible, it does come with operational costs. Running full nodes to query transaction proofs and paying for transaction fees associated with IBC packets are two of the primary cost burdens which have driven the overall discussion on **a general, in-protocol incentivization mechanism for relayers**. - -Initially, a [simple proposal](https://github.com/cosmos/ibc/pull/577/files) was created to incentivize relaying on ICS20 token transfers on the destination chain. However, the proposal was specific to ICS20 token transfers and would have to be reimplemented in this format on every other IBC application module. - -After much discussion, the proposal was expanded to a [general incentivisation design](https://github.com/cosmos/ibc/tree/master/spec/app/ics-029-fee-payment) that can be adopted by any ICS application protocol as [middleware](../../01-ibc/04-middleware/02-develop.md). - -## Concepts - -ICS29 fee payments in this middleware design are built on the assumption that sender chains are the source of incentives — the chain on which packets are incentivized is the chain that distributes fees to relayer operators. However, as part of the IBC packet flow, messages have to be submitted on both sender and destination chains. This introduces the requirement of a mapping of relayer operator's addresses on both chains. - -To achieve the stated requirements, the **fee middleware module has two main groups of functionality**: - -- Registering of relayer addresses associated with each party involved in relaying the packet on the source chain. This registration process can be automated on start up of relayer infrastructure and happens only once, not every packet flow. - - This is described in the [Fee distribution section](04-fee-distribution.md). - -- Escrowing fees by any party which will be paid out to each rightful party on completion of the packet lifecycle. - - This is described in the [Fee messages section](03-msgs.md). - -We complete the introduction by giving a list of definitions of relevant terminology. - -`Forward relayer`: The relayer that submits the `MsgRecvPacket` message for a given packet (on the destination chain). - -`Reverse relayer`: The relayer that submits the `MsgAcknowledgement` message for a given packet (on the source chain). - -`Timeout relayer`: The relayer that submits the `MsgTimeout` or `MsgTimeoutOnClose` messages for a given packet (on the source chain). - -`Payee`: The account address on the source chain to be paid on completion of the packet lifecycle. The packet lifecycle on the source chain completes with the receipt of a `MsgTimeout`/`MsgTimeoutOnClose` or a `MsgAcknowledgement`. - -`Counterparty payee`: The account address to be paid on completion of the packet lifecycle on the destination chain. The package lifecycle on the destination chain completes with a successful `MsgRecvPacket`. - -`Refund address`: The address of the account paying for the incentivization of packet relaying. The account is refunded timeout fees upon successful acknowledgement. In the event of a packet timeout, both acknowledgement and receive fees are refunded. - -## Known Limitations - -The first version of fee payments middleware will only support incentivisation of new channels, however, channel upgradeability will enable incentivisation of all existing channels. diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/02-integration.md b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/02-integration.md deleted file mode 100644 index 343e09fb11e..00000000000 --- a/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/02-integration.md +++ /dev/null @@ -1,177 +0,0 @@ ---- -title: Integration -sidebar_label: Integration -sidebar_position: 2 -slug: /middleware/ics29-fee/integration ---- - -# Integration - -:::note Synopsis -Learn how to configure the Fee Middleware module with IBC applications. The following document is intended for developers building on top of the Cosmos SDK and only applies for Cosmos SDK chains. -::: - -:::note - -## Pre-requisite Readings - -- [IBC middleware development](../../01-ibc/04-middleware/02-develop.md) -- [IBC middleware integration](../../01-ibc/04-middleware/03-integration.md) - -::: - -The Fee Middleware module, as the name suggests, plays the role of an IBC middleware and as such must be configured by chain developers to route and handle IBC messages correctly. -For Cosmos SDK chains this setup is done via the `app/app.go` file, where modules are constructed and configured in order to bootstrap the blockchain application. - -## Example integration of the Fee Middleware module - -```go -// app.go - -// Register the AppModule for the fee middleware module -ModuleBasics = module.NewBasicManager( - ... - ibcfee.AppModuleBasic{}, - ... -) - -... - -// Add module account permissions for the fee middleware module -maccPerms = map[string][]string{ - ... - ibcfeetypes.ModuleName: nil, -} - -... - -// Add fee middleware Keeper -type App struct { - ... - - IBCFeeKeeper ibcfeekeeper.Keeper - - ... -} - -... - -// Create store keys -keys := sdk.NewKVStoreKeys( - ... - ibcfeetypes.StoreKey, - ... -) - -... - -app.IBCFeeKeeper = ibcfeekeeper.NewKeeper( - appCodec, keys[ibcfeetypes.StoreKey], - app.IBCKeeper.ChannelKeeper, // may be replaced with IBC middleware - app.IBCKeeper.ChannelKeeper, - &app.IBCKeeper.PortKeeper, app.AccountKeeper, app.BankKeeper, -) - - -// See the section below for configuring an application stack with the fee middleware module - -... - -// Register fee middleware AppModule -app.moduleManager = module.NewManager( - ... - ibcfee.NewAppModule(app.IBCFeeKeeper), -) - -... - -// Add fee middleware to begin blocker logic -app.moduleManager.SetOrderBeginBlockers( - ... - ibcfeetypes.ModuleName, - ... -) - -// Add fee middleware to end blocker logic -app.moduleManager.SetOrderEndBlockers( - ... - ibcfeetypes.ModuleName, - ... -) - -// Add fee middleware to init genesis logic -app.moduleManager.SetOrderInitGenesis( - ... - ibcfeetypes.ModuleName, - ... -) -``` - -## Configuring an application stack with Fee Middleware - -As mentioned in [IBC middleware development](../../01-ibc/04-middleware/02-develop.md) an application stack may be composed of many or no middlewares that nest a base application. -These layers form the complete set of application logic that enable developers to build composable and flexible IBC application stacks. -For example, an application stack may be just a single base application like `transfer`, however, the same application stack composed with `29-fee` will nest the `transfer` base application -by wrapping it with the Fee Middleware module. - -### Transfer - -See below for an example of how to create an application stack using `transfer` and `29-fee`. -The following `transferStack` is configured in `app/app.go` and added to the IBC `Router`. -The in-line comments describe the execution flow of packets between the application stack and IBC core. - -```go -// Create Transfer Stack -// SendPacket, since it is originating from the application to core IBC: -// transferKeeper.SendPacket -> fee.SendPacket -> channel.SendPacket - -// RecvPacket, message that originates from core IBC and goes down to app, the flow is the other way -// channel.RecvPacket -> fee.OnRecvPacket -> transfer.OnRecvPacket - -// transfer stack contains (from top to bottom): -// - IBC Fee Middleware -// - Transfer - -// create IBC module from bottom to top of stack -var transferStack porttypes.IBCModule -transferStack = transfer.NewIBCModule(app.TransferKeeper) -transferStack = ibcfee.NewIBCMiddleware(transferStack, app.IBCFeeKeeper) - -// Add transfer stack to IBC Router -ibcRouter.AddRoute(ibctransfertypes.ModuleName, transferStack) -``` - -### Interchain Accounts - -See below for an example of how to create an application stack using `27-interchain-accounts` and `29-fee`. -The following `icaControllerStack` and `icaHostStack` are configured in `app/app.go` and added to the IBC `Router` with the associated authentication module. -The in-line comments describe the execution flow of packets between the application stack and IBC core. - -```go -// Create Interchain Accounts Stack -// SendPacket, since it is originating from the application to core IBC: -// icaAuthModuleKeeper.SendTx -> icaController.SendPacket -> fee.SendPacket -> channel.SendPacket - -// initialize ICA module with mock module as the authentication module on the controller side -var icaControllerStack porttypes.IBCModule -icaControllerStack = ibcmock.NewIBCModule(&mockModule, ibcmock.NewMockIBCApp("", scopedICAMockKeeper)) -app.ICAAuthModule = icaControllerStack.(ibcmock.IBCModule) -icaControllerStack = icacontroller.NewIBCMiddleware(icaControllerStack, app.ICAControllerKeeper) -icaControllerStack = ibcfee.NewIBCMiddleware(icaControllerStack, app.IBCFeeKeeper) - -// RecvPacket, message that originates from core IBC and goes down to app, the flow is: -// channel.RecvPacket -> fee.OnRecvPacket -> icaHost.OnRecvPacket - -var icaHostStack porttypes.IBCModule -icaHostStack = icahost.NewIBCModule(app.ICAHostKeeper) -icaHostStack = ibcfee.NewIBCMiddleware(icaHostStack, app.IBCFeeKeeper) - -// Add authentication module, controller and host to IBC router -ibcRouter. - // the ICA Controller middleware needs to be explicitly added to the IBC Router because the - // ICA controller module owns the port capability for ICA. The ICA authentication module - // owns the channel capability. - AddRoute(ibcmock.ModuleName+icacontrollertypes.SubModuleName, icaControllerStack) // ica with mock auth module stack route to ica (top level of middleware stack) - AddRoute(icacontrollertypes.SubModuleName, icaControllerStack). - AddRoute(icahosttypes.SubModuleName, icaHostStack). -``` diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/03-msgs.md b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/03-msgs.md deleted file mode 100644 index d1b26238a17..00000000000 --- a/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/03-msgs.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Fee Messages -sidebar_label: Fee Messages -sidebar_position: 3 -slug: /middleware/ics29-fee/msgs ---- - -# Fee messages - -:::note Synopsis -Learn about the different ways to pay for fees, how the fees are paid out and what happens when not enough escrowed fees are available for payout -::: - -## Escrowing fees - -The fee middleware module exposes two different ways to pay fees for relaying IBC packets: - -### `MsgPayPacketFee` - -`MsgPayPacketFee` enables the escrowing of fees for a packet at the next sequence send and should be combined into one `MultiMsgTx` with the message that will be paid for. Note that the `Relayers` field has been set up to allow for an optional whitelist of relayers permitted to receive this fee, however, this feature has not yet been enabled at this time. - -```go -type MsgPayPacketFee struct{ - // fee encapsulates the recv, ack and timeout fees associated with an IBC packet - Fee Fee - // the source port unique identifier - SourcePortId string - // the source channel unique identifier - SourceChannelId string - // account address to refund fee if necessary - Signer string - // optional list of relayers permitted to the receive packet fee - Relayers []string -} -``` - -The `Fee` message contained in this synchronous fee payment method configures different fees which will be paid out for `MsgRecvPacket`, `MsgAcknowledgement`, and `MsgTimeout`/`MsgTimeoutOnClose`. - -```go -type Fee struct { - RecvFee types.Coins - AckFee types.Coins - TimeoutFee types.Coins -} -``` - -The diagram below shows the `MultiMsgTx` with the `MsgTransfer` coming from a token transfer message, along with `MsgPayPacketFee`. - -![msgpaypacket.png](./images/msgpaypacket.png) - -### `MsgPayPacketFeeAsync` - -`MsgPayPacketFeeAsync` enables the asynchronous escrowing of fees for a specified packet. Note that a packet can be 'topped up' multiple times with additional fees of any coin denomination by broadcasting multiple `MsgPayPacketFeeAsync` messages. - -```go -type MsgPayPacketFeeAsync struct { - // unique packet identifier comprised of the channel ID, port ID and sequence - PacketId channeltypes.PacketId - // the packet fee associated with a particular IBC packet - PacketFee PacketFee -} -``` - -where the `PacketFee` also specifies the `Fee` to be paid as well as the refund address for fees which are not paid out - -```go -type PacketFee struct { - Fee Fee - RefundAddress string - Relayers []string -} -``` - -The diagram below shows how multiple `MsgPayPacketFeeAsync` can be broadcasted asynchronously. Escrowing of the fee associated with a packet can be carried out by any party because ICS-29 does not dictate a particular fee payer. In fact, chains can choose to simply not expose this fee payment to end users at all and rely on a different module account or even the community pool as the source of relayer incentives. - -![paypacketfeeasync.png](./images/paypacketfeeasync.png) - -Please see our [wiki](https://github.com/cosmos/ibc-go/wiki/Fee-enabled-fungible-token-transfers) for example flows on how to use these messages to incentivise a token transfer channel using a CLI. - -## Paying out the escrowed fees - -Following diagram takes a look at the packet flow for an incentivized token transfer and investigates the several scenario's for paying out the escrowed fees. We assume that the relayers have registered their counterparty address, detailed in the [Fee distribution section](04-fee-distribution.md). - -![feeflow.png](./images/feeflow.png) - -- In the case of a successful transaction, `RecvFee` will be paid out to the designated counterparty payee address which has been registered on the receiver chain and sent back with the `MsgAcknowledgement`, `AckFee` will be paid out to the relayer address which has submitted the `MsgAcknowledgement` on the sending chain (or the registered payee in case one has been registered for the relayer address), and `TimeoutFee` will be reimbursed to the account which escrowed the fee. -- In case of a timeout transaction, `RecvFee` and `AckFee` will be reimbursed. The `TimeoutFee` will be paid to the `Timeout Relayer` (who submits the timeout message to the source chain). - -> Please note that fee payments are built on the assumption that sender chains are the source of incentives — the chain that sends the packets is the same chain where fee payments will occur -- please see the [Fee distribution section](04-fee-distribution.md) to understand the flow for registering payee and counterparty payee (fee receiving) addresses. - -## A locked fee middleware module - -The fee middleware module can become locked if the situation arises that the escrow account for the fees does not have sufficient funds to pay out the fees which have been escrowed for each packet. *This situation indicates a severe bug.* In this case, the fee module will be locked until manual intervention fixes the issue. - -> A locked fee module will simply skip fee logic and continue on to the underlying packet flow. A channel with a locked fee module will temporarily function as a fee disabled channel, and the locking of a fee module will not affect the continued flow of packets over the channel. diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/04-fee-distribution.md b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/04-fee-distribution.md deleted file mode 100644 index d66c067bdac..00000000000 --- a/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/04-fee-distribution.md +++ /dev/null @@ -1,117 +0,0 @@ ---- -title: Fee Distribution -sidebar_label: Fee Distribution -sidebar_position: 4 -slug: /middleware/ics29-fee/fee-distribution ---- - -# Fee distribution - -:::note Synopsis -Learn about payee registration for the distribution of packet fees. The following document is intended for relayer operators. -::: - -:::note - -## Pre-requisite readings - -- [Fee Middleware](01-overview.md) - -::: - -Packet fees are divided into 3 distinct amounts in order to compensate relayer operators for packet relaying on fee enabled IBC channels. - -- `RecvFee`: The sum of all packet receive fees distributed to a payee for successful execution of `MsgRecvPacket`. -- `AckFee`: The sum of all packet acknowledgement fees distributed to a payee for successful execution of `MsgAcknowledgement`. -- `TimeoutFee`: The sum of all packet timeout fees distributed to a payee for successful execution of `MsgTimeout`. - -## Register a counterparty payee address for forward relaying - -As mentioned in [ICS29 Concepts](01-overview.md#concepts), the forward relayer describes the actor who performs the submission of `MsgRecvPacket` on the destination chain. -Fee distribution for incentivized packet relays takes place on the packet source chain. - -> Relayer operators are expected to register a counterparty payee address, in order to be compensated accordingly with `RecvFee`s upon completion of a packet lifecycle. - -The counterparty payee address registered on the destination chain is encoded into the packet acknowledgement and communicated as such to the source chain for fee distribution. -**If a counterparty payee is not registered for the forward relayer on the destination chain, the escrowed fees will be refunded upon fee distribution.** - -### Relayer operator actions - -A transaction must be submitted **to the destination chain** including a `CounterpartyPayee` address of an account on the source chain. -The transaction must be signed by the `Relayer`. - -Note: If a module account address is used as the `CounterpartyPayee` but the module has been set as a blocked address in the `BankKeeper`, the refunding to the module account will fail. This is because many modules use invariants to compare internal tracking of module account balances against the actual balance of the account stored in the `BankKeeper`. If a token transfer to the module account occurs without going through this module and updating the account balance of the module on the `BankKeeper`, then invariants may break and unknown behaviour could occur depending on the module implementation. Therefore, if it is desirable to use a module account that is currently blocked, the module developers should be consulted to gauge to possibility of removing the module account from the blocked list. - -```go -type MsgRegisterCounterpartyPayee struct { - // unique port identifier - PortId string - // unique channel identifier - ChannelId string - // the relayer address - Relayer string - // the counterparty payee address - CounterpartyPayee string -} -``` - -> This message is expected to fail if: -> -> - `PortId` is invalid (see [24-host naming requirements](https://github.com/cosmos/ibc/blob/master/spec/core/ics-024-host-requirements/README.md#paths-identifiers-separators). -> - `ChannelId` is invalid (see [24-host naming requirements](https://github.com/cosmos/ibc/blob/master/spec/core/ics-024-host-requirements/README.md#paths-identifiers-separators)). -> - `Relayer` is an invalid address (see [Cosmos SDK Addresses](https://github.com/cosmos/cosmos-sdk/blob/main/docs/learn/beginner/03-accounts.md#addresses)). -> - `CounterpartyPayee` is empty. - -See below for an example CLI command: - -```bash -simd tx ibc-fee register-counterparty-payee transfer channel-0 \ - cosmos1rsp837a4kvtgp2m4uqzdge0zzu6efqgucm0qdh \ - osmo1v5y0tz01llxzf4c2afml8s3awue0ymju22wxx2 \ - --from cosmos1rsp837a4kvtgp2m4uqzdge0zzu6efqgucm0qdh -``` - -## Register an alternative payee address for reverse and timeout relaying - -As mentioned in [ICS29 Concepts](01-overview.md#concepts), the reverse relayer describes the actor who performs the submission of `MsgAcknowledgement` on the source chain. -Similarly the timeout relayer describes the actor who performs the submission of `MsgTimeout` (or `MsgTimeoutOnClose`) on the source chain. - -> Relayer operators **may choose** to register an optional payee address, in order to be compensated accordingly with `AckFee`s and `TimeoutFee`s upon completion of a packet life cycle. - -If a payee is not registered for the reverse or timeout relayer on the source chain, then fee distribution assumes the default behaviour, where fees are paid out to the relayer account which delivers `MsgAcknowledgement` or `MsgTimeout`/`MsgTimeoutOnClose`. - -### Relayer operator actions - -A transaction must be submitted **to the source chain** including a `Payee` address of an account on the source chain. -The transaction must be signed by the `Relayer`. - -Note: If a module account address is used as the `Payee` it is recommended to [turn off invariant checks](https://github.com/cosmos/ibc-go/blob/v7.0.0/testing/simapp/app.go#L727) for that module. - -```go -type MsgRegisterPayee struct { - // unique port identifier - PortId string - // unique channel identifier - ChannelId string - // the relayer address - Relayer string - // the payee address - Payee string -} -``` - -> This message is expected to fail if: -> -> - `PortId` is invalid (see [24-host naming requirements](https://github.com/cosmos/ibc/blob/master/spec/core/ics-024-host-requirements/README.md#paths-identifiers-separators). -> - `ChannelId` is invalid (see [24-host naming requirements](https://github.com/cosmos/ibc/blob/master/spec/core/ics-024-host-requirements/README.md#paths-identifiers-separators)). -> - `Relayer` is an invalid address (see [Cosmos SDK Addresses](https://github.com/cosmos/cosmos-sdk/blob/main/docs/learn/beginner/03-accounts.md#addresses)). -> - `Payee` is an invalid address (see [Cosmos SDK Addresses](https://github.com/cosmos/cosmos-sdk/blob/main/docs/learn/beginner/03-accounts.md#addresses)). - -See below for an example CLI command: - -```bash -simd tx ibc-fee register-payee transfer channel-0 \ - cosmos1rsp837a4kvtgp2m4uqzdge0zzu6efqgucm0qdh \ - cosmos153lf4zntqt33a4v0sm5cytrxyqn78q7kz8j8x5 \ - --from cosmos1rsp837a4kvtgp2m4uqzdge0zzu6efqgucm0qdh -``` diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/05-events.md b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/05-events.md deleted file mode 100644 index adb814143a9..00000000000 --- a/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/05-events.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Events -sidebar_label: Events -sidebar_position: 5 -slug: /middleware/ics29-fee/events ---- - - -# Events - -:::note Synopsis -An overview of all events related to ICS-29 -::: - -## `MsgPayPacketFee`, `MsgPayPacketFeeAsync` - -| Type | Attribute Key | Attribute Value | -| ----------------------- | --------------- | --------------- | -| incentivized_ibc_packet | port_id | \{portID\} | -| incentivized_ibc_packet | channel_id | \{channelID\} | -| incentivized_ibc_packet | packet_sequence | \{sequence\} | -| incentivized_ibc_packet | recv_fee | \{recvFee\} | -| incentivized_ibc_packet | ack_fee | \{ackFee\} | -| incentivized_ibc_packet | timeout_fee | \{timeoutFee\} | -| message | module | fee-ibc | - -## `RegisterPayee` - -| Type | Attribute Key | Attribute Value | -| -------------- | ------------- | --------------- | -| register_payee | relayer | \{relayer\} | -| register_payee | payee | \{payee\} | -| register_payee | channel_id | \{channelID\} | -| message | module | fee-ibc | - -## `RegisterCounterpartyPayee` - -| Type | Attribute Key | Attribute Value | -| --------------------------- | ------------------ | --------------------- | -| register_counterparty_payee | relayer | \{relayer\} | -| register_counterparty_payee | counterparty_payee | \{counterpartyPayee\} | -| register_counterparty_payee | channel_id | \{channelID\} | -| message | module | fee-ibc | diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/06-end-users.md b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/06-end-users.md deleted file mode 100644 index f3985cc0358..00000000000 --- a/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/06-end-users.md +++ /dev/null @@ -1,39 +0,0 @@ ---- -title: End Users -sidebar_label: End Users -sidebar_position: 6 -slug: /middleware/ics29-fee/end-users ---- - -# For end users - -:::note Synopsis -Learn how to incentivize IBC packets using the ICS29 Fee Middleware module. -::: - -:::note - -## Pre-requisite readings - -- [Fee Middleware](01-overview.md) - -::: - -## Summary - -Different types of end users: - -- CLI users who want to manually incentivize IBC packets -- Client developers - -The Fee Middleware module allows end users to add a 'tip' to each IBC packet which will incentivize relayer operators to relay packets between chains. gRPC endpoints are exposed for client developers as well as a simple CLI for manually incentivizing IBC packets. - -## CLI Users - -For an in depth guide on how to use the ICS29 Fee Middleware module using the CLI please take a look at the [wiki](https://github.com/cosmos/ibc-go/wiki/Fee-enabled-fungible-token-transfers#asynchronous-incentivization-of-a-fungible-token-transfer) on the `ibc-go` repo. - -## Client developers - -Client developers can read more about the relevant ICS29 message types in the [Fee messages section](03-msgs.md). - -[CosmJS](https://github.com/cosmos/cosmjs) is a useful client library for signing and broadcasting Cosmos SDK messages. diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/_category_.json b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/_category_.json deleted file mode 100644 index ddca8d29da6..00000000000 --- a/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/_category_.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "label": "Fee Middleware", - "position": 1, - "link": null -} \ No newline at end of file diff --git a/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/images/feeflow.png b/docs/versioned_docs/version-v8.0.x/04-middleware/01-ics29-fee/images/feeflow.png deleted file mode 100644 index ba02071f4d8e8132ac527c279cf32da9d9dbe24d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 394717 zcmdSB_dnJBA3v@X4U$xLL`hj8dq+ujDv5)#_nsL^g_04Gy;t_$>naY}BgZD2V{?pS zeIKvu^Lcmm`4hh9hiJ<%}tIj{1JS zQ82U=+U|Alh{kdW>6Q+;%Or0uk5pnE<~kFax0Z&mA0D`n-{fTSy2SQ0^rl+sgUqMd zSsir3_75r?uq^W7oW=Q@JH zsJr48t|#69WV=^x#vvw#Y7C%f%dI`E=r`wg&vslI(k*n4{g^|&I*Y*sqN=GSzde3yxv+os8%nm1B0 zR8lgYJT&tqFeoX7wG5~i%2CTBuoYhQmXdXTOL(8+hB41{m-by zT#H(xh19&O0*wemc+VQ+(ig3L=}xOBvCY7`{nUb(qd@kNFIZ`pm<@5Fsv(~uxP zeLmQlJcETv?B0|fxr?&Q^MR!;Hw}wxJp{QUmSmTM`I&g+WV96@KK#b5*XaNH_jjKb zKZ+Y!+m~)Wk|83cxfUpKxO2UJk@OO^~dlCCl-3VQ!}`nmU$lj}z>nbv)M-I$mTmKcTex#;Gn5G=Z`TafVh7HN`dmkUHaJjM=E_7%-NAQH1w6yeegi&m8tk^5lI*g#( zPF~K7y^RhDY-CA5T*$|ki<>KBI@+(6_()S}OiWA)bnB11;OEmEP=jyZzQq>kd)L<1 z4m%E6;8z-oLJsz}MPgc-LvCDWVQIwE&pyu6tv4^FKYyMvI5=1-x1q7|p{ePuLQ(Sn z`|0}B%-yefUq<^e%p+(&@RT0NaZfFO+I; zT)U=)p>FwK&CA#;ewDQ9Y~XWE8(i8l&9SmQv#PBXmXPUN#mW>sKR>?(&nIthUlce= z((AUnZlYVNQ|m!9cgcskG~!BI1EW>`%ZAMt<|7pjcF%pb;CSNk7#+`SG77r`EofN2mz!ddd?e&B0F?lVmVZO7Q6M|49zb}qAti?%q zY9GaY{>%g|%t1J9$g*X;M;$K}T0tyn|;M-TzjZ9Hn-QX`PGQrN^>#Y+{EP zLtS-Lu_IZ`1buGn-p9-H-+Rt6h?`emWoK6i*O(itt-W~bF{^C-eTpoOC*MLjTUO_i z0);u2@~puV#cyHHvceoFI&r6xkAp+ede_oYW|0%KY{A=?u+53`>a-)S1E_4Gt7 z*LCIVp{HPpF$RpOa7@sF44CnSUnH9oJM`hvx6x6tu{kYDi-W~2uGO%!wiuMte5;Of zcRQ}1@c8j)LoSN{EpwM5vx-cG?*q-sk(~N_pDqqAIeL=2+?Aox*Vo_KKipf{s&U`@ z+4zYzTbYQM7)#jpo{YhggDa?KJm)vn6uppba(jhCbTiU1+?|Kso~E$hJ&EbK+m(3F zV0FBHy-Sus4hB%PVY#8ce$!yF*>nS?PHzgMVS982c0!v24rj$h?@4Yv9>35{!r-}| z&o_BFx7cFn>8&TAmfcNy))i`T?lH-pr5+@D}N+bnc3!Kc?}I^uK|dNY!a#%kOv`OGMf4q^R1 zfBl+n)(7oHr(o>$Yk~}|@`7Ra?GfS1oz4Vln)7_T+CAOf`YWT=1#Y{x0|f>jadjoI zpr|g5yjNR`!PLBl&%F8*?|pm--H=am>1%+hs%nLs%zSr>SnR<*bfgw|rxypKWj1=G z7et7PU{wE~&s^#Y%HTw%3l#M9)r}pNrF$QmDEOnYCx3onJJ9jiH5kZy;f-5{M{+M4 z@Fi!qZ?v!sGidTZz5f2)JGp9CoV|`_iFsE%XL4$)>Fdq$dhbWYrcYvo%#RlapjFDO zUzqggB|Of2s>opJxW8kQMqMl?Cr2ZyU16V*rCF-v$)yti8b?srBE&#<1iNCeJY3#a zQR(5~Q9-mC$!C_OYxm%RZ~J49)p}ywO6(%V>}`MwyR&hgS(w2R3pNhT5`BIarvLk? z5Zd+it@WLv41VX))zvjEqhAL&C6S1PD!$P0-!VB-Q49n1{;kL9*7v+C`?|D9*5AK< zJEt%TLxR*eGNKB)5lu8Sn#{*p&s4oz1F)D#&o=YX%N)-i1T)>6n(IokT^<%f<CdCvf2}v(;`Xx@SXM`2A?J+&IlUBrJS3)I@_SM4G)1McA>+v3F zeU%rJmv=iur?#fZ^w&d%I!FAb3Ca^=Sg5h0sH}`3SY4lPnNExI=+@;Lr96K=-fL!j zTsN@&(q5JI?>BDi%{P?fxywwull>H;1y#MLgvcoG6$MIjv}q%yg&7bGcAOYehd9 zu5d7Ozl~ZNEVip!UfCY=tP4rt6Q!A{Mn77e{S&b*scu}8b$S+ zmk`)I3wyCS*YyZ`NoE1NH~brqedBU}zMcVenm)qTsh8tL@F?B6Iuh=4&#bMj!-gKh z66-EbGdpExVM*<(Qv*RqMq|`T-Z{ftm%IWS0PRu1qJ`r;m>j#*N(kAOF3FJv~*JD2O8iu z4WH??NpxU1oFMJe@fS`?cPJX+|>&XnpdD!L>0;6bNu!6f^OeFjhYhY!1TmjOL*)?4fd@bfk@O za7e!=2^M$9PvPtBxw*M3L>u9uv+U;jvZL-;jf$dqz5YDy-217?8%%mK zCywyF*_!HbF5F2~K71!^&7p+ek6q)p9DcSw+mYLH^#>ZQ=_&DQD~mG_nVzKUm)V}S zTCDa&6PHk4zMM*?XZGvcmm-s%`wY)6lanWS%FD@h#SPclFdf9cS{8CyD#j#h6dGQj zp^412|B=uByyyXDiw~`q{D3?r->rqC^!Ct&|BWB=6FXX3LF(QWuxuFWM2tutwyD)a zQBE#+%<~8ph}5rA3)}cg>9FlbQCzQDcZS*xl!!p4Mos{)>Dp0m?_(jC_2l+5qvdvK zhl~CB(n`^S357l(At4P}$|Q$}hr(*5aP%wo?|!1;vv*vzC>=>PJF&OBizR#6W{v%U6dk8ct{oNT29h_02jqPOok#+~%p~kZEjg zZ686_WcQhbgoN%Q6SbIoL(u4BBBG)O3Ju*ye*BO@gyk;<3 z<-%jqeNCg*qq>K%KVHV~!g{APSu?P@3VzhJNS~yzRr+|2G<# zZiw?owJlFh+BFy@YAen>TU&u6qd)!g3xXWyX{rOfv`?Kn74+>%=7Rqy(7FY}zSYRm zn2vJ0S^eQM8+=eDAoinLL2>bl)Ky{zw|Fv}7J1D7rl_xPjyOZ*BvXltzh2!2ObOu) zhwfy#0talL{3tCI6>I6JYbH{uSDeR>WjxJ}oN5VQsUTLcIS1q-45-jg9|jNO?8>vq z(zyXcutn25-A?!TS4?xU&wy zj zMBo3j<)d869peu60HUcy9JAWrIB2C_y>sU=!#`oMu^!DvA1>ZxavF6>BT|jJW5NW= zKrhbSuHdPaC1Z2Q=g;;gey1r|nm%8bzsAAQhJSUqznkKDbjYJyM{pqVr>KKP1Y};r z04>B@7s!RM%tuz;kKi%T2iXDkni)3u3%!VA8R;ew5z)hP+v#M>k&5mD19@bGg>q>2 zx!xZ7@+Mj7!Gj=J;AUXh$n^RQM^~i!2EcIq))E^b@wwguyAh;Q{-4iJg;=uH#>U14 z_I{@^cZ{nbbtot5`F($?tEdY5E`oW44SyO1$a9b1YBYwu~7L4|Klo_z?c1AR>WnuV)t#WEWU%l*Dw9j=d;IX(l8mG&$hFjrb3JAFDB9_smf zQrcAcJGaZ^|17UYbKx;8$cJ%HBQNnHGbVW)npr>6%e zWdcYbL=PP>Pg5!4xES<_R$!rq9y8!@5#T5?>*nT+Z>lDq@UHyxOrhDLwByytv|nqW z6duAsQ|ZG3>!cZWpNTNCzn`TS-@A5%e63;>e>1FrJ~YGv_dQ3_8o<-~F}mX7G`$VV zuq;H52mAX!#>RBKE1~8H8)3EyC-vJj`?l)Rl1c36aq_CBDo_(S{TT;M%q~22QNYD` zjoL#&mY5^aO0xd_k1$~g$UPOkcOAVR?T;81&hxjfp9cBqGk^fB^ia;d?h_|YGy!*d zdGf#S@)i9ud%OyMB#&Mr3F%bhj~~x+W$)i#FxOW0uAJaWQs*QJP>vB!k-xQ%!|31( z0U5Y24VT+Ra83tVFzxM>kzOW-Zv}G1`Q3*M!{;qz_D3!7wPjL1=?o1$dwjVoNj4jE z_R_6uT($cJRjdD;y>R)m0vM+qc9#_RBy9d+J@2k&&T9 zCclBh{leKZGchFtpv3EzfKt)Ym#rD|rs~+SV@L;`Zyf*;ftNo&7?HAS9QK znR#<{^tdHp;?2bYHP`KB_l7r>k+%;IX#^XUe|>v`V;hlGYE^SUBW>)@C_ z25?R+6@j=DoLXfnPjj^9FAn2yxG(U7TWGDS66#So<^L6EdGHOxRfHx1)=B{;ZaZFg z42uH_;IcJfG%azo8_3yZoo#UGD}cxFm6|;zXd+Ygt26fmj7D^OBdV)QefQ$_VbUZh3(T9hs%3h#o&}yI4<4Ft-*f_WmWwrGfeOSOl@e} z3&QowhRXpod=G(beXryE^FS#6TvXy!W@hQ9+0U;-p9tkM>wA_~p0MTj>@$%4iu&}P%+u^cT zTx1AS5T)*$qfr-u1=f$SYFg_SbY5Dh$WQ?r;tFIh_TupDxiHACF zYxhXkX;{icOnX^#NtSbfUl4XLzp13Sp%hxVT=CKDzcuN)H2uVEb_n6LLkqI**up-Se^Gziz+ByJT?DtW+KFd;T*c^#dji? z-RbaYkpIr3Q~c#Y!ULf##OI3Z10#k%(f~P%RGZs-8;Eelk9z1K@r5s^Ct61g+ajAq zR;rj`1pLy?Efpm@ht7A|Fr*f=j%U}Y8J;hD7|zK7YGW`bs^Wp9q;<;|wi{N} zxG-@NPFB{Y%)T>!$Y&yLhl8d>9ec}pdU_7vJOytm;g$a_8))(=P;1(k7#p}51g#}U zohL~(3iSQ>hNvEfv1fQKD8&fN>FP56)sXFfp~C-N!~h0~9ItNJ%fU0t|74erej|Hq z)*0`GIr%{E<;y7$WkQAQW*)%d!nwk{pZcP%jmYtz>;D^k6^1$TueWrxV;N@{# zd`23Ynw$)+_1?Yt@68Ag2f~hzEX^u^1;7LK@a0Tv#OKIJ(*q9A!~O0wWrl;(WMuzO zsb`qcjDPy{=?hF^b#eS0GccbL?Z6Kox>LxOtGBh+wzsz*)H~Timp@LW zjpxM0#T8kOJRf!2Py}MHN%a>*&$VeVT1`z!X-3XCwijf_CRZ^KqlwPZrPrhOb*hXt z-cL>GNAO!jl0eb6M+&KE5ZQws9fc6kvm9 zuB?pA1CZMg?JpD*aOYp_{eY`t%0+Can&b_aORUDU!@s6$mGcn(2aTp2a-O{wK-5|M z{0;Y01Ar5=F&ncTT!?s%%zm0VT1i%B+|ew@#%8@Q8(r|SQQf}M%iPw77Qxi z+y!EIlLBpM4Bau>QZ@E-()>4gKYsImM)$ofhcnBd7@Jx{5bByh zxk&~|=&u%|8aug0qRnf!jdW|^0m3JpXhE@Asosw5{r03KGt8il+j6W173fm`=A@F> zERVs@xknd(5%s2A|Lc`#0u5I|CLe$z5f^OZF2hbvGCM5vcHzv-`m*Mq)T8KHpjZun zR3U1l;7KRo6P(_}WMP0mg8mv1KMM;;kuO3N41YSIM>B0vMkk#Tz_S%TTLKk9(~k=q z=LE7QYqWg0*`ut426H4KcYCf&`ZytBwW-j5Jufl3iNEgE#E;W4Cq?XL6q=iwIx%i; zZb+3>uuFqKgLASv6S_QFt%-=T^(ebm6;NYbCO-)zgI9ytnNN5F{;L4nTP?WLFJHdg ztT)kd$9+joPM$M^q57!Q5*1TElq^Sq^2SsxlOoJEw|Xmb9~zHR{m9FP5Ay{ii0%%x z#{E|hbcr1z$khmY0epUa4b32LYg>RT)wHU9@~oZYS55XDw(b3V7c{~O5 zfxhd^;)gqWat|LCXp@~g7d9LFN(pguo8u%T{)P4Bmd>r zb)YigplCb<45WVYVcVk%h;|E_5Eh5v@PWcKa4S@xt^C!C6KMl3{W}AZNg%#6PUsgH zSURebD0AA~SOdn*wcEEm@$f`EGe&p@j6IiSI`g)|5QS<2gifeuP ztIR6MOp<^KRtLBlm!MCB<`NDfiYz!0b$`FsMK^lyN>K6Ed)1Vi&vI3b!!fS2X^-HQ4gX|K zf;5|laEc6m_>%wq5{eCD`!@sypE0EJ+s~=oe4HMnPOlFW$!%|`lm~bLLPc>Efq{W{ zOnV=UdhA(bs3yI~(fpZ7U2T$tRfu*7fC$;Ri=0~hndff9&;yX2Qa_R;8~8kT50C#j z;xv{`_MG>xT}_Pg^8^F|t@8y0p4PcFwJTp<1CH@Q&+BE#;#`J7|y=;@L%py$ONBJ-B znT%GI4+9FVSd;<*KUbcB4`kAC11b={5Ea+x5-nmZfb6b(h|Bey&v)tZ*ZVVp6U`I} ztNOUa#V>%MD$j_FdrWyYpL;S{$%l=)IY?{WwQU zgCV`I#6t7*sZ--$Ko9sopTwxxKtK*4c%asOplEMumSnZhSac=6gUKLow2PRB&~$T~ z7PS`zxVcp^{RhxgrZaPEK0`@iFOUX6MKL1u4mgEhZLLJ^f4dy)yJNpRJa7nfwCV6* z4;atLQq*x6^Z-jC_j1Vu1lJsI&4jxr-8mpIVziCl*%9Oj*F9V*`*Hj*Fb)i6AxJm? z?N$Rn?3#QSd$8E6Ev*av4g8=xvLGE;bZ6W<`Y$PAs_w?ko6R*w9aj+Nx;0Kh2N|43 z?a|Gfgg~l=y-VR|YeXz0&jfy)k^g`OgDKD4et21{>99F57B53?uy9Z-~{Ywjz-~qqh5qa zhbsv>Eo+s~u7Q%4Lb2+7RLMD}TR3392gcv$urQY8u(!AGN=rMuw}t_p0yr9Y*a@+|-5J9f}gJSQe5V4HWqHufI@jj$Q;#J@=)T!N`{%wMe7cepV2 z*$kBoDKzl(bXJt()$7;qc^u%>)5v~TBmMvdrNnaBv!*lRD_Csi9+I}{1=(@1)QSrv zw=Wg>3`ynu8Jn589tIAqW=SYZ&|x($&U>2D!U;-)NOt zOL*oLI73B zc@vQ)Lrox3^iA!mGT3#Vy#I8wse5j)O-5vA&U714!9rd`RPy#gz??Z3Z$5f^^N-pp zGnL{70M?8PkhQpAHdrS#y&%W^lCW+34`KvwuLA+@1ExFor)iQ;)7J#l{w*elI_>bB z{tFYb5IO$`pVnFb|M_2@EXT-$xATUUlxp{Oc2=qW?;EkIk*r=Icku&Ag$y)0G1tfD z{86Fo8jpU4-ed;PNZZaIVVkf+&5)vM01^6U7zZ0flQ2jBS4`?EMw1JX2UGff{1}4J z)@UKSDab4c%a`akf9|eve>Fc`UI?2tRdIzOU>1@_Jb+?%mrBQ`K>3)!V%cE8grTpz zQdlmZy>j~8xtVv@{!e$PXrvmy{_`qKdLJ@|K8>*Dn#g7N-$5V?M~HZS6EmX0^(ad; z18KU(&)@e`edh=gEt^Ljq8t7vh={aH_51?^!(mu9g9pS0?Wm7C=XvqN7U>$d-DDW7 zkw?vTps4q7K{(99{Q^LvFSnk21{SLo>{gEUfvM{Jr;o^R@a@W zr*^?BKn}3OQcxQB``6&394-Cu;fF=Q??Y;8TaXb+8+-G@-Bs@wn{iJdolxQtnryHg z{(4LWcLx6^T>|2g7Qf=a+3yuql##&@zsi*RAkol{?y50nP zHVx6wV1NZe(>LwEf_ja>i0)KHTKXpK+C%zb-8N9I$d&5)#ld9(ud3QRC*4@gy@$Te|nA^MPUYd)NbP4iZS* z5L&2!Wi_R3uV}6O@#9AmB&Kjt*8*^pU%B;??|-6kVIo5}G|Yb*28|!P#?*mZ8dAUF zGDY5(B=D@dzSY zFJ6bUQi3@)y|XqsDCG36o<~?rCKed|8-3BJlj;23Vz46)s z5Rb$o*8vSZfF#7G=5c`ybM1{wleEpy#rbZVwr2vN>rRj+hFD;m+AKK(1DEIinh#MM zos~>{8>-m!OAet<*0X%kFPLZQqjV0NpFFbZJ3^XhQ&LlZ{`2lEE{ei-?fwwG)9_Uo z0frNuq<+V=nG###0Y>gM#9vMu0$(u17^_ z0LBW2SJU#Yfj_G}3?g%u_}C$j*xuN7OE4lVER}cBhE!EKA(oqvp2QUq`{HWB%PHGh zB-Mu^;Bi^k$2t{Br)O?FdX32n@poIma}f7Rfx*!2km2GDEqNH{8ODja1-z)lFfuJQ zm8VW#fPHJi&o?K2nB+Eh|1$6`j~FCigGo6*HDSx(G;HG|uDkS5R3B>#R?S@`q(OS_ z#chkifvjAW0x!deCY6EWjelc zOItlgG6hDiJ;j+;h-f_DmE;rF+&XRrfSZO@69C#FouGBybG1DXC)ewV8Rkejz)R&( zar7>h4JZuR7%XnE$<-?Fo|keCI0CTJ3`pvZ^C$igU*9IwtEL*#5fVX~8%*oRAtexk za8N?yC;_X!dNYvF+ebN`7tJ{^=q9Q4f({|3L{dUVFPtpTgTVBKUzzA)r;YT^P8Iis z;u}%}XD;2EEA|-oBHpaGj`P50w2y!JNTwMf_Nt^^CKu#EiY=NmWMmlH+p&@{-HG?k zx*Jb`vyr6p8?wxu>(yW;?gGe70g%q#F~!#&E0%d|7=+7eYOksf`yT64a&3s&TB~6T z$_p?Cb_#!h1eVYL9hb*Qo}Yz|xIJtaxR2F2>c#*-92R%Ry3)~(Kl>TZmFsO>82Yxh z_K39H@p^d&aZ?ERR-X|9j2UH7j?MC->@PG5Y+ufPlyb&M&UuZGq;NBECEnl|LF+z6ti7lY?T~dLspKMY1^-6(>r%?S?k2z^t<~=%EJ53556CKjl}`}{zW;v(_uFk z$%Y!mL0P-gwkonNu;sn~?&y`->L`UF3#$3^b%%j~UzzHfWG9A!c7?I^(hJFPg{HwV zG;zHuF)^6vc9BbaI73uBL-^G01+<@VQ?CoFUiu1@dGa)GX4UJZ_{H%;qR~LNh@s+i zRb|02N^>%_eR1EN#`0eoYO)Ah1oqf<2VEmzF_=6XHc~O>oLlZ8xC|EOoWl>?_YzeG zMvgUae0}Ry?J#yWQpcK9VKB-6>dHw#N{$-s&D`aEEi?P7ePYdlGj2f)`Si(`x*2x4 zfwp$ssN4^%phkODwD*QIsRhJw|Cp zIf95R!ZX@B)C*P&@h=50ho0?mWURf!@%-^ob(ny@;@(7m+->adC_dkjU&?dp5&On? zsV0WGz2Ez*9#!v`;$v*Hh`CDL#-HVLC12focQok`N*=1dxo2(OR5&2EN)g8w=Y&CT zB#(Kozqh|*eW1Y5(qpEJe;qJQj~o7SOFGr#Uc|k~-@?CXemiMV_L4PumT9Yh^9L=cMhi~f5RxddG;i0?($g|M;r|6mps2@SvNhA_3GT=kr+0pR znWqklgFF5Pk>K3hS(dz4VDuqTV-GQ>p%RP1*HP`v0p#=~ysr_Z3KE1`M(y!7Z6@D+ z>|~N^9I#I{VElS~>E@<-Jt^gLhEz=0777+~Famce2Ah9cda^yu3IgQNpYfgZobp!& zQRlpW#Rb_}B*}+huYu}UrD~F=W2EgF7cjY8p#1l2I8bU0)OyzX(~CS6c`L|IaqZ{g zaP8i*h?o^xNePUM6u5X2+5W(1Z4!;G_`19<3*>aV7^B@&bOaZLkZViLn})}_m&#{j zH&|KU9!!W@qlQzsbL0SD*hl%CqyH>0=BBpcSGf&Q`@6C3TN-Hxhg(Bdc)me4G1~L= z^2xFwfEBtiY<=V@g`Bs0q-cBn@Z-8M>$a}7`_vV%J4K=+kj9HN5~XJszB@1g_zkg< zD#F%-nPsz-xP|jrEB{U31?7PL6FIhS8$>Aqu_f0lhVk#D&i;G`qfCq@oq2@=Rq@!H zHyztbN=!o2*?j-N+qNHAEk}5ncKMR?BpwlYwtd!p4-!be3U{2K4WdMH04*1RZFMh6 zo?emFi00ON?;x69tAd$gse3ED3Kl~s%r?M(gko^o?TW|Ux?+*wexDifIl4~!=38|i zu|5?9m?hYkPB*LLx-4}c@q{i{Oq?NF@emyIO)XoBJbv#%Kz(K-2LSXnb{n)Lrldm+ zrm7KmwC#6ne4M2qTaBkTQc+){96PGm;5$d5(x<9^_V6v_wrbL8z9 zuLy(NGLWucOA&a8X*E8VrnipiTo%+O>{Vvf1c7$DLf8aC)~-EG`O8)yf5j?;iIieL z-`%%P+C-MAo?F9oOgotxZ_$5cT_Aw4Hi{sqTs%F_v@h!>+=A%#6ss^z^<%5Xi2W5fSs?U+l7gWw?Lf8AM5*mupLD0LM0G6DZPG1YheAQ7 z<{zAl4&fxxlxGpjSUqTYpq}rpjtkh^PwUP*a4tMc=G8_5@D7Xb@B_ooxJ~>$Sbx&v zKLnWg>)o$lTsZ(EwZP-Rm5tScrJ3=l4Ao@~nLFh&??rqis69qxBcbaD0T;Q!SaU<&MTzCFhklS3ljR`sc7~-uCUe0bs-Sc}$$jx11_i>52XybMm`2Vmt((_~5 zJ;C>>JI;)HAH#xWoe^UmI@W6WEMBb!Qa~JmRE!Su-S@EG(V`p-74gv#8E#)BE>bt%zWoeop?qT! z>rKqUg00P2481O89{pTDBP;jcV14!rAXL=GMa3ww_JhLJ`&Q|(Z;RbzOLagh_*8TQ zPS0*3m!~8d3-^6DBA_SE@J=x};Z6=RPjU4sLQbG`a12b8@|c^(3t~m3EOl5xEalO} z^B1pj(11yU=lQC%gE~~S+uE4vbbxpjXCLGJNO?d-vHz^ZJfd$TTrKydNLlRM#{{mI zmfhv4rFx#naN-Nswc@~m*ZDF|5O8)^_n)_?pZi3te{>5F{sw}&(#jZ&F*R*Tp*o|W zZ5GAIWD~QWIg{lP9xMw|y>dr*OzjjxhH00DA{u=4Waz#0?$_MmZ9&mXcxVmX)2c+& zW}NicSzIReP(>h7;=RX2hFaQYF(McjeD5LPYG=UtPCmL@7Lbk=JH5)p#fUoE-%u7) zwxbvgX+9MzIYxxLJ}5gSK|x^uZUfDCKZ^U+mU*?3F+(teXiT-A9vY`zW}PtVFFQCc zT)s6O^fcY6jTDJin2C9m&-xt>WN8!@DgEPOSfb7u;1r-!Fc zcPh;M-df7hxgz=M4SwjvgAp7isN=S!)X*=mRN9#5m<=6bY}f_0)jHswlF86papG>5 z^{HmO6GoU}_5+U|o7i&`Ry&D9dM#0?q=KUdy=INploC^p8T%_NBNno`Vj50d^i6?-J z@VNaI5W7-iL`cpQ;%Uf*AC0+h$GAaQlSYPjHWFn-_(`n&EWO;FZmK&8lM6J)4vLzX z4eQ0Px^-J%Hk+n36z4m=Yd0?DV2-I^{RzHAWQbUlYd|YuQm0 z{ag@iWxo;Kxu)8zC$i#0R>1#jzV*9QQG$EDStnOT;4 zt>F;B?fgTM)PcUcpX3pbJfWS%ZOOa%#6u)HN_0&0^k4+72!qE?LKyW_;Nq5%rE!){ zt#&SlN1if<=SlW+J`QFo_DDPFQR$H{Jp>dBLL_bqw^@K?5-+Cf(PLj{ss;dyiZRTJ z%6(kveXI+lwgf_L3SAoo<-*548PcuT2ec$%s+_^GxmD{Qh{6iJdDh|L*-ubP9dwN> z?G2m`RIDbS$Fsw&JWb*^vF+_Ga@J10>8g>nDru8tx4$m;qy>&%vvs04jt-QXg&2rE zBi7^)UAKn-Akpq5Su%Qs%F6k1IaK%)+DS#^7U{|3t>(FKV4qEkgPluQHK!LZ@pe1j zU6y8g>#Elr<%?H{d_Y8@FsT2FXnZh?1C-G2w35AKYADHzbdA!8{S>?U<@=ZEqW9M7uzyM4|TG(~L*g1MyZ5d=N+4 zyCings7(m&G)YVNbZjpTVJvQEgID9aal(PTo!Y<@fbjE~f~b67yZhz$TzJs>hAoK} zkj(ceK}WzXMu(5(M1o@w2srp4I!@+312=G*A-$F;KwF5-jImNhM0Rt_4a5~=7vm7q>x?esEpL;Pt)2NzMiddHyy}5 zr0p*)&s2*D$}UpuHExN{qmw$Ufx6M783U0#)+0dM>{b(H0p!+h2+MS3Skf`H`0Bzn z$dSyQ^8#RaQHQTBH{2t{(z0oM83K0^vCn3H9U~;tA7ZFC3i1i!2UV*N-x_i#^7G1q z3E&OOT91Rx`}$AgY!qo1X{VbV+`^t5yxEYZ|Fr(5YCOlHV|j2!pIsV34%1Y^=jUYf zbbs#@S1uCG8dGr-xWb`!xU6bOXvkY=w7;{4FJ`e1vb|t$Cwj$RxNEJB0B(H5^;PyP zkFSimZG3Wr+m27qbKf9MGcoSk-GkJj!}z;^Cyv;=72W|Y5VI@RTWNNQa!<0`1m0n) zo2FT6slE1v-d_Lqsa;4%ah<*xHO*ulyG-O3pm4h<%WC=z;dOK7!ib*HQ@fzc{(647 zQ}su2yNS2}FO}!vu90F3plz|12>GTsR^7Y~f4Z zbR_Mz7seYHPw)1f$jDm)Ng0cIk=sxaYv}mO5$>-{L#x1ydz+*wNK%@370E<0eQFg3 z`U3fn;=Y?`hkFD6?BO@(L#96y7(OLiM;wsopRDT-AdJkH{-(;C=k5B3eMB(B;$P_c z*WXxJHi~s&8RD}MBV7j9L9N!*)Nt+CpdUaqY%7yf{iP}^NEHYN@$Gg+Q>-(#6I%!d zkh>g52W;3x|NdwP;kC~mGk!N>tshEg`GBb~Z+na-j(I7Vp{@89SlS-Ejcb{;hKA;r zVJYR2Dl7q4#7ya5WjspZ+&v@Oo&r)Yi0Q8j%?EfanC)D}QYx%eDf8Hr=CPv zW4egS%J1i2bGf2unOKj~t%7R6Rj6e$`B3G*brKh=LG*(?kk@)#^1!s>2JXa9#)Se< zOh=xpUs@ttr(X|lwrk=_f2G*jI(%&p?xWlD9P4JPEZ~N;qM5`@e^734?V2}_nWa{| z)d#Hk!bM&+>RB=Urt=n*bVEA5*-g2IOHTb|Hc8q(i^r?xdJ+_^t8D_t@<}%}3pG=J zxD~dU6B<-Q#JNwQWthk}4~BzL3lw55raqZ={X#o6E>k1!66S(CS&{lqZFxcoD1q5J zNDTTQ74>xYxXBUJziF&wWYl(I&K>zn5eHXCIysqYC+&g`S5tRc+2{+PP7aPJO7My=%4=`a^uerBbaHHtsbqoe$J z0g}J|_EP11)2F5zlY=upT3bHIgj)rs^gz1N>{uqZb4x$rUUv$5@+-e_rmC#&;)_^9 zFldrY^bAqV7GYdEIp}ay+yI|N9!E4SesN}(M$l-Ha(WD>u_JuH}B1Wo%VgdYkMK+ z?&Mo379s)&xmnY`l`*oJ_~AEL-?X4qsyBP5FyI!Am`EQtcCKSHW+l5<%w!_Ag2XKK7qofRNzL?j#`YOjt z1(tKE|10&WoOvI+rS6oEj)y$nqWO@DQphD04lFjqY*iF|{7t*xEWQyf!R2n!h3v}e*kwEwEOdT!o~NPfB92qG7F z+)Fe(Wdjs9#_9y5WCmP)&n}!NX2}WGBw+=JiYC^#c$;n@L2V+Zw!@&*^l+8htDjn>&*m$V@Y~P_ z>EyW=sj=ko!SBbZUIquDY|)4HB_rGsa*k0oTS$To+gz&jFj}&=%AYJR-2ij=)QytXl72Q z4KljovGc;>sEu%?_4@*_u5S*4;%3L0%i586s&-rp>E*BS7uKWntSKGF;-$RpQ}fb> z(A<$439QmhZ0WT@vq5BvvC?~fcK>)N#@zu6ZZ8m#N<_mo25viWievkY%7J_rw>K2u zjWM&N)7$&^cSdvq;Ln=o&+9-4+}>^E?uweqz^0dqY?Q&}ApUeN6$brjuqy|Ztud66 zo~Il<9FL76xnS-nyZah3IT z`dI3-YS-dl#P!Y-$giw`dk+?;wjln0_aJLGEJP?A5}?ZA-P{5a`4Ss>9R6yZ+cFFk zCWpU$7z`_ZXd1dqAzqfPVVJ`|W@YX0!+Wh};-fFIsz`2JTbCG=jqU-d9XG?c;LvN5 zepYmZtArOA09%<^z)5$m-tZ<27%K%=ij1zDDl=@OX)|h~WwHKn2kjC_#m&@Xb*W;D z!gJ?0u?4y_hsix(IrPOM8T!51E--mx5x%u>S^-!CT zWf#O!*vl^I%8@SCk&F2_H^tioD=l)fy_dSP;g|{&*p^C=be_8+nyy3J zO45x7cPb**4qBcV{*1#@YgAW4TQf~n8B0XyXJ z5M$1{oY}Pi&&ZW@WQmOM35jv6%S?p)ae=w<39A4Xw!#7f;YmS>(6ba-Le}H2wSB6n z#>L>8^*NSS1sdL#b1oy7x(BrwLeSQvfay(^Ix9K1-<;#`CRxdV+@iJ}iHB-zFtN(0 z_|d){$Ju2f4XU7a#P#%u&_gmDxuILjBbr!tOcVjt@C5NR9bpFCyM4whZk}HM z8E0M$Ks^mF3W^{Iwb+%^6X}7{+4o(%HRQW$xX!ZwZRPO_#-mA^NGVcibL?WtgoET8 zzYJmasX$NJOoQyR658Z=!-Gs&2KUDsKOkJ2#aFeqg1F-~ z=Mx2ZR6T{YCA2j6zY?>6Hr0pU@{MTzxc{ioP%)5bI^v6gR+?(k{dqoqoET9%WaocH zR0jA%iV(>~Nv2P?XzUyt6i%*C>E!RUz)o z>?p_&91L^Vaw4UFzJJFN8z2Gt=OrpedYU^LdAeR(+^TWH9+y{S>2;4+8LJ^`n#)zT zCQ24TY~*Zf#rGU{V~p7w{9r3VgG-`Yq(g$;S$74rIByQ`U`e>Ps~n+f&ip6-;}Q?N zkug_i16PxUwd;(!1f&kX&!VvEYBhNh7^_dng`OK0Wy@r>ljzn&^kL_A^Ww4Uh%aWn zdrfM_%B`Ph;g`ONZAWhr{(mf;WmJ^!*M;ek9FUe7LQp_zXof~4EW)6qK|)HpTR<8V zl};7?iG-liDItv@C8fZCbeF_?=D*&rE*CY=bKmFev-fq3UuB7wn{3|w{OEq2ZiwIH zPKG?>`7USGIfT`WN^iaJ#bi57(|Ep4`<<{!*0~Q>9ovuEwbtLy3n7XR#mWh;>?O+X zgO)qOCXlczqL^4s@;5O^17J?3O6~KMNqtER8gVRn^WVy}T#I6Lq;sj#zRSPu83#-P zc=6M!)>5TLMYe`Q2#G7EUl@+(PO4nUpTbWKK4yG-SDs`8*Kwzmlg?L8B$rE`5S*_I zmyqYxCKCgqwpFJC=Q@(dy)o_8;4eL4dSMm9JTkKTODMrUa$9|>^X9Y;57bS3NYSP{ zgOBqquC+JGKOrNog2cKVXRE7C^s*EL2MV*!jr9J7=3uAyYmM?p3mg4hcgHaCMUo5z zos1%9H=Qgs9`fRK{KCrO2DzYkb?1!>FNGDp%}qJ+y`mTE+dV;pWux8JeXn_!rUI;RGy~td;GU5FI#x~ zgktiT9q@H_J)I!m+@THG12=zD89n2F_~iLuqbN%#O?FKN%VoZ}rqHxQolflZnXmUGHB35L7%Q8GwHC=}L^EB2#N;bxh=zlbNGv7T&n&O`Vy^l{bg|!XYL$v)A%nQSs05j$yjR7R**D5W{BhJ z@YSD#J(;Et#}d6ZQSG}|JuSRF`Uue^5X#%`_tD#+$MBq(a3^?|k1myu>gZdTM>~Xs zN+z%oyQQcNF&B^YZDw#D2riin{e#DSx^#MUbo8e4@QnDo9GwzbvKaVIg~ZnF84uTb z$qz|aS$}wdI;a;y@lTbteYf+rQQFwOu9pzw)U@b7{&7>pUgw)&*UVbA#WYlt?@8y_ zhBP!AifpLT<%hvEsDP}H!x3h%q!vu6vR2>mZDm{HGIoDmM&3(&Bne(z&woKfs|PB9 z<~ARNz%%@dL)+%kY-@ciMBe4xIth`uI^AtT z>j5r!S+>5-<@L)?ZP-Izj!~0jQjYK8V~QIWe1A=hY6PDTv@F+lA4DAzwnqj2zVPSF zj!mq_H&jB6gY}mLAt#FYsKf5n0MqQ*+Bkg+$+MoXGCCr8PJNHYD71?ukIv(8yt(nB z4p_P3yp>MZNtf4hM_2fiF3SXg_-NnXC)v;k#lliSMuumd|NgKnde=Zt+ONNu3z^5> z?CM{A`jI>?Us&Rw`h)<)#7Haw~F|&(- zAicixJce9&MV}D!tG8E;3X}}@xD@vF9ZD4p8ny?^Ia1iWIMl;q@aW86$^AlEq>s1!r(9} z`lx*<^hyG4w6jTxG&S0T>g3*XoK3j*{rwgP#zF%t`JtPJF9I)umu0cKF_!`Ti0a5# zj%x97&~}fstU-@pM{LsyR9%^-sx46}Z_-YF7thi$GQL^H& z=fDi^%P;3a8h1R=O!nF0xv%h#7b$R03Muy?8Oel5-GzZC_Q4JPt6Lu9=?~d~UHEbJYn;>xA^?EU&B;&7>+G&e4Bu zG7*2Lx9!{IHS-Cfj(VE0i*+ympZ`@bXv6;)E9fPS%~6Nj$_ z3^CGrnWUObRz^H0HN}_deJvr5uGc6gg3gc0`*ZArMO~KZ`1_i4G4%t*2<))frE!rGGnr3(D`oVdO$Bo5rf2{o2;f?j70FWaKSQ)Cj_}cA1lQ zmziwtZBNr4919;-3&_`OUYR9v=oBaGcXz8f;!O)i$T@4hH)*7j7R@9Mbq|3Q#Z@lp zjSfF}m($&?g5oAy0{7(iz2%vN&?Ja0jHIVUjXYMgD_?^{u!{oY%VzAo-9u3BEcHX6 z{1P*`Sc^s&<{2I`oRA!I9Cnc~m4_|=sqCit!Q|-$4y%td&R&N-0YCl0J*vmiQ*<{C zKb9ff?FE0RB*tnle9yKqgwU^?N7})?pg0f|#m{C7*V9_Dc)-)(kARz`POIP<5GLQq zzm?kyt$WFf%N@@l&oQ*u`y8>7&Q__dc=)>4QeyQF+>)PjqGcN$iRY;Ub3xj9(B+ex z$sy+@ILL_{=V*WUzMlznWmT8-)Sw|a=66uy4^+`3gU0lOxU^GEXRaLZij@psIDMCq z^a`kjYZY3L^>*o(^6_=$KOWpK9?)ceWRw;YnwIlKj=>c1Ohe(>&)Zkpj}v6s?4zWR zBNNY$pL)^l=8~5Zk87oruQ-2`8D36Q*h?J_w|VK{g%LJ_IK3w~`d4Ea_nFVpjP2YD zxQ(uECm!xGZe8k(5KZb&*ilH--@q$r@xlg)$_Q0`2}*Wg+Om_FE1|}FE26&lmp=rNgMTP zTR_GxT|e2Um&iM1UZtnzW`>^Q+d}AmU>cSsY{<<;eOORo8?D3TQrqr?_U?oEjm@g9 znj|>Vc$?YSFKgCw03@L}7R52Awu?$ff_LBcT3k|KeMF+tCAAymQk!;gzu z{cj5_sdOarYLz$37n0`QNh$J2J|no4lci{*tfJw+Vl680Y~^uyGa|fa%3y$r0pU#{ zXFiyNu^<}gE7EkcNC%Ncm*)xhI1u~3>#WqyzZ1Gq!H^=OkUu1US?b@cEJchLK-iD`vZO-v=z@1!+{+>+i^O)(y zs%x9&4kN{LPeqBzc!vc`Y+0}YeAW+FH{?Tk|Lw247=LIvD?lc>+q7T8-F)SrR00La zXX8t(eE^OeL~YuF*LsI$n~)@~3~tb|4I(NBTmDBZxm}>^QH{g=CftW;xs(r~T--)x zC1O93pbSZq$cxnGBO8|(I{DMRq zH=_E(-oZLXe)q72J>;~e+&lLK?AUjB=HXV4uWHXG@_ka*dH=H?%Q#5)lDNUXzQnk| zK#mGA_6legm0Qxfw1hMel@A%=%@9LH1jvA!8yO{iqm)CrUiGb*0?bV;7);AQkqx{R z&H==bO>N(m2B0>F?wrGYg_AkNL(qFz)W;pfIFGx85<24+e?cx^*XuPA=TOyxNqg(3 zwWcWj(JmjVv9Ym;IiY2Z{u7x`=*7`8?p5-&dv6ii+d={geV3WP{vfRT2!E$G)SEYN z#;!HVy7&IKteZKy&qeQ3J40NguR);wSA_{2US98_3`wWHYu%x#Zj@b6z4l>?aA)Qh zxewBjumio_^9jO0t=&(64aO#^1T0h6ay(8!R6^yMFy_tU}_r@d8p`PaR zNi? zdTj`FKD453ToNM>OTEMIa8?>}(bW>E@DnfyumoTxRv1}l1@6IEjF&Y{M{tFZ0uyH= z^#oFUvqJ~rTM0cVvS-}9m=vXe1*n|`t>d;mJ79*I{4BO%`>nHA^Y48alswy7vg4N4 zASyN}%h!nr;=2pL%)EE}`UBd>x1d_-Q1%#lTWuO&1AcgqkH4lE`F6Mk1U?L*&M8NS zKl{&&c{n*WRdb}aJ2^z>9mLunjvRjLykv)*uX(*C3Sa(Zz6u(xZmvj%WOp>46%V!r z-B)TL@5slz76Jz&k5jR;p@7fQeZ2rlO3FG!BuCuEBHjMSpj=2r@!N1SO3Vd>?EMHT zr3ZNRZwY6O-h)4FkW6{U87UsY?m(k1WJh(Ov2i3TEWpzTWM;3diA*@f)Om+ztHh+mdS5~qr@)EA>%aaf}1-`FDYa+QMp*oVJB&2mH$ zHKpP&oIwfdB>tp_ex?ullhI^T#{Ri-bIdp(1cmeTL0|FkE{578a4|0mW%^-gP}t|0 z{!liZOWznp_8gxC!O34B?Y10$Nf>XgrMe*TH1kpduJ5N@;{&{Oc-wRUtP0i7&HxZq zxkBGXQ?Es#e7Q+^*E+#sF`RwH8kmfQicFF*r4$3E?F1k|ht1ndxEfH+ve;zQebtC7xL5Ex|X8qvc0fNdSh!|IRijcD6a>M4ukc*y0750;%)z+ z_zJKqbN4I@g**n}sM1vqQ#d42QV$+e-4WVmHS@)&gxGxRK)a?tB01 zJ1hx4oM$fR|4$rE>3D+<#-h5L+lg4PzzU}RfZ<5xi- z<)=Yo>iGDGUx>lkJ)L;6KT>RQrSn739VKu*)Z9Qxxzv-9KNJuZ9k8&rgV^!p>8N{B zlfftbT*^QNx4Cotzw}VGsJ!K+M+_-eam2G_3mze19cm=b5(eZ?J^`yRkj<9q3>~RN zbzu_Qs&$Dad2fr_{k1aW3U3H9b5q3wOh-pc#{bYAD{Br9d*q$sV1&EdVn5fBy@&!a zmCQyX)IUO-H{gSz!20~$U5e16Bp{x!IY)$czP558Kp29f#}V+UEIFOJs(5NiL_ z=Ng_6+Tl1f$Sy31OEHH7r$7Iq?14QyF^)7waht84gO%0rT}%UG_QEeJNMWm6$ae6! z4`f1=Bjb-Kh6j5z_}mk>B)8-@WmJ>_pCpTZ8u+HKX|ZaM(H!-R+)9(0Ve_UEj6=e0 zIxk2;v5gq>2ebMgm;U$yr-Mej?o`p2#la8e@78i`CkEoxKn9^Awu8Npbs%-K9ESx( zMMbgcH-G%nGrc{;)rR$+hRK}lwOKx)m7CyIkij-%Wd{v&l!-fddzrsSap}3!kBh%< z>N8G3R{ShD-z5vEar@vubp#IikhT#&e!v5Po3!b*GC#`Limqsy-cvMOuxG3)Mo-* z3a`B%r!#d>F9!Nm6Yfyfme~zl;KUsZK3C`20vsB4VP=DDu`5 z#ZL|+!qpa*UY{;qx-@nzH$Tu{?cD@nTg1t$g7(0`!0Tq7`&okF7-6rD*|UwiBAk>} z6hXFQeQN*Yh2+UEfa|bJ=C#L{vkRSYE0me09dwwW72jHE%WM@h z?UD1=BDkzrOI6-)4JKHh9yQHL6MBQMQ^QCVwxS1bsXYja47EeCgwvKnf3kAr>}FR& zsHbhm)_S?f7n_!!Z!=iMzlyw=M-(dKLrO%*#mDzFg-kz#UdsGKVWp0BUVwS|XXc&| zZ?$XJDkrE64Z)CHV-keytmG!nrj&bp-(SCT3FeY<#_@Y`V#kv)$y5)sKiJn?5MZ$4 zqp>Lz6L`I5yedSloEIkQ2T%0XUUWZOBn3{jukRf9B}K(4K3ZG7YjU1Tb7k92Cb@~g z2zlFl)3~GamN(xfeE5|uwV|++!HuQ0iSZ{uIPTxP!ErR(F-ETT;%;)tStjfxcmW^r@0;in5SPF`IA?B&ErVFITdizoQx!DE;nOnASvAQ$2W!xb z{Jm0qKdR7>DSsWh@z=Fairo^%-EV~sA1IqzAsYiSm4c@ZX3jv|*QB}NkGLtj;T=f* zrv~~H^UAe(lYs7%geO0esZPV!+FZBJrWi%!|K=6G@p zb-1irqFCd8@L`vkW}9DuQueh;0m`T=sk|N71V_?75Y49xB(x`(vZIVGH7@N@)!!%% zN8a3!?q384Fpp9_=i>TO5{p=h%jsiN zrtV1!guwcv2ks^mJFux{yrQ>a} zhLS;azWai#0M%`GhPTBto1UEBQm+2%VO$oUF^t(!12zv)m+XgpTgVA7F}F?QBbD#+ zF>OR@QdsO*8zg)?lCMUL9RytI`>=o)r(BAE#qI)!;58np2ikcc2e5*iZe4ZswM10 zNrd&R4|T34e)+*497E#;qO+{-6-n$>P=IQAH$~9J4u&RpPeY(!35@-D9gMx&_3jH= zH8iFj3sCKj$Kkg$e9V7Ry}6h`_}wE)g_)K0`bZ~Ow5`9}e^0i_#m4ysz|*SniOhl8 z;Ys`y=p&=AH%r|*$btrtj^@WdK_dEQE#CJFyi!gwh6f?YKsm!5X7SRceg2Im#Z%q`j?$QTz+IW0d7%O zK1-30404YQ3!99u;((KSK`a^RXdt}(k$#QCj!JR%Vr#$$($($M#$Z=hSM?igz532x zJT;WH+6_M=KOcjKlJ&jW#0!&D%HeoJ=g@XT#Tl3CyU2=j;8F)SnH0lwmwd)Rr7RF?9KO8`}=E-NThzWrt zbCc#ZP(FWx4r(%*}5q9aZt2xUeX};8a!Ot3K^>?$0S+Jt-wFvSDKu z(FogU2o%wITYr@vo`-bgO2RzMLYH7XUWn>f^W