From 59ca31d239859676548e68504917cbe119b1410b Mon Sep 17 00:00:00 2001 From: Lisa Gunn Date: Thu, 9 Nov 2023 15:10:47 -0800 Subject: [PATCH 01/10] Draft revised quick start --- packages/apps/docs/src/pages/quick-start.md | 469 ++++++++++++++++++++ 1 file changed, 469 insertions(+) create mode 100644 packages/apps/docs/src/pages/quick-start.md diff --git a/packages/apps/docs/src/pages/quick-start.md b/packages/apps/docs/src/pages/quick-start.md new file mode 100644 index 0000000000..ca5bb40c5b --- /dev/null +++ b/packages/apps/docs/src/pages/quick-start.md @@ -0,0 +1,469 @@ +--- +title: Quick start +description: Kadena makes blockchain work for everyone. +menu: Quick start +label: Quick start +order: 0 +editLink: https://github.com/kadena-community/getting-started/edit/main/README.md +layout: full +tags: [devnet,chainweaver,tutorial,docker,transactions] +lastModifiedDate: Fri, 03 Nov 2023 10:17:17 GMT +--- + +# Welcome to Kadena + +The _Quick start_ assumes that you are a new developer without any prior experience working with Kadena and that you want a simplified, +In the _Quick start_, you'll get a basic introduction to Kadena, learn how to set up a Kadena development environment, and deploy a simple **smart contract** application on the Kadena developer network. + +This _Quick start_ introduces a few basic steps for working with Kadena. +It provides a simplified entry point for anyone interested in trying out or building on Kadena, with step-by-step instructions to guide you on your journey. +In this tutorial, you’ll learn how to: + +- Set up a local **development network**. +- Deploy a simple **smart contract** application. +- Get free developer tokens using a **faucet** utility. +- View your contract recorded in a blockchain using a **block explorer**. + +## Kadena at a glance + +To get the most out of this tutorial, it’s helpful to be familiar with a few key concepts and terms that might be new to you. +Kadena is a **proof-of-work** blockchain that runs on the public internet. +Its proof-of-work protocol is called **Chainweb**. + +The Kadena main network is a decentralized public blockchain with multiple member blockchains that have computers running the Chainweb software. +Kadena also maintains a test network for staging changes before they are released on the public blockchain. +For this tutorial, you'll use a private copy of the network—the development network—that runs locally on your computer to simulate deploying an application on the main network. + +The application you'll deploy is a simple "Hello, World!" smart contract written in the Kadena programming language, **Pact**. +A smart contract is a computer program that runs automatically when the conditions specified in the program logic are met. +By deploying a smart contract on a blockchain, the terms of an agreement can be executed programmatically in a decentralized way, without any intermediary involvement or process delays. + +Because a smart contract requires computer resources to execute the agreement, the contract also incurs transaction fee to compensate for the resources it uses. +To enable development, most blockchains provide an application that distributes cryptocurrency rewardd—**tokens**—that can be used for testing purposes. +The application that distributes the tokens is typically called a **faucets** because the rewards are so small, like drops of water from a leaky faucet. +The tokens need to be stored in an account for you to use them. +The account—your digital **wallet**—has a **secret key** and a **public key** to keep it secure and you'll learn more about that in other tutorials. +For now, it's enough to know that you have to authorize transactions you want to execute by signing them with the public key for your account. + +If a transaction is successful—properly signed and executed—it gets included in a block, where you can confirm the execution using a **block explorer**. +A block explorer is an application that allows you to view detailed information about blockchain transactions, individual blocks, and account addresses. +In most cases, you access the block explorer using your web browser. +However, every blockchain has its own distinct block explorer. For this tutorial, you'll use a block explorer to see transactions on the Kadena blockchain. + +## Before you begin + +Before you start this tutorial, verify the following basic requirements: + +- You have a code editor, access to an interactive terminal shell, and are generally familiar with using command-line programs. +- You have Docker installed and are generally familiar with using Docker commands for containerized applications. + + For information about downloading and installing Docker, see [Docker documentation](https://docs.docker.com/get-docker). + +- You have [Node.js](https://nodejs.dev/en/learn/how-to-install-nodejs/) installed on your local computer. + +## Start a local development network + +To get started, you are going to use Docker to create a Kadena development network in an application container on your local computer. + +To set up a local development network: + +1. Open a terminal shell on your computer. + +1. Start the Docker service if it isn't configured to start automatically in your local environment. + + You can run the `docker info` command to check whether Docker is currently running. + +2. Create a new Docker volume by running the following command: + + ```shell + docker volume create kadena_devnet + ``` + +3. Pull the `kadena_devnet` volume image and start the `devnet` container by running the following command: + + ```shell + docker run --interactive --tty --publish 8080:8080 --volume kadena_devnet:/data --name devnet kadena/devnet + ``` + +4. Restart the development network by running the following command: + + ```shell + docker start devnet + ``` + +## View the development network + +The `devnet` container includes a block explorer that connects to the network. +You can open the block explorer to see blocks as they are added to the blockchain and the transactions that are executed and included in those blocks. +On the Kadena main network, blocks are added to the chain every 30 seconds. +However, to optimize the development workflow on the Kadena development network, blocks are added to the chain every five seconds. + +1. Open a web browser on your local computer. +2. Open the Kadena development network block explorer using the URL http://localhost:8080/explorer/. +3. Notice that blocks are added every five seconds but at this point no transactions are being executed. + +## Create an account wallet + +As mentioned in [Kadena at a glance](#kadena-at-a-glance), you need an account—a digital wallet—to hold the tokens required to interact with the blockchain. +There are a lot of options for creating a wallet. +The steps are similar for any wallet, but in this tutorial, let's use Kadena Chainweaver to set up your account wallet. + +To create an account wallet: + +1. Open Chainweaver from your browser using the URL https://chainweaver.kadena.network. + +2. Review the [Terms of Service](https://kadena.io/chainweaver-tos/) and confirm that you agree to them, then click **Create a new wallet**. + +3. Enter and confirm the password for your account, then click **Continue**. + +4. Confirm that you understand the importance of the recovery phrase, then click **Continue**. + +5. Click **Copy** to copy the 12-word recovery phrase to a secure location. + + You can also reveal each word by moving the cursor over the text field in the browser. + Write each word in the correct order and store the complete recovery phrase in a secure location. + +6. Confirm that you have stored the recovery phrase, then click **Continue**. + +7. Verify the 12-word recovery phrase by typing the correct words in the correct order, then click **Continue**. + +8. Click **Done** to view your new wallet. + +## Add the development network + +Now that you have a Chainweaver wallet, you need to connect it to the development network. + +To add the development network to your new wallet: + +1. Click **Settings** in the navigation panel. + +2. Click **Network**. + +3. In Edit Networks, type the network name **Ddvnet**, then click **Create**. + +4. Expand the **devnet** network, then add the localhost as a node for this network by typing `127.0.0.1:8080`. + + If the local computer is still running the development network, you should see the dot next to the node turn green. + +1. Click **Ok** to close the network settings. + +## Create keys to sign transactions + +The next step is to create keys for your account so that you can sign transactions that you want to authorize. + +To create keys in your Chainweaver wallet: + +1. Click **Keys** in the navigation panel. + + You'll see that a public key has already been generated for your account. + The secret key for this account is the information that can only be recovered using the 12-word recovery phrase. + You can create additional public keys for signing transactions by clicking **Generate Key**. + However, any additional public keys you generate are still associated with the same secret key and recovery phrase. + +2. Click **Add k: Account**. + + Under Balance (KDA), notice that the account displays **Does not exist**. + In Kadena, keys are used to sign transactions but they don't hold funds to pay transaction fees. + Keys must be linked to an account that holds funds before you can use them to sign transactions. + +## Fund your account + +Right now, you have an empty wallet. +The next step is to fund your account so you can pay transaction fees. +You can fund the account from a pre-installed development network account called `sender00`. + +1. Open a terminal shell on your computer. + +1. Clone the `getting-started` repository by running the following command: + + ```shell + git clone https://github.com/kadena-community/getting-started.git + ``` + +2. Change to the root of the `getting-started` repository by running the following command: + + ```shell + cd getting-started + ``` +1. Install dependencies by running the following command: + + ```shell + npm install + ``` + +1. In Chainweaver, click **Accounts** in the navigation panel, then copy the account name for your account. + +1. Send tokens from the `sender00` account to the account name you copied by running a command similar to the following: + + ```shell + npm run start -- fund --keys "" --predicate "keys-all" + ``` + + In this command, specify the public key for the account you copied from Chainweaver for the `--keys` command-line option. + The combination of the `keys` and `predicate` create a **keyset** that is used to safeguard your account. + You'll learn more about keysets in other tutorials. + +2. Open the [Kadena Block Explorer](http://localhost:8080/explorer/) to search for the transaction using the account you copied from Chainweaver. + +3. In Chainweaver, click **Refresh** to update the account balances. + +## Deploy a contract + +Now that you have a funded account, you can use that account and public key to deploy a simple `hello world` smart contract—written on the Kadena programming language, Pact—on the development network. +You'll learn more about Pact in other tutorials, but for now, let's deploy a predefined smart contract that looks like this: + +```lisp +(namespace 'free) +(module hello-world GOVERNANCE + (defcap GOVERNANCE () true) + (defun say-hello(name:string) + (format "Hello, {}! ~ from: ${publicKey}" [name]) + ) +) +``` + +To deploy the smart contract: + +1. Verify you have Chainweaver open in the browser. + +2. Open a terminal shell on your computer. + +1. Change to the root of the `getting-started` repository, if necessary, by running the following command: + + ```shell + cd getting-started + ``` + +3. Deploy the smart contract from the getting-started repository by running a command similar to the following: + + ```shell + npm run start -- deploy --keys "" --predicate "keys-all" --sign-manually + ``` + + In the next steps, you copy and paste information between the terminal and the Chainweaver applications. + The instructions for signing the transaction using Chainweaver in the browser are also displayed in the terminal. + +1. In Chainweaver, click **SigBuilder** in the navigation panel. + +2. Copy and paste the transaction information displayed in the terminal into the Signature Builder, then click **Review**. + +3. Verify that the hash matches the hash displayed in the terminal to ensure you're signing the transaction you expect to sign, then click **Details**. + +4. Scroll to locate the **Signers** section of the transaction and verify that your public key is listed, then click **Sign**. + +5. Copy the full Command JSON or the content of the `sig` key-value pair and paste it into the terminal. + + After you enter this command, the terminal displays information about the transaction including a `requestkey`. + You can click **Done** in Chainweaver to close the Signature Builder. + +6. Copy the `requestkey` from the terminal. + +7. Open the [Kadena block explorer](http://localhost:8080/explorer), select **Request Key**, paste the `requestkey` from the terminal, then click **Search** + + In the Transaction Results, you'll see a result similar to the following: + + Loaded module free.hello-world, hash dP-eeuLlCkDI7aEvHuWhxGs-mTjw-gSUAD0DHJ9Xnxw + +Now that you have uploaded the smart contract, you can interact with it on the development network. + +## Interacting with a smart contract + +To interact with the `hello-world` smart contract: + +1. In Chainweaver, click **Contracts** in the navigation panel. +2. Click Module Explorer. +3. Under Deployed Contracts, search for the `hello-world` contract. +4. Click **View** to show details of the smart contract. + +Now on the left side you can write a command. You can write any command and +execute it on the blockchain. Each command requires at least someone to pay the +transaction fee, often called "gas". + +You can also write a command that **does not require transaction fee** as it +doesn't write, but **only read** from the database of the blockchain. + +This is a read command that you can execute that uses the contract that you just +deployed. Write it in the left side of your Chainweaver inside "Contracts" page. + +```lisp +(free.hello-world.say-hello "Albert") +``` + +1. Click the "deploy" button on the top right. +2. Click next twice +3. You'll get an error "A 'Gas Payer' has not been selected for this + transaction. Are you sure this is correct?", but you can ignore that since + you're executing a read-only command. +4. Scroll to the bottom. Here you'll see the "Raw Response" + +> "Hello, Albert!" + +## Writing to the blockchain + +Actually, you've already written to the blockchain. When you deployed your smart +contract, you executed a write. But that's not a write from within the smart +contract, but a "native" one. + +To write on the blockchain via a smart contract, we need to make a few +adjustments to our smart contract. + +We've created an updated smart contract for you that you can use for that. +[Check it out here](https://github.com/kadena-community/getting-started/blob/main/src/pact/hello-world.pact). +Run the following command to **redeploy** the `hello-world` smart contract: + +```shell +npm run start -- deploy \ + --keys "your-key" \ + --predicate keys-all \ + --file ./src/pact/hello-world.pact + +# chainweaver web: follow the instructions in the terminal +npm run start -- deploy \ + --keys "your-key" \ + --predicate keys-all \ + --file ./src/pact/hello-world.pact \ + --sign-manually +``` + +You'll walk through the same process as before in Chainweaver. + +> Yes you read that correctly. **You can redeploy and update a smart +> contract!**\ +> This is one of the many cool features of Pact and Kadena, however, you cannot +> change the schema (yet) + +We've created a schema that'll show the structure of what you post on the +blockchain. This is the "value"-side of a "key-value-pair". Each value is +assigned to a key that you pass when you execute a `(write { })`. +Anything between `{}` must comply with the schema. + +The schema is very simple, and looks like this: + +```lisp +(defschema hello-world-schema + @doc "The schema for hello world" + + text:string) +``` + +We also created a function that allows you to write to the schema: + +```lisp +(defun write-hello(name:string) + (write hello-world-table name + { "text": (say-hello name) })) +``` + +### Executing a write function + +1. Go to the "contracts" page in Chainweaver + +2. Write the following snippet + ```lisp + (free.hello-world.write-hello "Albert") + ``` + +3. Click "Deploy" + +4. Select Chain ID "0" + +5. In "Transaction Sender" select "Account" that corresponds with the account + that you funded. It should be `k:` + +6. Other settings should be correctly filled in as default + +7. Click "next" + +8. In "Unrestricted Signing Keys" select the `public-key` of your account + +9. Click "next" + +10. You'll see a Notice: + + > A 'Gas Payer' has not been selected for this transaction. Are you sure + > this is correct? + + You can safely ignore this, as the gas-payment will be done by the + unrestricted signer + +11. Click "submit". Now that you have written to the table, we can read from the + table + +### Read from the table + +Execute the following function, and deploy to read the keys from the table. + +> **Note:** this function costs a lot as this is not something you'd usually do +> in a regular transaction. + +1. Paste the snippet in the editor + ```lisp + (map (read free.hello-world.hello-world-table) (keys free.hello-world.hello-world-table)) + ``` +2. Click "deploy" +3. Change the Chain ID to 0 (as we only deployed the contract on Chain 0) +4. Change the gas limit to `99999` +5. Click next to the end +6. In "Raw Response" you should be able to see + [{"text": "Hello, Albert!"}] + +## Further reading + +Get started with the basics of Pact by reading the +[Welcome to Pact](https://docs.kadena.io/learn-pact/beginner/welcome-to-pact) +docs. + +[Reference documentation of Pact](https://docs.kadena.io/pact/reference) + +A very good and complete tutorial on learning pact, with real world scenario's, +is the +[Real World Pact series of Thomas Honeyman](https://github.com/thomashoneyman/real-world-pact#real-world-pact) + + + + + + + + + + + + + + + + + + + + From 43837587376c311d2d53c716a102f565da176c40 Mon Sep 17 00:00:00 2001 From: Lisa Gunn Date: Wed, 15 Nov 2023 11:37:22 -0800 Subject: [PATCH 02/10] Quick start work in progress --- packages/apps/docs/src/pages/quick-start.md | 50 ++++++++++++--------- 1 file changed, 30 insertions(+), 20 deletions(-) diff --git a/packages/apps/docs/src/pages/quick-start.md b/packages/apps/docs/src/pages/quick-start.md index ca5bb40c5b..fe01c0c0fe 100644 --- a/packages/apps/docs/src/pages/quick-start.md +++ b/packages/apps/docs/src/pages/quick-start.md @@ -54,6 +54,7 @@ However, every blockchain has its own distinct block explorer. For this tutorial Before you start this tutorial, verify the following basic requirements: +- You have an internet connection and a web browser installed on your local computer. - You have a code editor, access to an interactive terminal shell, and are generally familiar with using command-line programs. - You have Docker installed and are generally familiar with using Docker commands for containerized applications. @@ -266,39 +267,48 @@ To deploy the smart contract: Now that you have uploaded the smart contract, you can interact with it on the development network. -## Interacting with a smart contract +## Interact with a smart contract To interact with the `hello-world` smart contract: 1. In Chainweaver, click **Contracts** in the navigation panel. -2. Click Module Explorer. + + After you click Contracts, Chainweaver displays two working areas. + The left side enables you to edit a contract interactively. + The right side enables you to navigate, view, and test contracts you have deployed. + +2. Click **Module Explorer**. + 3. Under Deployed Contracts, search for the `hello-world` contract. + 4. Click **View** to show details of the smart contract. -Now on the left side you can write a command. You can write any command and -execute it on the blockchain. Each command requires at least someone to pay the -transaction fee, often called "gas". +5. Click **Open**. + + On the left side, you can write a command to execute it on the blockchain. + Most commands require you to pay a transaction fee because they change the state of the information stored in the blockchain. + However, you can also write commands that only **read** information from the blockchain. + Read-only commands don't require transaction fees. -You can also write a command that **does not require transaction fee** as it -doesn't write, but **only read** from the database of the blockchain. +1. In the left side under Contracts, type the following command: + + ```lisp + (free.hello-world.say-hello "Albert") + ``` -This is a read command that you can execute that uses the contract that you just -deployed. Write it in the left side of your Chainweaver inside "Contracts" page. +1. Click **Deploy** to display the transaction details, then click **Next**. -```lisp -(free.hello-world.say-hello "Albert") -``` +2. Review the signing information, but leave the Signing Key empty because you're executing a read-only command, then click **Next**. -1. Click the "deploy" button on the top right. -2. Click next twice -3. You'll get an error "A 'Gas Payer' has not been selected for this +3. You'll get an error "A 'Gas Payer' has not been selected for this transaction. Are you sure this is correct?", but you can ignore that since you're executing a read-only command. -4. Scroll to the bottom. Here you'll see the "Raw Response" -> "Hello, Albert!" +4. Scroll to see the Raw Response: + + "Hello, Albert!" -## Writing to the blockchain +## Write to the blockchain Actually, you've already written to the blockchain. When you deployed your smart contract, you executed a write. But that's not a write from within the smart @@ -313,13 +323,13 @@ Run the following command to **redeploy** the `hello-world` smart contract: ```shell npm run start -- deploy \ - --keys "your-key" \ + --keys "your-account-key" \ --predicate keys-all \ --file ./src/pact/hello-world.pact # chainweaver web: follow the instructions in the terminal npm run start -- deploy \ - --keys "your-key" \ + --keys "your-account-key" \ --predicate keys-all \ --file ./src/pact/hello-world.pact \ --sign-manually From 469af9d30a57c2ae02cabe68fe6ee7055909bb38 Mon Sep 17 00:00:00 2001 From: Lisa Gunn Date: Wed, 15 Nov 2023 14:32:00 -0800 Subject: [PATCH 03/10] Quick start work in progress --- packages/apps/docs/src/pages/quick-start.md | 145 ++++++++++++-------- 1 file changed, 90 insertions(+), 55 deletions(-) diff --git a/packages/apps/docs/src/pages/quick-start.md b/packages/apps/docs/src/pages/quick-start.md index fe01c0c0fe..73cf8c6db5 100644 --- a/packages/apps/docs/src/pages/quick-start.md +++ b/packages/apps/docs/src/pages/quick-start.md @@ -235,13 +235,13 @@ To deploy the smart contract: cd getting-started ``` -3. Deploy the smart contract from the getting-started repository by running a command similar to the following: +3. Deploy the smart contract from the `getting-started` repository by running a command similar to the following: ```shell npm run start -- deploy --keys "" --predicate "keys-all" --sign-manually ``` - In the next steps, you copy and paste information between the terminal and the Chainweaver applications. + In the next steps, you copy and paste information between the terminal and the Chainweaver application. The instructions for signing the transaction using Chainweaver in the browser are also displayed in the terminal. 1. In Chainweaver, click **SigBuilder** in the navigation panel. @@ -267,28 +267,33 @@ To deploy the smart contract: Now that you have uploaded the smart contract, you can interact with it on the development network. -## Interact with a smart contract +## View the smart contract -To interact with the `hello-world` smart contract: +After you deploy the `hello-world` smart contract, you can view and interact with it on the development network using Chainweaver. + +To view the `hello-world` smart contract: 1. In Chainweaver, click **Contracts** in the navigation panel. After you click Contracts, Chainweaver displays two working areas. - The left side enables you to edit a contract interactively. - The right side enables you to navigate, view, and test contracts you have deployed. + The left side enables you to view and edit contract code and execute commands interactively. + The right side enables you to navigate, view details, and test operations for contracts you have deployed. -2. Click **Module Explorer**. +2. On the right side in Contracts, click **Module Explorer**. 3. Under Deployed Contracts, search for the `hello-world` contract. -4. Click **View** to show details of the smart contract. +4. Click **View** to display details about the smart contract. + For example, you can see that this contract has two functions—`set-message` and `greet`—and one capability defined. -5. Click **Open**. - - On the left side, you can write a command to execute it on the blockchain. - Most commands require you to pay a transaction fee because they change the state of the information stored in the blockchain. - However, you can also write commands that only **read** information from the blockchain. - Read-only commands don't require transaction fees. +## Execute a read-only command + +On the left side of the Contracts tab, you can write commands you want to execute on the blockchain. +Most commands require you to pay a transaction fee because they change the state of the information stored in the blockchain. +However, you can also write commands that only **read** information from the blockchain. +Read-only commands don't require transaction fees. + +To execute a command using the `hello-world` contract: 1. In the left side under Contracts, type the following command: @@ -296,13 +301,12 @@ To interact with the `hello-world` smart contract: (free.hello-world.say-hello "Albert") ``` -1. Click **Deploy** to display the transaction details, then click **Next**. +2. Click **Deploy** to display the transaction details, then click **Next**. -2. Review the signing information, but leave the Signing Key empty because you're executing a read-only command, then click **Next**. +3. Review the signing information, but leave the Signing Key empty because you're executing a read-only command, then click **Next**. -3. You'll get an error "A 'Gas Payer' has not been selected for this - transaction. Are you sure this is correct?", but you can ignore that since - you're executing a read-only command. + After you click Next, You'll see an error message that "A 'Gas Payer' has not been selected for this transaction. Are you sure this is correct?" + You can ignore this message because you're executing a read-only command. 4. Scroll to see the Raw Response: @@ -310,44 +314,46 @@ To interact with the `hello-world` smart contract: ## Write to the blockchain -Actually, you've already written to the blockchain. When you deployed your smart -contract, you executed a write. But that's not a write from within the smart -contract, but a "native" one. - -To write on the blockchain via a smart contract, we need to make a few -adjustments to our smart contract. - -We've created an updated smart contract for you that you can use for that. -[Check it out here](https://github.com/kadena-community/getting-started/blob/main/src/pact/hello-world.pact). -Run the following command to **redeploy** the `hello-world` smart contract: - -```shell -npm run start -- deploy \ - --keys "your-account-key" \ - --predicate keys-all \ - --file ./src/pact/hello-world.pact - -# chainweaver web: follow the instructions in the terminal -npm run start -- deploy \ - --keys "your-account-key" \ - --predicate keys-all \ - --file ./src/pact/hello-world.pact \ - --sign-manually -``` +You've actually already written to the blockchain by deploying your `hello-world` smart contract. +You changed the **state** of the blockchain from not having the `hello-world` contract to having the `hello-world` contract included in a specific block. +However, that state change transaction didn't take place from within the context of the smart contract itself. +No contract logic was executed in the transaction. -You'll walk through the same process as before in Chainweaver. +To illustrate how you can change the state of information stored on the blockchain using the logic in a smart contract, we make a few adjustments to the content of the `hello-world` smart contract. +The modified version of the smart contract looks like this: -> Yes you read that correctly. **You can redeploy and update a smart -> contract!**\ -> This is one of the many cool features of Pact and Kadena, however, you cannot -> change the schema (yet) +```lisp +(namespace 'free) +(module hello-world G + (defcap G () true) + + (defschema hello-world-schema + @doc "The schema for hello world" -We've created a schema that'll show the structure of what you post on the -blockchain. This is the "value"-side of a "key-value-pair". Each value is -assigned to a key that you pass when you execute a `(write
{ })`. -Anything between `{}` must comply with the schema. + text:string) -The schema is very simple, and looks like this: + (deftable hello-world-table:{hello-world-schema}) + + (defun say-hello(name:string) + (format "Hello, {}!" [name])) + + (defun write-hello(name:string) + (write hello-world-table name + { "text": (say-hello name) })) + +) + +(create-table hello-world-table) +``` +### Review contract changes + +Before moving on, let's take a closer look at what's changed in the sample `hello-world` contract. + +The updated `hello-world` contract creates a simple schema of what you want deployed on the blockchain. +This schema assigns a value to each key when you execute the `(write
{ })` command. +Anything between the curly braces (`{ }`) must comply with the schema. + +The schema for this contract is defined in the following lines: ```lisp (defschema hello-world-schema @@ -356,7 +362,7 @@ The schema is very simple, and looks like this: text:string) ``` -We also created a function that allows you to write to the schema: +The updated contract also includes a function that allows you to write to the schema in the following lines: ```lisp (defun write-hello(name:string) @@ -364,7 +370,36 @@ We also created a function that allows you to write to the schema: { "text": (say-hello name) })) ``` -### Executing a write function +### Deploy the modified contract + +After making these changes, you need to redeploy the contract. + +To redeploy the `hello-world` smart contract: + +1. Verify you have Chainweaver open in the browser. + +2. Open a terminal shell on your computer. + +1. Change to the root of the `getting-started` repository, if necessary, by running the following command: + + ```shell + cd getting-started + ``` + +3. Redeploy the smart contract from the `getting-started` repository by running a command similar to the following: + + ```shell + npm run start -- deploy \ + --keys "your-account-key" \ + --predicate keys-all \ + --file ./src/pact/hello-world.pact + --sign-manually + ``` + + As you saw in the previous deployment, you'll copy and paste information between the terminal and the Chainweaver application. + The instructions for signing the transaction using Chainweaver in the browser are also displayed in the terminal. + +### Execute a write function 1. Go to the "contracts" page in Chainweaver From 21dbe8bdad556a5c10779a1dfd397c7010f60163 Mon Sep 17 00:00:00 2001 From: Lisa Gunn Date: Mon, 20 Nov 2023 13:04:32 -0800 Subject: [PATCH 04/10] Complete revision of current 10 minute tutorial --- .../hello-world-quickstart/hello-everyone.png | Bin 0 -> 21276 bytes .../raw-response-hello.png | Bin 0 -> 39742 bytes .../docs/hello-world-quickstart/tx-result.png | Bin 0 -> 75269 bytes .../updated-two-functions.png | Bin 0 -> 39553 bytes packages/apps/docs/src/pages/quick-start.md | 272 ++++++++++-------- 5 files changed, 145 insertions(+), 127 deletions(-) create mode 100644 packages/apps/docs/public/assets/docs/hello-world-quickstart/hello-everyone.png create mode 100644 packages/apps/docs/public/assets/docs/hello-world-quickstart/raw-response-hello.png create mode 100644 packages/apps/docs/public/assets/docs/hello-world-quickstart/tx-result.png create mode 100644 packages/apps/docs/public/assets/docs/hello-world-quickstart/updated-two-functions.png diff --git a/packages/apps/docs/public/assets/docs/hello-world-quickstart/hello-everyone.png b/packages/apps/docs/public/assets/docs/hello-world-quickstart/hello-everyone.png new file mode 100644 index 0000000000000000000000000000000000000000..5e2460282d67dbeff3a5d256c94d85813ea5a4b1 GIT binary patch literal 21276 zcmeIacQ{<_8a}FvE{PId3Zf@!bRv=n+doKIMMy<(-nk3nF}Kd^9vPBH5SERM60{y@BH& zH*kR8s!Pm2(a;E`ETyHDWTmAUl^h{vmNsBCw3qLqG;y_5+bEKBKYx_8_$H56i+7LT zFOpOTZAFGO>Lb<-re;Z{!n6lIiQ@xLHFIrx(_JGuykBXpDWNnY%lc9;6IdXt1UCP1tCp-)oKs zFg}qr;+Hf%l6*@k>ySaKDeq84yBRgw)KbJ~hbbu=)OgbzBgGSMXYZ*U^MKNN$cSv~ z?HlMyY0}8}7{ORv2kIt)-sf0_YRR9@0~MC0`T9fng%UcAIg&r*KE%e~k*Q2rxiA+# zcWdj2B0Me#P-l{-rDjj$?Hun)Xq#2Z#c)V|B*ugP8uV7;hC7efTV=WE2Yga?5!8;m z+Kp($3&J`J~QqDSmV$h4f7yj*g`q@Z&*qZH4%T z7Sh3Af2wVn3%!mt%z~YMPQc1|df`HmoY&i;_MvF*3uA_)jq<~np>MRvU$>kkRM-b~ zeNE-iSoj#Gb&EZ08e>ii{^)^ZegwJM+dvcYgYO>4(z`zez<48{@M{o^?BZ%k47p() zpMH`o2k6fc#NtT{pPf0}ly;ik#td9=YDwA-!gIh+BuNeM(>m5lxYr)0F*0vgL%oDN4M{Zw=®OjHKK5g}-Gh5We{djkcGcv3d zU6HXHbC!{EO5QZ>P2<$9dXv^0=d+2J?3B&%1UV%a)4S40w_v>38`$@$c3x`I6g|MX ziTUnZlTj+Co!{x)lsi_2KxVtimg2#(V!$LPm(fSsG;| z!}ZIz6Wb1(e{u_L0ykS4tcNRzMqI(Z*Vu$gF&AttB6E;0etIE$3gJDPwS0(dRWOar zl|Nt^KND3MR2a0?l8IYm*u5XY4}CJ7JDZe@D)wm=Cn=ki(0%=(08>lE^_EBo-A`(C zI_vtl0%GJ>G7?yROVJ?z0;dLrBJse@v&QM(FHvSZ(^=hF!z&+ZV15#ylW?5ew$zo^ zQf34V}E1c%7LW`T-IRn~J2_Z2t{c(3tDOy1f zrrky3v=9x>ne#(T`-4ZC_qZaRD)yfGLGbu1`uF@FKf)ET7w@j4bI0^0#cGfwdyCs< zbT3q#Am8cnSA4Soj})v(|3xFBA6PW?6a|<_oKva$Pw*82cxNywu=4#y?DzNlC{q|} zFq3a$-My>!CiwS#=C@3*Bc9wRY@)<_dhesw11ec*o||{?NtxZ-{lsI+r1H+@xz#6V ztMS4EN8**Ic6UiW8Z7Yd;Qdr0S0mtmn%ArR5EGm_YauF(-t{aqMdmk#GpmmOP)c<# z&fWu0^x9z8H11w>LZkMt#Afe>j0i)6WQjpZBkwCT zSw5k2^J9NPrdU^bMCL63$AUGv%@DcM_+b0`9nMeRPz$(QpEM(5bi4T`51uL>(;LSI zfrh&cmK8CcH#XlsOC|1$`;C71n&)x+lfa5M6-gB#?g1k*-p^ziSrl*=j}=`JS#rvDzGq9_Eal=n!>&9%uuX3?f`C?)0SeXG$t z&fURWj9`mnb7kX*QX_xYt`fD*#-e7IRr5_HOGC}q3cu8^DpE&YOr};5l_IC=q6W^{ zQCt3@ktOiMKm(ffT%%acBpam0uEMSg@&=ceHfPQf0*$5y)3-&!(zQ^qU*88n{);}%WK`GL3-4<-c^W zYkFzI*Kmg8?fA+I?Fc4yCgD|H6(1(oCcVTsM1P59i`hLYxziWQ6k42w)q~a}l=MPO z!n4wg+i(;+Z}V84@Mrm zyrpw{@RsUr>)X>T*vxsaR_O(;CUPApKNEe%ZUeEVM>a*;vSQ8$Hp8fgt)F=E2{?4wRE}jxGKlMAH^}EY?OZz*} zBlcrOUT+=^GtrK{Hod6P_{A9Yq(K%VJT`1tk#w=38KUQ1`)CsH*Z9b47DZNW&dmZP z)vxz$;%!7d#um6f)&6)kAokO`J&qMMXTM$M{lNFBkE%b#*{98qBQJeEi9X!p%w;=! z#P6``Z%N(%re8Q?9AqepvQ)P3gYa%qO;F|Wg3P<)kBumthL%QKk$aDj%4VATOhZshX{Yyw`xeKl97oI9coNsOo5lp1d}@_PG8{<-U^c*ONOghHS-bFm-IT^(=v013i?F7zDLQ zbWXD>NNvk8eq{N@sK2Z0Zaj@uu2p+EX*rplM-jh+^(iED+Nzw&hJF0NrP|)>Fnom0 zwv@iKRD{TlD@S_mflF<*iktozT}5@))Hk19`b06XSG_^o)bi=C1N~_RIAR}dUJ@nM z5jYrP5h6$PF?fXt6{a0F32FoBhcptG3wQ}K2+z5jo+|gJskf9waEd4h!Do() z@cQ1tzr?aIlqy)&I$2F*<=8&9P0VamOcuNCy`&~mT)UXtGn%$s(@iJd^JLn+9`#f@ zM7QPJ^rVl(z{=F9ec$}+ex@GzE`5`#aKnRY?;W|BC|=D`O>VspHA609vnO3NS%OuN z9Xs*rD6h4_^@j1}&CXi+3SCb{l)*8y@s!_pk9$=+6-?d-aHT z8Z_i2euSZtAt$+?1smFS5}JzxRlc-2|7fL(&f6{80@ibDPXpm2K^dQ=v%4F~x{T^B z*b?Oz7&2Dg;nU>H+(1qd4c3x11A)-kfa4oz*yy*=Fo7d<;2RB{8V&oeV>C25beex3 ztDryp`yLE5v=B=)tiSKk0sdZoeFT1h)_?!S{2Yvi3w*i-{JcrQ_~&kH?-a~`j?sPq z*U+R?rDbJ-zp5sVV6dH&1;n}XXhaA&foK0x+X)Sgg6Z-HT~_7678)AHgr%C6vli%; zunEML%h(k18qDQxYk&D1G*Ne9;LsNAY|Q9xYh&jm>@IfiuRDZ+|LMuj>F;R)6Xd?U!u^=*5%*QioGs0+X?A(#U(NoS*T1?Gy?mIk zx)az@8e(e;wsRK$KPxW!S5Nxd^tSvfBN{(bAR72%6%#S|ImkjDcfIX0c{h<7v=u9=8EI5 z^KAp$OA<}?nUtD4`uZeZ4QTPaWjnc2?J3`#dy#x@G|GaJPhGyGlPbSg%l?o-bE_Tk zGLkt=?b$afqDVUz=|;}D9}|4TVSJzZkEb`&%(cA|UAjlTlA#IE@Sa^yIxnIg&mo=7 z(w>z;$i=}XYq?ohoL<^pKQxRRj92`M^z`5PeokD0jzubocI7V?$+{RpjH_ESDm}-# zaTNUtx6SsdhhLt<^7bIP?i%=+pC5$Ec zl1+JuK8?%Z-79`^w)=)*@F-Cbl0@foG+Pfn-|JW88W$WX2;!J24idGnyM5)XIc~np z3Wo3u*X$4JjvI&2nUP4G70`Ka)n^cDl=`0UCS%jXP1|nu_hhT**sPD0Y9M@|*1akI zbPi27%lZ{W7KIMxBP0Z(WVY6OrAflpGf|3S`;n;a7KVK5TF-rC9VW?M2vZGwyP1Z| zeO-_qy4RN>`~Nw#j^BF8fS|g0VnXk<$M<}` zlP^4hztZ3X1?MZ*aR>s6Bu(}?$r6FNZdA;NZ;V=LYjDGlQoZ0jDqTyc!|7>ieyjA! zpfW?BV<3Wl!2mU7@ZR!YL#*Xj>-1-UY?Gk}g{y-(%OcN@;#^0JaotF&5Q^f*O%&V) z$mYRxe=lTVNU6=}uiA(mI%E&siPBu{;gnO$DzwzN5eMiWHGxZ6m9eu(aAEW8aMl-o zG)LfOAjS|@+`&~%=8A`Wah07&X~m!-IXYoismoW-(GW0cCM=hg62=}(1rw2Z(>^lt zBVar+NrO=udKc<@u6!@+5*Wv-CL0l1PH+m?|0W$WR_Biy=z`eVsNU2mx0^i6=C}OS zgdH77^bI?#-1~UPsKY!NO2J|7c~?7m+V^6zIf4Ol|9NQZ;Voz1VSP7!xYRFh#Mv*; z{Z%lm_CP1;v0csf^YV3I0gH7ZwS(CHjfoT-T1J%m&Y#8yYCN30cG_6hk;Oe_qs8VS z)z}@YUW4kI+KcT`fwp}?F$SJ(C;MwLqkwVuo%gk7e@;(Z92I6dyn=1uY zbQfQ;rIbCtqM=rhO+A~ed>j}$e1?8r__t?s7>&7pmGirCTVSZQ`mUqkdM~m3FG+?M z=cv5bKVP3leGuUszslg2J@Rkpr{KMj%F$`BTVnC4V@AEqLTWuD-mVC7f!f5=Crcp| zjQaG}+G)8PG?MF=&tsYf8imaoZN6hkvKY)(|KQ3#wErWb$S6W+=_^KHZB8XT62Nx1>H0cbNt`=zy=__Pe*9>_@mY{;Lj+?~*&# zRl#uRsZIpFSU@N8?1b$h%+JlI-heLCiOq;+nC#6y`g#RwEMu)N1pRQz3zEduj<10O zyD+-17$PA^NX646?6zS81XIT@#v)f51{sQnWqzB0rh;O>!dc}VtJlkRbGWw1iAv}^ z7Cz+i^u)`5K`h>@fGtYb~!lU^gc;kVj?{ap6}e9*GO@r=!97`qfpxZirW_#lqX4?fcIp`<{;i zQ3iSFw<6;9x_uD36Bt=$J=`tCIzx4^k4lBHm8UE(#^+0;&)9#|8_xI3;%@v#-QLHs z{(|14siC`_P<$o*3v$FHf+*leAP!N{!TLDMM7adyNF9BQw?~wBB%QHDPVvpAAy~43 zKUjTSXhO{@RUuKho;fV@bak{ib9|`Q>+p?E3;xRx-Vf>;Po+-mM{&RmIVJA`R;+f0 z#5^g>Klxs{cLKk;~zS7hs!+ciWmXR7o*(s{~AjqG=bo00RMl_nNy0v|lzT=|g} zF4y`|t#;a;0GFUtAHC0>z#MCh7QQleX6iUrW;ZFUy45X+eaxfW{q3RntYm7w{Ju-t z?O4_V_eLVYqYhUXV4fTc^2ds1Gfu;!b$TB-l8A2kv3@;X&4Deog%UBqz+zwQ3x+o# zfDLbOJ*@$mmhizr+4)Ll%f6IPht~4i2YT~ASq=8eNB=ck>2iJf`!nO8Q+#`2RBJjy_h*nfz2 zabJoxzhwmv?htx-lnEO@JpiogiHs^<0I)*Y!R497v}JvcC5y|ueJ>c8oNWQe3I#Tf zhYwkuI_XgPmc#z)p#0Ydn}B00ZzPeJ;8PxFht<5EQtf$;4hA1l40S)55B07-dZjg8 zZ(eF8rlW9oY?vWU6Fa$)Q%_f@W|Et|SRjABu!SBk{^E4{f;l(mz^;N7Q-_H;(&Ma+ zB^j$)?c`qExBSFev>hp2I@8M-BxyO#yzF$N8rQ_~Zho-yQ(TQJmE)x<<2(~x!?45t zpl0E@feFcxlSxHxV3C}PfqgKv!CmJ{}QhS+{C z2tbp|fC%Bl?ijvNI&5&fF>YHvdFvo3*_f}D>JZ&eLQA`_{p&vZjy>u4As#}&X5>)~ zHOCs1lAdK`dpQ8(G_I3V)IY%rc_Lhm@0Y_>AgA$zL%Jl0H+tXT1CDDN3gvm^?Lz~* zG955|n(~qg&W4>LTyws>)4{D+!3=hxpg=-T*UR;1O2Hk`8#!mi<~<6+BROAW0*iex zVD>mL46hTmb3B#=QoUq&IE=d7s-5rvw20pDrQ>*grH10?GT<5Imm?3>UdhO^Z>_Ix^Ec7@`Sy{7(bYboNhMpZ=~{kCj(pGsdDmps9GA32*-XHk)#+s^xY zZA)ClWoMzywVgGy$?V0dS)^QNDQ z9vMj%>aY9K&k#%e~1Uu4g~+m)J1e}83TosDlM5(JIK7^VoY zu&~@+6F?A7ZMm;-cw%g>H$loQ5`h zmpMDCxp!5p{t?gr9=3NHrP6mf@)#!S?yB`^1fur*WDT#>)Fq)vAgzAtu}Sk+IlecT z{)dxph7G2MeNI;TQecKH{R;bUtY3e0f~NOMy{7>;PK)IoHA>SZN@Q3q!K@0)I(j%m zV|SZHq0{8flwoht>KWUqMyVaNRu^n&9Z(L0kdsmMTP;0bAE(v%!P@VXSoAfxDZ20b zJ0l*`{;(bR@o5@q!0!-?aq7US({OiG1<%2Ryo^&&aG1VqB5!{PfY4nF4jJDYJhhY1pN=7wTT%4Z1P@F z?)iP#z{|E^gVH;t6K3eW{nNEuX!!w_7k`#kg+lfw4b*nL%(fxJK1^qw!2E7Vhj3?t zP(Qf#B#>9TyFP*n3L0Y3DR%pnF5CAlU?1-`^GL3CF-N|dpVd9~t!(6!y(*fB+ifSe?u7dq2A~^@04!AQ#oLU zh$*lHyYz&jQRa5ps2PpOPV4>klQmemJ<4RA05`31KQszGH@PC?*WJcoBB$6!{73y) z8mr4N0N2|Eh^2{L4BZYX^N<5FA1IF153_Uo?Ntw~E1=syDTi`2VOtsAm|<*dGaUlI z{ea-`;S+^@&Bm@6mtFx7K1Kd?4sx!m@AI~Dif{sY4&GG8tJu$^4<-wY16l2}Q_^$E zni56a?Cc5fci2p{4@Yag+}vQo%o9LD7P6I{m2WErVj|>=F8TpgE!eBs?Ur|M&eJU~ z1Hyx2F0PLZ-M@zxJlSe*5|^-{iMk@Syte9b1Lq@!a*|&O#y%X^T~5P1945HR^j8?iuHf`9*Z`x(o z=D=oN=<2--w$~1^zp%)#cQ<5?`LeB?IN~th%=Ajmtsa~5YrDY@oZNsf*;2H&v()gu zS9*rsvp|^O7%U&nfw#(e>d?^B3HbnDt!bCkNCfMf^R;H3w_Ah>44P;>GN{+!$1Ygz zjGYfiiJMRyzD*R&hL$Vb6l+Jl3s_0w;K2vJ?Qe!6HsrsHN7Ajs)ak5;^AkzE^9>Pj zR#F%PKXxPefcp9hkZDxg%vi({fa61~X{s@gaj#5)3Gv9}gJJog@3$MY%kgK}{8r*u zlgl8}Q?M#caHdsixqX3VY|N~H&zXD7AoWznVuev2k2JYtc$vL6EyW-HPX9b|I^7O9gH9_9h#%Xl}E3Tm-xs3|BuNdPjYAwcpLhi~@# z(q7=MwU31p9I!pii>v6<_hNH*j>vLk}wklKx^wO9PmK{mA?M%nT?W3>(-?H~BBro4B%Jc>M`w5e?S ziipP;IG1N4@M2uH#)VyxzbX5Dy3!*MH^38Ix@Db_^|WPsr~BEC#BqLkK(agAWp@m? z%JSpg-SYeuq2H*96sf>1uIQUr!Fa7dBrEx?ha!(SRI;6_tOnWo z7c|)1QV4r@7H^yMwU>D>C%V1TPHm4=WA*1OgaZDc?DbE4w>5mFp)A#wRR7KZJwD}8 zAm_3`oS)L4Mce$vEQZfzcClw!G>l`h`Lu`Oldjs`dGB2Oy#DL@XK=x@42|wR+AcM7Sp>uQY zc^LH=pE?D zl6B<+qHJ7bS8W{N+(Rt@qpTN4%3Kv)0O#bw(9ow`u<+$#so__0Xx zXJo{TAE#W3NlW+;Ag!4s>wzCPIf}1x-@v(1CM7!{8mb(1k<}x*(#!!JNeW{`I=_4o zW^$!Z04B&m#yArnL=q(b^qL9$x(VD6PTg{)D+Pw3{ZO(_kbnU{=FK%oY&x)nf^_`h zQrC1)qy(%Wg*X}4m7pZB#4ld}HwatN242&F={I1BIlLe0-MVHKK86D~I1fC*xkiSq zPth^p+DA$i53bPzMmpezl^+g-*L4sC;Mm1m-|S_tmhGh&u)O<~=kHwC0Ri@nBePlQ z+0WO>$r%9BGt!zLU)KQzKIv9hLr4SDm3bQ=r+5h0T+KlSwH0$ zfPJ0naiag!b~vHPZc*UT`b>9PiRM~vn9H4cD>9dHoENuj~l%rNpRV7_mqEjL}a zL}r)9bLdOoHEQaA>o((z?(4mTJJ&2xYc9}1rza2fH8WIt4ai77H0kzrN)t=|)KIg~g<1WMcdD_Kh@%s}A zgnx|6e~#?oWmR^fL7~92Yqg<@Y|RH1aXjfZN#_;5v)D2I_S5}b0Nunpb#ijDZ8*Yn zoevYl8TUFsuAJb|Xh|~4V`Yf*4K8)XFXx-}&PbI3@Oz8FXzw@a_2LU}vnV#rqRadf z*yq&a5n(qNl?v)+L+I=PYw>-pq(}U8q)rMm4-_xpLF~CcIE(}m?ABs^n!V{{_6vva z{B{#hTqS7!)TP#R$^G>l7Jj{~)-83{4Ip~`xJk6XJ}jtMcj%8x|MJGc>I{I7ix`J8 z$w!a;`Yu0NHW`n!>(b>bC!!G;xz9^qxQ~FjjaR#E+L5!Vy?kOPujjFvm5DsvM7Wjv zJnOiht33bwV1L+fe4^56vW(7p(_($BoLwWX=&S~)o!zWysdin9gVY`F`_^98Et8zi z*UP7G98s)^gxAY|k!15_I6ss!Cq)j5!2w`zs9F=^bsn^w2f(0s<*2T5?2E%?q`3L* zEfA>*_J0c`B^_H%rcUsEI&3CbH;PTYA;<0*z$%H#T-JuVP7?ZCTqhh_jN&Phd^bGe zpE#tB4O6PM^4 zf^jgAt=}Q+vZ^LY;u;0^Z#z^JfVO^`-gE#ayH|bI91j@*%9ji@0?t}nW@7mS16f9a5UvPp67bD-9jmMJ{!VNB|dIb9Y#baP}0jd z%~g&3Y~BfE9*d((f)5`RY<&+p7|rf^h2HyXD02M_0C&gax#6Z?HsVZ0)=N}>m6Hy; z#Rz+#KGQ!63(pdTT|)XvUK>Jg(b1f`%=)n1zSxMk0Js%rghec5C~vJ!LKe>(z*7YP zFgpFD+2!60O=c0;h6d%E7RYEFLQIE$7H=>z9RgVAQDPC~j8Cv3?}TvDK;K=Tnz?z= zuPwArp(`vC%%C{a`!7NXA+M?aTbgM8xi=rWpii4FdLO8NX$IjF5*}@*jv~ek%I)+K zB0X!B%L!{`tSNfb@m4h4UlDcsRq!cV%BHSOxYeeXNKd|6c#o4kHH`|?z%n5~np83+ z5yJfd|Bm8$Uz*DjuNSbXUbzHoau^!NIp-@(3InC% zkk}&n`7uDJAq>#HPvh!vZx8G7vOIMF-ptPd%J_-`zUOB~$*V&{Kt>p4uXWn5Q!b{L zARn_%a^Q6L`A1KDZh0s|6<@RE^D7K&w zd9TWX<*0)?nI}rYo*AABafI1sVR0Je2Kpi=zti%J8-r!;R9b`p6|Rd*6uQ#-6zHDw zFhWo8vHF+E_=>8g!5mHQF+73YKA?`yGl-$lkEIJ_Pwad6(Hz=yKAQvEDS^aAz;0R) zdj1_0&82VEA)&M3!>}g;TQ1iuuFdW0v&DyQS~=Dc3DMX@h#eGUfa1r3iD)LgX1fHZ z`B3NQJGJr(Yg4m!^ta zqx7|^Y_e#oKx+aSpZTl0-KIQRraad;bxWRY!9pEvSrVP_{=xk z_B10%9ERHj{#%&nSns9%{5CJt$On{2nZ_ElbMPbe?a#6Mxa`F2s+qmx5k{)L>U892 zRqJKrHl0K!uUq<_W5b#!`M4BG*MLIrt0xy8%ZcVOh7KOcCygN_#VWa9Qft$TLR$YcBSPYR-hhiDYTa~N=5v(5r`Sj8`wWKoZzFe;H|1+o2s zibmD3=+0d^%es562DP50sQGr^kuQqkR3g9l8)1b9bYtT{4b|2ONAuE)HSbYjM}s~t z{`i!JTu@+XG4K+w8^9%Vn{tPWzVAi+N&gLiZzZy!VZ}e^MIK z?!6=afd_vcN~=8c<`e2<-zj8&b+QA8@Xib~hU$#OMA?+5HRV>KfJ+=OE>*jjDH^~P zc~$5pfuTQ~e=cfPtXC~t)CsEgoGiu|mfe*OuGsC21kk#ap6$#HtPTR!Qqjx@YD(QIHP5!+Kb1u9hZHmWm6QJMyLL#TiNWATw3 z+tqT^!T9N&) zhZgLc63XsXsD^*NfxaKl0QqmEuYqqzTN~?;b^E}~WR)91u;*nB zXUVbPt{G5)F}Q(I=?Pn9nE*80Y6-_76O7#s(C zybxKho^GCIz)peod(8vIoZXy47(VIgP}*{aNoih1(mrSTgo;st=JHU8W*Uqp@29tJ z26R_MS>PPnx~Vf7{zu>^>3|>EMmTMXso8E7Y9_#T{~#+<&}=GbmWI#5sNH=Rw1_tl z2|D(H=Lo<~I%s@=_k(Qw_KdKliHvFTz!2LQxH1{RZV;Ov~DOZVt!iGiwz zfn_4&&%j7^A;8aP7^TEb5oqeWM6u7Nbp8eiG(%*as&(?9(WG{)BxlW8DQP#!o97-z z?U)&onUF+bmm;Urq%}E4zyUL4z&6-ZmN5t01#Abiqg;gYK1e*UHlz`>vjH4wI;UPm zul{^)Y%#K^gS+FA_NVAbE0|r_1y%be13~^qy#_PE7 zQe>f58tI2gd?WlF*U_}1t;8v^c>T9YxGSQiBbuxDe)y9H7tQt8P=XnNLE*Xvn7glQ zYZ~`1ai37sYY(P6xG7d#a`MWG%)EXM z<99)-CB6kz%r}Sa=D04Wi%bqzp>V+MZ1$e5cSF7wg^^1R^fdO<3t$IBbF>OmK@}bW zInz0vul6hF-m^~(*ONEVh+5cx{63QHlJmxdzZr-=Rzl=jPi!aB3v)!Mk)6Fyhwb!1 zE=uZSbH4>%=q{^@m|HCDg?Io_NZ?pjP}mO2jRv#wcwZH#m;{TBRM2f>;!UnSb_V?h#^_sak(Db$Hqy+N)phiA~=K+8ljXu23QtzfNVEXef4O zC6YhsfVUa8^*Gi*qjnysJLUBnN6EkeyUe_&8l6LOB!0HlC}7_!*}wUsWCh|+;=M+d z#Z?M9F?zWu;JwzL89_uP+yo%=VwsjCip4(AQ*8d4mTA7JjoQtrH$D#R0Pm?F$^3xO zHK=%=+*EW8Sv(OUx|)(=yGM15Nlti>*O8^4Yc-hdGYH0^TrSoqa61WI!7KILcUyp; zZaOisdo!NI3iT|+`oSuom~ZZJ*#N;!{f%tpSAVA9DJ298VIL!RM1Bp&L*U0tGhD$H$x1+>Qk0iBbdY}C*wJORHxAq0rdY?g1Hw^1-KrsHq zsUuokYyJ~VxF=!-6P+Jh-s^CKPS4y~sx-x1T(}<`w|WQc;<`B{HkPL~#9ujSsjtB9 zjBKIz<%o!3Zs_DwBb7AAJ4Pn5*mv{ciYc==OCcO0!roVhYyzJP}IQYt@2;=BqOUfWHuAAcPT44 zyuqO_5XYa8T6=%4G$RdGyLqFG=^V9z*FJx>=g8pD!Phb_wCu-Gc_aC#=3fM{PhM1+ zcmwpN`fowlxAsasr>CHY`kKl8uv1OYPP!v0{E}EF;QTw|GXYSWb*_JeNFJWMsa0m9 z{m4G#fG%LMB4}%PD+XT8moML3mZcX6q13aN^7r=z|1_|l#fDe2?~~@5ZU^M+QWe2L z$>NjTIIupWl@)zOk^@U)0I#q2Z22M*S9G*%-9AK&8wq6%K066HT^fE7`+fG-ZHMp1 zY8|>#w)|1%ed*z|8VNl*=q^!Zt*|V!d?0>2`eaCGz`LHawhdxn1{bZw-)cwGR0XZ& zXS%tRzC#>&_m|7?c!)Ru2~(#$!ES#QyqN>5wK|-tUa=m+#3e2{Up|aL#kn~IG>6d< zw@*NaCn+cs-is)VUlv{CW!(oq=1ip9_SN+>#pt~TlF%MV1*cCnTmUws&trS`W?SmH zamfW>EUB^PN)-7&5m>d?9pn|@Re2+v4b@Es%O?*<$Rc;gQ(?1plRM<`;b8|IdsW?D zK*CBPY@-*PMf|H!P|r6|#DM>;x^F447wX;FC}*u-=LkT6B5fd4=LYTrb0CQ;Nb240 zi6WW0U>woY${V&n4xUN*iVaphrEXBocvT1_+~B8eIAFt5SF;{o)axysgq|vo-GGa5 zBv3l7cR4Gw>pvZbbe2G#%+P4U89~~kadn~xq`5? z70)D?ShFsgMMQmHo3m3vz;*c^w1R#3-n*HP-0p{B6 zz)Aejpkn?&Iu0z1OjjX(#c0z4-lBqqFeU-F?upi+upC35LI+1NgsN1kX?%M)nYnJ2 zjVg{qqHqvyjv8}Q`BunnA6v1~Y$m@t)qp8aCdw@ezE5Lyr$>q9>#;iQbj>~CHu;kf@zK(sNA=e? zO_)JOTzMc4iR1Hj?{#NKmdhN1*EV{`U1VTlPklj+gjlhcOiV*NY&OHD*_62+pP|vw z6GK;XQjI`h@TL_|fnB}Jx=(_bj(n%5MQ}K379VD4&5itOGs?hao2oMe&uY#mnOX__ zm=-SFzKL&8o)vdqtC6F@d56VL>Pr#RxaZ-Rnu*71Nmjja+)R&P)SVl{3TLDU}!WWF>PwcZx>-&BGK?Gvpnwli1A3Hy@}(@G$=@0u;nz z0lNeifOevsC=VTU@2v~-p9TPfvTu#ScFf&J{SQC%n3Hh1JNN@`$ZnfXbtK!UcfEWv zY56TWC2@gyvR5=U+{2Wo`mP?uQ$v2=`7S{ouYh}@6h4SNozm>y!+?_`3a-tWa`5ij z-4NQ>Rc0Wx%(&sWHy{_gWcRaoGeteZYaIPe)_rBVX&^+1U}$B1mGjE2^&;(|2urV5 zkI)l&p!;{D+7;i(Bc8EX?@~s0^$7RF^{ZW67Ofh-)73~T8)kwMDF`1g`m=URjMV+l z8wcNCrF5De1y2G*4VqjwG__xO4quwHuI}7Z+?$Z1h)bXB=96!!?t_1^)_WfvB=l zmbQIi!PRt=TUHHN+!%TGMC3kHkaD?48N5<;c&YW zCX>8FHJ)`KWPY~}hX8dt&`ch@M<~3>f3w3>{zI7egP|ylGExr1SYr9_&BIOf69Ux5rXORa1Sl1SJnDH*KC0T>HeE{6^2-=~ia4558S7kVDq<5d4{JMQZr- zP;E`plH8|#=DD^?3+e` zOntt+*ZJ{splo`>xT?NEm2+09P2VpaKFF+(_|Z(DT1e~a`7GX!+Uxn?HAun!+VFDa z(q+W&nb6k=6#NB5kiCt!0zBZmuH&}Ll!41MHa9rmoVE$(2Teop=>am!Ft%$N6afG( zB8L-BfnE4U<(B=-TEhWT1i19>DPG~W5tcNkaL|(!ERC{BSKYPA>T;3djq+XA#K4^2 zQ?*_NwE90(%fl0$HiYVz2)HYHcX(@e!$oWtT0glOAa*Ae5DD`J~mX>?95` ztpzu?x6q9{Y`3*;ll%l7lmL{FRkHl9IH3;lldb!IaieMvr;CALYUEo8y%jHg>}+-V z{z+XV?yK8vSu6X%Nqmd}OQNq}+$@bfa!tLPSj&;19KzmkIuV`5N$Rm-L+ETWID;lk;LJx=e+0-nwR`Br^3L=3^8oOY3sYmX;Jk`21tYG{ zZ}=#_85hcTGj(ct_T8_Ep!DMiW;)UJl71Cool)fMXU_8(yUFTN;602r&B+{bQ)SR* zz?dI8=ESKA@yX;`FFcUd+5jQJEF z*ref$8X(}kOV+fHZUp?#0%86eM^-2xa^S(Xz$KwaVp!lm`U$GafLj4+$jjEUfpoR@ z^L^Wa(zF2TBA<8+kK1-hMz%VT&R=SN3uDT|V?Z^-J7%V|pEXghIV*t0DsD?o0?zv5 zhYBHpukXjJ_^2PhvsbNrUo>=ywfmsfHLEQrKpR7*K0w){c`73S5V$X5FiVxC=NvFd zEH?2X=5_`7jQJ2c#SM#-c0}BiG>M|u$YzoK0c7G7MAhs78s-O>Ox9(?8MkoZ)4=OD zGnA8SXOv6k95XrSiARqewQI@S2|E$74A zZjzY_i8ere#i9Cr4Tu5DqM_1$a@!PRF4l8M2JZhAoo6wp=-w=aKFOxZ|6tIZ`YC78 z#2+_M?3fzp6ZV$4647u9370W71a%F)@7Z>lQ9Z`tpe^?3oX#ony6u5UF{e)X?%W41 z;;I})AMNNkXL*+ZX#awG`>ikm{c^K3O=gplEVZUU5;3iGBUm$XEYG^3S6@+4PjN&$ zlpP!VlEQh+G`#&ZZ|c=2%T2Bts2VSjKC3DAE^yf&+c=cXt<>EW#X zf?P8rsWJrp&m3npMovMS=z|pi@6*_3D7Sfa!b8;qD=$Y>Mp*}_hrD-m_aDu#^|Iwy zOS#>uJlfM%0x0TulIIC4jeQ^5I6&5XO``lr!=-SAMr)F22t6IS+D?@e)SNvtJ*j) z7|;J*K(ngr`g?Nri3iVsSL7UHle1q`3F+F|+c zy+PkW4}9x$R7PDvQb<5&TM3}A(>UkQlnykBta(`h-5Zv-aJRd7cQ_Ac04mA|U_sUW)DRHE=@qgY|hl$Aa*AGT_OC|n?lc}L&vskpu8 zQMCq{K0mcRn~`U@^{U3@b&_}=5gY3_&sD1vdqswd|9Ls&p`HKgxTfMN*>;wdES-+9 z@Z!P(*;-I`w0V)Xdmn)^sihP4=hWqcwd~RCA|e^q$(fe-UXy0=wy&ssbmdeZl>#n# zgC)^RLrKqYjXRfh=6l;q}`Y_C{6k6Z^C$s|Twn(4R?f3I|?fl^@J19S*#jSI?{D2l~P*gXqqO znOUbk!p;^yUbuZpeh)Cw0*Fiv*Z|et=x_oW5k}45?lQDF8VwZA^)h~ok(q`nd^~Ku zAAxmyA#rrKv!sKa47FO8dowBV(8j(|WMJ&B)&W7bNv-3e9Aec#!f@ZCL74r|P{Z`g zWo0b9()hBxWY!(G!Yo4o8HZe;^y)OnJr91bSbY+(ns~Sldl}MVM&-{bHFH_w2&io- z73ppc>p=LdN6&m}^Flg2C+Wv>z6{jx&#gW;0i7bFS@K0wg&j|M?J0re^RhM=3#v2nxVm^(kzp@ZP^9O%~;gP)Bw<8#UHPxg%4Q->)>E1^AIUt}1ZZp42k)q;Ch#y?c_Z^{WVwAED~ZC7&| zE+je#uH27&*12jXEE#`k+OmlWOcuJVZl7(|aq ze^4q>!uKz90QE4X=mMRFWvR`L(G?(~1=Im=S46USiGRanXC=thDP?=|{Px$Cmh$@% zqQ7v6sefyFa5AG0Vrsm*6?HZWa18Srx9O0bygi|bT07jn$MWzCl(Kd>XV!C%$7006 zfAH;E3;r?+WWpw0tNb~<-eX-72}OSUgDdaJb}=2E14I!Uj7?6jo{h>wdavc_ z%@N=&*H@$8k7yEC^0t$4+PE?*twTVei_OX2_Po)YwQRaSqM0;mwn1uFch9Dhqj zk^=t$%@${J&~W#)Jggh(cLBNs5g+ljd^lx*&>c(du<{_n)%pX&e*2e^T+_X*Y?rO|&rwmt_K9ivBT70iDYnf|UtG7gPWn{rN8WaQ@AAuj@bn{{i_{ z7x2|=y?pIMc(_0QixC8nr#eKb1>gRAiT;~&X__X&kW{lE@qHH2>C zPX@`~ax9XS+}8RDR<)D`ADy6=PnzlSK*eybez6DGppWq$7XQWNYG zWCiq@iK)lqPhQL4QLsND0l<-Z^sw=Nf|0*FWMTq1Qt1mq+}CXgW1s^n9PpEC^gSj0 zk|Px(`SP~_@0K$Kj?Q%+KLn84#1c<06(=Lb6{ko@eN88Vh@Xl4#}AKv-R?wcaB~v{WB1lnhSn(m1pbFiA4Z zFS&_MMaX;o;7piN^s7fBtb93!GEdw_m0mVH5JX_obDLUg7c`WZ&8)flB?5%Y6aj@> z1~s!&ix)=`n12c|B{ zK2d8&Ju_Gl$GOC#678jUK}5N;7Vx^)m)v|!3;D~-9hTULURY(yVfZCVq6LNbIe{Gu zxNWArDECWg@JvMADd+{256~0IUDsgLBoxF~#K*E)q~+8|IPjraokrO#;Ey-U3vLLF z*B#s8Ty`T_?p`%?!Y`e0Uf>qv)T7qWqJHiYlM*0wlDspLVjcAzLN%E1L3+{vZCMZReB#=sBlgFqt~727l1kp8 zIC&MtjzlW#%ic1PFxP}lLv2Cv64dQ=CX;h@ zad3eZzxMvx(!9{w+f4dNsmB$3PXTjTiGhXn;%Ydk3Z`@f9{kV&6(B{rb)tv2J7?FT zVvTjIJ$?NVg341ncIwB$j?8N(I^0U`2Jia}pfLL+O6`EP^&0#V`-{OU&oOG3 z3V{YX&+DRJs`T(?*-Mtfg0MqxzGq5p!Z|VM_)TOs{6adV_JC~)cFAG;1&d+SpNM7t zS-=P*JV?rz0fa=`ZEl(i63`47Hyt_@Fl?(Y6Wx8K)M>>}?)s65A78n(?h@aNw;7?N z({&NkjnoIx_v6J16h*`TWn229lo4Jx4kxNQDovn6J8%2TcB|S150ryXZ?ds|CvU=D zm~e8W@CVce)~45nxcN^>dA%W{{3?4*?HP^D@VWCP!54Yi9oYt1mTv>!UW_8sn9<uro6hdhFQU}#>NlLeBK`hn%?=+niU$RKNU5Y z)R?q{GF?=Ql+y~qxx;E3KSnf5)WiyXB)!E0@;G!}$-h!I4eeHna3mSwmP^)5mPi&J zLQK}>R<;t&Hs*FD3G2=s`fi(>mUm`}Q&m_sr8BK#rqfU*San^+Q>9;pSM}XW%Zg%b zf1=H)&}mArPH@2Kd`EBc>YMeqfj?_ItP@3(O@%iGkihho7ltJokf;ToCgp3VJIXt< zJA&(o>kAA!c%gvj0r^Oz7)qq45x+>5MEr%aojUJvYA{tLg*reT#KF24LKw*5;SsOH z-$?I-D-oX&?>xUDwID6w6$Q^(zvepP!AUISwc>DBn#|+csyjvVAZ>#F`NjQ5!=!$? za_qDssY=^lyKMSJh37iHW3YSh)rS+!6CZTEurfj}mThLRZZr#Vymq`b%Pb32S6i1x zo2BwYrH6Tu#ZWbCd2vOvwPe*%MUsiSspELOf;#+^jDbv>>o_>zGyGWAudLxEznncwN4 z--U8`WI`fXU(5?%S5>5OP1f~a{X`$9nKFx1h#6qg^3-bHL7GefbJvuC(dTvMo9jJm z!{&G9Jw=#>M}>cifY~db{|=`KuSiE2ff*4`XJ(E@1_@gk%)Xb?pJM;-+eTOY?Gz_xR}+YSVs7I}#sXHG8?JRdf;}2oKA@hWmc`Y<8^=}0v&MtcA<`DT-G0IMVXn}g zC>k>wu}_iVTWn{nEd%^YKz9i-G-f+qC)&f?|18i7Z&;B#F;VDfin>ZJRStO+#Y)af zXsp>To1Z7u&&kEZ*+VR$OMk$-?PQ~9{p{HLlIcpB%ZpRfTzKHLPcLpdWi8=d`Z%2t zDkEY^xnu>OdCN#>|8zQ6VoGcSoiYO(%R#A%dg3da6dPgpnN`-WO+ViJ5$Uq-PiDAV zwmYi!qV|35qwYs|`}N?hH>7llfz3L&gfml6Qz2d-=SD26}fsB9OZ^%zM&pJ`!8z*-NV!qp_i(mnozl3P1GM zJgdP6yO;CWTi-y!p&x39ZJ1`yog3^tFCwSNZL3~XRS99bvKC10P&+p@sJZITkk>Zk zFJ$?gyhsx<^K3KdTiCc6J=cd)G`F0=tcc%93fyo=C|m{;sm)DP*v zs^RtIqYzwndw-)kmh-NsGKxh=NuYW0(nvvdpcVCZXmd;w9YvMWhbG4lbNL0f9JXoS zJCrj-@VwSFgescW3P+}MHX4V?MMwCdZf$q3B|~(3vY_)mVt=+4rtN;On2gbkC=BVF z)<+tiH+UV(FUE0cO>42~g*8q%i!5Cak>>N&Lyp0s4RM}3<9qG183%(+3bnc(%6A4= z-W@kQzEk&Q-)Ea{rUF`#$+1^nEVy@ipDx?quds=rr>kVdit)JX+zeh#|6W*JP#EbE zJ8*yLaa32bsvIF!U^vq#e3|fINPf3+?P(Bdh}mp#Ed4NaUQ-OwMb1XvZyE5sxbogY zzQYz0dCA}lTpJa7dI{KCMJz##r}4Fe+&OZwl}YOwVGE&~Sx6JiB}@b5A@z~|%7 z7vK%l{`V(*bTAAu@EHK)lD7D%)pM85U1wJ zp|8LVR6AL1M;I7Fn#VV+oEr5Z3=G_yl?KQOr1)0Q6k^M2{2pRr#_DEk_t*}Mu$v%o zX=~ z!+UcdM6maj;cr})yRLf^Ty24)WOQm$qE9dd~Da)1mf%@LPho1(SQH^Yn*0oR{zrz*zw=f0w&1z z_=Jsvm7VSXs^(;6{zSFMC;zJU&%FNCo$zC0g6|y793&yOwq{@_(f^US@IO8MzaIY2 zIR8~q#mddh2K2@XsObpINtA<|o%`R_{`aH*v#R$0ROMu6|IeEL@#H^hKF&c<&CC&E zgE~)cMc*|GSQ|gB2h~TB*GitV)dS<{&R}uAv}?IPJy>8K-8gV+myxg7)S_NKEk#P83?ug6#@ovOS{w~( zzbduO@fYE|5l1sz`-^a3ah}Vd$Sw&*Hp+?w|7|g3mkNacvg(v@D=2=UAKW7ieeZa@ z&ZjNR*pi$^VOclHJCXTz zbT+bj*Mk=>v$i$tSF15v&O=i#WWBo2`F@;+J*8Z&Q;L~ZtmG;_=R1>Z%w?UpOTT3( z$Qu}VUY;$FA^iBP_M|3tJHlZyc$Lj5KIFRJZ-_mh`rgb!8SDLJ4f$Aal`8tmonB;I zg`*#UMxK_$UZ}Vv8nmFKSow;d-+4_IMyjG-66uUOKZjH0U{(e~K0K@n8NCrc2)}|te zCP8nMm1$b^V$M<3-4=OL$GWJM%1KJT$xG#13((=x5FZqyBLo|JOj*nuWaNj~?vKv; zye4k+awEex7+ds`lJnII{)*ZKd8Q(KBffDBbu;Os1lwcHrM*;Pf%)Il1^KWt z@~pn6@ruHaTq1sINA+C&DibV6n?x-Tzu*pBw*$j9$kw|s?tKL`?J?!C zQw0Bcw(^pjrRtBGYF5O7%s{BU={hU)J>iVmhOUrqPiXAlT~O@uyOX>_+8*F*|wv`=*CXBcZsz7`rn zW}2#+G-xO+Pe9Oj9OC(%Ov1ES*-EIe!)#W9jZVj$tlGcP=lgI2wfiN3yvFERhqZQ! zL~8R)MZ*I1v(?lx8nv=)2e@I6uzD8U(8(#p#w_oSzu?|)P`r{(Z&QIlQ^-(RG3*$A z%KrTDqUE9K-Lpdfvc)RD2u;{~*To+>k!ZR$Wm3-t9Nrr|BPV*&WCf#gD=yva)j*M$ zITTByQ%ycI>{@7eAv?@OF={ivinh_$jnm6m?ZeX zE^hqjT!3246)CjOf0JZ0BCwH)OT+s4SY1hghB374Q#U~Xs^%13np5 zB`TT+vu9JZS13*Vr%Bu%RJzn>`Vf%YXlMam=#wW5cbNFn$v~OB_f~E~J4X*$%;f>i z(bm=>D5v@1{-)3IY z?Ecd9xuBCJE;5+Bw3SD~II;^oS*-tx4nIA;BuD{bU(9oIW0hR1U*hAmPO4INlQ)FCRbS3KIq#K7W> zQN~_Eo^9iufE|w}qY_QG2812e<8i*Ly}a{0sIrE+y9hzv#%%)m6XMEY^3sfyC4B1 zyL>PirbXyL7W9J%f-@-cRyKu&wx{gz$j)r!lIYV46bg~Pbd#dmYHtC1yyU_U`=0Lc zlST+k;kjG3%GYexbU0_Fh0aXnI{r=zF*ZqA^y)p+0LWM5rV+1Xx9S8i@8*5>m&;<) z2noas&dB|Xr#G*d341Q*c-lO8(-L-5ZQTtGrU#AyonX&oK5zGTHIR)-06OV^2)}8R zyp=Tc*vdU3zm&RdY=4gKvJj+ojw{g&S*O&GLgsj$M->o;< zQ(Yb|fD@ve@fp1~3*}LTbhU+X=~!Xx=8gQF3ll1JLmKw$3pzInTsJ-*M{S+cUd+2@ z>>=qrb32OvdG982la6^~)wgmop$mya*!z>Oez_dRrgN9oDursjT#{m2JuOez=XrNF z`FOHF1O3v!al$-V$^G!Wp#fzjxv2oF!0zq9AImy^bl*T z0QN0kXjmFE#V8Hz>C+zZHnmEv0&+&AX_N?Wy;9=)Xt~>^LGMC|B((lcEc=H_&wWlTNA%Hc#X;rUu|Tx z{G?v$Zh!BOO8ZIFT$_C`(5HF^LT{M_ zDv)4yO$trQ5_u5ov`loLx9rW;RXil^#vFJF_k}*}WlmXe@U?s-6LlFHVMVjMgR;s^8E`$hF%;mnOB1{T8)#d08t}iox3^^3hOlIC8SW zHgF`t&_{cOrDH_wLC--S+U&iuY)mg&f#8aIcYTIVZ(Vj=L``pcLhT)O(0s#+np|C6 zw946`>+)S+o%-uN#A3$kyCTKU?Tbgxw-@5>6GkjJ8&f9=>mAu%W=PG*T{+yX1>2(I-ZSAsSLRSx#*zIBGC>MDo zlpaglYw$LIS=8j9=|af|4~d4=Uk$GY%X}^D9qrh)y|a4>i$YFmBOg~vRXT^+NG9; z>Dex;y~HLVEg*C8($2WG)v?A+HGE|lPVD#P*4=>NJ+8jdrA6^M zx%(s)VN3Osk(CO9Uod|27Q!v`;m)uU_e`_K`}!1BS?ta!luf(1;{#XGuE<{H7#u4} zBbD7^s~=66ckV$SB(^{A(EIea41E6^W|bNto>!VVkJAtmpBq0U1`b&PoyK53h+~jRoL0;R-=y&0LLga9x6hq z)Fp>6Oc4Md##}Bd+->B?g8#`nTp|F8#<=R$lTN;^MCQu`ENxT+pQ|;=5`(5_^-Cs^ zr9eEuD=_`cdD8@FSnxuVX9B&aw#ML%Tvh4Tp5RWQx;n{>pke@D4`wt7@ak{0<@_Gy3-|`itV{hq-!6 z!$4z)cNb6#B!RO(>I#vb8O>IRyy!i5KzKp3w1+&hLeq4aEH>GD4{5n0EXpW*R)e_v z2~yrii~i`{@UO+H`(OAD3Y3JO--nmMtg|WDkvj}>^t>4`#vjCeGDx;0^lK+*ras-w ziHaPXXZa2KE(&;@=Um`2!88A}f&}1Lq22}j+k2JbY@8ab^=d!#VqiH|1#e3{IBKxS zOjX$rT8MU*IbMz*N~rF!7-=u=^)r<)t42pY=b*~umtsI=ime608s%dYdiOHWx`5~T zE^$Vjb)y#$LEKxkme>lk1;N@IOWFFDJ4K0{)4TUr7nVtb?Aj1nWHnYj!@z`-9cRH> zmDw<&cc)_=<64GkdLe7fzEbFKOV8I0=s&3XeAoVx4oIbXbz^_o$e%3yM6 zArZX{6#=BFK$tsgUD5;xW;=upbHJtOv^o;?8jG)8A2tSD`Y4PLOw#yE-DRnE41~?!FegzLwh0kg(ca?SW)uVG~XSdMG@7IH|R*R%^v_cu$RSa&Oe z{kOQL+N#>sXoc+Pxsb``r>8BINgD*wnSRHBLx11sJB6n#%&|B|lw{YA3h!feG@n8P z%F0d@2DDjM`@}>$DZWw{dHDOhz!c9yQ2_bQL{ZA#L=#JN6b)S1EZ~*%7`5$c&$w6D zIvT-Nv+CDhcGy4slElUY!gV7jrjKTJ@tMzCfIy@Jh$%p-#HinQN?Jq@eMbGwm@e9h z9Mdy9yGI)!&}JI27_;!mr)A1Xqb`3w zmTwjPac)y8WjwWAraVkk9OJg?dk} z7sxJcoaRJ{qA`Pm8sM45=@K(Fh$5=i03V2~6t_zaR|{?>#|wz5j4uzDj()4E408@J zzbxuy?g@)iqIfbS3uBCnqjdVN*8IBzbeTuCmZ9^3>=P!0Ho4$8~9* z@e$I(;2L}eRb{b{4Kv($5_!uc^K;2MWJwTDv(|-M!*8}t;hfih5`cI^shIgEoYz~k zfe?6xLkpKGCdjjq-uW>zoGiI1elPU3U3;@{3pGh zf2Q&y0Upg{E-BZQI8*6Bu^ee09b4p0!Ya= zgiT8BNkH;ZmL32)s*BB||MVdaNNw*6fFAE1=F-dkMTAr;*su&muegl%B;AR>R9BK{_aN=ZOnsyh<0sh^A=AB8Fc2%;z?x%h7jJx%Rz8xz4SJUzlC7kN; z5!eo;O{IU!zZ7U3{g6VvKM9{_9&`XiBltcycQva9YUi}{m4CGb&N$*Dg2z!`kFf7{ zsPU9>Y15oWlUIKB<#u3;-K%8p7F~hsp9*LHbw85|Hnw@w)H?1bK{Mza@M*IrE(xAS zuOAgZ6ANzB^!LC7)jI~SoDqYK?yPuH`oh22hEL+&2&Jb|V!A~dxrb(cyiY@Oj|RCl zkxnJdr1d6W!7)TR$M&7^mXUX+wk%>L#L4O0Z)KEl6w6()ey)@4@iqWxQcw$gwUcqL0npQPs=Pn@zx2POWy z3EtoO<9!84Ath@v;%{zDCI}EH;edMCUr)FcfR(Ko`nA*jw`Epg1_TrlAb5)aY$CSs$rumM_CUUX@+|Q&jiZsLFt{_+3nt* zu`j@{*{v-yb)2vXQ!M!G>?Jk=h#Z&Am}yGsda^YyP2C;`HV|6U8UMmlYrHcX4Nrz)cIy#;rw<`b9H@rvMSL-O*0rqob$y^hO2wxslKWFP*L!+wy%E8$q z1zCG{KHDLQEs7tEP4NQ2Fj9WytA8)uuipuNA>!G2(897c2avwTn?sVOxGqrBi$?~u z#>`=6cj3Bw7Q=fCEUZcI1q88#0K^xEV!YtKj>%M9Y4V)Io_r})go{fEakM<`lJW`+nTU{l!2!+?7gc|@acWf7wywC*M2SqzxbF8D@ zo~|g%z4)F(8+4H9i|o?#$Z*=!?71uf1ZtI}{lL*9USNd=J&#A;Z#)_P$VtWWaDUPA z4{_U#90bu_3*vUXBlJ60GSahDuIjo_60inH$&0lFL!}wqo81QG4m4=?N`(cB$1LGN z@mC9#hDIEZm5VBjXSOZ#=Su*G$OD@=wq z#jE^sVQyh%^~Yp{u{47~#zAGu9FNLeqjo;S z6~h*l2Ekb4U}{rmo~1N)H;LwWGIf&v$YpC(|!SnDl8 zHf3GQh8x3a6>Nk2*8oNklqDGwyad6xfohCSK8g|68gZU;XV@`*$bU zzn507o_87>IRfA{S{PfI8|eL4sdfP7H+a|71+xizL-9*~+BzR;l5rPj}tbzInJqEA#>z#UzBLwwMTe$JsdDX}30M;CCb{NLi_C@&JEIN3PRIzbxoaRs3`k`s044l@lBkrrfjo;sjDa zcV>k5N^SsSk#mOQ9?OZ51W<0K#MJ;hhp^r4k&82NwosA0L$anfB=P~ZLnu?}b=Ku* z7+cq|13(R;gt1mz-b&}Cxy*e2Jr4x`9Lky)mn|@Vl-;kY77m(bJel-(VP|BpMNU=R zmXGM#fjE+s9+H>*;V1u(+O}ZQP6+2se|*k(a|0>3_NCX!86OMLMD1jOYYBTB!t@I= zYpab2roH2@uVjLeDZJQ)uR3G=91bp^zSsafrtD?m)$@GwkJ@CeVUHr;Jbv@_ae0!U{kYfg&4qd1~<20N029NZy1;DotJ*wZ(M}M`rPJ?gQI$ z50rn{v_G@6YoA@dcK8Yl+v(>cC3d()mr;#QqY>R|Zx@0DP`%`2k8twp)+RUiD2fu* zPY2{08lk;fbtanimh@XK+>Wdea+32Y)2LO~2`tUSa1b^L|BrDid_9y1rC2_9`ASV9 zLc5RBr+su8WUS4b%bH~zMHpFNQm?hesZbk&UUGmi<-;xT#kx3virLiu4pz15tJ5}5 z>I!<%6gC?Gdxwkw$v5+}nLxduu)F;T@|~&UXd)N3wBz6YkrO@3T6L;chh|t%gE}Z= zro;9bSFoX^`S=3}Af2M!Y(ii=0J4=iNy4{La|-_wfGxn!S27VpWXI%uswz`+J;97aWZ-5zW!HfT9N`%R zv`O!Ag;E=&7^*wYg{a?dUH!q&Y3iEsZKDSTs&Gl>oT*FJJKoQ2L+# zBz_WOTPw?nYMf!I@1gm zI=#In{h(=g$f=wPw*Nc;OOT!&C4nY3Veqxk!R<*u3C6pdefojs>kpN196LU7k$a5; z!%2W+KI^{nx`Awka;EyA@k9x=8pu!KzlykNQdbhmU6;_Ns@+KUY`?$R%joPMXV2^9_kw!>BSKAao(#ICK{L)Fq zPkzjM-{3qvonuiXF={{txQf?_F?E84=?#mXBuEopLAqUN%aMHyx%cR$6IP4zs!CHt~M<5quiM@Q4RLtoYZ*HOQt ztv{qO&2>gVeR@Ydg39(}h?kAn=6EA);Q?SjI`$j(((`xEF0$4A<5+P=T*CuH5O&q-^)BMHwq=BNp z%}I@IJCI#P!19gQtJ6e4#7M$>tVp-!4M&n*>P!|_?RdOySESswMxV0aVTw(ooVFPo zkx^(PkPsp>uojJ?CYA^n+Md*C)xV(eMN`ar2pxmI}kH*QpgFeH!Q2*6zq6o~IaE`p$7;a~~)W zWmMI6E)4#7_e{E#4t^i*RX-;o+Q!(X+`bmJ8gSK87J}G75=>#Lr7l=>7(B-gLIe>^ z;R|i8agYQrW+5#)ta9zuJ-m>wjfrckYaijUKlK|#4)M;~6or!*O{WJLOOeJIr1{npC&uNFP2(?uPnfSJ+jG zH;{BUpmSw3oU#8$^uBY&tjOHJ`)qubgqaeQD#Lk>cjzNq7W;)e17-qIOV3`a_P%~6 z#kYdfwKY1ZyBhWLK#a100CU4`x&2RksPI;05P>Y4=3SG=S-C>=9wL$6ms-B1Mb?I0 zTo3Rp7cZ;oHx=GAyIa&yhY!Fxi`fAsUT{Kph;^$5(QVBb_mH;()4~H>{bv5NTfiz} z07+by%(L`(W&3ZoQa0j0ZJp491Y+@Gi9j@$<%ADMx{xa8)ZlLWS|dd(O(~GI=xuLD z79kPI+NjDtnLJ0{&vDLC$WhV_j!#L&zMu=gqXGy&z@YRrw=oHPz15!ZK)e=k*XD~v z==_>K=J2Z*^zLG9J*op+XikRc9LPK??aNC+m|=nXoY)SAft*RTVw*>V@7@;VUpB%Y zBO7~bgK*u4qjZkpG`YPmwo^JgYl7cl_S++&+Szv1m}^onSHe{&urXC}n=Qt{&U20M zb6ta!sR|vD`CidaeIO9r#K287lJox6h8zSW9dU?alYdSLSs;ts4D{oI!fBq4qlFEA zJ5kKFChZ#o@{`m!)gx}$RVp4}Z+aj&MAT6t*P!Q|?`5NvdpkfHS`9y}nhKdj9CJ2y zmgY7^PKqtA`NqB~g2aG)JFHLYtx5TQ$A!Kv_i`c*ol7#Ejq#O>#ttf6LBW@E9pWv574Hx&M+(V<^nfTc+q;(yvx#Q<%bs6gmvO*)1Ql`2Mse-NvX|8gm9G<8(Uj|rO^mh3;S3;%! zSaDHZ#x?<@3fF9$95p!P;2OvhWVO<&8#8mAHBG6pG!QLO_tDge{mtaXV4d_;UCu6- zoi^|sD`53J!d`hU0(@6fWZI;V2BcmB-eJ$`ui;Fk+WX)gU1DFz zRQd9YUQ)${cdQCto}t93od&U(;jNu#z-T;HACOE)FeWtvZrM989iPzEE}h$3RgZ<7 zHlL0v&}gF4lkv`aRm5LPN91!3Mdquefa|TI*@pR7!avd&apgko@1mv4=aF+!?!n$G zGsAJSnjda+H1Z-jBovqP5#Huj0;1tcG>+!8O`YcCb^Bnkq$kGw#4UEbxVz!!hwdUPPA!g#wW+#Xb9CX;ogL z>gk~*c0ypq;TbrLk?45eaD;E6*LAU|)yj3_ihM+&Br<`H{hYyz%d6E~`!3#h*JOk< zA|^;Faar=aQ*z{3pteN{j}l##l4_Z2AuDfch$*Jb%w}ep8(QSnMv`m#kJaaR&EUf% z%YI!!IVY?wCo|MnKT*`9iAD0b(3GVOD!f#1CyI?*=00&vc$K>C4AoF!6M`1WRVl|d zi&qH)om!5!naW^hi~=xC;L(~vE{}w)JuJb3&_43ds=}8;R>mI$)fs!$oz9=L=(^OI znSPJ7Vq5w7OHOJjnucC{wB54A`y!$_MY;vALCosS*MMw4r8E}W%P!w$6a}^_Cymog zmGbTy5xlFLX3vAL_}o`A;o(r^`_ES{$IOCzGfN#IAwa4xP4~3z7`P4^A2c$XJ$I~* zU-r4<+OEzlp`iZv2m2Tc28fDJ)A51UvT?du^VLQe`qwz!){h6#k>!0rf*NR)zGekf znCf&ar<(PquDzH2GkvpSOeDEb@R*Vqi=N#*;*s~_1-AlyM)j0QSmz$RreGY2T14y> zAJoY)n=GgBq~9Pz6yFZCL+;-B^@ttQP7||Q`q|Y^PL$Z^jdYLg{8hC`sHpcAUqBUY zzip@T^lNw3>|I3@;yw6_KVwRmt4x7d%;ZS`95n{;wMBf`PN{jOa)I>CM`>ZB%*smx zaI(z1fhx@@w$vMd8-}t<tz%*bKqvuF$r_-zFAH8|#aK@oVA-_x$hTquG^65!N!zAR#l8s^fEA z2%UuXk6%olF?cyH^|li%i$n{f5xHEcOsD|}>nF*V`6*0tBJMNG!hlz8!&eO{-5tUm z1-r+>eoJ!!C%ybiun@`9KC^5T)}9(f2lepOxY>^2>qs#4CN@vD&jV?eE*j3{hPUuq zx4anEKEnT>zK5$COH)2EU7A#cuw1~h^OEM%+XQ#6b+YZV%6d7K}%5GdMeX!v+ldOq=4TE&ABC? zTrKQ#YbvEKro5w8*$F?Us~7DxO3$pxQAzLp>Xwo~k|Z4J>cS1vVFA8Gz{B!M-ghV8 zSA;QDPbWxW)KsKzWqp`JN zF3}eY~a}MnpZ&Q3py&y);W#L9eca zLa9x^>(#0J;TyIky~3)!55N{P!i&%!-P>`?j(pe*%e={okeOW-GrXr`UlgDH;sMs1 zDEMX{@ea+91VaPg>WDz+T93<@iw2(wA*DH{nJ7(z(5&sJ^ILkYz5Dlvq{S^Sud6G8 zBpYVpqT!w0?;Vpjq-%uo&k5hWzCZiZ!WpNg@iVW{?3xDsByd0)8iyvzltypAMBVe%$#Vfa#N zbNniVjL!w+KZTDI8Kv<0rH!Wk)<(bJ@TZ^N7iY~W+0A&qzM3DrPm1_-6|Z>sP`Qzs z#)%`^D~1QtM?vu}R;3=(WZ>5bZ)(CZJ(X{vd&|^Q4uxwraxV%5fcz81jOA0Bs z=d?T;D9ItP+B$S^**fI76C1gp#Vl|f7NM)j3G@}NNY4q^F&*ML1{075gIbem+MOr$ zwXzSpOdtS~jltY1k-8R(HKxqx?LeXVZa9Xj-wQJ2#}wq?uhxg(3`%IeY!9=q7n#ib zXlguKnb~>rS$No#`~#Yy^+(6lNHqcDMZXK9&t)f?HD86rNmMUa7P37r_T}{3 z{3+bqW4#8rM8lnDZaE626qk1HsK$<%=|CS-?AY+Btq`-ccHfn=o_`)ct*p$A*J0#@ z8r@-Ln-H6^pKSs_b_I3i41fr1I!$}7T@f0%EomOjz>+}!4CEc2rEwtT+Hrjxjl#mZ zsT|vU|A!IuJ!@C8w*mkGoGa7wdDE@Fr|_Z*cCD&Y-)IYsDRJ2z-^L+L)TYCRz+>~X zOLy_v|M@M`#mU74_AN{o9y+6E@}6~Qxw~M}tv(pFu53u|qb*P>o1nM$l#b=Et(C3O z-4z~7y;!g~uvE28a~DdeDoSt^EY6-$FXRTlUKrMq=^Qr2iQ*jHZkYu)u`v4X3eVyO z9oU=!*#=h&-Xzb-9`Uu9+k=rZ<=Fr!80{ZrBv~vDn=eCXq2Ozh<%Y#}^bb1XmjIfL zWkn<)YJdcnR2B0={KELwC+8^XjMhGT@hHIQUUYYCq7`uzU%iqwfW+H%%X1ns!PH6< zhk7@B+Uoo-EATDAOX8+5)suExm3e9GEMEj!x1X@z;HLOiU=|8|6J`ZQfzYwt$gF%ps7 zb?-Gt_#kgOhFdQfh0hnvu)r(+QSez$Xdz6)>K47bzCa(ZPPsiZoxMjemGm$3&&H{e zPKX~CW0G1$-nyG6bQ%av$p1HrdnTk?&xzoAeltp#F- zAsJ?fTq8&qCNpqzzI}c+j0>@q3L%mTKyCJ|=yaXZo}yPM{bJmfBD}-iunu6R*rec6 z<3pc-T|EzlRPBBPMhx}Wc_sO$DXOhi6M9TFW1VMjODz73yFO>^5~@yR`@mf?<2qJ& z5O|Yta`1`fC(Het7yatz#|tXV9Jvb{jt`<@ZVv&tQbhLZtmCgPtD7GDZgSYPp^J9| z5AP0?;1O}rHXR}y3Vo7(#?*X#h5j;81xI~2Ax5#mHaT@zojnVNZBmX7j(O}YA@C)U zS(a(Sck7;Ay#NoT=MZ&@UD*AcoBQf8hfoynEy(a}&l@&==h9A@q|oO&4YO3+V{}&f z1V&yI=}&2LZwhL3vqe*jRc7+4Gw$APta_Z1L}!nKPU*8OEb+}>tK$OPHe0Jng^i>A z)uc5}7?;7NN*1(|JZKRf$8dX$q$-Tx8%sOmZV1b$I}}mTvI`~L!*b>b(M9K264}`` zieug{-MZuw=pwO~vUYngDkKscAB0HM%9CSkqaTnyhxU&bldD3~&-W!%f|&vAOgk!? zEGM;~dQ1($8a&vFyRYPx6i?l|w-}Waw82=#L%OsJCMx>*`Gc}?u6a9^Z(N`R8s32E zc}fw))TB%&>d#5jtaqfqdg7+U*0viw zqpUs2$xc9(W8qkG=3hG&3|AZ9pdD8Zd-Cloul?E#F$DTiot^4Dx_l3w)5oF@cpvIQ ztW1j#^NuH}_UeWP9J$*IUaa7m$~+*oRcXJv`oh0S%6^ia+T4AuJ7~a2S8K*@+={BD zzZTfG>fruk^EORMA=e>Gwc4dcx&^*u@`vksSZ)xDtqqdpNo*4#VGgk#hr5=73s`S< zJ%zI>hpwxh%XUfb)!ne~+%#?ex7PyOy*apM=sChNFWlcdEw#oHGq0(fj+VZ*JT*pr z`~AnX!+4xl+}oVadQ3j}wHn?FgbtZEWRtv z<|VxJmnhNg&8bh{)TLiVZ_Qarp{eKhF-_Q;QqU-gsJ+RBq+#y+uBysNcd?F{sjvzI zP`|wd`ta9<04!np`a{{9A?iX@^s;xjBmuOs6|qC(^u4! z7w_b76g>zNef>Zgr3Z0{Zx!C#Vb`5a=;A3@6V425|)cE=sh-zsHzF4O^RsC)~M1ew+yO`@Nd2uJFQvBn(USb##+t7iB0 zV8Xy+@4X+_0;bjB(eZsLBfHeItAzX_tNb{LCU?K%t$ok^;-C8-o^D|cftA@mCrQNqQ;t-g4)LXMVe{ieB zM3%e|y`R-{D*GLvf}yt9j$jQrer6`?G{)2au5Vjkv!uVgkbZ*sXLoxv?W);KBQtK$ za?&|L^LUx%8_?hfAk*J|>1_jTlWi>55y5==F&Z&Q3)irDl=W>`$x7nSL5!D$GG(#r zQ9N>l29`^$8m2P`Th*LL<2Ow!$?Y?;odFJL{|{eh8P!(Twd=MND8*W!xU@wIh2XAj zDbV85;_mJaf#Stm+}#Q8?k+)tlj2Trf}h=Yob%(n-}8KbGDd!6B-wkfx#pVlzOTvi zMv!QO$S-O5wu>E?1n_`4YOG?jt_DwepSiqXx>d7vI&|B_K^A%M^u$XJHUa&IZdq5_ zx(}C&Lh22Y+Wdfd)qo`A)-XFfmF`ZCrXpowq#TPFF1 z5$geS%mu8q{T1q+sK`x#@GHQ-nG=L+eVjNV@aJ!?$5ZIwMntw$qc9-N(o~xSLXllp zh?Ydjq%XAk%`@0W9U<7sT;jerBrmfF-X%uTwIja87f&^7^?e_Hk7H%T|VYml>P}?l`%a-}Rfi+^AJG38;O#9(;VII-$w*oyTBSzvuCc z^rVSm!%f+DdPX|ho{MmQ&extdSYEBi*JQz%lJjp<`mEHo({tvonv(1@f7>kb5*$-x z@Ngu8r-q3fzl++CkfK-ok-Tc_&kF6n^_Sub(>w7$K`r*MkeiVGl;3$d>{Pv>N;L>8 z|4`<8xYZpkI~;1C!Ye$^dra_M@F^i5i~&M$Tg)Os#Obz@fMXQ!ge3U4j*U@R>{f)p z0Wss93=fHwPcIkJq;Sf1u*rn0FHtg-N*JGzUjOq9ChGbXQ3@5Is;!UVdaNw_JsP8$ z$Ca!3T>i0KSClv@)$5R1PIR(>%%dH^+!f|kQUeP~MSTtuzOU|y=emBDQkt+cMecBB z8X&M$NRYt2UJ_IACBgj5hJi8(Qfsfl3L4^-Td-J0VlTsfzVzJd@OyE2f$uA6K@p|N z7Q9C)uOKHw`XWHt9Kv-S*kwQ)ptv!uqK!>09`O_PP~D>J74hPcZY z>q#%Iw+Y{N{E+OMDx7xNG|^;s;nFG4ywXc1$<$tORt7Ziw()23$u^!UJ1) zkj|vjIg;4$XZg&+8KFvSKGyy*v+F5E)(LdWhRRv`u_AXcBR|F&!XdfUIRG6II7SdY&l;mco`)6 z2fRB#xlKx9Pr{V{l=Xu7)9wi7VzS9-m3US4aS4)PM9uFlVQm^H$IUjss>cfl zNN+E8Kq2RDTWRqzP3v~Mf+FSqiU=fr1g^s z&Ll3mYU88^RWD;GD21x}bnv@CBp#+1Nr?UK#Uzwh=sgaQb-TB^K#K2%ISI2nLBT}x z8`VnAaI4F0{B#GCbSGzBpJGYhP*k*hnS!8!P~y$~%2VdA=@<`y8}U8Hp!GF}mpn1! zCD18jN_Uri_ik@pZovzafRSk3qD&WIoGnO$;IT4@V19L#5ld*QT5v8q6M^BDtp2% zz2)-j=$Z+fAa0=Jz4N?9G7sZU&B^LQ4fiaScWwQ~Dp~oO+U2p+qLQ3Q?D|WpIN_%U z_Ji+QIp!KE7i# zLKJaNy2O23pt1-aHld}U$TiUnWgNuN#j zz+c~X{yAF>%TQ%cCzprD&JyR1fF3FWveWvFSM{Ci8wk+o<0I|%a?-WYGSQojdY8cW z0ez51-!p-&0s1IJ<>K0d!`4TH7N1P325t#%Jr0qjqH7UZ!{VR|YW~EoYjNI*jmdS!O5f$o zsmeQJch{CB9YNVxWj;x%+y6Z0FYwrcW*+RSBdxO8Oa$M)>?3(<@F-|B3u7kB@oZ3g zH1lO^3h&?W5-v7-$02nETCv z&4Sd0^GgypvWn?P#p?3Q+fPDTt4~JL#%)?UFQer&G?4D7kyHiLI6BOy$+sa{l}Ya5 zM;lN5@GUr$gg4ZD^uGq2!2EsC&=iL-P~Np-A9U$g1SOA9<`0 zCMu4uy5)~!7xSAV`m@itX32_PbGEeS zU$~KnV8yFdfwwTZR%gg~aq5`>4l_A@@cN2G6xg|0pAa=JSZ6%S%tpHzS6)11@&wQx z(FQp$n)NN>EUhL@cUTS)>RKhV~WeZr(| zn-qZ9TCI|OaE1t3w?y$Xf>p28H)L`ndVUanD$l)U|~>+{sb(8atBC zUn85m0LOBrY)!F2&N$d`qW89f~~9tB`i<36}9)lWp(n(8U7bhwbw%X}ldF`OhKF2&MX)&4&ENNH)RA*VQ>| zt31j@8)*6k0&MDR9sE@(oTTZOs1dP=Bn3xHY#*HZQe8gx(Db6Ekr`nr1tc@X>o~jN z36*w8zf2>y^rO(!O2}Dao3~rIPW(|VMl5~eD@C)|GM80#pK@?>5o{wmf2Cdr(fEVz zJ~6`qPM^zoR(0vTY_#S0tH}H2?7A{r^Ql4Bh{oaljzg?#ZkNjSL9DmG5gLZm@+4G{ zV)^0E9qVoC$_i}38dMl*_dRi1#pqZT9}cZE@EY=+j%}q9Q6dj@jBfR~4EIA`E_v(J z0}Wj%Eazu_uPl|DD%7q#qyg=U7y5Dy2B2GTIvq>yl45Bi*b~#-)t%deLjm>F;vmJ` zRyufeLqUF%T}e=`0Oi4MrXavqf<#9iC$_ljWR*BMLXMN0w)S`R>ilcDq4bE$eTUIe z(7u`f&3IlHjtCRjZNLVudqyov>+}421+&&|E4fY|vK%G?^)1(@`HrT$i+!10;ZMcJ z#1ENRtqZ=q9GWr*cpEvCp4%Pue}cH`TOO7nfj?{>t)f&#A<YW+OuV|V zj7>GSxTlt#k><-X9BufEtTFgZq|(HT^eP=lm-s_Yb@Br8>?;`Nt%dtxr+)Fmk?un;Y5|AmFNi^bu zH=p*{+@G=tN8XRQp*O!Hz*^!yAk0tAhwlK5-e1V{9^VRR8i<_f-q^ZIb121qzEH2Y zr1pIS==qEc_Z$tgq=C^J*j0V`i6V^!+&Xhu*WH7!qSB9b`8#S`==%QT_s<^hwP07y zjAl^0TfU@U`4dip2k!^JYNj3wA7>w+ioF|@K4Gqsf58t6B6t7N{=7u{SQ4fYxQw@y z921J!7EBkrt8a|>78O9G#(Uf{d27n|O&F0Q9XGX#G;}?^hTev{2pannI?B@h>GdkYj>48pk7v(vV zm#owTmv&P!w~3gv0y;y4dk(u4t!ikYs#1aOkBR(l**vV5oMu45Q60=xPje&kQ%3d} z<1`aavxREi9HL0?7-t3R1S%IhtM8p)KQ^K6i@s|)-@7XMc&>TIl`VPcIhCw`)OG~UaWUcqG* zuA1gHK8?d4H?n(dRlj4MI`wURRu?!$T?`SNXZ`iKrU}v5WEjq(1D%^k7fw6#stM%T z+3W3vuZ4HI43*R}-Mt=aF42QxGwwXP&hX+V>|>PKJD$mtV7_a3d!gf2WAt7M#(8`u zq)I%}tup2e*#=FzLv+0k8@5&*9S`*a7%7P0uB+q$LeF*H>oJL1&SRxMeOg=$DI7<% z&aii;XzS8xCtOF0H!$SziEX4GKANYU=7rUj$JYKe3*Z?>%xUC3euu6k@Xawy{YsMQ z6%F#$M*bnM)3xJt+nvz1=btIcVmr@a{WrcW+!~Osw*hY$6Y65WomwYdrA}pSm(rD3 z^;D$YD0B3GZeFKVV)8n(E9{)PsVP~PO0AdoSK3MbR`rauiuraJlR#EFo{n;YYdz_W z9h-P)RX;ntDgEf)^*~!q!)EE=$}pg0gP57g^n;#{e>$hqH+6DH$MT=;sQxXO%UbF_ zdMk5;ztKHCN0udad<6*dp5A;9yaOjP4}NlORf^Ab?J&t?8&*Vn@$UHupydBNLswfQ zR7FiZHhdzoHOZEDS!k0eYYqLZwb17M&>7{Uf43US9C18879=%a85I3+m1U&+bdQuO za4(Du#!)}ZuE*U0&|-e2Z1H-bRIIm;Jc6}UOKdkEA9_ms?zn0N->82ZUu9n!Sj(xC z?07zwAHLJhU6A_uTbHc*PQ_oTr!%1)ZD-Xy*6Tck2SXAUij%gv8G2Q#@7M8^P;0sI ztBw~up8OdEM!~qMLe&%QI>3}8q8ta=$tiW`)7%}{%_+v!uQS2(xz;H-l z=y~#a%8qT-$b1&$!t3|s3Q}vt;o9T+!i!^dC}}=2i)Bft!h>VmvG2fz#!ro&HaYVs z_qMY6>w-WTRDXw5Nu#YjRmUPX>E`C7BdD*03S|m7`|f>LB(GpC9HYx+vu6fM`&^BRzQ)GlSuV~yksX8C*Iejk_!~XpkMXRq3C6#~ zX#~0IPkD=NB8=lPN02zG-7FSwMAi&6VlIYf>$f{YSKmxB%(>b4jI7#35k3J{P2I+C zvW1(y9PbhV-?O(WP7*N=ZziKk-e#>pIF17Xp^)i=L!t%M~SOtYv?hL6+tty8~ULi6e!dzlexY0e1!8i9Rh?qBhIox1Ck4oBYQUo#7lZso;Ozc9Zta!pviUWr+?EZ0n?G*@xB z{qdiW?k4KvI4-1U4S?;$uP3i`iI0e$!*8bc+_?vwks>zU4RVD|tJ)CwI83t6QzQ)G< zrhN{dQxAK;FZ8`B7yRQ@GN3K{6Vwsn-cuKB5uU9mfCp2PRPatu_qu1eQY!_^yoQT^ zVU|2VUJ6_pM(2;l-CJ_DRR4@(61V~35th!3o<*#GE=ALwPh6e+U zl^J)D2W$t>0Uqo{g_sc7v-*nomoe+(^nvi_S9mi*a>B=kj$B__{GrEytKgk@cxF`k zV@H53^7I}^TZve?b!&fp^{_lupMP(~cwFQNez|q$^3#qO1r4Thz7gh{Uqm0lU@+%hv0zqfX77z;zZ9?4y_;kc!io=4rXX{)QpIOEtK>fvck ziSDfHo{B{i$de97K<7DBTjDr~51I8NK&0{wgnlOy)t`S1gvTtLKK<0JS!CSdY zRHAA$J#Kt0OrdFTGMgQVs_B4yxje0`Ga?&rsYWv2oiK}lfM6eCYBb@kN>Q&`3k)0_ zlc<9SHKyo*z|U!4#T4$zIx$*Q|BRV!_Z2~3?5*8uQ(4MGt2<(8cyIp3Wn$RG#&{9N zR^o_@P^1>>8PwQ=1AX1`&T381R(w{ItvH+I(hfM&}8*w_!iEsR&-}y@qJ|4-`!&^aK z?pNHZ?SY;eIRrv$19E%D{JAbeQL)x&^d&-_Zu6oS%iJRdkEFq5p*E1MAq;DBY0vu#1FyXyCGSOq2ji)v)!5tB>@q!JfrF-# zov(0;(U3AULHdEI) z=4rH8t{Z7BKqyVto{NCPbxp%${pU;Cm?w_&3@;eDxXqizmO8f5Ob!ie)WvCA@TeIT z+tls3gzGC;3pR*Tcg|s2Ec{J8Udu!_%I-VWZ1!M)1||NWLvJfRAZh}#dESyPd=9AW zBy>VHCU##zF`4CCSJau))S+$xMAUt%gL(P(*SzU&n7!p-<28AZLD=Yo7!Z4_+@FC{5ikV4&&l-NRq9`rM| z(vkN!fqLUc!YCTtsMmSP*6)jtjA)izluri*9u{LS%nbE=!g6Ua(XL*VR+YBg)h$jFYI-g*!-?+aM!D=xwjmpW5Gatw&Kf|26yS#Z2 z58aU@yj}L?v|x)|H#RU0G7-G1o|IDd?Bii7F7S{_%!;a-92Mw6?SJ1BM9XMVdazeMl`UyC!)oJ z=s^>!-=jxK-7J!QwY2Fl#M+VAR@YgKucK(jaM_KNWAMmIpNW|9DysTMxyp#&o-cp} zPI}et@2Mqgx^|<+t)>U|6czz?zPG|m&N3^ZPohjJKdwMLCU`g*W&$f%Ype$>U_`6x zaOWbf(yXo=FE_^|Hz#`Q`q!ic<+6~+xPizfPKXC?XSy& zGs`egt$}+>08txLVm9-$mAU;L4+p`!bU|;lXKudkwH7m_uh4acwkqs&p2PW(1)Lc7R0A zA?iqNv?LMlOMZf5KIZs(C#efe(_$p&csR(o)m344bIAbkAikpze*Q!}>}6i>I#+Yc zM4b3b<&GU+esT6)5z>`+X|`E+SW+xX%cQIrs$HX(BA)3aNxuCz>n-c6Qj(sMSE1YA z{tEu@L7-gTbP(q{ zOJk zHtxQZAb&|DDCM0kmW#<)Vs6;o|MDwk_kn2I+kTGjckD3Ejd@MjML8$ZrQiL@?e{1E zlgFokWIt-_iV*nLn3H!ZjV5i-Qr8%tZlKxd}CWQHA}qDqR1MlT4lnXBsZ(eDtt`rzb10@w+g8aEj5h)n0ct- z2zA=C-7Be!!#W$~+R~(*$@e~5q}M)a{Rp`dvhbt;Hn~-U@*e0jT{fkdAhpgvq1bq~ z!o}XPPFkQo`YM@iQC6k=mY+5T=>YP_uH;9vJtpd_!P#)``GVNT&~lR?+Q`q|+$&sZN7(5POPwO;QIJR+P~ z-}ymI(71ZS7)3u>B^ojaAHWtr2n)8)+(!K1?#@fLOcF#36m)}QZS=(Yl}UHzVRLyd z`16z9dmy4)3YZ$J!IyJ9u)QEEXV;Vg<@K!YuWuIyMxP$gP#An?-_A%L`_&#YtPwQJ zC)|8cyTr^r6|ZA`RXh|BM84oEVV#-udPVs#M~tuA(;Q|N70)hm+SrHE z^2XH#$$ZQn*5YP&5zAy3xM1*%a|qKZg9^CM2r!F9#tl2O)Y5xYw6<&=61w2fhlKv3 za5hzt%yi7ij7}r$0n1+~dMC;=D^C`7pA?M?>RwuIIs?Y?FIgrvTOU!-dpg?I{}fQ1 zp!*S+q`E2F&u+;H^gm*X`#}f3*vCf))eD1SRs;^q4eS&6O?Glas0^j8<@M0_1dW#y zY(B-HyWFphZp-GX4K6?bTC~TBnUgSfKWDV1^`wd*my@Bdtlipi5A)dEzIne z3(FmoBN_K0T1=H8?j^cSzLRS_tfx4{tgrVgZYX_x*hKu^?4^0y_|rz_1#~QANASPr z8-A-6;}+|GGB>{=%rv+R)V}AR{bdXu!CP_nF3G|pJN!j)glU4KT)+TvvaX0jehM*X z0;M5`N_sS#9z%w(Enk7*=BuYxmJ&cG_ zvSszFA^=&qc^RAViw>HteS2=$eehu{57BbwH0f=4(v5*yT5z# z94JsJlO`h|9^uv^CHp@=4 zs|W(?SaqRZz088h+{XKKj$~6^~xTdC6*~vJ^9_U1l-!cr+_) z-C|G_qE+601Q&pjyLma0_`E|TKY1?31{b0b$h#WD$oaj2imIVrFM|D{DyRFzv7bv+ zKasa9jKkli?TR}itb9jXQ*LgL3{GhB+ep|>vG#I*oI_j=B^=E;ep-S7Mf~a`jTU{* z?IqCDK$NRC?#`{+8zfUMd?wV4q{Z_DYNdCkb74Kak{_xf=&&^JYh^-xQw=t9#s%e> z53@!)9u0k7lctVl0JP-%kEp=63Yw}TyB`ljA3l^pF3t36Oqtj*pj07F%OtJtcDNsc zetgeq`OZI+{kcH=@hal`l(4m&{H<$8$ZZb3-1D|bfaLZFx`S`@lejN*fSnw zmTb3u&nsW;%$)l)w+l*@M;<5Jlj^Lgp6TcAELhgR`rtMv%}^<1wA0O=xU&vR6xZu^ zV5dl~^sTKegVVE^A#zcR_tvf{h-&BUi(NyU8I;>&7#*NoF1mEY2Z|zN673wLyxHCQ z0u(kiZQ$et!K#jHGXIj=<@b%=q7`?8Z8{iTX=KXmC5c;*b=>5eXr8O(+FAS1ZOW~i z2QR8qI-{_!jRrP-lNy7fvzCDKzoIm2M0ngEKft@~1QF$fT`I8JKMwcc$9ZTfKo+1N z0CMQMR`yuKkuRo!M_T2JfJ`VN=P!B1O!CUw?Y9TANB3$87G-TPnfB2xWQdGOU14zI zu(ReTOB20Fvn!_Kpyj-@miW0DNi%YNO|BDQqBOLfX4E{wY{XCi55ok)_U8{>3m zuY?TNQII^6)<6=*wt-0(92)*iCN4`*ebUm~fxG3WW{+akeWCWEdP$_%d!A(C4!}E1 zaQyQY=+G%`b=$cp?j#o#Jg?GOP^x521ro^tNWg*p7<@vdTNy~V87_9082>EvF?kn! zFpV+72*=KQ&_zp+JBwj~kDV%2Hvu*mlHAu_3ugqYr?5791=YuA8GbmD{Atpt!*~-; z00+h7dRd>Q2UE7)?2PaYXFqr?A*3OS%1~HWTv#Tda{Fr5uFdHA%WUs3=48eA&Sg2& z(-mBPWX4#w39ffRCYbb&{;EV?&*DZ~Exhus`4k#TJ*2!dW-84?{uOJ|vhDi1n71-9 zw*HKsUawNTxvG>RJ>u1QYBg<@jyD5EE*&VA$u22T`(*R4kEVo6zSdA}%hsFJVPlc; zNC=CZlNHBP*DZLxM`F(IoJ+;zy=ZVy<%?oorR#|gXObtxR}c5u1|ElQTbqp^8H$Ft zoQECjkMqc~6@Q(ih@hDur7)kH+SJ4e>p*SLuKGn_9htv3z;f5TE1#~u6*g}qWu5$J z^RBwsSzoeU!`53!TcAr7=MObA%2@Kg6mpI{FS?VpF&pMMTCj-M{t8xN7T(oaj5rdi zjx{VHJ=oi{-}y8?z3k6D2zZ?d1q@(p{l!wC1Ej);x=8zI-8tdLVE~a9F^C=nqL;6H zD$==?;vxHHumgge>{Eq|KtI#>C7E4r>DYQrPAVIE45kr1ARg-XsK(6~cew~sb~?y9 zCkxlX$6yl-Siu?ktu!V=ksgeFFLH{OIHAXQH)@X00fyalUfPwvhWnsXY~$95y z4V(s@Kl1~teOk_;WY|g`FU_X>tS9S}X9c{&M7 zC&O9$AyBkM-*hTQ?=<>a!-N-cF&JiEYLJtrkiCGY7neJT^OLKE zi`roL_`WV)5%c+7TdC)MDvB#az&HqTy(;ftwEOIp>cn30XJ$O~5_2tbrV46ar(Moe zOhZr642h1mrV0d$uO_60;Knz{ItAYVT3j5DgBlfU6aPT%l25r#yM_72++T@v*U1-|Jw6^pPOFKoafx7BCrv{pj;nx`N7JLbZI_@1VbkYfbp7Gxo9m zT<=s0WRw|>VnhJ9;u}&~&0P8UmWPpigBmWfBR-%xy5$6@CWNS+o?s%!)CN`qrbVz! z!(6>noWax@tJKy6t7@LXWT+zmQkAM9Mx(t*&FwYf>h|uW^P2~`g)#wRy{h@zhd=IC zl(O)QlHcW!+`8$mwj4lE7>{nh(Xti$Xb%;-oGRHLd5>EJHm0&({YrNsVlgjQCorg` zIVDg`N6FN#8``!2u}O10v0|IXx9F`FD7J?x9FoTwo=fI#>7%uGMGBH{uNz`)pcB52 z30m)Xo1>UikA9ge*k}7FKs#;Uo%}N+E>&<3}5Mt0q{RYrU0vbCHs2VW=UKOe~5zD9AtJW|Vdg%1f{h z;Y|+ml7?N1Q|?R`tL!u8-hr;S$}c6GReiG|L)YAVk@|rj7fbhC&J|+zi73*=M(@g+ z?i*FTH>XLO0r%(ChwX(r#|!@+h3<-WaQi(_ zV(VO?!L}&duas%=tl^F}?!h^L|6luEg#V60|Le`RLFA^FlIKh{BgrBI05yVtr45X! z`@2yQHizM(h{o&Kx$y!MB<%MHTSdYo3N%hy#a8`5nCBa@3eD75jQtYJBcB@he<9Wj zvLm1WB??(;)VAccE#-t3I!R-@+Duiyc#e_hqdOk@N`cEa zQn|FJ4oec9@b$p1JR9xral=)kfL-&vWY&}JGyc`=PebZQAja^rwtIJ8-3OE`CyH!{ zv<&G2YB7~2&7TDC(NPDqMP`Dz_JLKuY0%_6iQak(TP{OMfsBsCHSzc@0M+``S11rD zn<`Lqf*#-6`#{I?GDwrp_5H@>-kt1V-~4UWdI{Y7rX?%Z^HgcV9{uF@2GK?(VXp9W zlC=&;RjOe3vRt#bY{jPSp0F*ze5m}4BB9|2Bi4jUX^M!*{ZOw@#KtZ23`l4Jf*_YrWmgr}s z9E8FD*_b}wt*)#7LtgpE}_B{)8cpM@w40qi-itL zh*0);?#E6H*QA57=EjsU9(~Gv?ZKV{A58cH>;MzosSE#o#Q_hT-H6c%gMEWQ2~9Ht zw!pH|qPpNu^0Gdl&=|Hl+ita6m{(Y{41l; zry}G-4KoEWGOt*>7?1JaDUGbccm>KUjKEhI9FB4PFQCS-Xn@m5@lL0hQu1H_=Vx6{ zfXR$NB4Ou%yysuPbd3gpEA|b{6b1b+v}Ix{05K^b-0CD$_3z}%cHXZ5V$$xUW;gR+ zuOKjFPvY<8kF?Q({x5h;R#||K>5}4E;!gkX&`zJ@-|e5*)_h26G#z=+!6Bv(i|h4YdqvaE&uZC+f`-$!#Te+$$f{sXtH5M9d~<4 z%=iooD2-^k59B7AwEzUf&gYD!FT4OA9;;#hFB)kekLfaumLdE*BjO0?7x%6Ghj?c{ zKpV|E|F6hqA7i`(_oBk$5HCpe(H-!yE=-o@7q4ttT9Aqf09(EbPm1X!p_b)%Ilwv( z0*0;C76sXq`G|)Rzoe{x@Hqm&b3y+PSC?tf7ok_$u=QN4(Gg>asY=><;_o0xTX@Um zMp~Jp{*F-`jucCaqjfpp2cv1epWi#a?M=2MHwL(Wi{*gt-ozD|8Po+#fFllU;}8V; zrRbS!Qxsi)6JD6ALwNaaQE?!EC*Zxj&XQa7ezn}dG?hF23kF-YyayjZZo{fp9K^m@465?Ny-aEZV5 z_Hd!3{QmpU?p7?}(MQymzi8j=ztB__fALZN#k2mO3g|J9(O!0~b`cViaQpacw$ztv zp);>Oeeo(t?Bm>TqYnyck2i$7Gju=umm7Q#CwSJ-9K;tpxs)G`&tQi|<;*pe~!otE*9hc3pM0?;a53T16DAt&NPv-+hMnvW0 z(4-%KKnL)}D?CS9tlmChROuA{-1lIEHlH%DhhY47gZT?0PGDeQ5N3{eIO)k~mP?L) zPe`eQuMqMu%Vi{rG%1oqp!b>x6%f#8lYbR?+Y{3800(R&Hk{D8RDcFIa(EK_=*hF! zKmP0GgU?HP&Y;>I>v57vlls6G*%9y5n|Q|uB^R}N+f0Xg`LjB!1-gog3a>8h89b@0Nc|SA09pa|6hFMG3#y2u+Ho3 z-5&B}lGkHZwAoy$VY^2wT^m4GEoyjJy0}|Z|5Fx*R9^&%#nR+WK&FwQVgH|xenPE9 zhiB7E%^QR9(b4Z@2YY46j0U~sDmKaa>_59-Y%}cfKrUw!iv*Hu2(2;>+I>*i&8O%& zv@9m)W&E^3dPgTxEDNFyUTGrU+SeBcdu)g+45-u|y1LY7L;vkd?Iz=rxd6yaWUui1 z1>t47m6a7rDC*58xDk&Nc8-|1c%v*MkPYnd`u)$#4P1SH#f-71t)qUmNjx^pHn#`Z zkw41CLJ5`Kept&nb7b0_z@v3@nPvoy-kR z>aLEg2#f=1&_To9M{QEoZW@60h9rQlv|uclVy)T-8RbfTe&q&4h+Op=^NVUt5oih@ zH3I`fr8nGboQq3-+G$r}CY~F&cHsC&C5!MwC#1~DF;%au!7dkAaTFv1&XBn`0!D)b zJJ+988dd_ERkp_DU7%?~uoJ6=+Sm@!N*7|d;sxQBMXtlvsPd97m@dEF*$3Lzi?wf`Nv!T^tC+w6L_vvd{SEoS~TB5 zDMY0#4RE7S(DiFpcm|vSief>;z9|VR=AZ*MyG2e0@o=9m~1s(bZTy0?+7c= zcn26&USX3g&6m_IzYmVa|9cIr>x=*ps_`u#@n8ej$qvPVM#>K(rfvE7=UdQ961S(_ zZ00=jMk`>2(;15-q;=-gl8!-+b=FINhl<9Na+Sd<0Sr~;jAUATGPeyo%4lkz@z}W8 zM0GHRXPd}b%bKh+PaXV=iSXF<7JL`En_OD|MSy3mx94ThL1k&n0K6rhxVf zfveB|y_Wwj?bk6++~9Xjw;w*@(Gv)Gwmk@YT$+@q*VvyIe;4qOb$4%s-a;TuBqG+$g^9%v z!T0rcYY;pfb;ir?VEn9)WoQlaoSd-KcG56+9uOBBi(49r^<-W+7MZa0nFk?*;%81( z*`yR20q6blP3bg2HAfSRu0ZS&j`>2JwpPof#%WT4qXQpum;J*V{wDEK;a^Ef=0Zf< zBAczkGtvi>`H|;ZBR{eoKt5*EMc+%V2S?qzBWQ&h;dx+-Qfg{XTnQ;j$rF02Oxky6 z^8BC`+rve^Vy}wP@w~R*l)Lf2e(A!d5LsOQELzQm;ZECQ9gCB?^G#yPE!PyBKb-}T z)~2`e<072@fBgQx;rw~ghs*}2-L4^5%y2YPCk!pef3gl=Km(+ZX&AXnEt9!wCX00e-KF+k)@Uk#Oaxl{#i9C=Owk7J zqWXB2SP2Sr--C?DI)=&%+0j}pywF$8Gt=aPhyzC8CQ$TWV1w*fZU1~2zZuOFh(fU% zjl%Oo!^K+~ClAS6aZy)Ka;tH%T3hW2)o5~9sIy@a4a7Nq<}o6w!mrij%oTsFq1o&@ zt~vSfpO)<(cYOLI9|Ukp-9Jt?bxqQkEFZIW|Cw}1=Tr;qHWQk{Q^#+Bg~;pIA0xy- zsgzO^U_ccfi$^Qzy6B?4U8*OfIcz;zuGCk(X;qf*K36A(``u!(pu*9kGC7P`xbxa_ zKBw@z`KNbgV6`T`y@z=N>-5GZ6&GBK$rgZR%|pS|zxb;chaN7HLHR`>A$ko0sKLBU0X z;hVSA)LmF+#052u2YCX4spm!#kt9}d`#VRp(RXrbX9;Uqo^Wpj*iPF+`u4I%#iNbA z%iT7~g^bHQhFr+~8?02#!rClc7m??k-!^((Tx~u#*tmfu*s{f6R%bb<&rB5#{?=?Y zGUBStq{C;!qzZbdQdP+=`l^WnOdwVx5jhrj(ZSf~_{FxT*I+M#d zu-`OFFU*yU#Vh&Vq}PR(c)j~=uF515nvy2uAqjK?yBj9?-oEWLNn2>o3r`-lExsuW z>@ohsvu!%NknMr16!po4WDjRKidJe9>FkuoXOPFF-OStPw)l_n{f|2l@Sv34e^8jt zlKxYCZtj4|EA#~Z4BD=Od({Zr)I!vLb1k&ck_2eO#%<7As|Dq=NVMS~T&mhnhd^%e zGcKSU*M6ZEbn~GqB=-Ha)=+Dv1-SZ{`bP1vY+eY^ z(a`kYx}A>fk#U;7)=J-gFO$Ui8%TB%wMNy8-X3UPJht6@%>R!`gQm$7)cY~+J0Z@D z>IHyPO`VvSc##Xuhiz*C89GT@)4)<*83pL&O9~3Ba5E6R+NM;99-=KIaI|#a7V;(K z(Id>qUq65RHsBn2xqkl1g;_3zRe_Ytk_NygjU3x8U0pBVAQJh)$#}TI-l>swU`y*7 zxAO3vEfas4g7~_ZVP@+5CS~SW_!SndKG|%O-=*E zWX>693EXqZgcw~NNg#q(;ZI>{?*RR$G0jqqI$7?7x!k(*P|P&8k8U39HcL?bbI5V@d22G7GB9|+l4wUq zUB__crGwHILBXFi@#wk}NaZEh;5>xbpG21K3-@O$x;$~0mYR%5NZTH-?W9-BE!=LvJu1|Sp_YVtLumACHi&s9x8)Hpcg`l?4Eu;l3s zej~Y%{lyw3VfcB&a%ECrlQ+p7(aps5R6AcDI4mdEC_Z5MUbT0$ zD@sANOJ8LIy-@9giv=a%DBBiYo*!|S_;`RoUZ%}8$!h6Zjh2PHE>e55_jfmcj{uZ# zB`a!b>XKhK_Hl?qW3cQ3kci1NVBdMb%5)xf!x}Nrrp|Jqt7)u6`QIe zmN?hj%6h_ zNt}|!a&yCQl91G3%yDFflWh&BuR|TAjf-nPRm8j1Ni|`Cd}&(1@aV-{olW|JRU{k8 zA_Kj7$H#K{0C+eifar`r><)L)zN8w{5sx6>X^e14TbenV!U;Xk;1?=CR9Cn5DWgo7 zDOM@7P*aa%(puGnpf`n+2+{S`a6Yr1EzjIOv^F7Q)Az?B73}AudD==zuK7P|1Hc*} zcp)une|GHn@zd<` zbqZ(Sxq?r`Jr=v=Fbd^ zWZu3ZTwV*q#_IRL{^*vvKd-{}R20rP?fQGp z{KU7JPtp%m?|pZ7cl5!%wI}9%HY~knB>(F-uv|U)yqc!hC`(Fh!XRmc! zv$gU3|C+d0*Vev%Rr%q8<3;7h3t|t(#sn^bA8f&sw_+XAaA0T@0Lr%s%n!#J zQNR#BD5CIzcbQtYBDRPGiYbER746o$VQW|e#hNr79!UH6UUR}B@1y~gcdCiQ6~QdQ zzzCi(YfUTJ3BbXjF+VIU%-}xGKxANInF7U-yAC&gKd%`bX zy4fF>^7$+!>Fb|utjw*vw`p}}QAFB|m>*A@Qqs~+Ej{BMw8UfLo_*7Q;z))JO#j7B zoI171%lrjnZq#OT{ZyGb9hH1FUx5d&Z~Ty5b>(N?FPvH(MNR~JwkzzLz7$6y1*Re$ zU@A!onC6Tt6{!N{wJPs*<47eek-$`RVu4OO4*3=@pnS-uJ>s~EiA}&_VuE8NA1?W+ zK=~C}BNd}j^7EnImQ P3_#%N>gTe~DWM4fl#uUa literal 0 HcmV?d00001 diff --git a/packages/apps/docs/public/assets/docs/hello-world-quickstart/tx-result.png b/packages/apps/docs/public/assets/docs/hello-world-quickstart/tx-result.png new file mode 100644 index 0000000000000000000000000000000000000000..a00eaa6de45e7f3d5ab7cb401ca5f02053ed1537 GIT binary patch literal 75269 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

