From f026ec0d8a0360ecc8c5dc9dc4720f0837988013 Mon Sep 17 00:00:00 2001 From: Oxana Selivanova <39991771+Oxydixi@users.noreply.github.com> Date: Thu, 22 Feb 2024 14:51:01 +0300 Subject: [PATCH] Dev (#112) --- .../\321\201onnection_to_network.md" | 95 ++++---- docs/images/n_Acki_Nacki_c_t_n_account_1.jpg | Bin 0 -> 146691 bytes docs/images/n_Acki_Nacki_c_t_n_account_2.jpg | Bin 0 -> 217678 bytes docs/images/n_Acki_Nacki_c_t_n_call_func.jpg | Bin 0 -> 138227 bytes .../images/n_Acki_Nacki_c_t_n_call_getter.jpg | Bin 0 -> 66007 bytes docs/images/n_Acki_Nacki_c_t_n_deploy.jpg | Bin 0 -> 177097 bytes docs/images/n_Acki_Nacki_c_t_n_explorer.jpg | Bin 0 -> 85830 bytes docs/images/n_Acki_Nacki_c_t_n_genn_addr.jpg | Bin 0 -> 231034 bytes docs/images/n_Acki_Nacki_c_t_n_graphql.jpg | Bin 0 -> 220644 bytes .../\321\201onnection_to_network/index.html" | 219 +++++++++--------- site/images/n_Acki_Nacki_c_t_n_account_1.jpg | Bin 0 -> 146691 bytes site/images/n_Acki_Nacki_c_t_n_account_2.jpg | Bin 0 -> 217678 bytes site/images/n_Acki_Nacki_c_t_n_call_func.jpg | Bin 0 -> 138227 bytes .../images/n_Acki_Nacki_c_t_n_call_getter.jpg | Bin 0 -> 66007 bytes site/images/n_Acki_Nacki_c_t_n_deploy.jpg | Bin 0 -> 177097 bytes site/images/n_Acki_Nacki_c_t_n_explorer.jpg | Bin 0 -> 85830 bytes site/images/n_Acki_Nacki_c_t_n_genn_addr.jpg | Bin 0 -> 231034 bytes site/images/n_Acki_Nacki_c_t_n_graphql.jpg | Bin 0 -> 220644 bytes site/search/search_index.json | 2 +- site/sitemap.xml.gz | Bin 127 -> 127 bytes 20 files changed, 166 insertions(+), 150 deletions(-) create mode 100644 docs/images/n_Acki_Nacki_c_t_n_account_1.jpg create mode 100644 docs/images/n_Acki_Nacki_c_t_n_account_2.jpg create mode 100644 docs/images/n_Acki_Nacki_c_t_n_call_func.jpg create mode 100644 docs/images/n_Acki_Nacki_c_t_n_call_getter.jpg create mode 100644 docs/images/n_Acki_Nacki_c_t_n_deploy.jpg create mode 100644 docs/images/n_Acki_Nacki_c_t_n_explorer.jpg create mode 100644 docs/images/n_Acki_Nacki_c_t_n_genn_addr.jpg create mode 100644 docs/images/n_Acki_Nacki_c_t_n_graphql.jpg create mode 100644 site/images/n_Acki_Nacki_c_t_n_account_1.jpg create mode 100644 site/images/n_Acki_Nacki_c_t_n_account_2.jpg create mode 100644 site/images/n_Acki_Nacki_c_t_n_call_func.jpg create mode 100644 site/images/n_Acki_Nacki_c_t_n_call_getter.jpg create mode 100644 site/images/n_Acki_Nacki_c_t_n_deploy.jpg create mode 100644 site/images/n_Acki_Nacki_c_t_n_explorer.jpg create mode 100644 site/images/n_Acki_Nacki_c_t_n_genn_addr.jpg create mode 100644 site/images/n_Acki_Nacki_c_t_n_graphql.jpg diff --git "a/docs/acki-nacki/\321\201onnection_to_network.md" "b/docs/acki-nacki/\321\201onnection_to_network.md" index 37c01f1..3ec1d7f 100644 --- "a/docs/acki-nacki/\321\201onnection_to_network.md" +++ "b/docs/acki-nacki/\321\201onnection_to_network.md" @@ -26,9 +26,9 @@ You will learn how to: Download and install the TVM-CLI for the platform you need from [here](https://github.com/tvmlabs/tvm-cli/releases/tag/0.38.0) -### **Create helloWorld contract** +### **Create contract** -Create file `helloWorld.sol` with followed content: +Create file `helloWorld.sol` with following content: ```solidity pragma ton-solidity >= 0.35.0; @@ -52,10 +52,10 @@ contract helloWorld { require(msg.pubkey() == tvm.pubkey(), 102); // The current smart contract agrees to buy some gas to finish the // current transaction. This actions required to process external - // messages, which bring no value (henceno gas) with themselves. + // messages, which bring no value (hence no gas) with themselves. tvm.accept(); - timestamp = now; + timestamp = block.timestamp; } function renderHelloWorld () public pure returns (string) { @@ -70,7 +70,7 @@ contract helloWorld { // Tells to the TVM that we accept this message. tvm.accept(); // Update timestamp - timestamp = now; + timestamp = block.timestamp; } function sendValue(address dest, uint128 amount, bool bounce) public view { @@ -84,25 +84,25 @@ contract helloWorld { ### **Install Solidity compiler** -Download and install the Solidity compiler for required platform from [here](https://github.com/gosh-sh/TON-Solidity-Compiler/releases) + -Compile the contract using Solidity compiler: +Download and install the Solidity compiler for Linux from [here](https://github.com/gosh-sh/gosh/tree/dev/v6_x/v6.2.0/contracts/compiler) -```shell -solc helloWorld.sol -``` +*(For other platforms is coming soon)* -The compiler produces `helloWorld.code` and `helloWorld.abi.json` to be used in the following steps. +### **Compiling** -Assemble and link with a standard library into TVM bytecode: +Compile the contract using Solidity compiler: ```shell -tvm_linker compile helloWorld.code --lib /stdlib_sol.tvm +sold helloWorld.sol ``` -Binary code of your contract is recorded into `.tvc` file, where `` is a temporary address of the contract. +The compiler produces `helloWorld.code`, `helloWorld.tvc` and `helloWorld.abi.json` to be used in the following steps. + +Binary code of your contract is recorded into `helloWorld.tvc` file. ### **Deploy** @@ -121,11 +121,14 @@ tvm-cli config --url ackinacki-testnet.tvmlabs.dev 2) Generate address, keys and seed phrase for your contract: ```shell -tvm-cli genaddr .tvc helloWorld.abi.json --genkey helloWorld.keys.json +tvm-cli genaddr helloWorld.tvc --genkey helloWorld.keys.json ``` Address of your contract in the blockchain is located after `Raw address:` +![](../images/n_Acki_Nacki_c_t_n_genn_addr.jpg) + + !!! Warning "IMPORTANT" **Save this value** - you will need it to deploy your contract and to work with it. @@ -134,19 +137,18 @@ Address of your contract in the blockchain is located after `Raw address:` **Seed phrase** is also printed to stdout. **Key pair** will be generated and saved to the file **`helloWorld.keys.json`**. -!!! note - - You will need to send some tokens to the address before the actual deployment. Acki Nacki deploy is fee-based, so your new contract will be charged for this. 3) Get some test-tokens to your account. -We recommend creating a [Wallet contract](./#creating-your-own-giver) that will serve as your giver +!!! note -To replenish it, please contact us in [Channel on Telegram](https://t.me/+1tWNH2okaPthMWU0) + You will need to send some tokens to the address before the actual deployment. Acki Nacki deploy is fee-based, so your new contract will be charged for this. + ***(You will need about 10 tokens to deploy)*** -And transfer 10 tokens from your wallet to address +We recommend creating a [Wallet contract](./#creating-your-own-giver) that will serve as your giver. +To replenish it, please contact us in [Channel on Telegram](https://t.me/+1tWNH2okaPthMWU0). 4) Check the state of the pre-deployed contract. It should be `Uninit`: @@ -155,19 +157,35 @@ And transfer 10 tokens from your wallet to address tvm-cli account ``` +You will see something similar to the following: + +![](../images/n_Acki_Nacki_c_t_n_account_1.jpg) + 5) Deploy your contract to the early configured network with the following command: ```shell -tvm-cli deploy --abi helloWorld.abi.json --sign helloWorld.keys.json .tvc {} +tvm-cli deploy --abi helloWorld.abi.json --sign helloWorld.keys.json helloWorld.tvc {} ``` +!!! info + + If there are arguments in the contract constructor, then they must be specified in curly brackets + {} + + +![](../images/n_Acki_Nacki_c_t_n_deploy.jpg) + 6) Check the contract state again. This time, it is should be `Active`. +![](../images/n_Acki_Nacki_c_t_n_account_2.jpg) + ### **View contract information with Explorer** Go to [Aсki Naсki explorer](https://ackinacki-testnet.tvmlabs.dev/landing) and search for in search bar. Open your account page. You will need it later to see its transactions and messages, that we will produce in the next steps. +![](../images/n_Acki_Nacki_c_t_n_explorer.jpg) + ### **Explore contract information with GraphQL** Go to [GraphQL playground](https://ackinacki-testnet.tvmlabs.dev/graphql). @@ -191,25 +209,14 @@ query { } ``` -You will see: +You will see something that looks similar following: -```graphql -{ - "data": { - "accounts": [ - { - "acc_type_name": "Active", - "balance": "0x1db0832ba", - "code": "te6ccgECEwEAAnkABCj/AIrtUyDjAyDA/+MCIMD+4wLyCxECARICoiHbPNMAAY4SgQIA1xgg+QFY+EIg+GX5EPKo3tM/AY4d+EMhuSCfMCD4I4ED6KiCCBt3QKC53pMg+GPg8jTYMNMfAfgjvPK50x8B2zz4R27yfAUDATQi0NcLA6k4ANwhxwDcIdMfId0B2zz4R27yfAMDQCCCEDtj1H67joDgIIIQaBflNbuOgOAgghBotV8/uuMCCwYEAlgw+EFu4wD4RvJzcfhm0fhC8uBl+EUgbpIwcN74Qrry4Gb4APgj+GrbPH/4ZwUPAHjtRNAg10nCAY4U0//TP9MA1wsf+Gp/+GH4Zvhj+GKOG/QFcPhqcAGAQPQO8r3XC//4YnD4Y3D4Zn/4YeICKCCCEFTWvRi64wIgghBoF+U1uuMCCAcBSts8+EqNBHAAAAAAAAAAAAAAAAA6BflNYMjOIc8LH8lw+wB/+GcQAnIw0ds8IcD/jikj0NMB+kAwMcjPhyDOjQQAAAAAAAAAAAAAAAANTWvRiM8WIc8UyXD7AN4w4wB/+GcJDwECiAoAFGhlbGxvV29ybGQCKCCCEDcxLkW64wIgghA7Y9R+uuMCDgwDSDD4QW7jAPpA1w1/ldTR0NN/39cMAJXU0dDSAN/R2zzjAH/4ZxANDwBU+EUgbpIwcN74Qrry4Gb4AFRxIMjPhYDKAHPPQM4B+gKAa89AyXD7AF8DAkAw+EFu4wDR+EUgbpIwcN74Qrry4Gb4APgj+GrbPH/4ZxAPAC74QsjL//hDzws/+EbPCwD4SgHLH8ntVAAu7UTQ0//TP9MA1wsf+Gp/+GH4Zvhj+GIBCvSkIPShEgAA", - "code_hash": "c517820144a4daf5a3414c9233556b2b0ad34cdd228f200ea68a4c0327e0bd29", - "data": "te6ccgEBAQEALwAAWTgmICsSnqjAQbjUmmVVEmSPyUN30ZWKek/J9LMFHs97AAABesq/uBawfEB6wA==" - } - ] - } -} -``` +![](../images/n_Acki_Nacki_c_t_n_graphql.jpg) -You can specify any other fields in the result section that are available in GraphQL Schema. (Click `Docs` on the right side of your screen to explore it). +!!! info + + **You can specify any other fields in the result section that are available in GraphQL Schema.** + Click **`Docs`** on the right side of your screen to explore it. ### **Run a getter function** @@ -218,8 +225,9 @@ You can specify any other fields in the result section that are available in Gra tvm-cli run timestamp {} --abi helloWorld.abi.json ``` +for example, the `timestamp` method: - +![](../images/n_Acki_Nacki_c_t_n_call_getter.jpg) ### **Call function** @@ -227,6 +235,9 @@ tvm-cli run timestamp {} --abi helloWorld.abi.json tvm-cli call touch {} --abi helloWorld.abi.json --sign helloWorld.keys.json ``` +for example, the `touch` method: + +![](../images/n_Acki_Nacki_c_t_n_call_func.jpg) ### **Creating your own giver** To create your own giver, deploy (according to the instructions [above](./#create-helloworld-contract)) any contract of wallet, @@ -277,7 +288,7 @@ contract Wallet { Request test tokens [from us](https://t.me/+1tWNH2okaPthMWU0) for this wallet and pay for the deployment of contracts from this wallet in the future -### **Transfering tokens from own giver** +### **Transfer of tokens from own giver** ```shell tonos-cli call sendTransaction '{"dest":"DestAddress", "value":10000000000, "bounce":false}' --abi wallet.abi.json --sign wallet.keys.json diff --git a/docs/images/n_Acki_Nacki_c_t_n_account_1.jpg b/docs/images/n_Acki_Nacki_c_t_n_account_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..338df2ace4beaea0cf35ace1ef6e350e04067eb0 GIT binary patch literal 146691 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

Install TVM-CLI

Download and install the TVM-CLI for the platform you need from here

-

Create helloWorld contract

-

Create file helloWorld.sol with followed content:

+

Create contract

+

Create file helloWorld.sol with following content:

pragma ton-solidity >= 0.35.0;
 pragma AbiHeader expire;
 
@@ -1585,10 +1585,10 @@ 

Create helloWorld contract< require(msg.pubkey() == tvm.pubkey(), 102); // The current smart contract agrees to buy some gas to finish the // current transaction. This actions required to process external - // messages, which bring no value (henceno gas) with themselves. + // messages, which bring no value (hence no gas) with themselves. tvm.accept(); - timestamp = now; + timestamp = block.timestamp; } function renderHelloWorld () public pure returns (string) { @@ -1603,7 +1603,7 @@

Create helloWorld contract< // Tells to the TVM that we accept this message. tvm.accept(); // Update timestamp - timestamp = now; + timestamp = block.timestamp; } function sendValue(address dest, uint128 amount, bool bounce) public view { @@ -1615,28 +1615,31 @@

Create helloWorld contract< }

Install Solidity compiler

-

Download and install the Solidity compiler for required platform from here

+ + +

Download and install the Solidity compiler for Linux from here

+

(For other platforms is coming soon)

Compiling

Compile the contract using Solidity compiler:

-
solc helloWorld.sol
+
sold helloWorld.sol
 
-

The compiler produces helloWorld.code and helloWorld.abi.json to be used in the following steps.

-

Assemble and link with a standard library into TVM bytecode:

-
tvm_linker compile helloWorld.code --lib <path-to>/stdlib_sol.tvm
-
-

Binary code of your contract is recorded into <helloWorldAddress>.tvc file, where <helloWorldAddress> is a temporary address of the contract.

+

The compiler produces helloWorld.code, helloWorld.tvc and helloWorld.abi.json to be used in the following steps.

+

Binary code of your contract is recorded into helloWorld.tvc file.

Deploy

Let's deploy the contract to Acki Nacki development blockchain
at ackinacki-testnet.tvmlabs.dev

1) Make sure TVM-CLI is in $PATH:

-
export PATH=$PATH:<PATH_TO>/tvm-cli
-
-tvm-cli config --url ackinacki-testnet.tvmlabs.dev
+
export PATH=$PATH:<PATH_TO>/tvm-cli
+
+tvm-cli config --url ackinacki-testnet.tvmlabs.dev
 