Q3cD*d&F>imWv>hSG#iVw)U^N(g|Z73?A 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 literal 0 HcmV?d00001 diff --git a/packages/apps/docs/public/assets/docs/hello-world-quickstart/updated-two-functions.png b/packages/apps/docs/public/assets/docs/hello-world-quickstart/updated-two-functions.png new file mode 100644 index 0000000000000000000000000000000000000000..fe1454d33dd2363e4e20c7e8346029994ca5c9fc GIT binary patch literal 39553 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 literal 0 HcmV?d00001 diff --git a/packages/apps/docs/src/pages/quick-start.md b/packages/apps/docs/src/pages/quick-start.md index 73cf8c6db5..5b93303911 100644 --- a/packages/apps/docs/src/pages/quick-start.md +++ b/packages/apps/docs/src/pages/quick-start.md @@ -1,27 +1,23 @@ --- title: Quick start -description: Kadena makes blockchain work for everyone. +description: Get started with blockchain basics by setting up a development environment, creating a wallet account, and deploying your first contract. menu: Quick start label: Quick start order: 0 -editLink: https://github.com/kadena-community/getting-started/edit/main/README.md layout: full tags: [devnet,chainweaver,tutorial,docker,transactions] -lastModifiedDate: Fri, 03 Nov 2023 10:17:17 GMT +lastModifiedDate: --- -# Welcome to Kadena - -The _Quick start_ assumes that you are a new developer without any prior experience working with Kadena and that you want a simplified, -In the _Quick start_, you'll get a basic introduction to Kadena, learn how to set up a Kadena development environment, and deploy a simple **smart contract** application on the Kadena developer network. +# Quick start This _Quick start_ introduces a few basic steps for working with Kadena. It provides a simplified entry point for anyone interested in trying out or building on Kadena, with step-by-step instructions to guide you on your journey. In this tutorial, you’ll learn how to: - Set up a local **development network**. +- Create and fund a development account **wallet**. - Deploy a simple **smart contract** application. -- Get free developer tokens using a **faucet** utility. - View your contract recorded in a blockchain using a **block explorer**. ## Kadena at a glance @@ -38,17 +34,19 @@ The application you'll deploy is a simple "Hello, World!" smart contract written A smart contract is a computer program that runs automatically when the conditions specified in the program logic are met. By deploying a smart contract on a blockchain, the terms of an agreement can be executed programmatically in a decentralized way, without any intermediary involvement or process delays. -Because a smart contract requires computer resources to execute the agreement, the contract also incurs transaction fee to compensate for the resources it uses. -To enable development, most blockchains provide an application that distributes cryptocurrency rewardd—**tokens**—that can be used for testing purposes. -The application that distributes the tokens is typically called a **faucets** because the rewards are so small, like drops of water from a leaky faucet. +Because a smart contract requires computer resources to execute the agreement, the contract also incurs a transaction fee to compensate for the resources it uses. +To enable development, most blockchains provide an application that distributes cryptocurrency rewards—**tokens**—that can be used for testing purposes. +The application that distributes the tokens is typically called a **faucet** because the rewards are so small, like drops of water from a leaky faucet. The tokens need to be stored in an account for you to use them. -The account—your digital **wallet**—has a **secret key** and a **public key** to keep it secure and you'll learn more about that in other tutorials. +The account—your digital **wallet**—has a **secret key** and a **public key** to keep it secure. +You'll learn more about that in other tutorials. For now, it's enough to know that you have to authorize transactions you want to execute by signing them with the public key for your account. If a transaction is successful—properly signed and executed—it gets included in a block, where you can confirm the execution using a **block explorer**. A block explorer is an application that allows you to view detailed information about blockchain transactions, individual blocks, and account addresses. In most cases, you access the block explorer using your web browser. -However, every blockchain has its own distinct block explorer. For this tutorial, you'll use a block explorer to see transactions on the Kadena blockchain. +However, every blockchain has its own distinct block explorer. +For this tutorial, you'll use ath Kadena block explorer to see transactions on the Kadena development network blockchain. ## Before you begin @@ -66,7 +64,7 @@ Before you start this tutorial, verify the following basic requirements: To get started, you are going to use Docker to create a Kadena development network in an application container on your local computer. -To set up a local development network: +To set up the local development network: 1. Open a terminal shell on your computer. @@ -86,6 +84,15 @@ To set up a local development network: docker run --interactive --tty --publish 8080:8080 --volume kadena_devnet:/data --name devnet kadena/devnet ``` + If you want to automatically remove the container when you stop it, add the `--rm` command-line option. + For example: + + ```shell + docker run --rm --interactive --tty --publish 8080:8080 --volume kadena_devnet:/data --name devnet kadena/devnet + ``` + + Wait for the image to be downloaded to your local environment. + 4. Restart the development network by running the following command: ```shell @@ -105,9 +112,9 @@ However, to optimize the development workflow on the Kadena development network, ## Create an account wallet -As mentioned in [Kadena at a glance](#kadena-at-a-glance), you need an account—a digital wallet—to hold the tokens required to interact with the blockchain. +As mentioned in [Kadena at a glance](#kadena-at-a-glance), you need an account—a digital wallet—to hold the funds required to interact with the blockchain. There are a lot of options for creating a wallet. -The steps are similar for any wallet, but in this tutorial, let's use Kadena Chainweaver to set up your account wallet. +The steps are similar for any wallet, but in this tutorial, you'll use Kadena Chainweaver to set up your account wallet. To create an account wallet: @@ -115,14 +122,14 @@ To create an account wallet: 2. Review the [Terms of Service](https://kadena.io/chainweaver-tos/) and confirm that you agree to them, then click **Create a new wallet**. -3. Enter and confirm the password for your account, then click **Continue**. +3. Type and confirm the password you want to use for this account, then click **Continue**. 4. Confirm that you understand the importance of the recovery phrase, then click **Continue**. -5. Click **Copy** to copy the 12-word recovery phrase to a secure location. +5. Click **Copy** to copy the 12-word recovery phrase to the clipboard so you can save it in a secure location, for example, as a note in a password vault. You can also reveal each word by moving the cursor over the text field in the browser. - Write each word in the correct order and store the complete recovery phrase in a secure location. + Write each word in the correct order and store the complete recovery phrase in a secure place. 6. Confirm that you have stored the recovery phrase, then click **Continue**. @@ -130,21 +137,21 @@ To create an account wallet: 8. Click **Done** to view your new wallet. -## Add the development network +## Connect to the development network -Now that you have a Chainweaver wallet, you need to connect it to the development network. +Now that you have a Chainweaver wallet, you can connect it to the development network. To add the development network to your new wallet: -1. Click **Settings** in the navigation panel. +1. Click **Settings** in the Chainweaver navigation panel. 2. Click **Network**. -3. In Edit Networks, type the network name **Ddvnet**, then click **Create**. +3. In Edit Networks, type the network name **devnet**, then click **Create**. 4. Expand the **devnet** network, then add the localhost as a node for this network by typing `127.0.0.1:8080`. - If the local computer is still running the development network, you should see the dot next to the node turn green. + If the local computer is still running the development network Docker container, you should see the dot next to the node turn green. 1. Click **Ok** to close the network settings. @@ -154,24 +161,28 @@ The next step is to create keys for your account so that you can sign transactio To create keys in your Chainweaver wallet: -1. Click **Keys** in the navigation panel. +1. Click **Keys** in the Chainweaver navigation panel. You'll see that a public key has already been generated for your account. The secret key for this account is the information that can only be recovered using the 12-word recovery phrase. You can create additional public keys for signing transactions by clicking **Generate Key**. However, any additional public keys you generate are still associated with the same secret key and recovery phrase. + For this tutorial, you can use the public key that was generated for you. 2. Click **Add k: Account**. Under Balance (KDA), notice that the account displays **Does not exist**. In Kadena, keys are used to sign transactions but they don't hold funds to pay transaction fees. - Keys must be linked to an account that holds funds before you can use them to sign transactions. + Keys must be linked to an authorization account—a guardian or guard—that holds funds and identifies who can sign transactions and transfer funds. ## Fund your account Right now, you have an empty wallet. The next step is to fund your account so you can pay transaction fees. -You can fund the account from a pre-installed development network account called `sender00`. +You can fund the account from a predefined development network account called `sender00`. +To simplify the process for this tutorial, you can use scripts located in the `getting-started` repository. + +To fund your account: 1. Open a terminal shell on your computer. @@ -186,6 +197,7 @@ You can fund the account from a pre-installed development network account called ```shell cd getting-started ``` + 1. Install dependencies by running the following command: ```shell @@ -197,21 +209,22 @@ You can fund the account from a pre-installed development network account called 1. Send tokens from the `sender00` account to the account name you copied by running a command similar to the following: ```shell - npm run start -- fund --keys "" --predicate "keys-all" + npm run start -- fund --keys "" --predicate "keys-all" ``` In this command, specify the public key for the account you copied from Chainweaver for the `--keys` command-line option. + If the account key you copied includes the `k:` prefix, remove the prefix from the command-line argument. The combination of the `keys` and `predicate` create a **keyset** that is used to safeguard your account. You'll learn more about keysets in other tutorials. 2. Open the [Kadena Block Explorer](http://localhost:8080/explorer/) to search for the transaction using the account you copied from Chainweaver. -3. In Chainweaver, click **Refresh** to update the account balances. +3. In Chainweaver, click **Refresh** to update the account balance. ## Deploy a contract -Now that you have a funded account, you can use that account and public key to deploy a simple `hello world` smart contract—written on the Kadena programming language, Pact—on the development network. -You'll learn more about Pact in other tutorials, but for now, let's deploy a predefined smart contract that looks like this: +Now that you have a funded account, you can use that account and public key to deploy a simple `hello world` smart contract—written in the Kadena programming language, Pact—on the development network. +You'll learn more about Pact in other tutorials, but for now, you can deploy a predefined smart contract that looks like this: ```lisp (namespace 'free) @@ -238,7 +251,7 @@ To deploy the smart contract: 3. Deploy the smart contract from the `getting-started` repository by running a command similar to the following: ```shell - npm run start -- deploy --keys "" --predicate "keys-all" --sign-manually + npm run start -- deploy --keys "" --predicate "keys-all" --sign-manually ``` In the next steps, you copy and paste information between the terminal and the Chainweaver application. @@ -252,18 +265,18 @@ To deploy the smart contract: 4. Scroll to locate the **Signers** section of the transaction and verify that your public key is listed, then click **Sign**. -5. Copy the full Command JSON or the content of the `sig` key-value pair and paste it into the terminal. +5. Copy the full Command JSON and paste it into the terminal. - After you enter this command, the terminal displays information about the transaction including a `requestkey`. + After you enter this command, the terminal displays information about the transaction including a `requestKey`. You can click **Done** in Chainweaver to close the Signature Builder. -6. Copy the `requestkey` from the terminal. +6. Copy the `requestKey` from the terminal. -7. Open the [Kadena block explorer](http://localhost:8080/explorer), select **Request Key**, paste the `requestkey` from the terminal, then click **Search** +7. Open the [Kadena block explorer](http://localhost:8080/explorer), select **Request Key**, paste the `requestKey` from the terminal, then click **Search** In the Transaction Results, you'll see a result similar to the following: - Loaded module free.hello-world, hash dP-eeuLlCkDI7aEvHuWhxGs-mTjw-gSUAD0DHJ9Xnxw + Loaded module free.hello-world, hash -pMyUsZtHx8ThNr3zlzPVxdZJa-aJTK29skwWOu9APw Now that you have uploaded the smart contract, you can interact with it on the development network. @@ -276,15 +289,15 @@ To view the `hello-world` smart contract: 1. In Chainweaver, click **Contracts** in the navigation panel. After you click Contracts, Chainweaver displays two working areas. - The left side enables you to view and edit contract code and execute commands interactively. - The right side enables you to navigate, view details, and test operations for contracts you have deployed. + The left side displays a sample contract in an editor that you can use to view and edit contract code and execute commands interactively. + The right side provides controls that enable you to navigate between contracts, view contract details, and test operations for contracts you have deployed. -2. On the right side in Contracts, click **Module Explorer**. +2. On the right side of Contracts, click **Module Explorer**. 3. Under Deployed Contracts, search for the `hello-world` contract. 4. Click **View** to display details about the smart contract. - For example, you can see that this contract has two functions—`set-message` and `greet`—and one capability defined. + For example, you can see that this contract has one function—`say-hello`—defined. ## Execute a read-only command @@ -295,10 +308,10 @@ Read-only commands don't require transaction fees. To execute a command using the `hello-world` contract: -1. In the left side under Contracts, type the following command: +1. In the left side under Contracts, remove the sample contract displayed, then type the following command: ```lisp - (free.hello-world.say-hello "Albert") + (free.hello-world.say-hello "World") ``` 2. Click **Deploy** to display the transaction details, then click **Next**. @@ -310,7 +323,7 @@ To execute a command using the `hello-world` contract: 4. Scroll to see the Raw Response: - "Hello, Albert!" + ## Write to the blockchain @@ -319,7 +332,7 @@ You changed the **state** of the blockchain from not having the `hello-world` co However, that state change transaction didn't take place from within the context of the smart contract itself. No contract logic was executed in the transaction. -To illustrate how you can change the state of information stored on the blockchain using the logic in a smart contract, we make a few adjustments to the content of the `hello-world` smart contract. +To illustrate how you can change the state of information stored on the blockchain using the logic in a smart contract, you first need to modify the code in the `hello-world` smart contract. The modified version of the smart contract looks like this: ```lisp @@ -345,6 +358,7 @@ The modified version of the smart contract looks like this: (create-table hello-world-table) ``` + ### Review contract changes Before moving on, let's take a closer look at what's changed in the sample `hello-world` contract. @@ -372,9 +386,9 @@ The updated contract also includes a function that allows you to write to the sc ### Deploy the modified contract -After making these changes, you need to redeploy the contract. +After making these changes, you need to redeploy the modified contract. -To redeploy the `hello-world` smart contract: +To deploy the modified `hello-world` smart contract: 1. Verify you have Chainweaver open in the browser. @@ -386,129 +400,133 @@ To redeploy the `hello-world` smart contract: cd getting-started ``` -3. Redeploy the smart contract from the `getting-started` repository by running a command similar to the following: +3. Deploy the updated smart contract from the `getting-started` repository by running a command similar to the following: ```shell npm run start -- deploy \ - --keys "your-account-key" \ + --keys "" \ --predicate keys-all \ --file ./src/pact/hello-world.pact --sign-manually ``` + + If the account key includes the `k:` prefix, remove the prefix from the command-line argument. As you saw in the previous deployment, you'll copy and paste information between the terminal and the Chainweaver application. The instructions for signing the transaction using Chainweaver in the browser are also displayed in the terminal. -### Execute a write function - -1. Go to the "contracts" page in Chainweaver - -2. Write the following snippet - ```lisp - (free.hello-world.write-hello "Albert") - ``` - -3. Click "Deploy" + - Copy the command displayed in the terminal into the Signature Builder, then click **Review**. + - Verify the information displayed is correct, then click **Sign**. + - Copy the JSON from Signature Builder and paste it into the terminal. + - Copy the `requestKey` from the terminal. + - Open the Kadena block explorer, select Request Key, paste the `requestKey` from the terminal, then click **Search**. -4. Select Chain ID "0" + For the updated `hello-world` contract, you'll see the transaction result is **TableCreated**. -5. In "Transaction Sender" select "Account" that corresponds with the account - that you funded. It should be `k:` +### View the modified contract -6. Other settings should be correctly filled in as default +After you deploy the updated `hello-world` smart contract, you can view and interact with it using Chainweaver. -7. Click "next" - -8. In "Unrestricted Signing Keys" select the `public-key` of your account - -9. Click "next" - -10. You'll see a Notice: +To view the `hello-world` smart contract: - > A 'Gas Payer' has not been selected for this transaction. Are you sure - > this is correct? +1. In Chainweaver, click **Contracts** in the navigation panel. - You can safely ignore this, as the gas-payment will be done by the - unrestricted signer +2. Click **Module Explorer**. -11. Click "submit". Now that you have written to the table, we can read from the - table +3. Under Deployed Contracts, search for the `hello-world` contract. -### Read from the table +4. Click **View** and note that the new contract has two new functions—`say-hello` and `write-hello`. + + The `say-hello` function reads from the table and the `write-hello` function writes to the table. -Execute the following function, and deploy to read the keys from the table. +### Execute a write function -> **Note:** this function costs a lot as this is not something you'd usually do -> in a regular transaction. +1. Click **Contracts** in the Chainweaver navigation panel. -1. Paste the snippet in the editor - ```lisp - (map (read free.hello-world.hello-world-table) (keys free.hello-world.hello-world-table)) - ``` -2. Click "deploy" -3. Change the Chain ID to 0 (as we only deployed the contract on Chain 0) -4. Change the gas limit to `99999` -5. Click next to the end -6. In "Raw Response" you should be able to see - [{"text": "Hello, Albert!"}] +2. In the editor, type the following code: + + ```lisp + (free.hello-world.write-hello "Everyone") + ``` -## Further reading +3. Click **Deploy**. -Get started with the basics of Pact by reading the -[Welcome to Pact](https://docs.kadena.io/learn-pact/beginner/welcome-to-pact) -docs. +4. In the Configuration section of the Transaction Details: + + - Under Destination, select Chain ID **0**. + - Under Transaction Sender, select account with the public key that matches the account that you funded. + The account format uses a `k:` followed by the public key for your account. + - Use the default settings for the remaining fields. -[Reference documentation of Pact](https://docs.kadena.io/pact/reference) +5. Click **Next**. -A very good and complete tutorial on learning pact, with real world scenario's, -is the -[Real World Pact series of Thomas Honeyman](https://github.com/thomashoneyman/real-world-pact#real-world-pact) +6. Under Unrestricted Signing Keys, check the public key of your account, then click **Next**. + + After you click Next, the transaction Preview displays a notice that a Gas Payer has not been selected for the transaction. + You can ignore this notice because you have set the unrestricted signer for this transaction to use your public key. - +8. Wait for the transaction result **Successful Server result: "Write succeeded"**, then click **Done**. + +### Read from the table - +**Note:** This function call is expensive because it isn't something you'd do in a typical transaction. - +2. Click **Deploy**. - +4. Set the **Gas Limit Units** to `99999`. - +6. Check the Raw Response and verify that you see the following: + + [{"text": "Hello, Everyone!"}] - +If you want to run through this tutorial more than once, keep in mind that after you deploy a contract it remains on the network. +If you want to experiment with writing and deploying contracts, you should periodically reset the development network to a clean state to avoid errors. +To shut down the development network, you can run the following command: - +To completely remove the development network from your local computer, you can run commands similar to the following: - +## Next steps - +- Setting up a local development network. +- Creating a wallet account with a public and secret key. +- Funding your account with coins from a predefined account application. +- Deploying a simple smart contract. +- Using Chainweaver and the Kadena block explorer to interact with the blockchain and view information about transactions. +- Executing the write and read functions from a smart contract on the blockchain. - +- [Welcome to Pact](https://docs.kadena.io/learn-pact/beginner/welcome-to-pact). +- [Real World Pact](https://github.com/thomashoneyman/real-world-pact#real-world-pact) tutorial series by Thomas Honeyman. +- [Language Reference](https://docs.kadena.io/pact/reference). From c340b72e718c36261c2bd2b8da72383600bb44a2 Mon Sep 17 00:00:00 2001 From: Lisa Gunn Date: Mon, 20 Nov 2023 13:33:27 -0800 Subject: [PATCH 05/10] Modify secondary landing page, replace 10 minute quick start, update text --- packages/apps/docs/src/pages/build/index.tsx | 21 +- packages/apps/docs/src/pages/quick-start.md | 532 ------------------- 2 files changed, 10 insertions(+), 543 deletions(-) delete mode 100644 packages/apps/docs/src/pages/quick-start.md diff --git a/packages/apps/docs/src/pages/build/index.tsx b/packages/apps/docs/src/pages/build/index.tsx index 5d408ca405..3668cd94dc 100644 --- a/packages/apps/docs/src/pages/build/index.tsx +++ b/packages/apps/docs/src/pages/build/index.tsx @@ -36,19 +36,18 @@ const Home: FC = ({ blogPosts, popularPages }) => { - Getting started tutorial + Get started with tutorials - Getting started is simple. Building useful applications on a - blockchain doesn’t have to be hard or expensive. This Developer - Quickstart is designed to remove the friction from onboarding so - that you can understand how to build with Kadena quickly and - easily. + Building applications to run on a blockchain doesn't have to be hard, time-consuming, or expensive. + Get started with the basics through hands-on tutorials. Learn how to set up a development network, + create and fund a development wallet, deploy a smart contract, and more. + Take the first step by clicking Quick start. @@ -67,14 +66,14 @@ const Home: FC = ({ blogPosts, popularPages }) => { - 10 minute quick start + Quick start " --predicate "keys-all" - ``` - - In this command, specify the public key for the account you copied from Chainweaver for the `--keys` command-line option. - If the account key you copied includes the `k:` prefix, remove the prefix from the command-line argument. - The combination of the `keys` and `predicate` create a **keyset** that is used to safeguard your account. - You'll learn more about keysets in other tutorials. - -2. Open the [Kadena Block Explorer](http://localhost:8080/explorer/) to search for the transaction using the account you copied from Chainweaver. - -3. In Chainweaver, click **Refresh** to update the account balance. - -## Deploy a contract - -Now that you have a funded account, you can use that account and public key to deploy a simple `hello world` smart contract—written in the Kadena programming language, Pact—on the development network. -You'll learn more about Pact in other tutorials, but for now, you can deploy a predefined smart contract that looks like this: - -```lisp -(namespace 'free) -(module hello-world GOVERNANCE - (defcap GOVERNANCE () true) - (defun say-hello(name:string) - (format "Hello, {}! ~ from: ${publicKey}" [name]) - ) -) -``` - -To deploy the smart contract: - -1. Verify you have Chainweaver open in the browser. - -2. Open a terminal shell on your computer. - -1. Change to the root of the `getting-started` repository, if necessary, by running the following command: - - ```shell - cd getting-started - ``` - -3. Deploy the smart contract from the `getting-started` repository by running a command similar to the following: - - ```shell - npm run start -- deploy --keys "" --predicate "keys-all" --sign-manually - ``` - - In the next steps, you copy and paste information between the terminal and the Chainweaver application. - The instructions for signing the transaction using Chainweaver in the browser are also displayed in the terminal. - -1. In Chainweaver, click **SigBuilder** in the navigation panel. - -2. Copy and paste the transaction information displayed in the terminal into the Signature Builder, then click **Review**. - -3. Verify that the hash matches the hash displayed in the terminal to ensure you're signing the transaction you expect to sign, then click **Details**. - -4. Scroll to locate the **Signers** section of the transaction and verify that your public key is listed, then click **Sign**. - -5. Copy the full Command JSON and paste it into the terminal. - - After you enter this command, the terminal displays information about the transaction including a `requestKey`. - You can click **Done** in Chainweaver to close the Signature Builder. - -6. Copy the `requestKey` from the terminal. - -7. Open the [Kadena block explorer](http://localhost:8080/explorer), select **Request Key**, paste the `requestKey` from the terminal, then click **Search** - - In the Transaction Results, you'll see a result similar to the following: - - Loaded module free.hello-world, hash -pMyUsZtHx8ThNr3zlzPVxdZJa-aJTK29skwWOu9APw - -Now that you have uploaded the smart contract, you can interact with it on the development network. - -## View the smart contract - -After you deploy the `hello-world` smart contract, you can view and interact with it on the development network using Chainweaver. - -To view the `hello-world` smart contract: - -1. In Chainweaver, click **Contracts** in the navigation panel. - - After you click Contracts, Chainweaver displays two working areas. - The left side displays a sample contract in an editor that you can use to view and edit contract code and execute commands interactively. - The right side provides controls that enable you to navigate between contracts, view contract details, and test operations for contracts you have deployed. - -2. On the right side of Contracts, click **Module Explorer**. - -3. Under Deployed Contracts, search for the `hello-world` contract. - -4. Click **View** to display details about the smart contract. - For example, you can see that this contract has one function—`say-hello`—defined. - -## Execute a read-only command - -On the left side of the Contracts tab, you can write commands you want to execute on the blockchain. -Most commands require you to pay a transaction fee because they change the state of the information stored in the blockchain. -However, you can also write commands that only **read** information from the blockchain. -Read-only commands don't require transaction fees. - -To execute a command using the `hello-world` contract: - -1. In the left side under Contracts, remove the sample contract displayed, then type the following command: - - ```lisp - (free.hello-world.say-hello "World") - ``` - -2. Click **Deploy** to display the transaction details, then click **Next**. - -3. Review the signing information, but leave the Signing Key empty because you're executing a read-only command, then click **Next**. - - After you click Next, You'll see an error message that "A 'Gas Payer' has not been selected for this transaction. Are you sure this is correct?" - You can ignore this message because you're executing a read-only command. - -4. Scroll to see the Raw Response: - - - -## Write to the blockchain - -You've actually already written to the blockchain by deploying your `hello-world` smart contract. -You changed the **state** of the blockchain from not having the `hello-world` contract to having the `hello-world` contract included in a specific block. -However, that state change transaction didn't take place from within the context of the smart contract itself. -No contract logic was executed in the transaction. - -To illustrate how you can change the state of information stored on the blockchain using the logic in a smart contract, you first need to modify the code in the `hello-world` smart contract. -The modified version of the smart contract looks like this: - -```lisp -(namespace 'free) -(module hello-world G - (defcap G () true) - - (defschema hello-world-schema - @doc "The schema for hello world" - - text:string) - - (deftable hello-world-table:{hello-world-schema}) - - (defun say-hello(name:string) - (format "Hello, {}!" [name])) - - (defun write-hello(name:string) - (write hello-world-table name - { "text": (say-hello name) })) - -) - -(create-table hello-world-table) -``` - -### Review contract changes - -Before moving on, let's take a closer look at what's changed in the sample `hello-world` contract. - -The updated `hello-world` contract creates a simple schema of what you want deployed on the blockchain. -This schema assigns a value to each key when you execute the `(write

{ })` command. -Anything between the curly braces (`{ }`) must comply with the schema. - -The schema for this contract is defined in the following lines: - -```lisp -(defschema hello-world-schema - @doc "The schema for hello world" - - text:string) -``` - -The updated contract also includes a function that allows you to write to the schema in the following lines: - -```lisp -(defun write-hello(name:string) - (write hello-world-table name - { "text": (say-hello name) })) -``` - -### Deploy the modified contract - -After making these changes, you need to redeploy the modified contract. - -To deploy the modified `hello-world` smart contract: - -1. Verify you have Chainweaver open in the browser. - -2. Open a terminal shell on your computer. - -1. Change to the root of the `getting-started` repository, if necessary, by running the following command: - - ```shell - cd getting-started - ``` - -3. Deploy the updated smart contract from the `getting-started` repository by running a command similar to the following: - - ```shell - npm run start -- deploy \ - --keys "" \ - --predicate keys-all \ - --file ./src/pact/hello-world.pact - --sign-manually - ``` - - If the account key includes the `k:` prefix, remove the prefix from the command-line argument. - - As you saw in the previous deployment, you'll copy and paste information between the terminal and the Chainweaver application. - The instructions for signing the transaction using Chainweaver in the browser are also displayed in the terminal. - - - Copy the command displayed in the terminal into the Signature Builder, then click **Review**. - - Verify the information displayed is correct, then click **Sign**. - - Copy the JSON from Signature Builder and paste it into the terminal. - - Copy the `requestKey` from the terminal. - - Open the Kadena block explorer, select Request Key, paste the `requestKey` from the terminal, then click **Search**. - - For the updated `hello-world` contract, you'll see the transaction result is **TableCreated**. - -### View the modified contract - -After you deploy the updated `hello-world` smart contract, you can view and interact with it using Chainweaver. - -To view the `hello-world` smart contract: - -1. In Chainweaver, click **Contracts** in the navigation panel. - -2. Click **Module Explorer**. - -3. Under Deployed Contracts, search for the `hello-world` contract. - -4. Click **View** and note that the new contract has two new functions—`say-hello` and `write-hello`. - - The `say-hello` function reads from the table and the `write-hello` function writes to the table. - -### Execute a write function - -1. Click **Contracts** in the Chainweaver navigation panel. - -2. In the editor, type the following code: - - ```lisp - (free.hello-world.write-hello "Everyone") - ``` - -3. Click **Deploy**. - -4. In the Configuration section of the Transaction Details: - - - Under Destination, select Chain ID **0**. - - Under Transaction Sender, select account with the public key that matches the account that you funded. - The account format uses a `k:` followed by the public key for your account. - - Use the default settings for the remaining fields. - -5. Click **Next**. - -6. Under Unrestricted Signing Keys, check the public key of your account, then click **Next**. - - After you click Next, the transaction Preview displays a notice that a Gas Payer has not been selected for the transaction. - You can ignore this notice because you have set the unrestricted signer for this transaction to use your public key. - -7. Click **Submit**. - -8. Wait for the transaction result **Successful Server result: "Write succeeded"**, then click **Done**. - -### Read from the table - -Now that you have written to the table, you can read from the table. - -**Note:** This function call is expensive because it isn't something you'd do in a typical transaction. - -1. In the editor, type the following code: - - ```lisp - (map (read free.hello-world.hello-world-table) (keys free.hello-world.hello-world-table)) - ``` - -2. Click **Deploy**. - -3. Select the Chain ID **0** because the contract was deployed on Chain 0. - -4. Set the **Gas Limit Units** to `99999`. - -5. Click **Next** to display the transaction signing fields, then click **Next** again. - -6. Check the Raw Response and verify that you see the following: - - [{"text": "Hello, Everyone!"}] - -## Reset the development network - -If you want to run through this tutorial more than once, keep in mind that after you deploy a contract it remains on the network. -If you want to experiment with writing and deploying contracts, you should periodically reset the development network to a clean state to avoid errors. -To shut down the development network, you can run the following command: - -```docker -docker stop devnet -``` - -To completely remove the development network from your local computer, you can run commands similar to the following: - -```docker -docker stop -docker rm -docker volume rm kadena_devnet -``` - -## Next steps - -In this tutorial, you learned a little about a lot of topics. -For example, you learned some basic terminology for building on the Kadena blockchain. -You also had some hands-on experience with the following tasks: - -- Setting up a local development network. -- Creating a wallet account with a public and secret key. -- Funding your account with coins from a predefined account application. -- Deploying a simple smart contract. -- Using Chainweaver and the Kadena block explorer to interact with the blockchain and view information about transactions. -- Executing the write and read functions from a smart contract on the blockchain. - -The most important next step from here is to start learning how to write your own smart contracts using the Pact programming language. -The following are the best resources for learning Pact: - -- [Welcome to Pact](https://docs.kadena.io/learn-pact/beginner/welcome-to-pact). -- [Real World Pact](https://github.com/thomashoneyman/real-world-pact#real-world-pact) tutorial series by Thomas Honeyman. -- [Language Reference](https://docs.kadena.io/pact/reference). From 94cdf8d1366687308fc27842b36a44d079bd8866 Mon Sep 17 00:00:00 2001 From: Lisa Gunn <44206363+lsgunnlsgunn@users.noreply.github.com> Date: Mon, 20 Nov 2023 14:15:52 -0800 Subject: [PATCH 06/10] Create sixty-olives-perform.md --- .changeset/sixty-olives-perform.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/sixty-olives-perform.md diff --git a/.changeset/sixty-olives-perform.md b/.changeset/sixty-olives-perform.md new file mode 100644 index 0000000000..535d07a8b2 --- /dev/null +++ b/.changeset/sixty-olives-perform.md @@ -0,0 +1,5 @@ +--- +"@kadena/docs": patch +--- + +[docs] Replace 10 minute quick start, update Build home page with text changes. From 9f501518cb84d52eff5f6f40630516d0e015e2d3 Mon Sep 17 00:00:00 2001 From: Steven Straatemans Date: Tue, 21 Nov 2023 09:48:17 +0100 Subject: [PATCH 07/10] fix prettier --- packages/apps/docs/src/pages/build/index.tsx | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/apps/docs/src/pages/build/index.tsx b/packages/apps/docs/src/pages/build/index.tsx index 3668cd94dc..04f707c349 100644 --- a/packages/apps/docs/src/pages/build/index.tsx +++ b/packages/apps/docs/src/pages/build/index.tsx @@ -39,16 +39,15 @@ const Home: FC = ({ blogPosts, popularPages }) => { Get started with tutorials - Building applications to run on a blockchain doesn't have to be hard, time-consuming, or expensive. - Get started with the basics through hands-on tutorials. Learn how to set up a development network, - create and fund a development wallet, deploy a smart contract, and more. - Take the first step by clicking Quick start. + Building applications to run on a blockchain doesn't have to be + hard, time-consuming, or expensive. Get started with the basics + through hands-on tutorials. Learn how to set up a development + network, create and fund a development wallet, deploy a smart + contract, and more. Take the first step by clicking Quick start. From 9a2b2ca782d71d5606f93bb1fe57b0d37e8a870a Mon Sep 17 00:00:00 2001 From: Steven Straatemans Date: Tue, 21 Nov 2023 10:02:00 +0100 Subject: [PATCH 08/10] fix lint --- packages/apps/docs/src/pages/build/index.tsx | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/apps/docs/src/pages/build/index.tsx b/packages/apps/docs/src/pages/build/index.tsx index 04f707c349..98fb1cda90 100644 --- a/packages/apps/docs/src/pages/build/index.tsx +++ b/packages/apps/docs/src/pages/build/index.tsx @@ -39,11 +39,12 @@ const Home: FC = ({ blogPosts, popularPages }) => { Get started with tutorials - Building applications to run on a blockchain doesn't have to be - hard, time-consuming, or expensive. Get started with the basics - through hands-on tutorials. Learn how to set up a development - network, create and fund a development wallet, deploy a smart - contract, and more. Take the first step by clicking Quick start. + Building applications to run on a blockchain doesn't have + to be hard, time-consuming, or expensive. Get started with the + basics through hands-on tutorials. Learn how to set up a + development network, create and fund a development wallet, + deploy a smart contract, and more. Take the first step by + clicking Quick start.
{ })` command. +Anything between the curly braces (`{ }`) must comply with the schema. + +The schema for this contract is defined in the following lines: + +```pact +(defschema hello-world-schema + @doc "The schema for hello world" + + text:string) +``` + +The updated contract also includes a function that allows you to write to the schema in the following lines: + +```pact +(defun write-hello(name:string) + (write hello-world-table name + { "text": (say-hello name) })) +``` + +### Deploy the modified contract + +After making these changes, you need to redeploy the modified contract. + +To deploy the modified `hello-world` smart contract: + +1. Verify you have Chainweaver open in the browser. + +2. Open a terminal shell on your computer. + +1. Change to the root of the `getting-started` repository, if necessary, by running the following command: + + ```shell + cd getting-started + ``` + +3. Deploy the updated smart contract from the `getting-started` repository by running a command similar to the following: + + ```shell + npm run start -- deploy \ + --keys "" \ + --predicate keys-all \ + --file ./src/pact/hello-world.pact + --sign-manually + ``` + + If the account key includes the `k:` prefix, remove the prefix from the command-line argument. + + As you saw in the previous deployment, you'll copy and paste information between the terminal and the Chainweaver application. + The instructions for signing the transaction using Chainweaver in the browser are also displayed in the terminal. + + - Copy the command displayed in the terminal into the Signature Builder, then click **Review**. + - Verify the information displayed is correct, then click **Sign**. + - Copy the JSON from Signature Builder and paste it into the terminal. + - Copy the `requestKey` from the terminal. + - Open the Kadena block explorer, select Request Key, paste the `requestKey` from the terminal, then click **Search**. + + For the updated `hello-world` contract, you'll see the transaction result is **TableCreated**. + +### View the modified contract + +After you deploy the updated `hello-world` smart contract, you can view and interact with it using Chainweaver. + +To view the `hello-world` smart contract: + +1. In Chainweaver, click **Contracts** in the navigation panel. + +2. Click **Module Explorer**. + +3. Under Deployed Contracts, search for the `hello-world` contract. + +4. Click **View** and note that the new contract has two new functions—`say-hello` and `write-hello`. + + ![Updated "Hello, World!" smart contract](/assets/docs/hello-world-quickstart/updated-two-functions.png) + + The `say-hello` function reads from the table and the `write-hello` function writes to the table. + +### Execute a write function + +1. Click **Contracts** in the Chainweaver navigation panel. + +2. In the editor, type the following code: + + ```pact + (free.hello-world.write-hello "Everyone") + ``` + +3. Click **Deploy**. + +4. In the Configuration section of the Transaction Details: + + - Under Destination, select Chain ID **0**. + - Under Transaction Sender, select account with the public key that matches the account that you funded. + The account format uses a `k:` followed by the public key for your account. + - Use the default settings for the remaining fields. + +5. Click **Next**. + +6. Under Unrestricted Signing Keys, check the public key of your account, then click **Next**. + + After you click Next, the transaction Preview displays a notice that a Gas Payer has not been selected for the transaction. + You can ignore this notice because you have set the unrestricted signer for this transaction to use your public key. + +7. Click **Submit**. + +8. Wait for the transaction result **Successful Server result: "Write succeeded"**, then click **Done**. + +### Read from the table + +Now that you have written to the table, you can read from the table. + +**Note:** This function call is expensive because it isn't something you'd do in a typical transaction. + +1. In the editor, type the following code: + + ```pact + (map (read free.hello-world.hello-world-table) (keys free.hello-world.hello-world-table)) + ``` + +2. Click **Deploy**. + +3. Select the Chain ID **0** because the contract was deployed on Chain 0. + +4. Set the **Gas Limit Units** to `99999`. + +5. Click **Next** to display the transaction signing fields, then click **Next** again. + +6. Check the Raw Response and verify that you see the following: + + ![Updated "Hello, World!" smart contract](/assets/docs/hello-world-quickstart/hello-everyone.png) + +## Reset the development network + +If you want to run through this tutorial more than once, keep in mind that after you deploy a contract it remains on the network. +If you want to experiment with writing and deploying contracts, you should periodically reset the development network to a clean state to avoid errors. +To shut down the development network, you can run the following command: + +```docker +docker stop devnet +``` + +To completely remove the development network from your local computer, you can run commands similar to the following: + +```docker +docker stop +docker rm +docker volume rm kadena_devnet +``` + +## Next steps + +In this tutorial, you learned a little about a lot of topics. +For example, you learned some basic terminology for building on the Kadena blockchain. +You also had some hands-on experience with the following tasks: + +- Setting up a local development network. +- Creating a wallet account with a public and secret key. +- Funding your account with coins from a predefined account application. +- Deploying a simple smart contract. +- Using Chainweaver and the Kadena block explorer to interact with the blockchain and view information about transactions. +- Executing the write and read functions from a smart contract on the blockchain. + +The most important next step from here is to start learning how to write your own smart contracts using the Pact programming language. +The following are the best resources for learning Pact: + +- [Welcome to Pact](https://docs.kadena.io/learn-pact/beginner/welcome-to-pact). +- [Real World Pact](https://github.com/thomashoneyman/real-world-pact#real-world-pact) tutorial series by Thomas Honeyman. +- [Language Reference](https://docs.kadena.io/pact/reference).