2) Generate address, keys and seed phrase for your contract:

-
tvm-cli genaddr <helloWorldAddress>.tvc helloWorld.abi.json --genkey helloWorld.keys.json
+
tvm-cli genaddr helloWorld.tvc --genkey helloWorld.keys.json
 

Address of your contract in the blockchain is located after Raw address:

+

IMPORTANT

Save this value - you will need it to deploy your contract and to work with it.
@@ -1644,113 +1647,115 @@

Deploy

Seed phrase is also printed to stdout.
Key pair will be generated and saved to the file helloWorld.keys.json.

+

3) Get some test-tokens to your account.

Note

-

You will need to send some tokens to the address before the actual deployment. Acki Nacki deploy is fee-based, so your new contract will be charged for this.

+

You will need to send some tokens to the address before the actual deployment. Acki Nacki deploy is fee-based, so your new contract will be charged for this.
+(You will need about 10 tokens to deploy)

-

3) Get some test-tokens to your account.

-

We recommend creating a Wallet contract that will serve as your giver

-

To replenish it, please contact us in Channel on Telegram

-

And transfer 10 tokens from your wallet to address

+

We recommend creating a Wallet contract that will serve as your giver.

+

To replenish it, please contact us in Channel on Telegram.

4) Check the state of the pre-deployed contract. It should be Uninit:

-
tvm-cli account <YourAddress>
+
tvm-cli account <YourAddress>
 
+

You will see something similar to the following:

+

5) Deploy your contract to the early configured network with the following command:

-
tvm-cli deploy --abi helloWorld.abi.json --sign helloWorld.keys.json <helloWorldAddress>.tvc {<constructor_arguments>}
+
tvm-cli deploy --abi helloWorld.abi.json --sign helloWorld.keys.json helloWorld.tvc {}
 
+
+

Info

+

If there are arguments in the contract constructor, then they must be specified in curly brackets

+
+

6) Check the contract state again. This time, it is should be Active.

+

View contract information with Explorer

Go to Aсki Naсki explorer and search for in search bar.
Open your account page. You will need it later to see its transactions and messages, that we will produce in the next steps.

+

Explore contract information with GraphQL

Go to GraphQL playground.
Enter in the left pane and click Run button (replace the contract's address with the one you got in the previous steps).

-
query {
-  accounts(
-    filter: {
-      id: {
-        eq: "<YourAddress>"
-      }
-    }
-  ) {
-    acc_type_name
-    balance
-    code
-    code_hash
-    data
-  }
-}
-
-

You will see:

-
{
-  "data": {
-    "accounts": [
-      {
-        "acc_type_name": "Active",
-        "balance": "0x1db0832ba",
-        "code": "te6ccgECEwEAAnkABCj/AIrtUyDjAyDA/+MCIMD+4wLyCxECARICoiHbPNMAAY4SgQIA1xgg+QFY+EIg+GX5EPKo3tM/AY4d+EMhuSCfMCD4I4ED6KiCCBt3QKC53pMg+GPg8jTYMNMfAfgjvPK50x8B2zz4R27yfAUDATQi0NcLA6k4ANwhxwDcIdMfId0B2zz4R27yfAMDQCCCEDtj1H67joDgIIIQaBflNbuOgOAgghBotV8/uuMCCwYEAlgw+EFu4wD4RvJzcfhm0fhC8uBl+EUgbpIwcN74Qrry4Gb4APgj+GrbPH/4ZwUPAHjtRNAg10nCAY4U0//TP9MA1wsf+Gp/+GH4Zvhj+GKOG/QFcPhqcAGAQPQO8r3XC//4YnD4Y3D4Zn/4YeICKCCCEFTWvRi64wIgghBoF+U1uuMCCAcBSts8+EqNBHAAAAAAAAAAAAAAAAA6BflNYMjOIc8LH8lw+wB/+GcQAnIw0ds8IcD/jikj0NMB+kAwMcjPhyDOjQQAAAAAAAAAAAAAAAANTWvRiM8WIc8UyXD7AN4w4wB/+GcJDwECiAoAFGhlbGxvV29ybGQCKCCCEDcxLkW64wIgghA7Y9R+uuMCDgwDSDD4QW7jAPpA1w1/ldTR0NN/39cMAJXU0dDSAN/R2zzjAH/4ZxANDwBU+EUgbpIwcN74Qrry4Gb4AFRxIMjPhYDKAHPPQM4B+gKAa89AyXD7AF8DAkAw+EFu4wDR+EUgbpIwcN74Qrry4Gb4APgj+GrbPH/4ZxAPAC74QsjL//hDzws/+EbPCwD4SgHLH8ntVAAu7UTQ0//TP9MA1wsf+Gp/+GH4Zvhj+GIBCvSkIPShEgAA",
-        "code_hash": "c517820144a4daf5a3414c9233556b2b0ad34cdd228f200ea68a4c0327e0bd29",
-        "data": "te6ccgEBAQEALwAAWTgmICsSnqjAQbjUmmVVEmSPyUN30ZWKek/J9LMFHs97AAABesq/uBawfEB6wA=="
-      }
-    ]
-  }
-}
+
query {
+  accounts(
+    filter: {
+      id: {
+        eq: "<YourAddress>"
+      }
+    }
+  ) {
+    acc_type_name
+    balance
+    code
+    code_hash
+    data
+  }
+}
 
-

You can specify any other fields in the result section that are available in GraphQL Schema. (Click Docs on the right side of your screen to explore it).

+

You will see something that looks similar following:

+

+
+

Info

+

You can specify any other fields in the result section that are available in GraphQL Schema.
+Click Docs on the right side of your screen to explore it.

+

Run a getter function

-
tvm-cli run <YourAddress> timestamp {} --abi helloWorld.abi.json
+

tvm-cli run <YourAddress> timestamp {} --abi helloWorld.abi.json
 
- - +for example, the timestamp method:

+

Call function

-
tvm-cli call <YourAddress> touch {} --abi helloWorld.abi.json --sign helloWorld.keys.json
+
tvm-cli call <YourAddress> touch {} --abi helloWorld.abi.json --sign helloWorld.keys.json
 
+

for example, the touch method:

+

Creating your own giver

To create your own giver, deploy (according to the instructions above) any contract of wallet,
for example this one:

-
pragma solidity >= 0.6.0;
-
-/// @title Simple wallet
-/// @author Tonlabs
-contract Wallet {
-    // Modifier that allows function to accept external call only if it was signed
-    // with contract owner's public key.
-    modifier checkOwnerAndAccept {
-        // Check that inbound message was signed with owner's public key.
-        // Runtime function that obtains sender's public key.
-        require(msg.pubkey() == tvm.pubkey(), 100);
-
-        // Runtime function that allows contract to process inbound messages spending
-        // its own resources (it's necessary if contract should process all inbound messages,
-        // not only those that carry value with them).
-        tvm.accept();
-        _;
-    }
-
-    /*
-     * Public functions
-     */
-
-    /// @dev Contract constructor.
-    constructor() public checkOwnerAndAccept { }
-
-    /// @dev Allows to transfer grams to the destination account.
-    /// @param dest Transfer target address.
-    /// @param value Nanograms value to transfer.
-    /// @param bounce Flag that enables bounce message in case of target contract error.
-    function sendTransaction(address payable dest, uint128 value, bool bounce) public view checkOwnerAndAccept {
-        // Runtime function that allows to make a transfer with arbitrary settings.
-        dest.transfer(value, bounce, 3);
-    }
-
-    // Function to receive plain transfers.
-    receive() external payable {
-    }
-}
+
pragma solidity >= 0.6.0;
+
+/// @title Simple wallet
+/// @author Tonlabs
+contract Wallet {
+    // Modifier that allows function to accept external call only if it was signed
+    // with contract owner's public key.
+    modifier checkOwnerAndAccept {
+        // Check that inbound message was signed with owner's public key.
+        // Runtime function that obtains sender's public key.
+        require(msg.pubkey() == tvm.pubkey(), 100);
+
+        // Runtime function that allows contract to process inbound messages spending
+        // its own resources (it's necessary if contract should process all inbound messages,
+        // not only those that carry value with them).
+        tvm.accept();
+        _;
+    }
+
+    /*
+     * Public functions
+     */
+
+    /// @dev Contract constructor.
+    constructor() public checkOwnerAndAccept { }
+
+    /// @dev Allows to transfer grams to the destination account.
+    /// @param dest Transfer target address.
+    /// @param value Nanograms value to transfer.
+    /// @param bounce Flag that enables bounce message in case of target contract error.
+    function sendTransaction(address payable dest, uint128 value, bool bounce) public view checkOwnerAndAccept {
+        // Runtime function that allows to make a transfer with arbitrary settings.
+        dest.transfer(value, bounce, 3);
+    }
+
+    // Function to receive plain transfers.
+    receive() external payable {
+    }
+}
 

Request test tokens from us for this wallet and pay for the deployment of contracts from this wallet in the future

-

Transfering tokens from own giver

-
tonos-cli call <walletAddress> sendTransaction '{"dest":"DestAddress", "value":10000000000, "bounce":false}' --abi wallet.abi.json --sign wallet.keys.json
+

Transfer of tokens from own giver

+
tonos-cli call <walletAddress> sendTransaction '{"dest":"DestAddress", "value":10000000000, "bounce":false}' --abi wallet.abi.json --sign wallet.keys.json
 

Info

diff --git a/site/images/n_Acki_Nacki_c_t_n_account_1.jpg b/site/images/n_Acki_Nacki_c_t_n_account_1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..338df2ace4beaea0cf35ace1ef6e350e04067eb0 GIT binary patch literal 146691 zcmbrl1x#g45H5I;!QBRTcXxLm+}+*%0)xA|ySqCxxVyu>FgSw`uEQ+<+q_LyUb5M( zlXU8&PFHnFI;rn;|J(St3qX^XmXiiRKmY&`pAX<42q5wK_WzImQ}X{$!{_XO0|0b5 zh!7|tCf&b0P%l|g#8o){ttqLg8l*v2M+^*@F~|t0{~zkpr9b3p}s)D z!XUsPLi{I(fd#;!!()(PvSDG9i{Y@Vs+qbLFMg#6M!@CZ6n9Ieq~B*=WtEhbWZ9!5BBCvh<+b#*f#nJ`|spvuJi@k`YhaAJwC>FIuKYCu^P|YX0?^HB+LD zMah_1S_z39zT^(JXu+%hSds|&2RJGw|CM!zY1njy9*f^GGuBY@2d~o1`0T|O2fgGW zJLb&`TTqFbW(|f;B>!9-5I9PBK6 zLKau(+AGON6c~|ze{_1)093bRVD z>m?w%La^-ht*-2-nYm!ti0YQFmnu_ukp)V%AJ^_1b~%t|HqZXJy7q+X5#W5Zo!9+_ z$|5n;DQK%59bc~+(pCx%3JdSV-7Hxsti6tAdVRq)9Ej+W!LYSWedJxAtsNSZ46 zw@Fytv7ze*_CEkNzuw#dsg#4lD3iju6>lFK5Du$IxcDj#6b+gw$O}wLKb+J`fT*BM znopypVpIQRf25VxOnyJQr213s-lQybilY2p(qnwW5CAO`gd*t=fbB{=ZTNXyke79W zr0-X*LG;TBC!AYTY*-f)VUAspP(VM8*m7cHikpy~P$A0ps}m7xu?0KS*a8dv2~~Ae zKRRwRZtAXWA9AOndibmFiGL1X#-cH}-CbnIDa@XBkOEn6MXaFuO&3nvZdSSwcQ zyqEMxVIJb@8mqIZGabg);o7oTXw>_(sp-9R4lT{Mrbp{u5qxvurK9Dfge|EDWsub= zCZ6JrIsCpiRKN;CQ*l;s0DtrKj}+aE!o zy`mDq*>T+|PR}}PxNmu%g?9?HR0@kt|MBjXT)Cr9`SD7h5;-}OBM%2%a*<@jLQcJn zz)OOaqg+35Vir?gt2|*Rpqi(#=Ae*;uHBwE=l9&Atv-CW_IVOtM`3?lbC#oby9r}5 z&|jZG;|%vZQI8%~nB`^9BmSCf=41!gj<8FY#1u{JE^d16#QHp8(70m%#)Z`KH~8GZ z+_SBOfNAe4uygCXNS8yFVtyi?D0g9C0*TsBGNf0%ZqvjJi~EH0Rs;q%oy4RVw_}rP z_PDkV2f*prtUZ0UGPj+}3ZLH_8Zcr3voZv0zR~3SowG%4QJ#KRtu(VwO_=$bEwSpb zyR3XNL!EtlV`Aj*P@in?r;P=D^0?V*m8Aq@CeX-2Sra5bb`4}5%jN!9&gp{)@&%&D zTlf|V7AQW^b%Srtbjq>0z=C?WqFM8n8-ZQkj#;?eZamX2&r6UpJYs8BJ8r#7d0DU3 z+Rzy~*0twUt=0MJ3v)C~4wT}d3ePDzUk7&%(oMz}F|vZsc?EEP6Ig!m1GD_QzcfJ zYYo&>WAs5Dr&izcT2}N@Di`Qz_@!%dyV!H95}NXLKKs|*y0m(-|B^FJ+LU`D?xkKT zmF4o~HQPZzm*df@>)l`FGxPmI^$+mpxCI5=!OQ^!ds-wO_+NdxZw&dZL=C)Z@1 zpTs!b4%=UDW!zQ>?ajxZOZYY8`DPtkbtcbOlIuIy?rlBy&bXHA;*I3qQYU%pQ%-?l z6+BAIZtaBgZe6Kgu8&5e<3sU}u7{I>5yM*a$oWS`PtbDXoVZ=OKHey(s2oyF3g%YI zWehFw3>3Jnp-`dj4X>CMGQwNvzX_$_p~`9o)mH;!cx+i3BEwxh5EKxObTo6!~!`Ky+Uu&%~9{6o)wd&9`-2a-Qf*Jj4bVSKQL@-3_z#fl)hJXr?Xe|nG3o;%n>fbnq1dXhuQ=kt*?_BymZ{b{L*sU^ zB&~00IU4p$Pcd5xa}>qv^c7;U(!7m(qHtRl5{h1CsAM~7{&5S|B;?y6_et-Qb{Jy3 zVB?m&C3498>Wh622E1|)!rjg==4+YPDl)Jfm_(h1m6g?nM9Y>>fDVG;VrlmpA1pZ% z`UlCZ+JKeyD|TpRT%*EcD*P~Lu@t1g&7+GOCKz!GmD5K6FAfY5ifc>JcbNXMFhk)VwoGIGQ`p`p)Vz~!nsuDmi0Ibxqd(y*8{ z(Y3S37^os9vnjG@Mj|w^J&YM8H-kDQ$esyWqzPpaA&iS6^<*!UyI)(lmQL;zbnZbK zl-aV9%AR`jZ`fEcPjGInl=6iiGp30*GWf~rj1Jf_O*4$P_3_yp`!hqJB-7+by^^5M zFLhUMw06oRld8HHw?_~QQ3GGBgA@~oP+qn1}SNYMp+}tjjk3C{k>sf{y+`fk~9hiw8N_^ zhN#l{U|=q@q@qHjLtNfc%qKw{`jQa8x=zSih7G{VhOrbVY63?@zEv)>2)+TISAuBk z&-148Inbrx#OOxK6ye8VFz&XTzO(gqL(twFX!fLdoe~b2WBKwB4Z!eXz5Aft1_xCf zd^Dl{7Un!i;=5f`Jw%?8cz|tsenR~Ybww5B`%0Y(4syE-8`-jh>?<30Gt-lh=rtl4~4pTzPrFCnxLU>A9@_5 zY{7?a?DYnev+(a4)KmGwI zs<&LHu)F!zF0te2(x85;FOgeaUj1!(jUWbwNkRjl5gUWt>yY8haf?dGi$_8zF|*29 zmS9*QNwO44RZ&ER2WwJ0Wsfm&ODDUoc28(Y5}j_-2Gm_24`Gd^pu@swY=YGfT0?P> zl%awyc~N~(iA8vBmJ?)E6k`~?YG^RBid0#jh)8+Uppi_`(J!wsv6M~{0KNw^L*=Jc z%BzWkK?7#AuDp4o0AMUwFetLS*B=hG$<9YU}44br^pqe($&N!gKix87l$%+e%Gg|eB zyPMzOC2`q>=0$^mpG*_eT)b9Mhom;Ub&sB+xrXv8Eck<31}*qZ;{2mBgf56$g$0lt zHiDvbpCvj#aeXovIdDrH&<9fjiG^Yw6d(IEJB34NudQ#Jw$ zt8@Y`T2#>-D@5>?k}i&lHj&~2;;royXK@eShQ?P)?YdS@MlTc_E?0BN1 z)G0NUV*XEgaWO?co+U~Y1i`zBKO}7w^S|Y9<=1aIMEPE8o-z3Ct1~K4J0|a z*saqIE#a=wXYE2l1Qj_2?vlJe;4LUgK*T|TAwZLgW>J|1pQTF%HU{!Cpb_N(@BeSE+pIK_rY&Ifitfie!5aa-9G?qXtR>0D`ayQ0f6# zy$FTQ3#w39eYpc^+k+cvMvdIvR@?f<77|_C*r* zXG&ob`k{oTg;O#T44q8MGcE23E9N-VmO8FzUt}UgV}w)kh@`xT%B@-O95nAo1t~6^ z>0e(|k-*PwGUJ+Uav)psudreceTW@gR3w5cSd0xCAPUtd_&3Z0Ds^v)+E6WsBuIpi z9tHvpdd>)S$1E`v)+Xp?;`y%nM2aH{E+{C-D>%v=Z9w%Oz&Zt9CJ`(c`7@C}DvaC` zGO0){QVqDmE?l?5G+Rh{6T0^}X*hn%<2<;&_Y8DrE*u+D zE)hWv*KwTo(-j=leZD8fjuR2#S2{ia^{lU5!^{HG(mF+Kku@B03jVQ<9=DxvYGqpQ zo^|z-Vvo5ntA7yGqy1r+fIG8^YY54EbKAB89{J+tGGk?0R=$5kG>H8KXur0&&5+C) z_cV}Wa4q;APlvh2ASIo0bQ_~xyGCH=I*YqADD&A3hU$O2*_ zIs>*e91b=P#t_pP#;90ie`ybf=oJCVjKS7y!p9c68A5E#Kvbwfhshbi8x#s7c>`A4 zTGi+kQM7fBsZkyw&Yw|ds9@^~@eLmMT40OH4z)Ph6S23yz7qKA+^~pk?vqYh;d1pbLBU_X@+Fn6$ zJMm_m1p4{S;A_XsPpa(1PJU&V#=}_3beMHf`i|Hg1E4p>vlfnz&2YVT0c;|r{TEo2 z<1NwmegUAYKKhO%_pw&asvv;O;d>mY4Tq_9s>{&@qpmYIvpJzR(IBW<-dDjkCUe}5p3?wNzf*aX<(xE7{&tE9b96K*R ztXbp?_&KRspXb=zWlk}_rBHl(15>;Sh*5#HtL%48)!)_Dn>jYyHB1-`3k_S4?SV;~aZ&)_LB1PG5k7zLE65 zc*qpSJ&;DpoVGRdQ{9+#1YqB6o0+hhmV4ss7P&R)o`^}^zm1+DTBdB@_)3{^I~ zn>%=f#Ckf9SKO=v*}!X?-nxl@0!6Hf`5o!ETd-X1E=-+A|#Y3DkQ5;mA zA!^96jYeRuVq7_kR73FzX)(NO_p>*!{5hM=_NtoiY@63?DyjEw#1*c$Cd{U`Uh6&lh(>xT~CCo``dJFdQf~a(1X6IX%4F>CD~NRmFZ{53p^8cY4(-fYR@)hYu~`DX3h4!f>3lEn$RPAIpQZU%irRZC7Y1s&r|cfj3UQ+^1l8A9(;uYuXG|CO66~x8h=z&_g1zEgBc~b^ z8rZb*ziYCLiQHoC@qon=hWntipjH{}IS0yXKP|_tsUOFmaLH9C_5(!6Rfl-Bsk&|a z4d?MMf<6CcI=ixCUgWX~6DlyMfw9&tozCCqJS zVE1yazeDj`!ZAC$BeUj@T!D`Pb(KM_UOpUMdv2>(!(QB#557+fahxQ&c1f`e#7ZO&MWy77ok=M!i8BCErFL7D4`P>x2x5bmPw=cOk;a}0xL9TzF$cnP-gT;OZW7}F1kZm4&jit zSrTt9QeW`Mg%U^5J69{&NABg5kr^g+^QaO{rzuznx8KE6ljqRI5hDPQ6a%p2!T>0+ z%>A+<)AHHm$SA_VyQt>0Y)xh@v4n@KFIhU-fS$VejjhV`N)k3{Tf5z;UVOmgbnbmi z)K_HMdZ_QzRic_2H_6d4@HNc#XuNh?w+py2XqR9#5?1kTxY6wKuUe1lD-7tfdcufg z){Kemz8Ct&FI3Uv`%!t${!^GdGT*svG5RQJCQBVu<^mA0(j>A;;_l5<{r7syk~R?> z8?6X3H-4u7I7v=3}lsY*I)0@c3fU+ zV#6( ze9EKO@zs3TXO1mHb-Z7Jr56rtY4>qj-j<>L}ltC0Gq6)qUZ`uwF%$LNLtQv z2mY3pHKA3{0v^i1aI7Zy>4v5ImGb@#tgWRFqtw^YY4$hl5NY(T*6(2g7L6k!T)rdQ zs?KKh^v~TL8k+Y-*rYvlo0K2ZXbpd-MWF2ds1ByW(R<0Vp*eSI1rs~r5h;c%TFk0e zJDTyUV@?(qPOapX!ysqZj9aj@p5JtsnGhtddW~^~K7DPysBRMtA+xzwc{fd`(OfMx2VzVK#Jp`C*vvDE2mvUjbX9R=DUB>aR~Ncgp)qAD$6{uqrf zv?yTonrsqmB+*sDBA6yhN!gyNr0FosEMFUJ>o`5AXElVSzO!gAuMtNuG|E&fFLlk+ zrq=uzb=`{EbI_)0Q8hREkrQ>uZ_RFpHNuBvMi@z(cE~3w zZRKfcH2nc9lFp@+e7~UH^Cx`#6Sp=K(J(!wG@zPs^rBTA|c-G#ZYL1WwR{%>9dAH>3ehP~f2hwokj zcSLf3I{zeFR^mMFv#kh$B;Ffudie{@2k{Spc1zN$dnwfWSg^>3DKet?bV>9N(DzvI z>sQ-9fD`YsGHim+%^}~L8=)J?-h}(Rgc3Eih)>p=PmuzfofA@hmpXgfM zC&UH^2aF^hKDkFbgngHo2)yLVj*iayq=IG4$E>Ws`{vJC2l1TCI{yvIyr1DG5fE}IYHDhlwvoRT|Hbcv`qQ8Pi}Rg#MiJ}#bwuQ%kx!F zQ@Jib4ryzt=r`(}bdxCv<)y&qvE-X_RjN*Zv>fC4T_V7dK#(``MnPKvEI~`Kvk*8! zEliFrBnyG;7Q@72QJpxGED)PukrGQ8cU2{W@pKx29R{WUYMOk@l;6cE6Z0g0(t-FU z-MSOC6H%ID1Sp;gT5;XIIb^$4kg-qUfL%UoZf%-qhqFenTg&d$=(w3ncA z5dQ8thE46M%>mI(G?eRuz*K?K(CEk;`2jG%e!ZZG%7bK*SqT zzj)4zJqIV_wWHN+H>F6nWGGdeXVcHAUi8&o*WlqWTwM*P%HzZR@G!_E$TWGFZ+;2V;&jW~&zG9L6^qWylZ=SgCCn)C#28c}{zH4*7Ad2}aiU zN4(_Poa0gMsXOva&(Jizi*R)cYIZqJTorLYD~%l4Q!{}2t$5J;r=as)Wq{at4ilUF zhV46L<%oFVI)__Y#1j&uh7J~*Q_GGFjk(hJ{1R=d$X*ZrXF~8R!|(SUxw?bv{ax|} zIK|d8>AVIL)AS6j)kr*4QB1u1%5rJj%0|RG)017TbCgRhH&mqir9^#MZDO3>b9V8l zc-K6Yfiul*PA46wq4jT)Q@vrdQ%O{LQhr6%NXMsUm8vJaQXg#F^iC;^N!H4b#}FwvCEv{o3o1o>G)C=`FktA#$dQ-Hl1syP-mwEcVC@d%#`ddCGBkp$#f(q9{=Iqyte*ogSH8(4q z=G|T##*}!kN!IRf*a9fhwX-Tz#TscHTt<*WLR0m*0|Ks@mT z+`3-1NqK3fx%pK<>t7A)tr03dXB@Bf6k973ggE zY?wF|Ptv{6uXHkPUiZJbwUsmDNh=)ROv;?@_%e34EC1)w#ap}Ks=O05g=05+VVwI4S1FvV>FNf?$A=Y8daCR4Xrs5= z*3I9Hak$qny|!bk0tRkT#S~;{l9Z}qsFrr8=beNS3C-pK!_IO$#9(F{kb~C=?fp0q z*uL4+O21k_tmPCc*J?#8pw~L+*wqq;h4fk4&Dtl-CR< zerUNNe=+P&e6e`+13@lmzEc^EfogXOCcQb9Ui^t1+Hg9PnYd^K%0O4*+2gl%9L2kF zhNL~Y(Z$EO1_`ZR$v3O*RKGE?CQfaihh^T6V5X$0FDnW)!5hP>>j{Xm2yY#F2yXmzSiUs*B> zIinDC=-KzFI3V?5LRLtv9?a*2i+57LJg~&|TknAXJV%r0lF^4ANoF)Ju26-P9H~XvvRTsq#rTsf=j}M)-$vPL`Ee zDmY~u?elY>C(2}WYUwsTkKqeP{BN@?q%LIQE!kgmB}Wiy8pl?LY=yzh@g{Hlv3yEa zQQ(z$#+`<)OHEvqcv0-LB=v79(3;$Lhq|wJ{i^m&Gq=~Y_qXJDG*)OJx9Q7PZu(!n z8LnM4Wct+&%^E98$&4`>Y~31eQj*rpvcpp55Q~HIOHl<|epp=T(U01XrdETl<1LEp)m52sr(}$_ z7O4iC(BIq|Y9}U6UJiWL`qtApDwfzPuJ~h26ncMS6IcBMkeS%@q_>o|S!cY(stE{= zmO^USuIl?oeevqHOMk~RFG#QI5to96m+le!%JIh4{|2|&p^%38%W2n3yBm2+%Xy;& z)f%tVNjuLo?e0pdSVl0_F&TVpA3=|EE<9pUSq1vTaM3fxzi$tuQ+12&#@4Mm<7y+R z$+`eZfYdK-Vjh%f)%s$ER0|4ZGc2C>pnl2E2%Xjgv<2g>w*R(e(+og3ZlO)}0tZW= zki!#mq=ao9*k~7CU5`DPEr)vsmnmK;Anu~H+J+LM(uNleO;7U(7pV1-N3VJ;<*zs1 zTF0v_sxC?rgumI3S>o8+omQJW!@$QC?*GYUinsAbFkXnGqSGP?*`j~HHBo2WE97`s z&JYmWQZLB51$G(xVq3knSf(gIMl6RP3EUt&xa$$DsY|w}ev1%Q-CC5dO;!NPv)WY; z^BC3nn2Si+WB8A)m&kVX_J(FC`xq;VS0U5|*+?E9WoT-A^hlhi9QLj{G3wm9O%KXx zo&$aRvCptvF_arEi)mSTZ~hGxFY0Lh-Tm81#&)r_qJ2x<)sQ(#vwj zIP3Q~WNMamKqn$vV_)c+af}_^K^> zq>VB`RxEwGcU}_XS{<3M{u#R*+Yd);H(xM;7Nuiedll;k)lF)cY-)*S>FG*$iB6kD5{(Kz8U_$p}z3T$kg%ZExuccH@`A#ArTN}@|(mY$5l zIZ9c(=CdCOC%gOzNNua1iD4(WZ--e6LNRKVrOpCFH^74oW6i$ly;9|G#QxvZQO5!q z!mD}WD_4WN*u*4jy(K&;4lZnQ477_mnwU;dpm4W|VC!-FDIfWuuwTEOjWkbMhFoT+ zx(R{#*s7w$mmcKnLTD#MzCBsR6Wwx{UzcCwG~>>-Wh>W^EHQIhG`QLk9Vj0@@NgIy z=SpK7t;*tJtuc;LZCWh}eThqY#kP#r$i3Fy?B6D8o!WQQ$7<$}U_8g$HZfJ0kT60; zY7Xh{?r7>bTbP*twjwZ9Rkmwm*ULhu%?#$hx`Kkc2}$C39s_!>+&cUEOZH}LAzHyy z@f?a;`qPSg>}wQ1ck`U=(i8e{4Y?yGeMxQva&EN8=c>3i&GmoKS>SThw#jL4WiM;f zS~ldaqVuO(@^D@kN`b{#*Q>7ps^-OSfI!!Pji4sQT)stAKtk7n&hK=mhAEA0ZmeLXBN$?7O-uT#dtn-SFTMy{Qlx9L{m$@EV zj8ZX{PMGegSLVC6EDRn99OgpZmVFt2k4h?TUR|58Z8kvyA+o)qHTgA+m`Xi!YBKsF z?Xgy9XEf{CSB?`nTXCA)vjv~WP!9-!0Tl*}u~t5>lzAjD9_ME%rx<7?NkK&vZymYmG1A+{umQ%W>!XO+4Xuh?HrwL#Kj} z$1Y8yYgSEks}0L zBDa0UdA|%JS6^;2yVjNIaR)2|GLezTRd$s949)got{~^E5k6&GpS4S!{NninZq33` z-z~<>N`|{!j2dOjnQLn$j{b0$an&01v~P!0ULbSLk#95~0sl>TVQj73kGN);B^Kw> zRHeaRlFQ7_=N;>n7CDJ(=4iDOS4QMu&!5@Bx{OfGN{2}PHs-Px*`#QI81?n4tNt^{`LVxCLuh^=y!Qsgtj#N1G%+r~0(#LTtF z+VB{VI5jehX*k^T155A8&ZV3tdFI|S-nrk5&XB`W0}`YYIb%#^5M+aV2Q zV4nA~88ho+WatsnvX{_g;oUM7c0Ew!R^c;}=tsVI+R|{bO-22ZQ z`Qc;tX3kw;Ud9rqusn9!0x^a(jEaPK9A;ZMnGd|Gdy4uj2<7OKs>;UZD;v9-^N08d z`BH4uy!0jM-J4%x@GCV9sXKhPRtGHgAfa{Rf)7?Efr>j{8hBj)D$~0Y91osfX}jFx z`xE2ugzvx<9()0@+uC-U2@#{_ zdmQNQ>JPC$oi?5JpMQciBsxzgi+IqZBDKAI6IqApeg=;eJVNK@W zL-U+p-5H18=n5Eto!j0Dvn$5|&+Aw0>wo*4#<3-LFCvp|RNEOO;jdBa+h_Ko$td-- zYZLP{ObeM*{BPT+yrGOU?eSMbaS+<2xU-#2`3k-H-jI$73M{J^?D8r8%&oe0Fi-Jz zWNKHnj$S%o`^%STydbm_-SrB~r_3$C2>o@YlsjA{j6Gs(usp(PlN>7>!y`oOi7N~k z0m07khPnfHE3a8x-co0}*!qzXv<~8XD1SebKovW*gwGlM4!Z}@hYIw^Y|Zi_l%6;` zV3gFwM<4QKxYE9qOOLxmP;Pp;h3=&0-(7~1I_mX?JF}b=Q@Bz3<9JLtyAc!T)OUl@ zcGiCg1Ibuh8$I%#X{zVid{r5tAy`70lhR9J9_rw2PCq(O>(S~a6byJZVXiY-WcGIO zGk(}DW2ZkL*E&kAn5Fm1Kfvd)ekt3~)$QG|%sOj`6GAREU$V%#cUR!&no9d1yRr-7 zM?yG&xTCLk&9ZPct(aFvHr2`IJNc44rB70FZ5FvKfOW{6dsAokGSBVQNs-ENOp@7+#wu}9Lq)l4$Udwvy%#KF?3K6Sz7P z5=p(})wd+5Z*|mn)%5G(k?XVXbnsOH`{&=`3WNp)BeuorQM#Q^N%!VjY!FVdWtfF- zuFTTld+v}R?8D{!xO;WqzpP$+f(ZJfr3P9%yOowtZ*XE@li2f%PsBdT$q&Hk%pxGF zJB(^qFt4^jMD%@*T1B;vZ4l;+<@FBpCqKBlu+P%2N>mA0ojmAYGIapn=14(g5cgW) zpWxt3x{*rb>fras>ye!e0%>`>+-6*&U-qb-j*V2mGoJX6g zh{Zb$sk2?{tf8C>awxJWfjWvr?!3q?OyRhRjnLy|b1esXz|^TiU}k4*t7EmVFDO2j z>Tu)Op=n1gJ!3q>-{c&1wkNe|^3X1R8LgsTZ%^5t0G-R!;O5#;AxS5PZlA3M=9#k< z>Yb`nQF9r#TH&(u%JyTww&r-YV9~)|rUwj{g0clA{XP$O+N>o!#Nu{`&ntO?&1sg3W(f8#{ zp4`l2y0lUtQDKd+tF(xY?(-J!+bK)=QD#G@Ib}B6+V(yu-|7L@sYROsDQ<$KoASd| z!4i3G^Z1ZmYSLaRHCQt;6FUq2AB7 zL!W5yD(@j+$ADWinDMz2u6Km}Tk}0A&bPx3JcX5OWvRA@Yj?TxfDKE>V&sS}(K;wS z#$}Dgb+l&EKx^MfrW$=jq$r_!Q;!?5@4^_zLA^42seqgQIWFYewk40S^N zwSJ`)$JPqWZWA%`)H9Ul3k%K6`V)4RX;ZuOY;4P=79h%K*MU2g2H7@aJQa_@X6H14VgGF6$F#my;Nt14M2bgI3k64s$h*?H@+xz78s?_C*qs$5BO!V_E?l^SInxsr=m}}EOVUzk@VfGfz zc$OSh0!XDfZ;3{>bncGcs_)qrBYX^%tF^*wu0QmDJyMNaGyn%9CN;+%;RHByr>AoR zp^BVPFn%2W2yc1NADtuLID|Ho4VwwmufmOffwkcj&Do-t)&V70pB?lXu4ubG?yLud zu&T=;S8s8wiC64_t#iEj5}PadhgQz-Uh1kTaKsC=OUso_ zKh2agHEi&>6dMW4YC7Zp!DyZe=3bXVI51`^Z@J^Nn-w2gkM7aWjxj6ZnBCT-jF`)q z3$ZLr!qCUC-WUKstlH_ES$j5%@o0xtl5t_dCCS-D|vi3MsfXkD&o2^eK5W?2!-k;a336z-1HYRr>m*98! zF&4_(r zPQ3uy&r@_|d~B){zxxbk(Zs$9l#%i*U1N)WA+sZpdlvt~txa-pPv>&y8doJL*QoZp z&Qo8t{7ivvCAsLVeW8ygz4_FAZYw~u5QWn_Yf^ztzgKz$rjtpzSHba;GGP;1z~c`d zrVU8=3F6+*!UPI4T}`AqdF~?w?>0NZJ3W+5Lkq5S?x?RfV|!H23FG(@NO_5g!&N*j zqL&^+SKB0xpJ`W+7w`F8NW(p8L&Mo;zS8Q~0x8W*g{$N^Xb_FbO`0oNSW3Wi#CUQud8 zTJ+Y=5}3EuHDHRjn>SnVk$Wb*_CcYLM4v5?B6q(5h0`c(#F|=cLcQ zKNFp3IA>6rJ2~)y;%k(x$3D&lYm$)syz!9i)J0vO4>q!!0X=Oz-q!a-#$Z~bQ0?O?5!SC8$Hvrwu@g?6Ssy4xMvu~H~A56`%eqIy~9O|*CX zj`zbc*g|RB84B7d|Hs$-)bD|z14uUy37w&Ic)|hlff}^}?R((w@De>bR8^D&7&A3X zUbeJ!9{G}tX%Yuq-+7KZQME>aM4K7su3yw$acTJVI)Q~YXuKf;2uC`C4SE@iuGl&2 zX?S{dzo@+#m%?t3+%s!rs5FuV{m)v^?-~~MJ}-DjDwnMbNK6WhyxcQa`lmAB@X?8R z-a>mYv}?FWTEQ;gpU(48$*ayd{AeLHspV1E+vb(C@(hZKiTM+BV(Nww{0Os+T8-f> zbV28ge9Nwsk~GvOaV z&>m$|1#EMijYC^hAHhJ)JGI2N+yH0eS9< z*xTvh`EvUz1%YYS7_EPXTh4ZJ#kCC>Iaj>gxmZe8ecz^6VDyW*?ryRiT{XppDMJ+@8Xs92?ht4%My_es~xepFp}A_?3dd9 zKD*ae11XqINr_4oL^5S?eWhPF7Rsvu2mY*KZ)BL|^&L3Z%m|b74gKF(`^M->qIS&_ z+qP{x9ox3;oY+Rkwr$(ClM}1Mj@3zb(CNuHbLa2Ok9%va`c<`Rt*YAf?)RzvAgOy! zR$uOd0z||n@rdIKtJjjw!2hMkzF<8J&L6&T5? z9srqgSc*AwK+D(P$U6A0VuBvxG{SnJM#cpwA98LEv{(Fy@IBXce9YVOYNsZVR6o{? z4cp3WLcEYCR39;DMrr{cOk!ziYo=}zqeOBTAxWD&uL9cE0#l8h*jyjGiZ-;+Kegr7 ziN+px7HgTa6ayKWcHuVE*+8e&3GdlXhBO@8jDak`uhJP4YY|;!JqO5`>SuL zvp%lgqi`pG{O@S2TO7AOshV5r4cYy9XXW_Iv}!S@5TKYl!Yy(kZ;i2B(oB__xNK;| z)NCwQ6whPFmO=ej?$;B3dcnKc5X0TZ0H;B!lh>TjqgF(2?5eG1Ps5raG=yEG$Q6qp z_3WFEX3%5dAA-8^mN8$5GmO^y`v6JwVtW44p?&7781K_J_8Iq#E~);YO09ykcZpIt zA^s@?kIsp#1#@!wg&jlbPOAlwRfzjdS>NnYjwVl?Awq=GGxJr-UbEx%wxnE-!e6oY zQM|vv=yd(KpBnv&xq+8N-Sh2^`y2tkh#n0aw6E%ws(B+R z`j6b3hIScUQ#c&1pEl;W;u$&CUKF+l@=ei<2@DkF$Xlr=T2U}thBALYv9{IaCKNFF^=51&UU%?HFEQ;XaaV62 zr%A%$!G@BN$H00!72w^G+zeKA9B_2VCh2DIlv{Zi>sg!c(9xnkUmPiH80bQkvNxQG z2_w<9%nvvd$9681X7eiX)lNn^?HT?9Tq0$7MJf)S>U9`jsN|D^)*_iEw@4lAS4TXQ>gG8UsH8+j=;&I|ZO>-o%q)l&)pj=j127iMSM7^!;%%*? z%V*W@%Uce0EqtwP7m5l%F=jxRFPQ!kYpM|}HM+@EtlWuvS;$)-$gD11Pwb;}jKDQ@ z7o%2?3x}AyL<_kz%ulxpeGB!8!`}O)U0~{YPp@e4Ke2*iL7d6wRaKtjTib4w z-|XH~c8nPAU!UFx^4>0^8YBZDQ5l6OGEO^AE#_64kELNpdbSCHBZK8wF{O;WDD_%q zc`oT$5=|X`m=3ny9JrBe^vxduP{-Oaw9=mDOc^r;hv~kN% z{R4d8-G~_w_7H8D#ov37Cmn8nLF&3LVBl4=>E^(_Gj{NvBp0)QlhUQn&wWgD z+P~IGAcq&@dRAvrKfeLS?^(R9M&J8!(AJal_1EN6;IHtUq&OQ>*V;$mBW;1=t**e3 zYvr?PmP>VE>pEVNzNquQ%RY``^fidA)W2w3$qltGHQ}%M?VvSTqoNhoPIaw$_}5lM zkLv5*k$=5u?yGZ-n;c_|3h3FbUyw?nI;`u2uuRstHg6T${Sg4}JYTZ;RTv$2ytX2B z>ej!aknNi`@9e-g+4go$uHde?2GU!7)_Fa4*44eqktbrls8#AlhLRn~PD`{|fWqpn z7jqdVa7*0mJLw0`N-H{Qd*ycbauN%j{xqCwXOv{*+juEYwO_}_+S*%Op;i3!#6(N* z^i`i#*FD+mOpc*MSu_^iV<;}w5*eg(1Vrf`7#j+m#w2j{^c|I#w~H;zN*@H5fm9So#X z!Iomx_6ax)Ad^TAbnkbi8BZ>|M(Ok?C0Tb;tNZ(U`X=Ax&!PFvjD|s&2O#Zu4V_@Y z(=2CQtYCWJIIZ`}k9|JdYyTnLHH37PkVu3ZwPfTkO`=&2#g- zQp?Koaz6Sq^)>7)dJ^G30Fwa(lTOU#vJYm%ewU==@5N!EOg;z1eE*@Jb&cY8dCGW>TuDOvQ0}pWzkU9)U_GEH@`3D`k3RwaQ|Gr@HIA zy5@Bwv7iDd+>6aS@5*bxLGR*}NH!_w!eZ1crn^*AN2RF1w5!Hf-@@Kw(l4xbXE}_$ zFy5-QwVYa|kF%}XE~BGAaC)uhJP{N3GthU)xGI~&e}ll2r)RANNp+oiN5kG;hiy_Cj*m^!v&mQpG92K&Z+JDs0Ez;d7> z>x$D+9PcKRa$tBRfWwhOIyV+Im2PZasGx zlaDT*R-jf=J*X=-jvWe1yEw|tnhzoZsIh!8*}iVq*yOTNc?+)NH&dx9J+WvQDKZXI zuZS45Lfo2I<)?qJa9Ye`p4bHKS7r7FrG`N|eKgnZ+~HW#?mGLt{V~5+`gX?A+3en- z9>?BRHU7|S-SC`BZ@oeinZ?)^Y-8|wc?EL3viLh;`SPc=3RGscqLmrg1hQ_nBI>kQ zU&8X_s>}8pqd&g(5%7zy=`eZWHjDj+B2Ca9-{VPlF)dYe`~daa>h~p;vAK|@9k+hH zT(A99R<2`n*JrbUc~o@MzJ*CA1{e?bNInATLtlFKH77lT{7idRZ%zcuR`+s!{4_9T%M+V)L=o4%?Km)U@4c$z-rObfnWM)NeAe7T(kw&v?$U zRsEC?726La)8$t?GMBi&!M1^ftaa|d3DcMzx84M&{)(Cr8ZA;_`2Rl!Z8tk(Ynl-{d7(0M8PwwpN>6atq(JOq_NtrK^i9i+HMH!yuBs(N zn*@0ax6KUJmVsmEwMJOhTbuvL_x23Uy-!;!cJd$jzM(%C$Ml77)g}1doq_@`5 zkiCPomB}R&5Gn)SM#t)F-BFeM_nZa;T@1*g=}dAc*+YLb$*xMNY^y>~BAQ!RMwNc8 zq=#y5y=-~D7&$)|mOs~AaT2$X@0+qU4QVkR5u3tEh?*% z-Z_5M3zl?2S!1J%Vy5&KZkHbP{P=d8^`Yaa?HNz1p&`|MiF(MwT6D2(6fOm4+`S2& zwZI)=neRPXiq!abWI9v4E6cd|zsp_!j_}KYYqj|aie