From 048e6bf284e3a0b539725fa54d1d482c1f3537a8 Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Mon, 25 Jul 2022 15:23:18 +0800 Subject: [PATCH 01/44] starting of nft standard --- near-contract-standards/package.json | 26 + near-contract-standards/src/index.js | 0 .../src/non_fungible_token/utils.js | 30 + near-contract-standards/yarn.lock | 2200 +++++++++++++++++ src/index.ts | 2 +- src/utils.ts | 12 + 6 files changed, 2269 insertions(+), 1 deletion(-) create mode 100644 near-contract-standards/package.json create mode 100644 near-contract-standards/src/index.js create mode 100644 near-contract-standards/src/non_fungible_token/utils.js create mode 100644 near-contract-standards/yarn.lock diff --git a/near-contract-standards/package.json b/near-contract-standards/package.json new file mode 100644 index 00000000..e29ba5e4 --- /dev/null +++ b/near-contract-standards/package.json @@ -0,0 +1,26 @@ +{ + "name": "near-contract-standards", + "version": "1.0.0", + "description": "Compatible near-contract-standards implementation in JS", + "main": "index.js", + "type": "module", + "scripts": { + "build": "yarn build:non-fungible-token", + "rebuild": "cd .. && yarn build && cd near-contract-standards && rm -rf node_modules && rm -rf build && yarn && yarn build", + "build:non-fungible-token": "near-sdk build src/non-fungible-token-receiver.js build/non-fungible-token-receiver.wasm && near-sdk build src/non-fungible-token.js build/non-fungible-token.wasm", + "test": "ava", + "test:non-fungible-token": "ava __tests__/test-non-fungible-token.ava.js" + }, + "author": "Near Inc ", + "license": "Apache-2.0", + "dependencies": { + "lodash-es": "^4.17.21", + "near-sdk-js": "file:../" + }, + "devDependencies": { + "ava": "^4.2.0", + "typescript": "^4.7.4", + "near-workspaces": "2.0.0" + } + } + \ No newline at end of file diff --git a/near-contract-standards/src/index.js b/near-contract-standards/src/index.js new file mode 100644 index 00000000..e69de29b diff --git a/near-contract-standards/src/non_fungible_token/utils.js b/near-contract-standards/src/non_fungible_token/utils.js new file mode 100644 index 00000000..ff7f0f18 --- /dev/null +++ b/near-contract-standards/src/non_fungible_token/utils.js @@ -0,0 +1,30 @@ +import {near, utils} from 'near-sdk-js' + +export function bytes_for_approved_account_id(account_id) { + // The extra 4 bytes are coming from Borsh serialization to store the length of the string. + return account_id.length + 4 + 8 +} + +export function refund_approved_account_ids_iter(account_id, approved_account_ids) { + let storage_released = approved_account_ids.map(bytes_for_approved_account_id).reduce((a, b) => a + b) + let promise_id = near.promiseBatchCreate(account_id) + near.promiseBatchActionTransfer(promise_id, new BigInt(storage_released) * utils.storage_byte_cost()) + near.promiseReturn(promise_id) +} + +export function refund_deposit_to_account(storage_used, account_id) { + let required_cost = utils.storage_byte_cost() * storage_used; + let attached_deposit = near.attachedDeposit(); + + utils.assert( + required_cost <= attached_deposit, + `Must attach ${required_cost} yoctoNEAR to cover storage` + ); + + let refund = attached_deposit - required_cost; + if (refund > 1n) { + let promise_id = near.promiseBatchCreate(account_id) + near.promiseBatchActionTransfer(refund) + near.promiseReturn(promise_id) + } +} \ No newline at end of file diff --git a/near-contract-standards/yarn.lock b/near-contract-standards/yarn.lock new file mode 100644 index 00000000..2ba6b028 --- /dev/null +++ b/near-contract-standards/yarn.lock @@ -0,0 +1,2200 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.1.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" + integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/compat-data@^7.18.8": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.18.8.tgz#2483f565faca607b8535590e84e7de323f27764d" + integrity sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ== + +"@babel/core@^7.17.5": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.18.9.tgz#805461f967c77ff46c74ca0460ccf4fe933ddd59" + integrity sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g== + dependencies: + "@ampproject/remapping" "^2.1.0" + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.9" + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-module-transforms" "^7.18.9" + "@babel/helpers" "^7.18.9" + "@babel/parser" "^7.18.9" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.1" + semver "^6.3.0" + +"@babel/generator@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.9.tgz#68337e9ea8044d6ddc690fb29acae39359cca0a5" + integrity sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug== + dependencies: + "@babel/types" "^7.18.9" + "@jridgewell/gen-mapping" "^0.3.2" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-compilation-targets@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz#69e64f57b524cde3e5ff6cc5a9f4a387ee5563bf" + integrity sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg== + dependencies: + "@babel/compat-data" "^7.18.8" + "@babel/helper-validator-option" "^7.18.6" + browserslist "^4.20.2" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.9.tgz#d802ee16a64a9e824fcbf0a2ffc92f19d58550ce" + integrity sha512-WvypNAYaVh23QcjpMR24CwZY2Nz6hqdOcFdPbNpV56hL5H6KiFheO7Xm1aPdlLQ7d5emYZX7VZwPp9x3z+2opw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-split-export-declaration" "^7.18.6" + +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz#940e6084a55dee867d33b4e487da2676365e86b0" + integrity sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A== + dependencies: + "@babel/template" "^7.18.6" + "@babel/types" "^7.18.9" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-member-expression-to-functions@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz#1531661e8375af843ad37ac692c132841e2fd815" + integrity sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg== + dependencies: + "@babel/types" "^7.18.9" + +"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz#1e3ebdbbd08aad1437b428c50204db13c5a3ca6e" + integrity sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-module-transforms@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz#5a1079c005135ed627442df31a42887e80fcb712" + integrity sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.18.6" + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz#4b8aea3b069d8cb8a72cdfe28ddf5ceca695ef2f" + integrity sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w== + +"@babel/helper-replace-supers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz#1092e002feca980fbbb0bd4d51b74a65c6a500e6" + integrity sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.18.9" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-simple-access@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz#d6d8f51f4ac2978068df934b569f08f29788c7ea" + integrity sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-validator-identifier@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz#9c97e30d31b2b8c72a1d08984f2ca9b574d7a076" + integrity sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g== + +"@babel/helper-validator-option@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" + integrity sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw== + +"@babel/helpers@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.18.9.tgz#4bef3b893f253a1eced04516824ede94dcfe7ff9" + integrity sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ== + dependencies: + "@babel/template" "^7.18.6" + "@babel/traverse" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.18.6", "@babel/parser@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.9.tgz#f2dde0c682ccc264a9a8595efd030a5cc8fd2539" + integrity sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg== + +"@babel/plugin-proposal-decorators@^7.17.2": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.9.tgz#d09d41ffc74af8499d2ac706ed0dbd5474711665" + integrity sha512-KD7zDNaD14CRpjQjVbV4EnH9lsKYlcpUrhZH37ei2IY+AlXrfAPy5pTmRUE4X6X1k8EsKXPraykxeaogqQvSGA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-replace-supers" "^7.18.9" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/plugin-syntax-decorators" "^7.18.6" + +"@babel/plugin-syntax-decorators@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.18.6.tgz#2e45af22835d0b0f8665da2bfd4463649ce5dbc1" + integrity sha512-fqyLgjcxf/1yhyZ6A+yo1u9gJ7eleFQod2lkaUsF9DQ7sbbY3Ligym3L0+I2c0WmqNKDpoD9UTb1AKP3qRMOAQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-typescript@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz#1c09cd25795c7c2b8a4ba9ae49394576d4133285" + integrity sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-typescript@^7.18.6": + version "7.18.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.18.8.tgz#303feb7a920e650f2213ef37b36bbf327e6fa5a0" + integrity sha512-p2xM8HI83UObjsZGofMV/EdYjamsDm6MoN3hXPYIT0+gxIoopE+B7rPYKAxfrz9K9PK7JafTTjqYC6qipLExYA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-typescript" "^7.18.6" + +"@babel/preset-typescript@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz#ce64be3e63eddc44240c6358daefac17b3186399" + integrity sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-typescript" "^7.18.6" + +"@babel/template@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.6.tgz#1283f4993e00b929d6e2d3c72fdc9168a2977a31" + integrity sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.18.6" + "@babel/types" "^7.18.6" + +"@babel/traverse@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.18.9.tgz#deeff3e8f1bad9786874cb2feda7a2d77a904f98" + integrity sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/generator" "^7.18.9" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.18.9" + "@babel/types" "^7.18.9" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.18.6", "@babel/types@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.18.9.tgz#7148d64ba133d8d73a41b3172ac4b83a1452205f" + integrity sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + to-fast-properties "^2.0.0" + +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@^0.3.9": + version "0.3.14" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz#b231a081d8f66796e475ad588a1ef473112701ed" + integrity sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@rollup/plugin-babel@^5.3.1": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" + integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@rollup/pluginutils" "^3.1.0" + +"@rollup/plugin-commonjs@^21.0.1": + version "21.1.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-21.1.0.tgz#45576d7b47609af2db87f55a6d4b46e44fc3a553" + integrity sha512-6ZtHx3VHIp2ReNNDxHjuUml6ur+WcQ28N1yHgCQwsbNkQg2suhxGMDQGJOn/KuDxKtd1xuZP5xSTwBA4GQ8hbA== + dependencies: + "@rollup/pluginutils" "^3.1.0" + commondir "^1.0.1" + estree-walker "^2.0.1" + glob "^7.1.6" + is-reference "^1.2.1" + magic-string "^0.25.7" + resolve "^1.17.0" + +"@rollup/plugin-node-resolve@^13.1.1": + version "13.3.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz#da1c5c5ce8316cef96a2f823d111c1e4e498801c" + integrity sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw== + dependencies: + "@rollup/pluginutils" "^3.1.0" + "@types/resolve" "1.17.1" + deepmerge "^4.2.2" + is-builtin-module "^3.1.0" + is-module "^1.0.0" + resolve "^1.19.0" + +"@rollup/pluginutils@^3.0.9", "@rollup/pluginutils@^3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" + integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== + dependencies: + "@types/estree" "0.0.39" + estree-walker "^1.0.1" + picomatch "^2.2.2" + +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@types/cacheable-request@^6.0.1": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.2.tgz#c324da0197de0a98a2312156536ae262429ff6b9" + integrity sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "*" + "@types/node" "*" + "@types/responselike" "*" + +"@types/estree@*": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" + integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/http-cache-semantics@*": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" + integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== + +"@types/json-buffer@~3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/json-buffer/-/json-buffer-3.0.0.tgz#85c1ff0f0948fc159810d4b5be35bf8c20875f64" + integrity sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ== + +"@types/keyv@*": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/node@*": + version "18.0.6" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.6.tgz#0ba49ac517ad69abe7a1508bc9b3a5483df9d5d7" + integrity sha512-/xUq6H2aQm261exT6iZTMifUySEt4GR5KX8eYyY+C4MSNPqSh9oNIP7tz2GLKTlFaiBbgZNxffoR3CVRG+cljw== + +"@types/resolve@1.17.1": + version "1.17.1" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" + integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== + dependencies: + "@types/node" "*" + +"@types/responselike@*", "@types/responselike@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" + integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== + dependencies: + "@types/node" "*" + +acorn-walk@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.7.1: + version "8.8.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" + integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +aggregate-error@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-4.0.1.tgz#25091fe1573b9e0be892aeda15c7c66a545f758e" + integrity sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w== + dependencies: + clean-stack "^4.0.0" + indent-string "^5.0.0" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.0.0, ansi-styles@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3" + integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== + +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +array-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +arrgv@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/arrgv/-/arrgv-1.0.2.tgz#025ed55a6a433cad9b604f8112fc4292715a6ec0" + integrity sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw== + +arrify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-3.0.0.tgz#ccdefb8eaf2a1d2ab0da1ca2ce53118759fd46bc" + integrity sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +ava@^4.2.0: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ava/-/ava-4.3.1.tgz#376a788a5a863c39a9dd2dab9fcbbbcf94bf6c38" + integrity sha512-zdSp9QxRTmN5hJeGmg+ZjUKL5yHFLMcP/0KBla8GH25XD8Xm7Uc34CDFlwqGL6JXtjNbVkJ0Zw+DqcTf4ggCCA== + dependencies: + acorn "^8.7.1" + acorn-walk "^8.2.0" + ansi-styles "^6.1.0" + arrgv "^1.0.2" + arrify "^3.0.0" + callsites "^4.0.0" + cbor "^8.1.0" + chalk "^5.0.1" + chokidar "^3.5.3" + chunkd "^2.0.1" + ci-info "^3.3.1" + ci-parallel-vars "^1.0.1" + clean-yaml-object "^0.1.0" + cli-truncate "^3.1.0" + code-excerpt "^4.0.0" + common-path-prefix "^3.0.0" + concordance "^5.0.4" + currently-unhandled "^0.4.1" + debug "^4.3.4" + del "^6.1.1" + emittery "^0.11.0" + figures "^4.0.1" + globby "^13.1.1" + ignore-by-default "^2.1.0" + indent-string "^5.0.0" + is-error "^2.2.2" + is-plain-object "^5.0.0" + is-promise "^4.0.0" + matcher "^5.0.0" + mem "^9.0.2" + ms "^2.1.3" + p-event "^5.0.1" + p-map "^5.4.0" + picomatch "^2.3.1" + pkg-conf "^4.0.0" + plur "^5.1.0" + pretty-ms "^7.0.1" + resolve-cwd "^3.0.0" + slash "^3.0.0" + stack-utils "^2.0.5" + strip-ansi "^7.0.1" + supertap "^3.0.1" + temp-dir "^2.0.0" + write-file-atomic "^4.0.1" + yargs "^17.5.1" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2: + version "3.0.9" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + dependencies: + safe-buffer "^5.0.1" + +base64url@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/base64url/-/base64url-3.0.1.tgz#6399d572e2bc3f90a9a8b22d5dbb0a32d33f788d" + integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +blueimp-md5@^2.10.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.19.0.tgz#b53feea5498dcb53dc6ec4b823adb84b729c4af0" + integrity sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w== + +bn.js@5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" + integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== + +bn.js@^5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +borsh@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.5.0.tgz#d5eed021a34118908d672295819e3c9e44f692ce" + integrity sha512-p9w/qGBeeFdUf2GPBPHdX5JQyez8K5VtoFN7PqSfmR+cVUMSmcwAKhP9n2aXoDSKbtS7xZlZt3MVnrJL7GdYhg== + dependencies: + bn.js "^5.2.0" + bs58 "^4.0.0" + text-encoding-utf-8 "^1.0.2" + +borsh@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.6.0.tgz#a7c9eeca6a31ca9e0607cb49f329cb659eb791e1" + integrity sha512-sl5k89ViqsThXQpYa9XDtz1sBl3l1lI313cFUY1HKr+wvMILnb+58xpkqTNrYbelh99dY7K8usxoCusQmqix9Q== + dependencies: + bn.js "^5.2.0" + bs58 "^4.0.0" + text-encoding-utf-8 "^1.0.2" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.20.2: + version "4.21.2" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.2.tgz#59a400757465535954946a400b841ed37e2b4ecf" + integrity sha512-MonuOgAtUB46uP5CezYbRaYKBNt2LxP0yX+Pmj4LkcDFGkn9Cbpi83d9sCjwQDErXsIJSzY5oKGDbgOlF/LPAA== + dependencies: + caniuse-lite "^1.0.30001366" + electron-to-chromium "^1.4.188" + node-releases "^2.0.6" + update-browserslist-db "^1.0.4" + +bs58@^4.0.0, bs58@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +builtin-modules@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" + integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-request@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" + integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +callsites@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-4.0.0.tgz#8014cea4fedfe681a30e2f7d2d557dd95808a92a" + integrity sha512-y3jRROutgpKdz5vzEhWM34TidDU8vkJppF8dszITeb1PQmSqV3DTxyV8G/lyO/DNvtE1YTedehmw9MPZsCBHxQ== + +caniuse-lite@^1.0.30001366: + version "1.0.30001368" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001368.tgz#c5c06381c6051cd863c45021475434e81936f713" + integrity sha512-wgfRYa9DenEomLG/SdWgQxpIyvdtH3NW8Vq+tB6AwR9e56iOIcu1im5F/wNdDf04XlKHXqIx4N8Jo0PemeBenQ== + +capability@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/capability/-/capability-0.2.5.tgz#51ad87353f1936ffd77f2f21c74633a4dea88801" + integrity sha512-rsJZYVCgXd08sPqwmaIqjAd5SUTfonV0z/gDJ8D6cN8wQphky1kkAYEqQ+hmDxTw7UihvBfjUVUSY+DBEe44jg== + +cbor@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" + integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== + dependencies: + nofilter "^3.1.0" + +chalk@^2.0.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6" + integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w== + +chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" + integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== + +chunkd@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/chunkd/-/chunkd-2.0.1.tgz#49cd1d7b06992dc4f7fccd962fe2a101ee7da920" + integrity sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ== + +ci-info@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.2.tgz#6d2967ffa407466481c6c90b6e16b3098f080128" + integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg== + +ci-parallel-vars@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ci-parallel-vars/-/ci-parallel-vars-1.0.1.tgz#e87ff0625ccf9d286985b29b4ada8485ca9ffbc2" + integrity sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg== + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +clean-stack@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-4.2.0.tgz#c464e4cde4ac789f4e0735c5d75beb49d7b30b31" + integrity sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg== + dependencies: + escape-string-regexp "5.0.0" + +clean-yaml-object@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz#63fb110dc2ce1a84dc21f6d9334876d010ae8b68" + integrity sha512-3yONmlN9CSAkzNwnRCiJQ7Q2xK5mWuEfL3PuTZcAUzhObbXsfsnMptJzXwz93nc5zn9V9TwCVMmV7w4xsm43dw== + +cli-truncate@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" + integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== + dependencies: + slice-ansi "^5.0.0" + string-width "^5.0.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +code-excerpt@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/code-excerpt/-/code-excerpt-4.0.0.tgz#2de7d46e98514385cb01f7b3b741320115f4c95e" + integrity sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA== + dependencies: + convert-to-spaces "^2.0.1" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +common-path-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" + integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +compress-brotli@^1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/compress-brotli/-/compress-brotli-1.3.8.tgz#0c0a60c97a989145314ec381e84e26682e7b38db" + integrity sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ== + dependencies: + "@types/json-buffer" "~3.0.0" + json-buffer "~3.0.1" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concordance@^5.0.4: + version "5.0.4" + resolved "https://registry.yarnpkg.com/concordance/-/concordance-5.0.4.tgz#9896073261adced72f88d60e4d56f8efc4bbbbd2" + integrity sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw== + dependencies: + date-time "^3.1.0" + esutils "^2.0.3" + fast-diff "^1.2.0" + js-string-escape "^1.0.1" + lodash "^4.17.15" + md5-hex "^3.0.1" + semver "^7.3.2" + well-known-symbols "^2.0.0" + +convert-source-map@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" + integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== + dependencies: + safe-buffer "~5.1.1" + +convert-to-spaces@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz#61a6c98f8aa626c16b296b862a91412a33bceb6b" + integrity sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ== + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng== + dependencies: + array-find-index "^1.0.1" + +date-time@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/date-time/-/date-time-3.1.0.tgz#0d1e934d170579f481ed8df1e2b8ff70ee845e1e" + integrity sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg== + dependencies: + time-zone "^1.0.0" + +debug@^4.1.0, debug@^4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deepmerge@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== + +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +del@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" + integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== + dependencies: + globby "^11.0.1" + graceful-fs "^4.2.4" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.2" + p-map "^4.0.0" + rimraf "^3.0.2" + slash "^3.0.0" + +depd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +electron-to-chromium@^1.4.188: + version "1.4.198" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.198.tgz#36a8e7871046f7f94c01dc0133912fd5cf226c6a" + integrity sha512-jwqQPdKGeAslcq8L+1SZZgL6uDiIDmTe9Gq4brsdWAH27y7MJ2g9Ue6MyST3ogmSM49EAQP7bype1V5hsuNrmQ== + +emittery@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.11.0.tgz#eb5f756a200d3431de2c6e850cb2d8afd97a03b9" + integrity sha512-S/7tzL6v5i+4iJd627Nhv9cLFIo5weAIlGccqJFpnBoDB8U1TF2k5tez4J/QNuxyyhWuFqHg1L84Kd3m7iXg6g== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +error-polyfill@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/error-polyfill/-/error-polyfill-0.1.3.tgz#df848b61ad8834f7a5db69a70b9913df86721d15" + integrity sha512-XHJk60ufE+TG/ydwp4lilOog549iiQF2OAPhkk9DdiYWMrltz5yhDz/xnKuenNwP7gy3dsibssO5QpVhkrSzzg== + dependencies: + capability "^0.2.5" + o3 "^1.0.3" + u3 "^0.1.1" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-string-regexp@5.0.0, escape-string-regexp@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + +estree-walker@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +esutils@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +fast-diff@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" + integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== + +fast-glob@^3.2.11, fast-glob@^3.2.9: + version "3.2.11" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" + integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fastq@^1.6.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + dependencies: + reusify "^1.0.4" + +figures@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/figures/-/figures-4.0.1.tgz#27b26609907bc888b3e3b0ef5403643f80aa2518" + integrity sha512-rElJwkA/xS04Vfg+CaZodpso7VqBknOYbzi6I76hI4X80RUjkSxO2oAyPmGbuXUppywjqndOrQDl817hDnI++w== + dependencies: + escape-string-regexp "^5.0.0" + is-unicode-supported "^1.2.0" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-up@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" + integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== + dependencies: + locate-path "^7.1.0" + path-exists "^5.0.0" + +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-minipass@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@^7.1.3, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globby@^11.0.1: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^13.1.1: + version "13.1.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.2.tgz#29047105582427ab6eca4f905200667b056da515" + integrity sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.2.11" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^4.0.0" + +got@^11.8.2: + version "11.8.5" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.5.tgz#ce77d045136de56e8f024bebb82ea349bc730046" + integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: + version "4.2.10" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" + integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-errors@^1.7.2: + version "1.8.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" + integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.1" + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +ignore-by-default@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-2.1.0.tgz#c0e0de1a99b6065bdc93315a6f728867981464db" + integrity sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw== + +ignore@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" + integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +indent-string@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-5.0.0.tgz#4fd2980fccaf8622d14c64d694f4cf33c81951a5" + integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +irregular-plurals@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-3.3.0.tgz#67d0715d4361a60d9fd9ee80af3881c631a31ee2" + integrity sha512-MVBLKUTangM3EfRPFROhmWQQKRDsrgI83J8GS3jXy+OwYqiR2/aoWndYQ5416jLE3uaGgLH7ncme3X9y09gZ3g== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-builtin-module@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.1.0.tgz#6fdb24313b1c03b75f8b9711c0feb8c30b903b00" + integrity sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg== + dependencies: + builtin-modules "^3.0.0" + +is-core-module@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" + integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== + dependencies: + has "^1.0.3" + +is-error@^2.2.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-error/-/is-error-2.2.2.tgz#c10ade187b3c93510c5470a5567833ee25649843" + integrity sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-path-cwd@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-inside@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + +is-promise@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" + integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== + +is-reference@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== + dependencies: + "@types/estree" "*" + +is-unicode-supported@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.2.0.tgz#f4f54f34d8ebc84a46b93559a036763b6d3e1014" + integrity sha512-wH+U77omcRzevfIG8dDhTS0V9zZyweakfD01FULl97+0EHiJTTZtJqxPSkIIo/SDPv/i07k/C9jAPY+jwLLeUQ== + +js-sha256@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" + integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== + +js-string-escape@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" + integrity sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.14.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +json-buffer@3.0.1, json-buffer@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json5@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" + integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +keyv@^4.0.0: + version "4.3.3" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.3.3.tgz#6c1bcda6353a9e96fc1b4e1aeb803a6e35090ba9" + integrity sha512-AcysI17RvakTh8ir03+a3zJr5r0ovnAH/XTXei/4HIv3bL2K/jzvgivLK9UuI/JbU1aJjM3NSAnVvVVd3n+4DQ== + dependencies: + compress-brotli "^1.3.8" + json-buffer "3.0.1" + +load-json-file@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-7.0.1.tgz#a3c9fde6beffb6bedb5acf104fad6bb1604e1b00" + integrity sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ== + +locate-path@^7.1.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.1.1.tgz#8e1e5a75c7343770cef02ff93c4bf1f0aa666374" + integrity sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg== + dependencies: + p-locate "^6.0.0" + +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash@^4.17.15: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +magic-string@^0.25.7: + version "0.25.9" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" + integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== + dependencies: + sourcemap-codec "^1.4.8" + +map-age-cleaner@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" + integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== + dependencies: + p-defer "^1.0.0" + +matcher@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/matcher/-/matcher-5.0.0.tgz#cd82f1c7ae7ee472a9eeaf8ec7cac45e0fe0da62" + integrity sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw== + dependencies: + escape-string-regexp "^5.0.0" + +md5-hex@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-3.0.1.tgz#be3741b510591434b2784d79e556eefc2c9a8e5c" + integrity sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw== + dependencies: + blueimp-md5 "^2.10.0" + +mem@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/mem/-/mem-9.0.2.tgz#bbc2d40be045afe30749681e8f5d554cee0c0354" + integrity sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A== + dependencies: + map-age-cleaner "^0.1.3" + mimic-fn "^4.0.0" + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minipass@^3.0.0: + version "3.3.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" + integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== + dependencies: + yallist "^4.0.0" + +minizlib@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" + integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mustache@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" + integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== + +near-api-js@^0.44.1: + version "0.44.2" + resolved "https://registry.yarnpkg.com/near-api-js/-/near-api-js-0.44.2.tgz#e451f68f2c56bd885c7b918db5818a3e6e9423d0" + integrity sha512-eMnc4V+geggapEUa3nU2p8HSHn/njtloI4P2mceHQWO8vDE1NGpnAw8FuTBrLmXSgIv9m6oocgFc9t3VNf5zwg== + dependencies: + bn.js "5.2.0" + borsh "^0.6.0" + bs58 "^4.0.0" + depd "^2.0.0" + error-polyfill "^0.1.3" + http-errors "^1.7.2" + js-sha256 "^0.9.0" + mustache "^4.0.0" + node-fetch "^2.6.1" + text-encoding-utf-8 "^1.0.2" + tweetnacl "^1.0.1" + +near-sandbox@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/near-sandbox/-/near-sandbox-0.0.8.tgz#5496e300554e9e722fa200204dc8cd302e0074c7" + integrity sha512-3JrDcA9rI+wA9lWqfOtSovGxBE/TDZL011TLk+jz5wGezVbm7m3tDh/zCfq+++eFyJ3ZbGkG0KF6+trMQJFPQQ== + dependencies: + got "^11.8.2" + tar "^6.1.0" + +"near-sdk-js@file:..": + version "0.3.0" + dependencies: + "@babel/core" "^7.17.5" + "@babel/plugin-proposal-decorators" "^7.17.2" + "@babel/preset-typescript" "^7.18.6" + "@rollup/plugin-babel" "^5.3.1" + "@rollup/plugin-commonjs" "^21.0.1" + "@rollup/plugin-node-resolve" "^13.1.1" + rollup "^2.61.1" + rollup-plugin-sourcemaps "^0.6.3" + yargs "^17.5.1" + +near-units@^0.1.9: + version "0.1.9" + resolved "https://registry.yarnpkg.com/near-units/-/near-units-0.1.9.tgz#4bf07da0b046e08e0b8785ad8e32d4df3a944b93" + integrity sha512-xiuBjpNsi+ywiu7P6iWRZdgFm7iCr/cfWlVO6+e5uaAqH4mE1rrurElyrL91llNDSnMwogd9XmlZOw5KbbHNsA== + dependencies: + bn.js "^5.2.0" + +near-workspaces@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/near-workspaces/-/near-workspaces-2.0.0.tgz#32f7c6999bca8209b7a173986c7ce08218506ebc" + integrity sha512-oxV9B/LBGKM1cQHfZI476GSiUFLRg/0t7PiPGDyUVVsFWpkBLbQEF9EVP2nxctO7HWopAe5SJJTGp0o0ct8B1A== + dependencies: + base64url "^3.0.1" + bn.js "^5.2.0" + borsh "^0.5.0" + bs58 "^4.0.1" + callsites "^4.0.0" + fs-extra "^10.0.0" + js-sha256 "^0.9.0" + near-api-js "^0.44.1" + near-sandbox "^0.0.8" + near-units "^0.1.9" + node-port-check "^2.0.1" + promisify-child-process "^4.1.1" + pure-uuid "^1.6.2" + rimraf "^3.0.2" + temp-dir "^2.0.0" + +node-fetch@^2.6.1: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-port-check@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/node-port-check/-/node-port-check-2.0.1.tgz#72cae367d3ca906b0903b261ce818c297aade11f" + integrity sha512-PV1tj5OPbWwxvhPcChXxwCIKl/IfVEdPP4u/gQz2lao/VGoeIUXb/4U72KSHLZpTVBmgTnMm0me7yR0wUsIuPg== + +node-releases@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" + integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== + +nofilter@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" + integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +o3@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/o3/-/o3-1.0.3.tgz#192ce877a882dfa6751f0412a865fafb2da1dac0" + integrity sha512-f+4n+vC6s4ysy7YO7O2gslWZBUu8Qj2i2OUJOvjRxQva7jVjYjB29jrr9NCjmxZQR0gzrOcv1RnqoYOeMs5VRQ== + dependencies: + capability "^0.2.5" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== + +p-event@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/p-event/-/p-event-5.0.1.tgz#614624ec02ae7f4f13d09a721c90586184af5b0c" + integrity sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ== + dependencies: + p-timeout "^5.0.2" + +p-limit@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" + integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== + dependencies: + yocto-queue "^1.0.0" + +p-locate@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" + integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== + dependencies: + p-limit "^4.0.0" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-map@^5.4.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-5.5.0.tgz#054ca8ca778dfa4cf3f8db6638ccb5b937266715" + integrity sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg== + dependencies: + aggregate-error "^4.0.0" + +p-timeout@^5.0.2: + version "5.1.0" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-5.1.0.tgz#b3c691cf4415138ce2d9cfe071dba11f0fee085b" + integrity sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew== + +parse-ms@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" + integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== + +path-exists@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" + integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pkg-conf@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-4.0.0.tgz#63ace00cbacfa94c2226aee133800802d3e3b80c" + integrity sha512-7dmgi4UY4qk+4mj5Cd8v/GExPo0K+SlY+hulOSdfZ/T6jVH6//y7NtzZo5WrfhDBxuQ0jCa7fLZmNaNh7EWL/w== + dependencies: + find-up "^6.0.0" + load-json-file "^7.0.0" + +plur@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/plur/-/plur-5.1.0.tgz#bff58c9f557b9061d60d8ebf93959cf4b08594ae" + integrity sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg== + dependencies: + irregular-plurals "^3.3.0" + +pretty-ms@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.1.tgz#7d903eaab281f7d8e03c66f867e239dc32fb73e8" + integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q== + dependencies: + parse-ms "^2.1.0" + +promisify-child-process@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/promisify-child-process/-/promisify-child-process-4.1.1.tgz#290659e079f9c7bd46708404d4488a1a6b802686" + integrity sha512-/sRjHZwoXf1rJ+8s4oWjYjGRVKNK1DUnqfRC1Zek18pl0cN6k3yJ1cCbqd0tWNe4h0Gr+SY4vR42N33+T82WkA== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pure-uuid@^1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/pure-uuid/-/pure-uuid-1.6.2.tgz#64f3032d54953b93b0585be3263a2629f1d60a04" + integrity sha512-WQ4xz74ApW6s0BToRuuyuMo9g0VHx1HljY0H2gPng+mqqz/K1yLj7sHZonZZQ2++WfHl/ZzruilWvuz+WtmxjQ== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve@^1.17.0, resolve@^1.19.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rollup-plugin-sourcemaps@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz#bf93913ffe056e414419607f1d02780d7ece84ed" + integrity sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw== + dependencies: + "@rollup/pluginutils" "^3.0.9" + source-map-resolve "^0.6.0" + +rollup@^2.61.1: + version "2.77.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.77.0.tgz#749eaa5ac09b6baa52acc076bc46613eddfd53f4" + integrity sha512-vL8xjY4yOQEw79DvyXLijhnhh+R/O9zpF/LEgkCebZFtb6ELeN9H3/2T0r8+mp+fFTBHZ5qGpOpW2ela2zRt3g== + optionalDependencies: + fsevents "~2.3.2" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-buffer@^5.0.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.2: + version "7.3.7" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" + integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== + dependencies: + lru-cache "^6.0.0" + +serialize-error@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18" + integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== + dependencies: + type-fest "^0.13.1" + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + +source-map-resolve@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" + integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + +sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stack-utils@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" + integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== + dependencies: + escape-string-regexp "^2.0.0" + +"statuses@>= 1.5.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + dependencies: + ansi-regex "^6.0.1" + +supertap@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/supertap/-/supertap-3.0.1.tgz#aa89e4522104402c6e8fe470a7d2db6dc4037c6a" + integrity sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw== + dependencies: + indent-string "^5.0.0" + js-yaml "^3.14.1" + serialize-error "^7.0.1" + strip-ansi "^7.0.1" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +tar@^6.1.0: + version "6.1.11" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" + integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== + dependencies: + chownr "^2.0.0" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.1" + mkdirp "^1.0.3" + yallist "^4.0.0" + +temp-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" + integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== + +text-encoding-utf-8@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" + integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== + +time-zone@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/time-zone/-/time-zone-1.0.0.tgz#99c5bf55958966af6d06d83bdf3800dc82faec5d" + integrity sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +tweetnacl@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" + integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== + +type-fest@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" + integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== + +typescript@^4.7.4: + version "4.7.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== + +u3@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/u3/-/u3-0.1.1.tgz#5f52044f42ee76cd8de33148829e14528494b73b" + integrity sha512-+J5D5ir763y+Am/QY6hXNRlwljIeRMZMGs0cT6qqZVVzzT3X3nFPXVyPOFRMOR4kupB0T8JnCdpWdp6Q/iXn3w== + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +update-browserslist-db@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" + integrity sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +well-known-symbols@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/well-known-symbols/-/well-known-symbols-2.0.0.tgz#e9c7c07dbd132b7b84212c8174391ec1f9871ba5" + integrity sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f" + integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^21.0.0: + version "21.0.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" + integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== + +yargs@^17.5.1: + version "17.5.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" + integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.0.0" + +yocto-queue@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" + integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== diff --git a/src/index.ts b/src/index.ts index ce2be642..7548bcf4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -11,7 +11,7 @@ import { UnorderedSet, } from "./collections"; -import { bytes, Bytes } from "./utils"; +import { bytes, Bytes, storage_byte_cost } from "./utils"; export { call, diff --git a/src/utils.ts b/src/utils.ts index b138a0d1..cc6dec26 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -40,3 +40,15 @@ function checkStringIsBytes(str: string) { } return str; } + +export function storage_byte_cost(): BigInt { + return 10000000000000000000n; +} + +export function assert(b: boolean, str: string) { + if (b) { + return + } else { + throw Error("assertion failed: " + str) + } +} \ No newline at end of file From a2dda0fdf3497673254ed1bac844fdf056b3934e Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Mon, 25 Jul 2022 16:57:06 +0800 Subject: [PATCH 02/44] more utils and struct definitions --- .../src/non_fungible_token/index.js | 0 .../src/non_fungible_token/metadata.js | 56 +++++++++++++++++++ .../src/non_fungible_token/token.js | 8 +++ .../src/non_fungible_token/utils.js | 14 ++++- 4 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 near-contract-standards/src/non_fungible_token/index.js create mode 100644 near-contract-standards/src/non_fungible_token/metadata.js create mode 100644 near-contract-standards/src/non_fungible_token/token.js diff --git a/near-contract-standards/src/non_fungible_token/index.js b/near-contract-standards/src/non_fungible_token/index.js new file mode 100644 index 00000000..e69de29b diff --git a/near-contract-standards/src/non_fungible_token/metadata.js b/near-contract-standards/src/non_fungible_token/metadata.js new file mode 100644 index 00000000..291672f0 --- /dev/null +++ b/near-contract-standards/src/non_fungible_token/metadata.js @@ -0,0 +1,56 @@ +import {near, utils} from 'near-sdk-js' + +export const NFT_METADATA_SPEC = "nft-1.0.0"; + +export class NFTContractMetadata { + constructor({spec, name, symbol, icon, base_uri, reference, reference_hash}) { + this.spec = spec // required, essentially a version like "nft-1.0.0" + this.name = name // required, ex. "Mosaics" + this.symbol = symbol // required, ex. "MOSIAC" + this.icon = icon // Data URL + this.base_uri = base_uri // Centralized gateway known to have reliable access to decentralized storage assets referenced by `reference` or `media` URLs + this.reference = reference // URL to a JSON file with more info + this.reference_uri = reference_uri // Base64-encoded sha256 hash of JSON from reference field. Required if `reference` is included. + } + + assert_valid() { + utils.assert(self.spec == NFT_METADATA_SPEC, "Spec is not NFT metadata"); + utils.assert( + (self.reference != null) == (self.reference_hash != null), + "Reference and reference hash must be present" + ); + if (this.reference_hash != null) { + utils.assert(this.reference_hash.length == 32, "Hash has to be 32 bytes"); + } + } +} + + +export class TokenMetadata { + constructor({title, description, media, media_hash, copies, issued_at, expires_at, starts_at, updated_at, extra, reference, reference_hash}) { + this.title = title // ex. "Arch Nemesis: Mail Carrier" or "Parcel #5055" + this.description = description // free-form description + this.media = media // URL to associated media, preferably to decentralized, content-addressed storage + this.media_hash = media_hash // Base64-encoded sha256 hash of content referenced by the `media` field. Required if `media` is included. + this.copies = copies // number of copies of this set of metadata in existence when token was minted. + this.issued_at = issued_at // ISO 8601 datetime when token was issued or minted + this.expires_at = expires_at // ISO 8601 datetime when token expires + this.starts_at = starts_at // ISO 8601 datetime when token starts being valid + this.updated_at = updated_at // ISO 8601 datetime when token was last updated + this.extra = extra // anything extra the NFT wants to store on-chain. Can be stringified JSON. + this.reference = reference // URL to an off-chain JSON file with more info. + this.reference_hash = reference_hash // Base64-encoded sha256 hash of JSON from reference field. Required if `reference` is included. + } + + assert_valid() { + utils.assert((this.media != null) == (this.media_hash != null)); + if (this.media_hash != null) { + utils.assert(this.media_hash.length == 32, "Media hash has to be 32 bytes"); + } + + utils.assert((this.reference != null) == (this.reference_hash != null)); + if (this.reference_hash != null) { + utils.assert(this.reference_hash.length == 32, "Reference hash has to be 32 bytes"); + } + } +} \ No newline at end of file diff --git a/near-contract-standards/src/non_fungible_token/token.js b/near-contract-standards/src/non_fungible_token/token.js new file mode 100644 index 00000000..5996ce6f --- /dev/null +++ b/near-contract-standards/src/non_fungible_token/token.js @@ -0,0 +1,8 @@ +export class Token { + constructor(token_id, owner_id, metadata, approved_account_ids) { + this.token_id = token_id + this.owner_id = owner_id + this.metadata = metadata + this.approved_account_ids = approved_account_ids + } +} \ No newline at end of file diff --git a/near-contract-standards/src/non_fungible_token/utils.js b/near-contract-standards/src/non_fungible_token/utils.js index ff7f0f18..91d80250 100644 --- a/near-contract-standards/src/non_fungible_token/utils.js +++ b/near-contract-standards/src/non_fungible_token/utils.js @@ -27,4 +27,16 @@ export function refund_deposit_to_account(storage_used, account_id) { near.promiseBatchActionTransfer(refund) near.promiseReturn(promise_id) } -} \ No newline at end of file +} + +export function refund_deposit(storage_used) { + refund_deposit_to_account(storage_used, near.predecessorAccountId()) +} + +export function hash_account_id(account_id) { + return near.sha256(account_id) +} + +export function assert_at_least_one_yocto() { + utils.assert(env.attachedDeposit() >= 1n, "Requires attached deposit of at least 1 yoctoNEAR") +} From a89f0efd1b16d32c8a1b24a0e670c9396e828cc6 Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Wed, 10 Aug 2022 16:24:19 +0800 Subject: [PATCH 03/44] convert to typescript, model events --- lib/api.d.ts | 58 ++++++------- lib/index.d.ts | 3 +- lib/index.js | 3 +- lib/utils.d.ts | 3 + near-contract-standards/src/event.ts | 15 ++++ .../src/{index.js => index.ts} | 0 .../src/non_fungible_token/core/core_impl.ts | 39 +++++++++ .../src/non_fungible_token/events.ts | 58 +++++++++++++ .../non_fungible_token/{index.js => index.ts} | 0 .../src/non_fungible_token/metadata.js | 56 ------------- .../src/non_fungible_token/metadata.ts | 57 +++++++++++++ .../src/non_fungible_token/token.js | 8 -- .../src/non_fungible_token/token.ts | 5 ++ .../src/non_fungible_token/utils.js | 42 ---------- .../src/non_fungible_token/utils.ts | 42 ++++++++++ src/api.ts | 82 +++++++++---------- src/utils.ts | 4 + 17 files changed, 297 insertions(+), 178 deletions(-) create mode 100644 near-contract-standards/src/event.ts rename near-contract-standards/src/{index.js => index.ts} (100%) create mode 100644 near-contract-standards/src/non_fungible_token/core/core_impl.ts create mode 100644 near-contract-standards/src/non_fungible_token/events.ts rename near-contract-standards/src/non_fungible_token/{index.js => index.ts} (100%) delete mode 100644 near-contract-standards/src/non_fungible_token/metadata.js create mode 100644 near-contract-standards/src/non_fungible_token/metadata.ts delete mode 100644 near-contract-standards/src/non_fungible_token/token.js create mode 100644 near-contract-standards/src/non_fungible_token/token.ts delete mode 100644 near-contract-standards/src/non_fungible_token/utils.js create mode 100644 near-contract-standards/src/non_fungible_token/utils.ts diff --git a/lib/api.d.ts b/lib/api.d.ts index aaedb3ce..4c9d3ae1 100644 --- a/lib/api.d.ts +++ b/lib/api.d.ts @@ -3,13 +3,13 @@ export declare function log(...params: any[]): void; export declare function signerAccountId(): string; export declare function signerAccountPk(): Bytes; export declare function predecessorAccountId(): string; -export declare function blockIndex(): BigInt; -export declare function blockHeight(): BigInt; -export declare function blockTimestamp(): BigInt; -export declare function epochHeight(): BigInt; -export declare function attachedDeposit(): BigInt; -export declare function prepaidGas(): BigInt; -export declare function usedGas(): BigInt; +export declare function blockIndex(): bigint; +export declare function blockHeight(): bigint; +export declare function blockTimestamp(): bigint; +export declare function epochHeight(): bigint; +export declare function attachedDeposit(): bigint; +export declare function prepaidGas(): bigint; +export declare function usedGas(): bigint; export declare function randomSeed(): Bytes; export declare function sha256(value: Bytes): Bytes; export declare function keccak256(value: Bytes): Bytes; @@ -23,7 +23,7 @@ export declare function logUtf16(msg: string): void; export declare function storageRead(key: Bytes): Bytes | null; export declare function storageHasKey(key: Bytes): boolean; export declare function validatorStake(accountId: string): any; -export declare function validatorTotalStake(): BigInt; +export declare function validatorTotalStake(): bigint; export declare function altBn128G1Multiexp(value: Bytes): Bytes; export declare function altBn128G1Sum(value: Bytes): Bytes; export declare function altBn128PairingCheck(value: Bytes): boolean; @@ -41,32 +41,32 @@ export declare function storageGetEvicted(): Bytes; export declare function jsvmValueReturn(value: Bytes): void; export declare function currentAccountId(): string; export declare function input(): Bytes; -export declare function storageUsage(): BigInt; -export declare function accountBalance(): BigInt; -export declare function accountLockedBalance(): BigInt; +export declare function storageUsage(): bigint; +export declare function accountBalance(): bigint; +export declare function accountLockedBalance(): bigint; export declare function valueReturn(value: Bytes): void; -export declare function promiseCreate(accountId: string, methodName: string, args: Bytes, amount: number | BigInt, gas: number | BigInt): BigInt; -export declare function promiseThen(promiseIndex: number | BigInt, accountId: string, methodName: string, args: Bytes, amount: number | BigInt, gas: number | BigInt): any; -export declare function promiseAnd(...promiseIndex: number[] | BigInt[]): BigInt; -export declare function promiseBatchCreate(accountId: string): BigInt; -export declare function promiseBatchThen(promiseIndex: number | BigInt, accountId: string): BigInt; -export declare function promiseBatchActionCreateAccount(promiseIndex: number | BigInt): void; -export declare function promiseBatchActionDeployContract(promiseIndex: number | BigInt, code: Bytes): void; -export declare function promiseBatchActionFunctionCall(promiseIndex: number | BigInt, methodName: string, args: Bytes, amount: number | BigInt, gas: number | BigInt): void; -export declare function promiseBatchActionTransfer(promiseIndex: number | BigInt, amount: number | BigInt): void; -export declare function promiseBatchActionStake(promiseIndex: number | BigInt, amount: number | BigInt, publicKey: Bytes): void; -export declare function promiseBatchActionAddKeyWithFullAccess(promiseIndex: number | BigInt, publicKey: Bytes, nonce: number | BigInt): void; -export declare function promiseBatchActionAddKeyWithFunctionCall(promiseIndex: number | BigInt, publicKey: Bytes, nonce: number | BigInt, allowance: number | BigInt, receiverId: string, methodNames: string): void; -export declare function promiseBatchActionDeleteKey(promiseIndex: number | BigInt, publicKey: Bytes): void; -export declare function promiseBatchActionDeleteAccount(promiseIndex: number | BigInt, beneficiaryId: string): void; -export declare function promiseResultsCount(): BigInt; +export declare function promiseCreate(accountId: string, methodName: string, args: Bytes, amount: number | bigint, gas: number | bigint): bigint; +export declare function promiseThen(promiseIndex: number | bigint, accountId: string, methodName: string, args: Bytes, amount: number | bigint, gas: number | bigint): any; +export declare function promiseAnd(...promiseIndex: number[] | bigint[]): bigint; +export declare function promiseBatchCreate(accountId: string): bigint; +export declare function promiseBatchThen(promiseIndex: number | bigint, accountId: string): bigint; +export declare function promiseBatchActionCreateAccount(promiseIndex: number | bigint): void; +export declare function promiseBatchActionDeployContract(promiseIndex: number | bigint, code: Bytes): void; +export declare function promiseBatchActionFunctionCall(promiseIndex: number | bigint, methodName: string, args: Bytes, amount: number | bigint, gas: number | bigint): void; +export declare function promiseBatchActionTransfer(promiseIndex: number | bigint, amount: number | bigint): void; +export declare function promiseBatchActionStake(promiseIndex: number | bigint, amount: number | bigint, publicKey: Bytes): void; +export declare function promiseBatchActionAddKeyWithFullAccess(promiseIndex: number | bigint, publicKey: Bytes, nonce: number | bigint): void; +export declare function promiseBatchActionAddKeyWithFunctionCall(promiseIndex: number | bigint, publicKey: Bytes, nonce: number | bigint, allowance: number | bigint, receiverId: string, methodNames: string): void; +export declare function promiseBatchActionDeleteKey(promiseIndex: number | bigint, publicKey: Bytes): void; +export declare function promiseBatchActionDeleteAccount(promiseIndex: number | bigint, beneficiaryId: string): void; +export declare function promiseResultsCount(): bigint; export declare enum PromiseResult { NotReady = 0, Successful = 1, Failed = 2 } -export declare function promiseResult(resultIdx: number | BigInt): Bytes | PromiseResult.NotReady | PromiseResult.Failed; -export declare function promiseReturn(promiseIdx: number | BigInt): void; +export declare function promiseResult(resultIdx: number | bigint): Bytes | PromiseResult.NotReady | PromiseResult.Failed; +export declare function promiseReturn(promiseIdx: number | bigint): void; export declare function storageWrite(key: Bytes, value: Bytes): boolean; export declare function storageRemove(key: Bytes): boolean; -export declare function storageByteCost(): BigInt; +export declare function storageByteCost(): bigint; diff --git a/lib/index.d.ts b/lib/index.d.ts index 3e3000f0..bb8fb284 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -3,4 +3,5 @@ import { NearContract } from "./near-contract"; import * as near from "./api"; import { LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet } from "./collections"; import { bytes, Bytes, assert } from "./utils"; -export { call, view, NearBindgen, NearContract, near, LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet, bytes, Bytes, assert, }; +import * as utils from "./utils"; +export { call, view, NearBindgen, NearContract, near, LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet, bytes, Bytes, assert, utils }; diff --git a/lib/index.js b/lib/index.js index bc19a391..013fed5f 100644 --- a/lib/index.js +++ b/lib/index.js @@ -3,4 +3,5 @@ import { NearContract } from "./near-contract"; import * as near from "./api"; import { LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet, } from "./collections"; import { bytes, assert } from "./utils"; -export { call, view, NearBindgen, NearContract, near, LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet, bytes, assert, }; +import * as utils from "./utils"; +export { call, view, NearBindgen, NearContract, near, LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet, bytes, assert, utils }; diff --git a/lib/utils.d.ts b/lib/utils.d.ts index 1c5e42a0..3b13bc46 100644 --- a/lib/utils.d.ts +++ b/lib/utils.d.ts @@ -6,3 +6,6 @@ export declare function assert(b: boolean, str: string): void; export declare type Mutable = { -readonly [P in keyof T]: T[P]; }; +export interface IntoStorageKey { + into_storage_key(): Bytes; +} diff --git a/near-contract-standards/src/event.ts b/near-contract-standards/src/event.ts new file mode 100644 index 00000000..6a286586 --- /dev/null +++ b/near-contract-standards/src/event.ts @@ -0,0 +1,15 @@ +import {near} from 'near-sdk-js' + +export class NearEvent { + internal_to_json_string(): string { + return JSON.stringify(this) + } + + internal_to_json_event_string(): string { + return `EVENT_JSON: ${this.internal_to_json_string()}` + } + + emit(): void { + near.log(this.internal_to_json_event_string()) + } +} \ No newline at end of file diff --git a/near-contract-standards/src/index.js b/near-contract-standards/src/index.ts similarity index 100% rename from near-contract-standards/src/index.js rename to near-contract-standards/src/index.ts diff --git a/near-contract-standards/src/non_fungible_token/core/core_impl.ts b/near-contract-standards/src/non_fungible_token/core/core_impl.ts new file mode 100644 index 00000000..ae4cf956 --- /dev/null +++ b/near-contract-standards/src/non_fungible_token/core/core_impl.ts @@ -0,0 +1,39 @@ +import { UnorderedMap, LookupMap, Bytes } from "near-sdk-js"; +import { IntoStorageKey } from "near-sdk-js/lib/utils" +const GAS_FOR_RESOLVE_TRANSFER = 5_000_000_000_000n; +const GAS_FOR_NFT_TRANSFER_CALL = 25_000_000_000_000n + GAS_FOR_RESOLVE_TRANSFER; + +export class NonFungibleToken { + public owner: string; + public extra_storage_in_bytes_per_token: bigint; + public owner_by_id: UnorderedMap; + public token_metadata_by_id: LookupMap | null; + public tokens_per_owner: LookupMap | null; + public approvals_by_id: LookupMap | null; + public next_approval_id_by_id: LookupMap | null; + + constructor( + owner_by_id_prefix: IntoStorageKey, + owner_id: string, + token_metadata_prefix: IntoStorageKey | null, + enumeration_prefix: IntoStorageKey | null, + approval_prefix: IntoStorageKey | null, + ) { + + } +} + +export type StorageKey = TokensPerOwner | TokenPerOwnerInner; + +export class TokensPerOwner { + constructor( + public account_hash: Bytes + ) {} +} + +export class TokenPerOwnerInner { + constructor( + public account_id_hash: Bytes + ) {} +} + diff --git a/near-contract-standards/src/non_fungible_token/events.ts b/near-contract-standards/src/non_fungible_token/events.ts new file mode 100644 index 00000000..5ba03ed4 --- /dev/null +++ b/near-contract-standards/src/non_fungible_token/events.ts @@ -0,0 +1,58 @@ +import {NearEvent} from '../event' + +export type Nep171EventKind = NftMint[] | NftTransfer[] | NftBurn[]; + +export class Nep171Event extends NearEvent { + version: string; + event_kind: Nep171EventKind; + + constructor(version: string, event_kind: Nep171EventKind) { + super(); + this.version = version; + this.event_kind = event_kind; + } +} + +class NftMint { + constructor(public owner_id: string, public token_ids: string[], public memo: string) {} + + emit() { + NftMint.emit_many([this]); + } + + static emit_many(data: NftMint[]) { + new_171_v1(data).emit() + } +} + +class NftTransfer { + constructor(public old_owner_id: string, public new_owner_id: string, public token_ids: string[], public memo: string | null) {} + + emit() { + NftTransfer.emit_many([this]); + } + + static emit_many(data: NftTransfer[]) { + new_171_v1(data).emit() + } +} + +class NftBurn { + constructor(public owner_id: string, public token_ids: string[], authorized_id: string | null, public memo: string | null) {} + + emit() { + NftBurn.emit_many([this]); + } + + static emit_many(data: NftBurn[]) { + new_171_v1(data).emit() + } +} + +function new_171(version: string, event_kind: Nep171EventKind): NearEvent { + return new Nep171Event(version, event_kind); +} + +function new_171_v1(event_kind: Nep171EventKind): NearEvent { + return new_171("1.0.0", event_kind); +} \ No newline at end of file diff --git a/near-contract-standards/src/non_fungible_token/index.js b/near-contract-standards/src/non_fungible_token/index.ts similarity index 100% rename from near-contract-standards/src/non_fungible_token/index.js rename to near-contract-standards/src/non_fungible_token/index.ts diff --git a/near-contract-standards/src/non_fungible_token/metadata.js b/near-contract-standards/src/non_fungible_token/metadata.js deleted file mode 100644 index 291672f0..00000000 --- a/near-contract-standards/src/non_fungible_token/metadata.js +++ /dev/null @@ -1,56 +0,0 @@ -import {near, utils} from 'near-sdk-js' - -export const NFT_METADATA_SPEC = "nft-1.0.0"; - -export class NFTContractMetadata { - constructor({spec, name, symbol, icon, base_uri, reference, reference_hash}) { - this.spec = spec // required, essentially a version like "nft-1.0.0" - this.name = name // required, ex. "Mosaics" - this.symbol = symbol // required, ex. "MOSIAC" - this.icon = icon // Data URL - this.base_uri = base_uri // Centralized gateway known to have reliable access to decentralized storage assets referenced by `reference` or `media` URLs - this.reference = reference // URL to a JSON file with more info - this.reference_uri = reference_uri // Base64-encoded sha256 hash of JSON from reference field. Required if `reference` is included. - } - - assert_valid() { - utils.assert(self.spec == NFT_METADATA_SPEC, "Spec is not NFT metadata"); - utils.assert( - (self.reference != null) == (self.reference_hash != null), - "Reference and reference hash must be present" - ); - if (this.reference_hash != null) { - utils.assert(this.reference_hash.length == 32, "Hash has to be 32 bytes"); - } - } -} - - -export class TokenMetadata { - constructor({title, description, media, media_hash, copies, issued_at, expires_at, starts_at, updated_at, extra, reference, reference_hash}) { - this.title = title // ex. "Arch Nemesis: Mail Carrier" or "Parcel #5055" - this.description = description // free-form description - this.media = media // URL to associated media, preferably to decentralized, content-addressed storage - this.media_hash = media_hash // Base64-encoded sha256 hash of content referenced by the `media` field. Required if `media` is included. - this.copies = copies // number of copies of this set of metadata in existence when token was minted. - this.issued_at = issued_at // ISO 8601 datetime when token was issued or minted - this.expires_at = expires_at // ISO 8601 datetime when token expires - this.starts_at = starts_at // ISO 8601 datetime when token starts being valid - this.updated_at = updated_at // ISO 8601 datetime when token was last updated - this.extra = extra // anything extra the NFT wants to store on-chain. Can be stringified JSON. - this.reference = reference // URL to an off-chain JSON file with more info. - this.reference_hash = reference_hash // Base64-encoded sha256 hash of JSON from reference field. Required if `reference` is included. - } - - assert_valid() { - utils.assert((this.media != null) == (this.media_hash != null)); - if (this.media_hash != null) { - utils.assert(this.media_hash.length == 32, "Media hash has to be 32 bytes"); - } - - utils.assert((this.reference != null) == (this.reference_hash != null)); - if (this.reference_hash != null) { - utils.assert(this.reference_hash.length == 32, "Reference hash has to be 32 bytes"); - } - } -} \ No newline at end of file diff --git a/near-contract-standards/src/non_fungible_token/metadata.ts b/near-contract-standards/src/non_fungible_token/metadata.ts new file mode 100644 index 00000000..9f55fa50 --- /dev/null +++ b/near-contract-standards/src/non_fungible_token/metadata.ts @@ -0,0 +1,57 @@ +import { Bytes } from 'near-sdk-js'; +import {near, assert} from 'near-sdk-js' + +export const NFT_METADATA_SPEC = "nft-1.0.0"; + +export class NFTContractMetadata { + constructor( + public spec: string, // required, essentially a version like "nft-1.0.0" + public name: string, // required, ex. "Mosaics" + public symbol: string, // required, ex. "MOSIAC" + public icon: string | null, // Data URL + public base_uri: string | null, // Centralized gateway known to have reliable access to decentralized storage assets referenced by `reference` or `media` URLs + public reference: string | null, // URL to a JSON file with more info + public reference_hash: Bytes | null // Base64-encoded sha256 hash of JSON from reference field. Required if `reference` is included. + ) {} + + assert_valid() { + assert(this.spec == NFT_METADATA_SPEC, "Spec is not NFT metadata"); + assert( + (this.reference != null) == (this.reference_hash != null), + "Reference and reference hash must be present" + ); + if (this.reference_hash != null) { + assert(this.reference_hash.length == 32, "Hash has to be 32 bytes"); + } + } +} + + +export class TokenMetadata { + constructor( + public title: string | null, // ex. "Arch Nemesis: Mail Carrier" or "Parcel #5055" + public description: string | null, // free-form description + public media: string | null, // URL to associated media, preferably to decentralized, content-addressed storage + public media_hash: Bytes | null, // Base64-encoded sha256 hash of content referenced by the `media` field. Required if `media` is included. + public copies: BigInt | null, // number of copies of this set of metadata in existence when token was minted. + public issued_at: string | null, // ISO 8601 datetime when token was issued or minted + public expires_at: string | null, // ISO 8601 datetime when token expires + public starts_at: string | null, // ISO 8601 datetime when token starts being valid + public updated_at: string | null, // ISO 8601 datetime when token was last updated + public extra: string | null, // anything extra the NFT wants to store on-chain. Can be stringified JSON. + public reference: string | null, // URL to an off-chain JSON file with more info. + public reference_hash: Bytes | null // Base64-encoded sha256 hash of JSON from reference field. Required if `reference` is included. + ) {} + + assert_valid() { + assert((this.media != null) == (this.media_hash != null), "Media and media hash must be present"); + if (this.media_hash != null) { + assert(this.media_hash.length == 32, "Media hash has to be 32 bytes"); + } + + assert((this.reference != null) == (this.reference_hash != null), "Reference and reference hash must be present"); + if (this.reference_hash != null) { + assert(this.reference_hash.length == 32, "Reference hash has to be 32 bytes"); + } + } +} \ No newline at end of file diff --git a/near-contract-standards/src/non_fungible_token/token.js b/near-contract-standards/src/non_fungible_token/token.js deleted file mode 100644 index 5996ce6f..00000000 --- a/near-contract-standards/src/non_fungible_token/token.js +++ /dev/null @@ -1,8 +0,0 @@ -export class Token { - constructor(token_id, owner_id, metadata, approved_account_ids) { - this.token_id = token_id - this.owner_id = owner_id - this.metadata = metadata - this.approved_account_ids = approved_account_ids - } -} \ No newline at end of file diff --git a/near-contract-standards/src/non_fungible_token/token.ts b/near-contract-standards/src/non_fungible_token/token.ts new file mode 100644 index 00000000..066ea5a5 --- /dev/null +++ b/near-contract-standards/src/non_fungible_token/token.ts @@ -0,0 +1,5 @@ +import { TokenMetadata } from "./metadata" + +export class Token { + constructor(public token_id: string, public owner_id: string, public metadata: TokenMetadata | null, public approved_account_ids: {[account_id: string]: BigInt}) {} +} \ No newline at end of file diff --git a/near-contract-standards/src/non_fungible_token/utils.js b/near-contract-standards/src/non_fungible_token/utils.js deleted file mode 100644 index 91d80250..00000000 --- a/near-contract-standards/src/non_fungible_token/utils.js +++ /dev/null @@ -1,42 +0,0 @@ -import {near, utils} from 'near-sdk-js' - -export function bytes_for_approved_account_id(account_id) { - // The extra 4 bytes are coming from Borsh serialization to store the length of the string. - return account_id.length + 4 + 8 -} - -export function refund_approved_account_ids_iter(account_id, approved_account_ids) { - let storage_released = approved_account_ids.map(bytes_for_approved_account_id).reduce((a, b) => a + b) - let promise_id = near.promiseBatchCreate(account_id) - near.promiseBatchActionTransfer(promise_id, new BigInt(storage_released) * utils.storage_byte_cost()) - near.promiseReturn(promise_id) -} - -export function refund_deposit_to_account(storage_used, account_id) { - let required_cost = utils.storage_byte_cost() * storage_used; - let attached_deposit = near.attachedDeposit(); - - utils.assert( - required_cost <= attached_deposit, - `Must attach ${required_cost} yoctoNEAR to cover storage` - ); - - let refund = attached_deposit - required_cost; - if (refund > 1n) { - let promise_id = near.promiseBatchCreate(account_id) - near.promiseBatchActionTransfer(refund) - near.promiseReturn(promise_id) - } -} - -export function refund_deposit(storage_used) { - refund_deposit_to_account(storage_used, near.predecessorAccountId()) -} - -export function hash_account_id(account_id) { - return near.sha256(account_id) -} - -export function assert_at_least_one_yocto() { - utils.assert(env.attachedDeposit() >= 1n, "Requires attached deposit of at least 1 yoctoNEAR") -} diff --git a/near-contract-standards/src/non_fungible_token/utils.ts b/near-contract-standards/src/non_fungible_token/utils.ts new file mode 100644 index 00000000..d001587d --- /dev/null +++ b/near-contract-standards/src/non_fungible_token/utils.ts @@ -0,0 +1,42 @@ +import {near, assert, Bytes} from 'near-sdk-js' + +export function bytes_for_approved_account_id(account_id: string): number { + // The extra 4 bytes are coming from Borsh serialization to store the length of the string. + return account_id.length + 4 + 8 +} + +export function refund_approved_account_ids_iter(account_id: string, approved_account_ids: string[]): void { + let storage_released = approved_account_ids.map(bytes_for_approved_account_id).reduce((a, b) => a + b) + let promise_id = near.promiseBatchCreate(account_id) + near.promiseBatchActionTransfer(promise_id, BigInt(storage_released) * near.storageByteCost()) + near.promiseReturn(promise_id) +} + +export function refund_deposit_to_account(storage_used: bigint, account_id: string): void { + let required_cost = near.storageByteCost() * storage_used; + let attached_deposit = near.attachedDeposit(); + + assert( + required_cost <= attached_deposit, + `Must attach ${required_cost} yoctoNEAR to cover storage` + ); + + let refund = attached_deposit - required_cost; + if (refund > 1n) { + let promise_id = near.promiseBatchCreate(account_id) + near.promiseBatchActionTransfer(promise_id, refund) + near.promiseReturn(promise_id) + } +} + +export function refund_deposit(storage_used: bigint): void { + refund_deposit_to_account(storage_used, near.predecessorAccountId()) +} + +export function hash_account_id(account_id: string): Bytes { + return near.sha256(account_id) +} + +export function assert_at_least_one_yocto(): void { + assert(near.attachedDeposit() >= 1n, "Requires attached deposit of at least 1 yoctoNEAR") +} diff --git a/src/api.ts b/src/api.ts index 2da516a8..6335c068 100644 --- a/src/api.ts +++ b/src/api.ts @@ -34,31 +34,31 @@ export function predecessorAccountId(): string { return env.read_register(0); } -export function blockIndex(): BigInt { +export function blockIndex(): bigint { return env.block_index(); } -export function blockHeight(): BigInt { +export function blockHeight(): bigint { return blockIndex(); } -export function blockTimestamp(): BigInt { +export function blockTimestamp(): bigint { return env.block_timestamp(); } -export function epochHeight(): BigInt { +export function epochHeight(): bigint { return env.epoch_height(); } -export function attachedDeposit(): BigInt { +export function attachedDeposit(): bigint { return env.attached_deposit(); } -export function prepaidGas(): BigInt { +export function prepaidGas(): bigint { return env.prepaid_gas(); } -export function usedGas(): BigInt { +export function usedGas(): bigint { return env.used_gas(); } @@ -142,7 +142,7 @@ export function validatorStake(accountId: string) { return env.validator_stake(accountId); } -export function validatorTotalStake(): BigInt { +export function validatorTotalStake(): bigint { return env.validator_total_stake(); } @@ -257,15 +257,15 @@ export function input(): Bytes { return env.read_register(0); } -export function storageUsage(): BigInt { +export function storageUsage(): bigint { return env.storage_usage(); } -export function accountBalance(): BigInt { +export function accountBalance(): bigint { return env.account_balance(); } -export function accountLockedBalance(): BigInt { +export function accountLockedBalance(): bigint { return env.account_locked_balance(); } @@ -277,19 +277,19 @@ export function promiseCreate( accountId: string, methodName: string, args: Bytes, - amount: number | BigInt, - gas: number | BigInt -): BigInt { + amount: number | bigint, + gas: number | bigint +): bigint { return env.promise_create(accountId, methodName, args, amount, gas); } export function promiseThen( - promiseIndex: number | BigInt, + promiseIndex: number | bigint, accountId: string, methodName: string, args: Bytes, - amount: number | BigInt, - gas: number | BigInt + amount: number | bigint, + gas: number | bigint ) { return env.promise_then( promiseIndex, @@ -301,38 +301,38 @@ export function promiseThen( ); } -export function promiseAnd(...promiseIndex: number[] | BigInt[]): BigInt { +export function promiseAnd(...promiseIndex: number[] | bigint[]): bigint { return env.promise_and(...promiseIndex); } -export function promiseBatchCreate(accountId: string): BigInt { +export function promiseBatchCreate(accountId: string): bigint { return env.promise_batch_create(accountId); } export function promiseBatchThen( - promiseIndex: number | BigInt, + promiseIndex: number | bigint, accountId: string -): BigInt { +): bigint { return env.promise_batch_then(promiseIndex, accountId); } -export function promiseBatchActionCreateAccount(promiseIndex: number | BigInt) { +export function promiseBatchActionCreateAccount(promiseIndex: number | bigint) { env.promise_batch_action_create_account(promiseIndex); } export function promiseBatchActionDeployContract( - promiseIndex: number | BigInt, + promiseIndex: number | bigint, code: Bytes ) { env.promise_batch_action_deploy_contract(promiseIndex, code); } export function promiseBatchActionFunctionCall( - promiseIndex: number | BigInt, + promiseIndex: number | bigint, methodName: string, args: Bytes, - amount: number | BigInt, - gas: number | BigInt + amount: number | bigint, + gas: number | bigint ) { env.promise_batch_action_function_call( promiseIndex, @@ -344,24 +344,24 @@ export function promiseBatchActionFunctionCall( } export function promiseBatchActionTransfer( - promiseIndex: number | BigInt, - amount: number | BigInt + promiseIndex: number | bigint, + amount: number | bigint ) { env.promise_batch_action_transfer(promiseIndex, amount); } export function promiseBatchActionStake( - promiseIndex: number | BigInt, - amount: number | BigInt, + promiseIndex: number | bigint, + amount: number | bigint, publicKey: Bytes ) { env.promise_batch_action_stake(promiseIndex, amount, publicKey); } export function promiseBatchActionAddKeyWithFullAccess( - promiseIndex: number | BigInt, + promiseIndex: number | bigint, publicKey: Bytes, - nonce: number | BigInt + nonce: number | bigint ) { env.promise_batch_action_add_key_with_full_access( promiseIndex, @@ -371,10 +371,10 @@ export function promiseBatchActionAddKeyWithFullAccess( } export function promiseBatchActionAddKeyWithFunctionCall( - promiseIndex: number | BigInt, + promiseIndex: number | bigint, publicKey: Bytes, - nonce: number | BigInt, - allowance: number | BigInt, + nonce: number | bigint, + allowance: number | bigint, receiverId: string, methodNames: string ) { @@ -389,20 +389,20 @@ export function promiseBatchActionAddKeyWithFunctionCall( } export function promiseBatchActionDeleteKey( - promiseIndex: number | BigInt, + promiseIndex: number | bigint, publicKey: Bytes ) { env.promise_batch_action_delete_key(promiseIndex, publicKey); } export function promiseBatchActionDeleteAccount( - promiseIndex: number | BigInt, + promiseIndex: number | bigint, beneficiaryId: string ) { env.promise_batch_action_delete_account(promiseIndex, beneficiaryId); } -export function promiseResultsCount(): BigInt { +export function promiseResultsCount(): bigint { return env.promise_results_count(); } @@ -413,7 +413,7 @@ export enum PromiseResult { } export function promiseResult( - resultIdx: number | BigInt + resultIdx: number | bigint ): Bytes | PromiseResult.NotReady | PromiseResult.Failed { let status: PromiseResult = env.promise_result(resultIdx, 0); if (status == PromiseResult.Successful) { @@ -428,7 +428,7 @@ export function promiseResult( } } -export function promiseReturn(promiseIdx: number | BigInt) { +export function promiseReturn(promiseIdx: number | bigint) { env.promise_return(promiseIdx); } @@ -448,6 +448,6 @@ export function storageRemove(key: Bytes): boolean { return false; } -export function storageByteCost(): BigInt { +export function storageByteCost(): bigint { return 10_000_000_000_000_000_000n; } diff --git a/src/utils.ts b/src/utils.ts index 1f65fcad..ee0c5f41 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -50,3 +50,7 @@ export function assert(b: boolean, str: string) { } export type Mutable = { -readonly [P in keyof T]: T[P] }; + +export interface IntoStorageKey { + into_storage_key(): Bytes; +} \ No newline at end of file From 272cec2cff201ab7f630e8215986d77a2661eb88 Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Thu, 11 Aug 2022 16:46:04 +0800 Subject: [PATCH 04/44] finish NonFungibleToken constructor --- .../src/non_fungible_token/core/core_impl.ts | 107 +++++++++++++++++- 1 file changed, 104 insertions(+), 3 deletions(-) diff --git a/near-contract-standards/src/non_fungible_token/core/core_impl.ts b/near-contract-standards/src/non_fungible_token/core/core_impl.ts index ae4cf956..d310aa0d 100644 --- a/near-contract-standards/src/non_fungible_token/core/core_impl.ts +++ b/near-contract-standards/src/non_fungible_token/core/core_impl.ts @@ -1,10 +1,17 @@ -import { UnorderedMap, LookupMap, Bytes } from "near-sdk-js"; +import { UnorderedMap, LookupMap, Bytes, near, UnorderedSet } from "near-sdk-js"; import { IntoStorageKey } from "near-sdk-js/lib/utils" +import { TokenMetadata } from "../metadata" +import { hash_account_id } from "../utils" + const GAS_FOR_RESOLVE_TRANSFER = 5_000_000_000_000n; const GAS_FOR_NFT_TRANSFER_CALL = 25_000_000_000_000n + GAS_FOR_RESOLVE_TRANSFER; +function repeat(str: string, n: number) { + return Array(n + 1).join(str); +} + export class NonFungibleToken { - public owner: string; + public owner_id: string; public extra_storage_in_bytes_per_token: bigint; public owner_by_id: UnorderedMap; public token_metadata_by_id: LookupMap | null; @@ -19,7 +26,93 @@ export class NonFungibleToken { enumeration_prefix: IntoStorageKey | null, approval_prefix: IntoStorageKey | null, ) { - + let approvals_by_id: LookupMap | null; + let next_approval_id_by_id: LookupMap | null; + if (approval_prefix) { + let prefix = approval_prefix.into_storage_key(); + approvals_by_id = new LookupMap(prefix); + next_approval_id_by_id = new LookupMap(prefix); + } else { + approvals_by_id = null; + next_approval_id_by_id = null; + } + + this.owner_id = owner_id; + this.extra_storage_in_bytes_per_token = 0n; + this.owner_by_id = new UnorderedMap(owner_by_id_prefix.into_storage_key()); + this.token_metadata_by_id = token_metadata_prefix ? new LookupMap(token_metadata_prefix.into_storage_key()) : null; + this.approvals_by_id = approvals_by_id; + this.next_approval_id_by_id = next_approval_id_by_id; + } + + init() { + this.measure_min_token_storage_cost(); + } + + measure_min_token_storage_cost() { + let initial_storage_usage = near.storageUsage(); + // 64 Length because this is the max account id length + let tmp_token_id = repeat("a", 64); + let tmp_owner_id = repeat("a", 64); + + // 1. set some dummy data + this.owner_by_id.set(tmp_token_id, tmp_owner_id); + if(this.token_metadata_by_id) { + this.token_metadata_by_id.set( + tmp_token_id, + new TokenMetadata( + repeat("a", 64), + repeat("a", 64), + repeat("a", 64), + repeat("a", 64), + 1n, + null, + null, + null, + null, + null, + null, + null + ) + ) + } + if(this.tokens_per_owner) { + let u = new UnorderedSet(new TokensPerOwner(near.sha256(tmp_owner_id)).into_storage_key()); + u.set(tmp_token_id); + this.tokens_per_owner.set(tmp_owner_id, u); + } + if(this.approvals_by_id) { + let approvals = {} + approvals[tmp_owner_id] = 1n; + this.approvals_by_id.set(tmp_token_id, approvals); + } + if(this.next_approval_id_by_id) { + this.next_approval_id_by_id.set(tmp_token_id, 1n); + } + let u = new UnorderedSet(new TokenPerOwnerInner(hash_account_id(tmp_owner_id)).into_storage_key()) + if(this.tokens_per_owner) { + this.tokens_per_owner.set(tmp_owner_id, u); + } + + // 2. see how much space it took + this.extra_storage_in_bytes_per_token = near.storageUsage() - initial_storage_usage; + + // 3. roll it all back + if (this.next_approval_id_by_id) { + this.next_approval_id_by_id.remove(tmp_token_id); + } + if (this.approvals_by_id) { + this.approvals_by_id.remove(tmp_token_id); + } + if (this.tokens_per_owner) { + this.tokens_per_owner.remove(tmp_owner_id); + } + if (this.token_metadata_by_id) { + this.token_metadata_by_id.remove(tmp_token_id); + } + if (this.tokens_per_owner) { + this.tokens_per_owner.remove(tmp_owner_id); + } } } @@ -29,11 +122,19 @@ export class TokensPerOwner { constructor( public account_hash: Bytes ) {} + + into_storage_key(): Bytes { + return '\x00' + this.account_hash; + } } export class TokenPerOwnerInner { constructor( public account_id_hash: Bytes ) {} + + into_storage_key(): Bytes { + return '\x01' + this.account_id_hash; + } } From 1d65a28922873fd23fa2c671d57b37d794f031fe Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Mon, 15 Aug 2022 16:28:19 +0800 Subject: [PATCH 05/44] implement internal transfer --- .../src/non_fungible_token/core/core_impl.ts | 64 ++++++++++++++++++- .../src/non_fungible_token/events.ts | 8 +-- 2 files changed, 67 insertions(+), 5 deletions(-) diff --git a/near-contract-standards/src/non_fungible_token/core/core_impl.ts b/near-contract-standards/src/non_fungible_token/core/core_impl.ts index d310aa0d..ea76ca4c 100644 --- a/near-contract-standards/src/non_fungible_token/core/core_impl.ts +++ b/near-contract-standards/src/non_fungible_token/core/core_impl.ts @@ -1,7 +1,8 @@ -import { UnorderedMap, LookupMap, Bytes, near, UnorderedSet } from "near-sdk-js"; +import { UnorderedMap, LookupMap, Bytes, near, UnorderedSet, assert } from "near-sdk-js"; import { IntoStorageKey } from "near-sdk-js/lib/utils" import { TokenMetadata } from "../metadata" import { hash_account_id } from "../utils" +import { NftTransfer } from "../events" const GAS_FOR_RESOLVE_TRANSFER = 5_000_000_000_000n; const GAS_FOR_NFT_TRANSFER_CALL = 25_000_000_000_000n + GAS_FOR_RESOLVE_TRANSFER; @@ -114,6 +115,67 @@ export class NonFungibleToken { this.tokens_per_owner.remove(tmp_owner_id); } } + + internal_transfer_unguarded(token_id: string, from: string, to: string) { + this.owner_by_id.set(token_id, to) + + if (this.tokens_per_owner) { + let owner_tokens = this.tokens_per_owner.get(from) + if (owner_tokens == null) { + throw new Error("Unable to access tokens per owner in unguarded call.") + } + let owner_tokens_set = UnorderedSet.deserialize(owner_tokens as UnorderedSet); + if (owner_tokens_set.isEmpty()) { + this.tokens_per_owner.remove(from) + } else { + this.tokens_per_owner.set(from, owner_tokens_set) + } + + let receiver_tokens = this.tokens_per_owner.get(to) + if (receiver_tokens == null) { + receiver_tokens = new UnorderedSet(new TokensPerOwner(near.sha256(to)).into_storage_key()); + } else { + receiver_tokens = UnorderedSet.deserialize(receiver_tokens as UnorderedSet); + } + (receiver_tokens as UnorderedSet).set(token_id); + this.tokens_per_owner.set(to, receiver_tokens) + } + } + + internal_transfer(sender_id: string, receiver_id: string, token_id: string, approval_id: bigint | null, memo: string | null): [string, Map | null] { + let owner_id = this.owner_by_id.get(token_id); + if (owner_id == null) { + throw new Error("Token not found"); + } + + let approved_account_ids = this.approvals_by_id?.remove(token_id); + + let sender_id_authorized: string | null; + if (sender_id != owner_id) { + if (!approved_account_ids) { + throw new Error("Unauthorized"); + } + + let actual_approval_id = (approved_account_ids as any)[sender_id] + if (!actual_approval_id) { + throw new Error("Sender not approved") + } + + assert(approval_id == null || approval_id == actual_approval_id, + `The actual approval_id ${actual_approval_id} is different from the given ${approval_id}`); + sender_id_authorized = sender_id + } else { + sender_id_authorized = null + } + assert(owner_id != receiver_id, "Current and next owner must differ") + this.internal_transfer_unguarded(token_id, owner_id as string, receiver_id) + NonFungibleToken.emit_transfer(owner_id as string, receiver_id, token_id, sender_id_authorized, memo) + return [owner_id as string, approved_account_ids == null ? null : approved_account_ids as Map] + } + + static emit_transfer(owner_id: string, receiver_id: string, token_id: string, sender_id: string | null, memo: string | null) { + new NftTransfer(owner_id, receiver_id, [token_id], (sender_id && (sender_id == owner_id)) ? sender_id : null, memo).emit() + } } export type StorageKey = TokensPerOwner | TokenPerOwnerInner; diff --git a/near-contract-standards/src/non_fungible_token/events.ts b/near-contract-standards/src/non_fungible_token/events.ts index 5ba03ed4..bb3f9b2e 100644 --- a/near-contract-standards/src/non_fungible_token/events.ts +++ b/near-contract-standards/src/non_fungible_token/events.ts @@ -13,7 +13,7 @@ export class Nep171Event extends NearEvent { } } -class NftMint { +export class NftMint { constructor(public owner_id: string, public token_ids: string[], public memo: string) {} emit() { @@ -25,8 +25,8 @@ class NftMint { } } -class NftTransfer { - constructor(public old_owner_id: string, public new_owner_id: string, public token_ids: string[], public memo: string | null) {} +export class NftTransfer { + constructor(public old_owner_id: string, public new_owner_id: string, public token_ids: string[], public authorized_id: string | null, public memo: string | null) {} emit() { NftTransfer.emit_many([this]); @@ -37,7 +37,7 @@ class NftTransfer { } } -class NftBurn { +export class NftBurn { constructor(public owner_id: string, public token_ids: string[], authorized_id: string | null, public memo: string | null) {} emit() { From 01db54b83635ee88f906bb95e155341a9c7da48d Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Tue, 16 Aug 2022 15:44:59 +0800 Subject: [PATCH 06/44] implement all core_impl before receiver and resolver --- lib/index.d.ts | 4 +- lib/index.js | 4 +- lib/utils.d.ts | 2 + lib/utils.js | 4 + .../src/non_fungible_token/core/core_impl.ts | 77 +++++++++++++++++-- .../src/non_fungible_token/events.ts | 2 +- .../src/non_fungible_token/token.ts | 7 +- src/index.ts | 2 + src/utils.ts | 8 ++ 9 files changed, 97 insertions(+), 13 deletions(-) diff --git a/lib/index.d.ts b/lib/index.d.ts index bb8fb284..bc77bf6d 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -3,5 +3,5 @@ import { NearContract } from "./near-contract"; import * as near from "./api"; import { LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet } from "./collections"; import { bytes, Bytes, assert } from "./utils"; -import * as utils from "./utils"; -export { call, view, NearBindgen, NearContract, near, LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet, bytes, Bytes, assert, utils }; +import "./types"; +export { call, view, NearBindgen, NearContract, near, LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet, bytes, Bytes, assert, }; diff --git a/lib/index.js b/lib/index.js index 013fed5f..f95422c7 100644 --- a/lib/index.js +++ b/lib/index.js @@ -3,5 +3,5 @@ import { NearContract } from "./near-contract"; import * as near from "./api"; import { LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet, } from "./collections"; import { bytes, assert } from "./utils"; -import * as utils from "./utils"; -export { call, view, NearBindgen, NearContract, near, LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet, bytes, assert, utils }; +import "./types"; +export { call, view, NearBindgen, NearContract, near, LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet, bytes, assert, }; diff --git a/lib/utils.d.ts b/lib/utils.d.ts index 3b13bc46..e9b3634e 100644 --- a/lib/utils.d.ts +++ b/lib/utils.d.ts @@ -9,3 +9,5 @@ export declare type Mutable = { export interface IntoStorageKey { into_storage_key(): Bytes; } +export declare type Option = T | null; +export declare function assertOneYocto(): void; diff --git a/lib/utils.js b/lib/utils.js index bc107d71..dbe18b1a 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -1,3 +1,4 @@ +import * as near from './api'; export function u8ArrayToBytes(array) { let ret = ""; for (let e of array) { @@ -39,3 +40,6 @@ export function assert(b, str) { throw Error("assertion failed: " + str); } } +export function assertOneYocto() { + assert(near.attachedDeposit() == 1n, "Requires attached deposit of exactly 1 yoctoNEAR"); +} diff --git a/near-contract-standards/src/non_fungible_token/core/core_impl.ts b/near-contract-standards/src/non_fungible_token/core/core_impl.ts index ea76ca4c..319fb57f 100644 --- a/near-contract-standards/src/non_fungible_token/core/core_impl.ts +++ b/near-contract-standards/src/non_fungible_token/core/core_impl.ts @@ -1,8 +1,11 @@ import { UnorderedMap, LookupMap, Bytes, near, UnorderedSet, assert } from "near-sdk-js"; -import { IntoStorageKey } from "near-sdk-js/lib/utils" +import { assertOneYocto, IntoStorageKey, Option } from "near-sdk-js/lib/utils" import { TokenMetadata } from "../metadata" -import { hash_account_id } from "../utils" -import { NftTransfer } from "../events" +import { hash_account_id, refund_deposit, refund_deposit_to_account } from "../utils" +import { NftMint, NftTransfer } from "../events" +import { Token } from "../token" +import { NonFungibleTokenCore } from "."; +import { AccountId } from "../../../../lib/types"; const GAS_FOR_RESOLVE_TRANSFER = 5_000_000_000_000n; const GAS_FOR_NFT_TRANSFER_CALL = 25_000_000_000_000n + GAS_FOR_RESOLVE_TRANSFER; @@ -11,7 +14,7 @@ function repeat(str: string, n: number) { return Array(n + 1).join(str); } -export class NonFungibleToken { +export class NonFungibleToken implements NonFungibleTokenCore{ public owner_id: string; public extra_storage_in_bytes_per_token: bigint; public owner_by_id: UnorderedMap; @@ -176,11 +179,73 @@ export class NonFungibleToken { static emit_transfer(owner_id: string, receiver_id: string, token_id: string, sender_id: string | null, memo: string | null) { new NftTransfer(owner_id, receiver_id, [token_id], (sender_id && (sender_id == owner_id)) ? sender_id : null, memo).emit() } + + internal_mint(token_id: string, token_owner_id: string, token_metadata: Option): Token { + let token = this.internal_mint_with_refund(token_id, token_owner_id, token_metadata, near.predecessorAccountId()) + new NftMint(token.owner_id, [token.token_id], null).emit() + return token; + } + + internal_mint_with_refund(token_id: string, token_owner_id: string, token_metadata: Option, refund_id: Option): Token { + let initial_storage_usage: Option<[string, bigint]> = null; + if (refund_id) { + initial_storage_usage = [refund_id, near.storageUsage()] + } + if (this.token_metadata_by_id && token_metadata == null) { + throw new Error('Must provide metadata') + } + if (this.owner_by_id.get(token_id)) { + throw new Error('token_id must be unique') + } + + let owner_id = token_owner_id + this.owner_by_id.set(token_id, owner_id) + this.token_metadata_by_id?.set(token_id, token_metadata) + if (this.tokens_per_owner) { + let token_ids = this.tokens_per_owner.get(owner_id) as UnorderedSet; + token_ids = UnorderedSet.deserialize(token_ids) + token_ids.set(token_id) + this.tokens_per_owner.set(owner_id, token_ids) + } + + let approved_account_ids = (this.approvals_by_id) ? new Map() : null; + if (initial_storage_usage) { + let [id, storage_usage] = initial_storage_usage + refund_deposit_to_account(near.storageUsage() - storage_usage, id) + } + return new Token(token_id, owner_id, token_metadata, approved_account_ids) + } + + nft_transfer(receiver_id: string, token_id: string, approval_id: Option, memo: Option) { + assertOneYocto(); + let sender_id = near.predecessorAccountId(); + this.internal_transfer(sender_id, receiver_id, token_id, approval_id, memo) + } + + nft_transfer_call(receiver_id: string, token_id: string, approval_id: Option, memo: Option, msg: string) { + assertOneYocto(); + let sender_id = near.predecessorAccountId(); + let [old_owner, old_approvals] = this.internal_transfer(sender_id, receiver_id, token_id, approval_id, memo) + // TODO: ext_nft_receiver + } + + nft_token(token_id: string): Option { + let owner_id = this.owner_by_id.get(token_id) as Option + if (owner_id == null) { + return null + } + let metadata = this.token_metadata_by_id?.get(token_id) as Option + let approved_account_ids = this.approvals_by_id?.get(token_id) as Option> || new Map() + return new Token(token_id, owner_id, metadata, approved_account_ids) + } } +// TODO: resolver + + export type StorageKey = TokensPerOwner | TokenPerOwnerInner; -export class TokensPerOwner { +export class TokensPerOwner implements IntoStorageKey { constructor( public account_hash: Bytes ) {} @@ -190,7 +255,7 @@ export class TokensPerOwner { } } -export class TokenPerOwnerInner { +export class TokenPerOwnerInner implements IntoStorageKey { constructor( public account_id_hash: Bytes ) {} diff --git a/near-contract-standards/src/non_fungible_token/events.ts b/near-contract-standards/src/non_fungible_token/events.ts index bb3f9b2e..da5fa5f2 100644 --- a/near-contract-standards/src/non_fungible_token/events.ts +++ b/near-contract-standards/src/non_fungible_token/events.ts @@ -14,7 +14,7 @@ export class Nep171Event extends NearEvent { } export class NftMint { - constructor(public owner_id: string, public token_ids: string[], public memo: string) {} + constructor(public owner_id: string, public token_ids: string[], public memo: string | null) {} emit() { NftMint.emit_many([this]); diff --git a/near-contract-standards/src/non_fungible_token/token.ts b/near-contract-standards/src/non_fungible_token/token.ts index 066ea5a5..2c465747 100644 --- a/near-contract-standards/src/non_fungible_token/token.ts +++ b/near-contract-standards/src/non_fungible_token/token.ts @@ -1,5 +1,8 @@ import { TokenMetadata } from "./metadata" +import { AccountId } from "near-sdk-js/lib/types"; +import { Option } from "near-sdk-js/lib/utils" +export type TokenId = string; export class Token { - constructor(public token_id: string, public owner_id: string, public metadata: TokenMetadata | null, public approved_account_ids: {[account_id: string]: BigInt}) {} -} \ No newline at end of file + constructor(public token_id: TokenId, public owner_id: AccountId, public metadata: Option, public approved_account_ids: Option>) {} +} diff --git a/src/index.ts b/src/index.ts index 813ad392..3f28afec 100644 --- a/src/index.ts +++ b/src/index.ts @@ -13,6 +13,8 @@ import { import { bytes, Bytes, assert } from "./utils"; +import "./types" + export { call, view, diff --git a/src/utils.ts b/src/utils.ts index ee0c5f41..78767676 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,3 +1,5 @@ +import * as near from './api' + // Type alias of bytes as string. This is done because internally, JSVM accepts `string` // as bytes. In the future, this can be updated to a separate type if added support // within quickjs/jsvm. @@ -53,4 +55,10 @@ export type Mutable = { -readonly [P in keyof T]: T[P] }; export interface IntoStorageKey { into_storage_key(): Bytes; +} + +export type Option = T | null; + +export function assertOneYocto() { + assert(near.attachedDeposit() == 1n, "Requires attached deposit of exactly 1 yoctoNEAR") } \ No newline at end of file From 78a632844bbab94a4d1bbc208242a82262d81167 Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Tue, 16 Aug 2022 15:46:13 +0800 Subject: [PATCH 07/44] add missing files --- lib/types/account_id.d.ts | 1 + lib/types/account_id.js | 1 + lib/types/index.d.ts | 2 ++ lib/types/index.js | 1 + .../src/non_fungible_token/core/index.ts | 9 +++++++++ src/types/account_id.ts | 1 + src/types/index.ts | 3 +++ 7 files changed, 18 insertions(+) create mode 100644 lib/types/account_id.d.ts create mode 100644 lib/types/account_id.js create mode 100644 lib/types/index.d.ts create mode 100644 lib/types/index.js create mode 100644 near-contract-standards/src/non_fungible_token/core/index.ts create mode 100644 src/types/account_id.ts create mode 100644 src/types/index.ts diff --git a/lib/types/account_id.d.ts b/lib/types/account_id.d.ts new file mode 100644 index 00000000..48ff674a --- /dev/null +++ b/lib/types/account_id.d.ts @@ -0,0 +1 @@ +export declare type AccountId = string; diff --git a/lib/types/account_id.js b/lib/types/account_id.js new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/lib/types/account_id.js @@ -0,0 +1 @@ +export {}; diff --git a/lib/types/index.d.ts b/lib/types/index.d.ts new file mode 100644 index 00000000..5f3628ed --- /dev/null +++ b/lib/types/index.d.ts @@ -0,0 +1,2 @@ +import { AccountId } from "./account_id"; +export { AccountId }; diff --git a/lib/types/index.js b/lib/types/index.js new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/lib/types/index.js @@ -0,0 +1 @@ +export {}; diff --git a/near-contract-standards/src/non_fungible_token/core/index.ts b/near-contract-standards/src/non_fungible_token/core/index.ts new file mode 100644 index 00000000..c020f4dd --- /dev/null +++ b/near-contract-standards/src/non_fungible_token/core/index.ts @@ -0,0 +1,9 @@ +import {AccountId} from 'near-sdk-js/lib/types' +import {Token, TokenId} from '../token' +import {Option} from 'near-sdk-js/lib/utils' + +export interface NonFungibleTokenCore { + nft_transfer(receiver_id: AccountId, token_id: TokenId, approval_id: Option, memo: Option); + nft_transfer_call(receiver_id: AccountId, token_id: TokenId, approval_id: Option, memo: Option, msg: string); + nft_token(token_id: TokenId): Option; +} \ No newline at end of file diff --git a/src/types/account_id.ts b/src/types/account_id.ts new file mode 100644 index 00000000..67f3277f --- /dev/null +++ b/src/types/account_id.ts @@ -0,0 +1 @@ +export type AccountId = string; diff --git a/src/types/index.ts b/src/types/index.ts new file mode 100644 index 00000000..165d1f17 --- /dev/null +++ b/src/types/index.ts @@ -0,0 +1,3 @@ +import { AccountId } from "./account_id"; + +export {AccountId} \ No newline at end of file From 33023a8eb2ef75e45cabb1fb0f0320b21e28448e Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Tue, 16 Aug 2022 16:26:39 +0800 Subject: [PATCH 08/44] finish nft_resolve part --- .../src/non_fungible_token/core/core_impl.ts | 85 +++++++++++++++---- .../src/non_fungible_token/events.ts | 6 +- .../src/non_fungible_token/metadata.ts | 33 +++---- .../src/non_fungible_token/utils.ts | 5 ++ 4 files changed, 93 insertions(+), 36 deletions(-) diff --git a/near-contract-standards/src/non_fungible_token/core/core_impl.ts b/near-contract-standards/src/non_fungible_token/core/core_impl.ts index 319fb57f..aa9cb56a 100644 --- a/near-contract-standards/src/non_fungible_token/core/core_impl.ts +++ b/near-contract-standards/src/non_fungible_token/core/core_impl.ts @@ -1,11 +1,13 @@ import { UnorderedMap, LookupMap, Bytes, near, UnorderedSet, assert } from "near-sdk-js"; import { assertOneYocto, IntoStorageKey, Option } from "near-sdk-js/lib/utils" import { TokenMetadata } from "../metadata" -import { hash_account_id, refund_deposit, refund_deposit_to_account } from "../utils" +import { hash_account_id, refund_approved_account_ids, refund_deposit, refund_deposit_to_account } from "../utils" import { NftMint, NftTransfer } from "../events" import { Token } from "../token" import { NonFungibleTokenCore } from "."; -import { AccountId } from "../../../../lib/types"; +import { AccountId } from "near-sdk-js/lib/types"; +import { NonFungibleTokenResolver } from "./resolver"; +import { PromiseResult } from "../../../../lib/api"; const GAS_FOR_RESOLVE_TRANSFER = 5_000_000_000_000n; const GAS_FOR_NFT_TRANSFER_CALL = 25_000_000_000_000n + GAS_FOR_RESOLVE_TRANSFER; @@ -14,24 +16,24 @@ function repeat(str: string, n: number) { return Array(n + 1).join(str); } -export class NonFungibleToken implements NonFungibleTokenCore{ +export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenResolver { public owner_id: string; public extra_storage_in_bytes_per_token: bigint; public owner_by_id: UnorderedMap; - public token_metadata_by_id: LookupMap | null; - public tokens_per_owner: LookupMap | null; - public approvals_by_id: LookupMap | null; - public next_approval_id_by_id: LookupMap | null; + public token_metadata_by_id: Option; + public tokens_per_owner: Option; + public approvals_by_id: Option; + public next_approval_id_by_id: Option; constructor( owner_by_id_prefix: IntoStorageKey, owner_id: string, - token_metadata_prefix: IntoStorageKey | null, - enumeration_prefix: IntoStorageKey | null, - approval_prefix: IntoStorageKey | null, + token_metadata_prefix: Option, + enumeration_prefix: Option, + approval_prefix: Option, ) { - let approvals_by_id: LookupMap | null; - let next_approval_id_by_id: LookupMap | null; + let approvals_by_id: Option; + let next_approval_id_by_id: Option; if (approval_prefix) { let prefix = approval_prefix.into_storage_key(); approvals_by_id = new LookupMap(prefix); @@ -145,7 +147,7 @@ export class NonFungibleToken implements NonFungibleTokenCore{ } } - internal_transfer(sender_id: string, receiver_id: string, token_id: string, approval_id: bigint | null, memo: string | null): [string, Map | null] { + internal_transfer(sender_id: string, receiver_id: string, token_id: string, approval_id: Option, memo: Option): [string, Map | null] { let owner_id = this.owner_by_id.get(token_id); if (owner_id == null) { throw new Error("Token not found"); @@ -153,7 +155,7 @@ export class NonFungibleToken implements NonFungibleTokenCore{ let approved_account_ids = this.approvals_by_id?.remove(token_id); - let sender_id_authorized: string | null; + let sender_id_authorized: Option; if (sender_id != owner_id) { if (!approved_account_ids) { throw new Error("Unauthorized"); @@ -176,7 +178,7 @@ export class NonFungibleToken implements NonFungibleTokenCore{ return [owner_id as string, approved_account_ids == null ? null : approved_account_ids as Map] } - static emit_transfer(owner_id: string, receiver_id: string, token_id: string, sender_id: string | null, memo: string | null) { + static emit_transfer(owner_id: string, receiver_id: string, token_id: string, sender_id: Option, memo: Option) { new NftTransfer(owner_id, receiver_id, [token_id], (sender_id && (sender_id == owner_id)) ? sender_id : null, memo).emit() } @@ -238,10 +240,59 @@ export class NonFungibleToken implements NonFungibleTokenCore{ let approved_account_ids = this.approvals_by_id?.get(token_id) as Option> || new Map() return new Token(token_id, owner_id, metadata, approved_account_ids) } -} -// TODO: resolver + nft_resolve_transfer(previous_owner_id: string, receiver_id: string, token_id: string, approved_account_ids: Option>): boolean { + let must_revert: boolean; + let p = near.promiseResult(0) + if (p === PromiseResult.NotReady) { + throw new Error(); + } else if (p === PromiseResult.Failed) { + must_revert = true; + } else { + try { + let yes_or_no = JSON.parse(p as Bytes) + if (typeof yes_or_no == 'boolean') { + must_revert = yes_or_no + } else { + must_revert = true + } + } catch (_e) { + must_revert = true + } + } + + if (!must_revert) { + return true + } + let current_owner = this.owner_by_id.get(token_id) as Option + if (current_owner) { + if (current_owner != receiver_id) { + return true + } + } else { + if(approved_account_ids){ + refund_approved_account_ids(previous_owner_id, approved_account_ids) + } + return true + } + + this.internal_transfer_unguarded(token_id, receiver_id, previous_owner_id) + + if(this.approvals_by_id) { + let receiver_approvals = this.approvals_by_id.get(token_id) as Option> + if (receiver_approvals) { + receiver_approvals = new Map(Object.entries(receiver_approvals)) + refund_approved_account_ids(receiver_id, receiver_approvals) + } + if (approved_account_ids) { + this.approvals_by_id.set(token_id, approved_account_ids) + } + } + NonFungibleToken.emit_transfer(receiver_id, previous_owner_id, token_id, null, null); + return false; + } +} export type StorageKey = TokensPerOwner | TokenPerOwnerInner; diff --git a/near-contract-standards/src/non_fungible_token/events.ts b/near-contract-standards/src/non_fungible_token/events.ts index da5fa5f2..8ac66e0e 100644 --- a/near-contract-standards/src/non_fungible_token/events.ts +++ b/near-contract-standards/src/non_fungible_token/events.ts @@ -14,7 +14,7 @@ export class Nep171Event extends NearEvent { } export class NftMint { - constructor(public owner_id: string, public token_ids: string[], public memo: string | null) {} + constructor(public owner_id: string, public token_ids: string[], public memo: Option) {} emit() { NftMint.emit_many([this]); @@ -26,7 +26,7 @@ export class NftMint { } export class NftTransfer { - constructor(public old_owner_id: string, public new_owner_id: string, public token_ids: string[], public authorized_id: string | null, public memo: string | null) {} + constructor(public old_owner_id: string, public new_owner_id: string, public token_ids: string[], public authorized_id: Option, public memo: Option) {} emit() { NftTransfer.emit_many([this]); @@ -38,7 +38,7 @@ export class NftTransfer { } export class NftBurn { - constructor(public owner_id: string, public token_ids: string[], authorized_id: string | null, public memo: string | null) {} + constructor(public owner_id: string, public token_ids: string[], authorized_id: Option, public memo: Option) {} emit() { NftBurn.emit_many([this]); diff --git a/near-contract-standards/src/non_fungible_token/metadata.ts b/near-contract-standards/src/non_fungible_token/metadata.ts index 9f55fa50..3c30cd92 100644 --- a/near-contract-standards/src/non_fungible_token/metadata.ts +++ b/near-contract-standards/src/non_fungible_token/metadata.ts @@ -1,5 +1,6 @@ import { Bytes } from 'near-sdk-js'; import {near, assert} from 'near-sdk-js' +import {Option} from 'near-sdk-js/lib/utils' export const NFT_METADATA_SPEC = "nft-1.0.0"; @@ -8,10 +9,10 @@ export class NFTContractMetadata { public spec: string, // required, essentially a version like "nft-1.0.0" public name: string, // required, ex. "Mosaics" public symbol: string, // required, ex. "MOSIAC" - public icon: string | null, // Data URL - public base_uri: string | null, // Centralized gateway known to have reliable access to decentralized storage assets referenced by `reference` or `media` URLs - public reference: string | null, // URL to a JSON file with more info - public reference_hash: Bytes | null // Base64-encoded sha256 hash of JSON from reference field. Required if `reference` is included. + public icon: Option, // Data URL + public base_uri: Option, // Centralized gateway known to have reliable access to decentralized storage assets referenced by `reference` or `media` URLs + public reference: Option, // URL to a JSON file with more info + public reference_hash: Option // Base64-encoded sha256 hash of JSON from reference field. Required if `reference` is included. ) {} assert_valid() { @@ -29,18 +30,18 @@ export class NFTContractMetadata { export class TokenMetadata { constructor( - public title: string | null, // ex. "Arch Nemesis: Mail Carrier" or "Parcel #5055" - public description: string | null, // free-form description - public media: string | null, // URL to associated media, preferably to decentralized, content-addressed storage - public media_hash: Bytes | null, // Base64-encoded sha256 hash of content referenced by the `media` field. Required if `media` is included. - public copies: BigInt | null, // number of copies of this set of metadata in existence when token was minted. - public issued_at: string | null, // ISO 8601 datetime when token was issued or minted - public expires_at: string | null, // ISO 8601 datetime when token expires - public starts_at: string | null, // ISO 8601 datetime when token starts being valid - public updated_at: string | null, // ISO 8601 datetime when token was last updated - public extra: string | null, // anything extra the NFT wants to store on-chain. Can be stringified JSON. - public reference: string | null, // URL to an off-chain JSON file with more info. - public reference_hash: Bytes | null // Base64-encoded sha256 hash of JSON from reference field. Required if `reference` is included. + public title: Option, // ex. "Arch Nemesis: Mail Carrier" or "Parcel #5055" + public description: Option, // free-form description + public media: Option, // URL to associated media, preferably to decentralized, content-addressed storage + public media_hash: Option, // Base64-encoded sha256 hash of content referenced by the `media` field. Required if `media` is included. + public copies: Option, // number of copies of this set of metadata in existence when token was minted. + public issued_at: Option, // ISO 8601 datetime when token was issued or minted + public expires_at: Option, // ISO 8601 datetime when token expires + public starts_at: Option, // ISO 8601 datetime when token starts being valid + public updated_at: Option, // ISO 8601 datetime when token was last updated + public extra: Option, // anything extra the NFT wants to store on-chain. Can be stringified JSON. + public reference: Option, // URL to an off-chain JSON file with more info. + public reference_hash: Option // Base64-encoded sha256 hash of JSON from reference field. Required if `reference` is included. ) {} assert_valid() { diff --git a/near-contract-standards/src/non_fungible_token/utils.ts b/near-contract-standards/src/non_fungible_token/utils.ts index d001587d..d7d28e2e 100644 --- a/near-contract-standards/src/non_fungible_token/utils.ts +++ b/near-contract-standards/src/non_fungible_token/utils.ts @@ -1,4 +1,5 @@ import {near, assert, Bytes} from 'near-sdk-js' +import { AccountId } from 'near-sdk-js/lib/types' export function bytes_for_approved_account_id(account_id: string): number { // The extra 4 bytes are coming from Borsh serialization to store the length of the string. @@ -12,6 +13,10 @@ export function refund_approved_account_ids_iter(account_id: string, approved_ac near.promiseReturn(promise_id) } +export function refund_approved_account_ids(account_id: AccountId, approved_account_ids: Map) { + refund_approved_account_ids_iter(account_id, Array.from(approved_account_ids.keys())) +} + export function refund_deposit_to_account(storage_used: bigint, account_id: string): void { let required_cost = near.storageByteCost() * storage_used; let attached_deposit = near.attachedDeposit(); From 8b8dc7684c869b8216a2c40f877f3ed49e2e6414 Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Thu, 15 Sep 2022 15:42:41 +0800 Subject: [PATCH 09/44] resolve conflict --- .gitattributes | 4 +- .../{standalone-examples.yml => examples.yml} | 4 +- ...standalone-unit-test.yml => unit-test.yml} | 6 +- .gitignore | 3 +- README.md | 228 +- cli/builder/builder.c | 29 + cli/cli.js | 43 +- cli/post-install.js | 2 +- examples/__tests__/test-clean-state.ava.js | 5 +- examples/__tests__/test-counter.ava.js | 4 +- .../__tests__/test-cross-contract-call.ava.js | 5 +- .../test-fungible-token-lockable.ava.js | 2 +- examples/__tests__/test-fungible-token.ava.js | 3 +- .../__tests__/test-non-fungible-token.ava.js | 2 +- examples/__tests__/test-parking-lot.ava.js | 4 +- .../test-status-message-collections.ava.js | 4 +- examples/__tests__/test-status-message.ava.js | 5 +- examples/babel.config.json | 1 + examples/package.json | 4 +- examples/src/clean-state.js | 23 +- examples/src/counter-lowlevel.js | 6 +- examples/src/counter.js | 21 +- examples/src/counter.ts | 23 +- examples/src/cross-contract-call.js | 28 +- examples/src/fungible-token-helper.js | 15 +- examples/src/fungible-token-lockable.js | 42 +- examples/src/fungible-token.js | 33 +- examples/src/non-fungible-token-receiver.js | 20 +- examples/src/non-fungible-token.js | 32 +- examples/src/parking-lot.ts | 19 +- examples/src/status-message-collections.js | 19 +- examples/src/status-message.js | 15 +- examples/yarn.lock | 39 +- jsvm/README.md | 516 ---- jsvm/build.sh | 45 - jsvm/build/jsvm.wasm | Bin 498124 -> 0 bytes jsvm/build/jsvm_nightly.wasm | Bin 498724 -> 0 bytes jsvm/examples/.gitignore | 2 - jsvm/examples/README-CLEAN-STATE.md | 38 - jsvm/examples/README-COUNTER.md | 15 - jsvm/examples/README-CROSS-CONTRACT-CALL.md | 74 - jsvm/examples/README-FT.md | 16 - jsvm/examples/README-LOCKABLE-FT.md | 16 - jsvm/examples/README-NFT.md | 89 - jsvm/examples/README-STATUS-MESSAGE.md | 76 - jsvm/examples/README.md | 28 - .../__tests__/test-clean-state.ava.js | 51 - jsvm/examples/__tests__/test-counter.ava.js | 73 - .../__tests__/test-cross-contract-call.ava.js | 90 - .../test-fungible-token-lockable.ava.js | 232 -- .../__tests__/test-fungible-token.ava.js | 72 - .../__tests__/test-non-fungible-token.ava.js | 127 - .../test-status-message-collections.ava.js | 92 - .../__tests__/test-status-message.ava.js | 68 - jsvm/examples/ava.config.cjs | 8 - jsvm/examples/babel.config.json | 6 - jsvm/examples/jsconfig.json | 8 - jsvm/examples/package.json | 38 - jsvm/examples/src/clean-state.js | 19 - jsvm/examples/src/counter.js | 34 - jsvm/examples/src/cross-contract-call.js | 28 - jsvm/examples/src/fungible-token-lockable.js | 230 -- jsvm/examples/src/fungible-token.js | 76 - jsvm/examples/src/non-fungible-token.js | 87 - .../src/status-message-collections.js | 45 - jsvm/examples/src/status-message.js | 23 - jsvm/examples/src/test-token-receiver.js | 24 - jsvm/examples/yarn.lock | 2183 ----------------- jsvm/jsvm.c | 1136 --------- jsvm/tests/.gitignore | 2 - jsvm/tests/README.md | 14 - jsvm/tests/__tests__/bytes.ava.js | 224 -- jsvm/tests/__tests__/function-params.ava.js | 53 - jsvm/tests/__tests__/lookup-map.ava.js | 116 - jsvm/tests/__tests__/lookup-set.ava.js | 96 - jsvm/tests/__tests__/unordered-map.ava.js | 180 -- jsvm/tests/__tests__/unordered-set.ava.js | 174 -- jsvm/tests/__tests__/vector.ava.js | 159 -- jsvm/tests/ava.config.cjs | 8 - jsvm/tests/babel.config.json | 6 - jsvm/tests/build.sh | 10 - jsvm/tests/jsconfig.json | 8 - jsvm/tests/package.json | 21 - jsvm/tests/src/bytes.js | 89 - jsvm/tests/src/function-params.js | 33 - jsvm/tests/src/lookup-map.js | 45 - jsvm/tests/src/lookup-set.js | 41 - jsvm/tests/src/unordered-map.js | 79 - jsvm/tests/src/unordered-set.js | 63 - jsvm/tests/src/vector.js | 71 - jsvm/tests/yarn.lock | 2163 ---------------- lib/api.d.ts | 25 +- lib/api.js | 76 +- lib/build-tools/include-bytes.d.ts | 7 + lib/build-tools/include-bytes.js | 30 + lib/build-tools/near-bindgen-exporter.js | 68 +- lib/collections/lookup-map.d.ts | 2 +- lib/collections/lookup-map.js | 2 +- lib/collections/lookup-set.d.ts | 2 +- lib/collections/lookup-set.js | 2 +- lib/collections/unordered-map.d.ts | 11 +- lib/collections/unordered-map.js | 149 +- lib/collections/unordered-set.d.ts | 5 +- lib/collections/unordered-set.js | 15 +- lib/collections/vector.d.ts | 3 +- lib/collections/vector.js | 7 +- lib/index.d.ts | 7 +- lib/index.js | 7 +- lib/near-bindgen.d.ts | 24 +- lib/near-bindgen.js | 76 +- lib/near-contract.d.ts | 8 - lib/near-contract.js | 31 - lib/promise.d.ts | 109 + lib/promise.js | 230 ++ lib/types/gas.d.ts | 2 + lib/types/gas.js | 1 + lib/types/index.d.ts | 9 +- lib/types/index.js | 7 +- lib/types/primitives.d.ts | 5 + lib/types/primitives.js | 1 + lib/types/public_key.d.ts | 25 + lib/types/public_key.js | 80 + lib/types/vm_types.d.ts | 12 + lib/types/vm_types.js | 11 + package.json | 13 +- src/api.ts | 126 +- src/build-tools/include-bytes.js | 37 + src/build-tools/near-bindgen-exporter.js | 111 +- src/collections/lookup-map.ts | 2 +- src/collections/lookup-set.ts | 2 +- src/collections/unordered-map.ts | 159 +- src/collections/unordered-set.ts | 16 +- src/collections/vector.ts | 8 +- src/index.ts | 15 +- src/near-bindgen.ts | 82 +- src/near-contract.ts | 38 - src/promise.ts | 228 ++ src/types/gas.ts | 2 + src/types/index.ts | 11 +- src/types/primitives.ts | 5 + src/types/public_key.ts | 81 + src/types/vm_types.ts | 14 + tests/__tests__/bytes.ava.js | 7 +- .../__tests__/decorators/near_bindgen.ava.js | 59 + tests/__tests__/decorators/payable.ava.js | 61 + tests/__tests__/decorators/private.ava.js | 46 + tests/__tests__/function-params.ava.js | 8 +- tests/__tests__/lookup-map.ava.js | 8 +- tests/__tests__/lookup-set.ava.js | 8 +- tests/__tests__/test-public-key.ava.js | 94 + tests/__tests__/test_context_api.ava.js | 2 +- tests/__tests__/test_highlevel_promise.ava.js | 144 ++ tests/__tests__/test_log_panic_api.ava.js | 2 +- tests/__tests__/test_math_api.ava.js | 3 +- tests/__tests__/test_promise_api.ava.js | 22 +- tests/__tests__/test_storage_api.ava.js | 3 +- tests/__tests__/typescript.ava.js | 5 +- tests/__tests__/unordered-map.ava.js | 8 +- tests/__tests__/unordered-set.ava.js | 8 +- tests/__tests__/vector.ava.js | 4 +- tests/babel.config.json | 4 +- tests/package.json | 16 +- tests/src/bytes.js | 2 +- tests/src/decorators/payable.ts | 38 + tests/src/decorators/private.ts | 38 + tests/src/decorators/require_init_false.ts | 34 + tests/src/decorators/require_init_true.ts | 36 + tests/src/function-params.js | 14 +- tests/src/highlevel-promise.js | 87 + tests/src/lookup-map.js | 38 +- tests/src/lookup-set.js | 22 +- tests/src/promise_api.js | 8 + tests/src/promise_batch_api.js | 15 +- tests/src/public-key.js | 76 + tests/src/typescript.ts | 11 +- tests/src/unordered-map.js | 43 +- tests/src/unordered-set.js | 46 +- tests/src/vector.js | 36 +- tests/yarn.lock | 18 +- tsconfig.json | 1 + yarn.lock | 17 + 181 files changed, 2619 insertions(+), 10485 deletions(-) rename .github/workflows/{standalone-examples.yml => examples.yml} (95%) rename .github/workflows/{standalone-unit-test.yml => unit-test.yml} (74%) delete mode 100644 jsvm/README.md delete mode 100755 jsvm/build.sh delete mode 100755 jsvm/build/jsvm.wasm delete mode 100755 jsvm/build/jsvm_nightly.wasm delete mode 100644 jsvm/examples/.gitignore delete mode 100644 jsvm/examples/README-CLEAN-STATE.md delete mode 100644 jsvm/examples/README-COUNTER.md delete mode 100644 jsvm/examples/README-CROSS-CONTRACT-CALL.md delete mode 100644 jsvm/examples/README-FT.md delete mode 100644 jsvm/examples/README-LOCKABLE-FT.md delete mode 100644 jsvm/examples/README-NFT.md delete mode 100644 jsvm/examples/README-STATUS-MESSAGE.md delete mode 100644 jsvm/examples/README.md delete mode 100644 jsvm/examples/__tests__/test-clean-state.ava.js delete mode 100644 jsvm/examples/__tests__/test-counter.ava.js delete mode 100644 jsvm/examples/__tests__/test-cross-contract-call.ava.js delete mode 100644 jsvm/examples/__tests__/test-fungible-token-lockable.ava.js delete mode 100644 jsvm/examples/__tests__/test-fungible-token.ava.js delete mode 100644 jsvm/examples/__tests__/test-non-fungible-token.ava.js delete mode 100644 jsvm/examples/__tests__/test-status-message-collections.ava.js delete mode 100644 jsvm/examples/__tests__/test-status-message.ava.js delete mode 100644 jsvm/examples/ava.config.cjs delete mode 100644 jsvm/examples/babel.config.json delete mode 100644 jsvm/examples/jsconfig.json delete mode 100644 jsvm/examples/package.json delete mode 100644 jsvm/examples/src/clean-state.js delete mode 100644 jsvm/examples/src/counter.js delete mode 100644 jsvm/examples/src/cross-contract-call.js delete mode 100644 jsvm/examples/src/fungible-token-lockable.js delete mode 100644 jsvm/examples/src/fungible-token.js delete mode 100644 jsvm/examples/src/non-fungible-token.js delete mode 100644 jsvm/examples/src/status-message-collections.js delete mode 100644 jsvm/examples/src/status-message.js delete mode 100644 jsvm/examples/src/test-token-receiver.js delete mode 100644 jsvm/examples/yarn.lock delete mode 100644 jsvm/jsvm.c delete mode 100644 jsvm/tests/.gitignore delete mode 100644 jsvm/tests/README.md delete mode 100644 jsvm/tests/__tests__/bytes.ava.js delete mode 100644 jsvm/tests/__tests__/function-params.ava.js delete mode 100644 jsvm/tests/__tests__/lookup-map.ava.js delete mode 100644 jsvm/tests/__tests__/lookup-set.ava.js delete mode 100644 jsvm/tests/__tests__/unordered-map.ava.js delete mode 100644 jsvm/tests/__tests__/unordered-set.ava.js delete mode 100644 jsvm/tests/__tests__/vector.ava.js delete mode 100644 jsvm/tests/ava.config.cjs delete mode 100644 jsvm/tests/babel.config.json delete mode 100755 jsvm/tests/build.sh delete mode 100644 jsvm/tests/jsconfig.json delete mode 100644 jsvm/tests/package.json delete mode 100644 jsvm/tests/src/bytes.js delete mode 100644 jsvm/tests/src/function-params.js delete mode 100644 jsvm/tests/src/lookup-map.js delete mode 100644 jsvm/tests/src/lookup-set.js delete mode 100644 jsvm/tests/src/unordered-map.js delete mode 100644 jsvm/tests/src/unordered-set.js delete mode 100644 jsvm/tests/src/vector.js delete mode 100644 jsvm/tests/yarn.lock create mode 100644 lib/build-tools/include-bytes.d.ts create mode 100644 lib/build-tools/include-bytes.js delete mode 100644 lib/near-contract.d.ts delete mode 100644 lib/near-contract.js create mode 100644 lib/promise.d.ts create mode 100644 lib/promise.js create mode 100644 lib/types/gas.d.ts create mode 100644 lib/types/gas.js create mode 100644 lib/types/primitives.d.ts create mode 100644 lib/types/primitives.js create mode 100644 lib/types/public_key.d.ts create mode 100644 lib/types/public_key.js create mode 100644 lib/types/vm_types.d.ts create mode 100644 lib/types/vm_types.js create mode 100644 src/build-tools/include-bytes.js delete mode 100644 src/near-contract.ts create mode 100644 src/promise.ts create mode 100644 src/types/gas.ts create mode 100644 src/types/primitives.ts create mode 100644 src/types/public_key.ts create mode 100644 src/types/vm_types.ts create mode 100644 tests/__tests__/decorators/near_bindgen.ava.js create mode 100644 tests/__tests__/decorators/payable.ava.js create mode 100644 tests/__tests__/decorators/private.ava.js create mode 100644 tests/__tests__/test-public-key.ava.js create mode 100644 tests/__tests__/test_highlevel_promise.ava.js create mode 100644 tests/src/decorators/payable.ts create mode 100644 tests/src/decorators/private.ts create mode 100644 tests/src/decorators/require_init_false.ts create mode 100644 tests/src/decorators/require_init_true.ts create mode 100644 tests/src/highlevel-promise.js create mode 100644 tests/src/public-key.js diff --git a/.gitattributes b/.gitattributes index f0deeb89..bc987806 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,3 @@ -yarn.lock linguist-generated=true -diff \ No newline at end of file +yarn.lock linguist-generated=true -diff +lib/**/*.js linguist-generated=true -diff +lib/**/*.d.ts linguist-generated=true -diff \ No newline at end of file diff --git a/.github/workflows/standalone-examples.yml b/.github/workflows/examples.yml similarity index 95% rename from .github/workflows/standalone-examples.yml rename to .github/workflows/examples.yml index e998a416..bcd9aff0 100644 --- a/.github/workflows/standalone-examples.yml +++ b/.github/workflows/examples.yml @@ -1,10 +1,10 @@ -name: Standalone examples +name: Examples on: push jobs: examples: strategy: matrix: - platform: [ubuntu-latest] # macos-latest + platform: [ubuntu-latest, macos-latest] runs-on: ${{ matrix.platform }} steps: - uses: actions/checkout@v2 diff --git a/.github/workflows/standalone-unit-test.yml b/.github/workflows/unit-test.yml similarity index 74% rename from .github/workflows/standalone-unit-test.yml rename to .github/workflows/unit-test.yml index 24b5138f..009b6786 100644 --- a/.github/workflows/standalone-unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -1,4 +1,4 @@ -name: Standalone unit +name: Unit tests on: push jobs: unit-tests: @@ -13,5 +13,5 @@ jobs: node-version: "16" - name: Install modules run: yarn - - name: Run standalone unit tests - run: yarn test:standalone:unit + - name: Run unit tests + run: yarn test:unit diff --git a/.gitignore b/.gitignore index 2d96c055..971b987d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules yarn-error.log -vendor \ No newline at end of file +vendor +.idea diff --git a/README.md b/README.md index 6eaa5e94..9bbc9d2c 100644 --- a/README.md +++ b/README.md @@ -1,17 +1,14 @@ -# NEAR-SDK-JS (Standalone) +# NEAR JavaScript SDK -## Installation -It is tested on Ubuntu 20.04, M1 Mac and Intel Mac. Other linux should also work but they're not tested. +## Quick Start -1. Make sure you have make, cmake and nodejs. On Linux, also make sure you have gcc. -2. `make setup` +Use [`create-near-app`](https://github.com/near/create-near-app) to quickly get started writing smart contracts in JavaScript on NEAR. -## Usage + npx create-near-app -1. Copy project layout including configurations from `examples/` as a starting point -2. Write smart contracts with JavaScript. You can use most npm packages that uses portable ES2020 features. -3. Build the contract with `yarn build`. -4. If no errors happens, a `.wasm` will be generate at `/build/`. It can be tested with workspaces-js and deployed to a NEAR node. +This will scaffold a basic template for you 😎 + +Learn more in our [Quick Start guide](https://docs.near.org/develop/quickstart-guide). ## Running Examples There are a couple of contract examples in the project: @@ -32,6 +29,9 @@ To build all examples, run `yarn build` in `examples/`. To test all examples, ru To deploy and call a contract on a NEAR node, use near-cli's `near deploy` and `near call`. +## Test +We recommend to use near-workspaces to write tests for your smart contracts. See any of the examples for how tests are setup and written. + ## Error Handling in NEAR-SDK-JS If you want to indicate an error happened and fail the transaction, just throw an error object in JavaScript. The compiled JavaScript contract includes error handling capability. It will catch throwed errors and automatically invoke `panic_utf8` with `"{error.message}\n:{error.stack}"`. As a result, transaction will fail with `"Smart contract panicked: {error.message}\n{error.stack}"` error message. You can also use an error utilities library to organize your errors, such as verror. @@ -44,9 +44,6 @@ When call host function with inappropriate type, means incorrect number of argum - if argument is different than the required type, it'll be coerced to required type - if argument is different than the required type but cannot be coerced, will throw runtime type error, also with message and stacktrace -## Test -We recommend to use near-workspaces to write tests for your smart contracts. See any of the examples for how tests are setup and written. - ## NEAR-SDK-JS API Reference All NEAR blockchain provided functionality (host functions) are defined in `src/api.ts` and exported as `near`. You can use them by: @@ -66,33 +63,33 @@ yarn build ### About Type NEAR-SDK-JS is written in TypeScript, so every API function has a type specified by signature that looks familiar to JavaScript/TypeScript Developers. Two types in the signature need a special attention: -- Most of the API take `BigInt` instead of Number as type. This because JavaScript Number cannot hold 64 bit and 128 bit integer without losing precision. -- `Bytes` in both arguments and return represent a byte buffer, internally it's a JavaScript String Object. Any binary data `0x00-0xff` is stored as the char '\x00-\xff'. This is because QuickJS doesn't have ArrayBuffer in C API. +- Most of the API take `bigint` instead of Number as type. This because JavaScript Number cannot hold 64 bit and 128 bit integer without losing precision. +- `Bytes` in both arguments and return represent a byte buffer, internally it's a JavaScript String Object. Any binary data `0x00-0xff` is stored as the char '\x00-\xff'. This is because QuickJS doesn't have Uint8Array in C API. - To ensure correctness, every `Bytes` argument need to be pass in with the `bytes()` function to runtime type check it's indeed a `Bytes`. - If `Bytes` is too long that `bytes()` can cause gas limit problem, such as in factory contract, represents the content of contract to be deployed. In this case you can precheck and guarantee the correctness of the content and use without `bytes()`. ### Context API ``` -function currentAccountId(): String; -function signerAccountId(): String; +function currentAccountId(): string; +function signerAccountId(): string; function signerAccountPk(): Bytes; -function predecessorAccountId(): String; +function predecessorAccountId(): string; function input(): Bytes; -function blockIndex(): BigInt; -function blockHeight(): BigInt; -function blockTimestamp(): BigInt; -function epochHeight(): BigInt; -function storageUsage(): BigInt +function blockIndex(): bigint; +function blockHeight(): bigint; +function blockTimestamp(): bigint; +function epochHeight(): bigint; +function storageUsage(): bigint ``` ### Economics API ``` -function accountBalance(): BigInt; -function accountLockedBalance(): BigInt; -function attachedDeposit(): BigInt; -function prepaidGas(): BigInt; -function usedGas(): BigInt; +function accountBalance(): bigint; +function accountLockedBalance(): bigint; +function attachedDeposit(): bigint; +function prepaidGas(): bigint; +function usedGas(): bigint; ``` ### Math API @@ -104,7 +101,7 @@ function sha256(value: Bytes): Bytes; function keccak256(value: Bytes): Bytes; function keccak512(value: Bytes): Bytes; function ripemd160(value: Bytes): Bytes; -function ecrecover(hash: Bytes, sign: Bytes, v: BigInt, malleability_flag: BigInt): Bytes | null; +function ecrecover(hash: Bytes, sign: Bytes, v: bigint, malleability_flag: bigint): Bytes | null; ``` ### Miscellaneous API @@ -112,9 +109,9 @@ function ecrecover(hash: Bytes, sign: Bytes, v: BigInt, malleability_flag: BigIn ``` function valueReturn(value: Bytes); -function panic(msg?: String); +function panic(msg?: string); function panicUtf8(msg: Bytes); -function log(msg: String); +function log(msg: string); function logUtf8(msg: Bytes); function logUtf16(msg: Bytes); ``` @@ -122,59 +119,91 @@ function logUtf16(msg: Bytes); ### Promises API ``` -function promiseCreate(account_id: String, method_name: String, arguments: Bytes, amount: BigInt, gas: BigInt): BigInt; -function promiseThen(promise_index: BigInt, account_id: String, method_name: String, arguments: Bytes, amount: BigInt, gas: BigInt): BigInt; -function promiseAnd(...promise_idx: BigInt): BigInt; -function promiseBatchCreate(account_id: String): BigInt; -function promiseBatchThen(promise_index: BigInt, account_id: String): BigInt; +function promiseCreate(account_id: string, method_name: string, arguments: Bytes, amount: bigint, gas: bigint): bigint; +function promiseThen(promise_index: bigint, account_id: string, method_name: string, arguments: Bytes, amount: bigint, gas: bigint): bigint; +function promiseAnd(...promise_idx: bigint): bigint; +function promiseBatchCreate(account_id: string): bigint; +function promiseBatchThen(promise_index: bigint, account_id: string): bigint; ``` ### Promise API actions ``` -function promiseBatchActionCreateAccount(promise_index: BigInt); -function promiseBatchActionDeployContract(promise_index: BigInt, code: Bytes); -function promiseBatchActionFunctionCall(promise_index: BigInt, method_name: String, arguments: Bytes, amount: BigInt, gas: BigInt); -function promiseBatchActionTransfer(promise_index: BigInt, amount: BigInt); -function promiseBatchActionStake(promise_index: BigInt, amount: BigInt, public_key: Bytes); -function promiseBatchActionAddKeyWithFullAccess(promise_index: BigInt, public_key: Bytes, nonce: BigInt); -function promiseBatchActionAddKeyWithFunctionCall(promise_index: BigInt, public_key: Bytes, nonce: BigInt, allowance: BigInt, receiver_id: String, method_names: String); -function promiseBatchActionDeleteKey(promise_index: BigInt, public_key: Bytes); -function promiseBatchActionDeleteAccount(promise_index: BigInt, beneficiary_id: String); +function promiseBatchActionCreateAccount(promise_index: bigint); +function promiseBatchActionDeployContract(promise_index: bigint, code: Bytes); +function promiseBatchActionFunctionCall(promise_index: bigint, method_name: string, arguments: Bytes, amount: bigint, gas: bigint); +function promiseBatchActionFunctionCallWeight(promise_index: bigint, method_name: string, arguments: Bytes, amount: bigint, gas: bigint, weight: bigint); + +function promiseBatchActionTransfer(promise_index: bigint, amount: bigint); +function promiseBatchActionStake(promise_index: bigint, amount: bigint, public_key: Bytes); +function promiseBatchActionAddKeyWithFullAccess(promise_index: bigint, public_key: Bytes, nonce: bigint); +function promiseBatchActionAddKeyWithFunctionCall(promise_index: bigint, public_key: Bytes, nonce: bigint, allowance: bigint, receiver_id: string, method_names: string); +function promiseBatchActionDeleteKey(promise_index: bigint, public_key: Bytes); +function promiseBatchActionDeleteAccount(promise_index: bigint, beneficiary_id: string); ``` ### Promise API results ``` -function promiseResultsCount(): BigInt; -function promiseResult(result_idx: BigInt, register_id: BigInt): BigInt; -function promiseReturn(promise_idx: BigInt); +function promiseResultsCount(): bigint; +function promiseResult(result_idx: bigint, register_id: bigint): bigint; +function promiseReturn(promise_idx: bigint); ``` ### Storage API ``` -function storageWrite(key: Bytes, value: Bytes, register_id: BigInt): BigInt; -function storageRead(key: Bytes, register_id: BigInt): BigInt; -function storageRemove(key: Bytes, register_id: BigInt): BigInt; -function storageHasKey(key: Bytes): BigInt; +function storageWrite(key: Bytes, value: Bytes, register_id: bigint): bigint; +function storageRead(key: Bytes, register_id: bigint): bigint; +function storageRemove(key: Bytes, register_id: bigint): bigint; +function storageHasKey(key: Bytes): bigint; ``` ### Validator API ``` -function validatorStake(account_id: String): BigInt; -function validatorTotalStake(): BigInt; +function validatorStake(account_id: string): bigint; +function validatorTotalStake(): bigint; ``` ### Alt BN128 ``` -function altBn128G1Multiexp(value: Bytes, register_id: BigInt); -function altBn128G1Sum(value: Bytes, register_id: BigInt); -function altBn128PairingCheck(value: Bytes): BigInt; +function altBn128G1Multiexp(value: Bytes, register_id: bigint); +function altBn128G1Sum(value: Bytes, register_id: bigint); +function altBn128PairingCheck(value: Bytes): bigint; +``` + +### NearBindgen and other decorators +You can write a simple smart contract by only using low-level APIs, such as `near.input()`, `near.storageRead()`, etc. In this case, the API of your contract will consist of all the exported JS functions. You can find an example of such a contract [here](https://github.com/near/near-sdk-js/blob/develop/examples/src/counter-lowlevel.js). + +But if you want to build a more complex contracts with ease, you can use decorators from this SDK that will handle serialization, deserialization, and other boilerplate operations for you. + +In order to do that, your contract must be a class decorated with `@NearBindgen({})`. Each method in this class with `@call({})`, `@view({})`, and `@initialize({})` decorators will become functions of your smart contract. `call` functions can change state, and `view` functions can only read it. + +Your class must have a `constructor()`. You will not be able to call it, which is why it should not accept any parameters. You must declare all the parameters that you are planning to use in the constructor and set default values. + +The simplest example of the contract that follows all these rules can be found [here](https://github.com/near/near-sdk-js/blob/develop/examples/src/status-message.js) + +`NearBindgen` decorator can accept `requireInit parameter`. +```JS +@NearBindgen({ requireInit: true }) +class YourContract { + ... +} ``` +It is `false` by default, but if you will set it to `true`, it will prevent all the `call` functions from being executed before you initialize the state of the contract. + +In order to initialize the contract, you need to add functions flagged with `@initialize({})` decorator. + +`@call({})` decorator can accept two parameters: `privateFunction` and `payableFunction`. They are both `false` by default. + +`privateFunction: true` can restrict access to this function to the contract itself. + +`payableFunction: true` will allow the function to accept payments (deposit). Without this flag, it will panic if any deposit was provided. + + ### Collections A few useful on-chain persistent collections are provided. All keys, values and elements are of type `Bytes`. @@ -218,8 +247,8 @@ someMethod() { this.v.pop() // len, isEmpty - let len = this.v.len() - let isEmpty = this.v.isEnpty() + let len = this.v.length + let isEmpty = this.v.isEmpty() // iterate for (let element of this.v) { @@ -346,8 +375,8 @@ someMethod() { this.m.set('ghi', 'ddd') // len, isEmpty - let len = this.m.len() - let isEmpty = this.m.isEnpty() + let len = this.m.length + let isEmpty = this.m.isEmpty() // iterate for (let [k, v] of this.m) { @@ -396,8 +425,8 @@ someMethod() { this.s.remove('def') // len, isEmpty - let len = this.s.len() - let isEmpty = this.s.isEnpty() + let len = this.s.length + let isEmpty = this.s.isEmpty() // iterate for (let e of this.s) { @@ -411,3 +440,76 @@ someMethod() { this.s.clear() } ``` + +### Highlevel Promise APIs +Within a contract class that decorated by `@Nearbindgen`, you can work a high level JavaScript class, called `NearPromise`. It's equivalently expressive as promise batch APIs but much shorter to write and can be chained like a JavaScript Promise. + +In a `@call` method, you can return either a JavaScript value or a `NearPromise` object. In the later case, `@NearBindgen` will automatically `promiseReturn` it for you. + +Usage: +```js +// create new promise +import {NearPromise, near} from 'near-sdk-js' +import { PublicKey } from 'near-sdk-js/lib/types' + +let promise = NearPromise.new('account-to-run-promise') + +// possible promise actions, choose and chain what you need: +promise.createAccount() + .transfer(1_000_000_000_000_000_000_000_000_000_000_000_000n) + .addFullAccessKey(new PublicKey(near.signerAccountPk())) + .addAccessKey(new PublicKey(near.signerAccountPk()), 250000000000000000000000n, // allowance + 'receiver_account_id', 'allowed_function_names') + .stake(100000000000000000000000000000n, new PublicKey(near.signerAccountPk())) + .deployContract(includeBytes('path/to/contract.wasm')) + .functionCall('callee_contract_account_id', inputArgs, + 0, // amount + 2 * Math.pow(10, 13), // gas + ) + .functionCallWeight( + 'callee_contract_account_id', inputArgs, + 0, // amount + 2 * Math.pow(10, 13), // gas + 1, // weight + ) + .deleteKey(new PublicKey(near.signerAccountPk())) + .deleteAccount('beneficial_account_id') + +return promise +``` + +In the case of deploy contract, `includeBytes` is a helpful build-time util. You can include the content of a wasm contract, by using `includeBytes('path/to/contract.wasm')`. + +In the case of `addFullAccessKey`, `addAccessKey` and `stake`, it takes a `PublicKey` object, you can find more details about it in the Types sections below. + +Besides above APIs to build something on top of an API, you can also chain promises with `.then` and `.and`, they're equivalent to promiseThen, promiseAnd: +```js +// assume promise, promise2 and promise3 are create with above APIs, with several actions added like above. +promise.and(promise2).then(promise3) // promiseAnd of [promise_id, promise2_id], then promiseThen(promise_and_id, promise3_id) + +return promise +``` + +### Types + +NEAR-SDK-JS also includes type defintions that are equivalent to that in Rust SDK / nearcore. You can browse them in near-sdk-js/src/types. Most of them are just type alias to Bytes and bigint. + +#### Public Key +Public Key is representing a NEAR account's public key in a JavaScript class. You can either initiate a Public Key from binary data, or from a human readable string. + +The binary data is in the same format as nearcore, but encoded in bytes. That's one byte to represent the curve type of the public key, either ed25519 (`\x00`), or secp256k1 ('\x01'), follows by the curve-specific public key data in bytes. Examples: + +```js +new PublicKey(near.signerAccountPk()) +new PublicKey("\x00\xeb\x7f\x5f\x11\xd1\x08\x1f\xe0\xd2\x24\xc5\x67\x36\x21\xad\xcb\x97\xd5\x13\xff\xa8\x5e\x55\xbc\x2b\x74\x4f\x0d\xb1\xe9\xf8\x1f") +new PublicKey("\x01\xf2\x56\xc6\xe6\xc8\x0b\x21\x3f\x2a\xa0\xb0\x17\x44\x23\x5d\x51\x5c\x59\x44\x35\xbe\x65\x1b\x15\x88\x3a\x10\xdd\x47\x2f\xa6\x46\xce\x62\xea\xf3\x67\x0d\xc5\xcb\x91\x00\xa0\xca\x2a\x55\xb2\xc1\x47\xc1\xe9\xa3\x8c\xe4\x28\x87\x8e\x7d\x46\xe1\xfb\x71\x4a\x99") +``` + +The human readable form is `ed25519:` or `secp256k1:` following base58-encoded public key. And initialize the Public Key with `PublicKey.fromString`: + +```js +PublicKey.fromString('ed25519:DXkVZkHd7WUUejCK7i74uAoZWy1w9AZqshhTHxhmqHuB`) +PublicKey.fromString('secp256k1:5r22SrjrDvgY3wdQsnjgxkeAbU1VcM71FYvALEQWihjM3Xk4Be1CpETTqFccChQr4iJwDroSDVmgaWZv2AcXvYeL`) +``` + +Once a PublicKey object is created, it can be used in high level promise APIs that takes a public key, such as `addFullAccessKey`, `addAccessKey` and `stake`. \ No newline at end of file diff --git a/cli/builder/builder.c b/cli/builder/builder.c index 43d3e571..4fc5153e 100644 --- a/cli/builder/builder.c +++ b/cli/builder/builder.c @@ -117,6 +117,7 @@ extern void promise_batch_action_add_key_with_full_access(uint64_t promise_index extern void promise_batch_action_add_key_with_function_call(uint64_t promise_index, uint64_t public_key_len, uint64_t public_key_ptr, uint64_t nonce, uint64_t allowance_ptr, uint64_t receiver_id_len, uint64_t receiver_id_ptr, uint64_t method_names_len, uint64_t method_names_ptr); extern void promise_batch_action_delete_key(uint64_t promise_index, uint64_t public_key_len, uint64_t public_key_ptr); extern void promise_batch_action_delete_account(uint64_t promise_index, uint64_t beneficiary_id_len, uint64_t beneficiary_id_ptr); +extern void promise_batch_action_function_call_weight(uint64_t promise_index, uint64_t function_name_len, uint64_t function_name_ptr, uint64_t arguments_len, uint64_t arguments_ptr, uint64_t amount_ptr, uint64_t gas, uint64_t weight); // ####################### // # Promise API results # // ####################### @@ -761,6 +762,33 @@ static JSValue near_promise_batch_action_delete_key(JSContext *ctx, JSValueConst return JS_UNDEFINED; } +static JSValue near_promise_batch_action_function_call_weight(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) +{ + uint64_t promise_index; + const char *method_name_ptr, *arguments_ptr; + size_t method_name_len, arguments_len; + uint64_t amount_ptr[2]; // amount is u128 + uint64_t gas; + uint64_t weight; + + if (JS_ToUint64Ext(ctx, &promise_index, argv[0]) < 0) { + return JS_ThrowTypeError(ctx, "Expect Uint64 for promise_index"); + } + method_name_ptr = JS_ToCStringLen(ctx, &method_name_len, argv[1]); + arguments_ptr = JS_ToCStringLenRaw(ctx, &arguments_len, argv[2]); + if (quickjs_to_u128(ctx, argv[3], amount_ptr) != 0) { + return JS_ThrowTypeError(ctx, "Expect Uint128 for amount"); + } + if (JS_ToUint64Ext(ctx, &gas, argv[4]) < 0) { + return JS_ThrowTypeError(ctx, "Expect Uint64 for gas"); + } + if (JS_ToUint64Ext(ctx, &weight, argv[5]) < 0) { + return JS_ThrowTypeError(ctx, "Expect Uint64 for weight"); + } + promise_batch_action_function_call_weight(promise_index, method_name_len, (uint64_t)method_name_ptr, arguments_len, (uint64_t)arguments_ptr, (uint64_t)amount_ptr, gas, weight); + return JS_UNDEFINED; +} + static JSValue near_promise_batch_action_delete_account(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) { uint64_t promise_index; @@ -979,6 +1007,7 @@ static void js_add_near_host_functions(JSContext* ctx) { JS_SetPropertyStr(ctx, env, "promise_batch_action_add_key_with_function_call", JS_NewCFunction(ctx, near_promise_batch_action_add_key_with_function_call, "promise_batch_action_add_key_with_function_call", 6)); JS_SetPropertyStr(ctx, env, "promise_batch_action_delete_key", JS_NewCFunction(ctx, near_promise_batch_action_delete_key, "promise_batch_action_delete_key", 2)); JS_SetPropertyStr(ctx, env, "promise_batch_action_delete_account", JS_NewCFunction(ctx, near_promise_batch_action_delete_account, "promise_batch_action_delete_account", 2)); + JS_SetPropertyStr(ctx, env, "promise_batch_action_function_call_weight", JS_NewCFunction(ctx, near_promise_batch_action_function_call_weight, "promise_batch_action_function_call_weight", 6)); JS_SetPropertyStr(ctx, env, "promise_results_count", JS_NewCFunction(ctx, near_promise_results_count, "promise_results_count", 0)); JS_SetPropertyStr(ctx, env, "promise_result", JS_NewCFunction(ctx, near_promise_result, "promise_result", 2)); JS_SetPropertyStr(ctx, env, "promise_return", JS_NewCFunction(ctx, near_promise_return, "promise_return", 1)); diff --git a/cli/cli.js b/cli/cli.js index d74c6804..a87385e7 100755 --- a/cli/cli.js +++ b/cli/cli.js @@ -45,16 +45,13 @@ async function build(argv) { const TARGET_EXT = argv.target.split('.').pop(); const TARGET_FILE_NAME = path.basename(argv.target, `.${TARGET_EXT}`); - if(!["wasm", "base64"].includes(TARGET_EXT)){ - throw new Error(`Unsupported target ${TARGET_EXT}, make sure target ends with .wasm or .base64`); - } - - const TARGET_TYPE = TARGET_EXT === 'wasm' ? 'STANDALONE' : 'ENCLAVED'; + if (!["wasm"].includes(TARGET_EXT)) { + throw new Error(`Unsupported target ${TARGET_EXT}, make sure target ends with .wasm`); + } const ROLLUP_TARGET = `${TARGET_DIR}/${TARGET_FILE_NAME}.js`; const QJSC_TARGET = `${TARGET_DIR}/${TARGET_FILE_NAME}.h`; - const STANDALONE_CONTRACT_TARGET = `${TARGET_DIR}/${TARGET_FILE_NAME}.wasm`; - const ENCLAVED_CONTRACT_TARGET = `${TARGET_DIR}/${TARGET_FILE_NAME}.base64`; + const CONTRACT_TARGET = `${TARGET_DIR}/${TARGET_FILE_NAME}.wasm`; console.log(`Building ${SOURCE_FILE_WITH_PATH} contract...`); @@ -69,13 +66,9 @@ async function build(argv) { await createHeaderFileWithQjsc(ROLLUP_TARGET, QJSC_TARGET); - if (TARGET_TYPE === 'STANDALONE') { - await createStandaloneMethodsHeaderFile(ROLLUP_TARGET); - await createStandaloneWasmContract(QJSC_TARGET, STANDALONE_CONTRACT_TARGET); - await wasiStubStandaloneContract(STANDALONE_CONTRACT_TARGET); - } else { - await createEnclavedContract(QJSC_TARGET, ENCLAVED_CONTRACT_TARGET); - } + await createMethodsHeaderFile(ROLLUP_TARGET); + await createWasmContract(QJSC_TARGET, CONTRACT_TARGET); + await wasiStubContract(CONTRACT_TARGET); } async function checkTsBuildWithTsc(sourceFileWithPath) { @@ -110,15 +103,7 @@ async function createHeaderFileWithQjsc(rollupTarget, qjscTarget) { await executeCommand(`${QJSC} -c -m -o ${qjscTarget} -N code ${rollupTarget}`); } -// Enclaved build functions -async function createEnclavedContract(qjscTarget, enclavedContractTarget) { - console.log(`Saving enclaved bytecode to ${enclavedContractTarget}`); - const SAVE_BYTECODE_SCRIPT = `${NEAR_SDK_JS}/cli/save_bytecode.js`; - await executeCommand(`node ${SAVE_BYTECODE_SCRIPT} ${qjscTarget} ${enclavedContractTarget}`); -} - -// Standalone build functions -async function createStandaloneMethodsHeaderFile(rollupTarget) { +async function createMethodsHeaderFile(rollupTarget) { console.log(`Genereting methods.h file`); let source = rollupTarget; const buildPath = path.dirname(source); @@ -132,8 +117,8 @@ async function createStandaloneMethodsHeaderFile(rollupTarget) { await fs.writeFile(`${buildPath}/methods.h`, methods); } -async function createStandaloneWasmContract(qjscTarget, standaloneContractTarget) { - console.log(`Creating ${standaloneContractTarget} contract...`); +async function createWasmContract(qjscTarget, contractTarget) { + console.log(`Creating ${contractTarget} contract...`); const WASI_SDK_PATH = `${NEAR_SDK_JS}/cli/deps/wasi-sdk`; const CC = `${WASI_SDK_PATH}/bin/clang --sysroot=${WASI_SDK_PATH}/share/wasi-sysroot` @@ -143,7 +128,7 @@ async function createStandaloneWasmContract(qjscTarget, standaloneContractTarget } const INCLUDES = `-I${QJSC_DIR} -I.` const ORIGINAL_BUILDER_PATH = `${NEAR_SDK_JS}/cli/builder/builder.c`; - const NEW_BUILDER_PATH = `${path.dirname(standaloneContractTarget)}/builder.c` + const NEW_BUILDER_PATH = `${path.dirname(contractTarget)}/builder.c` const SOURCES = `${NEW_BUILDER_PATH} ${QJSC_DIR}/quickjs.c ${QJSC_DIR}/libregexp.c ${QJSC_DIR}/libunicode.c ${QJSC_DIR}/cutils.c ${QJSC_DIR}/quickjs-libc-min.c ${QJSC_DIR}/libbf.c`; const LIBS = `-lm` @@ -151,11 +136,11 @@ async function createStandaloneWasmContract(qjscTarget, standaloneContractTarget await executeCommand(`cp ${ORIGINAL_BUILDER_PATH} ${NEW_BUILDER_PATH}`); await executeCommand(`mv ${qjscTarget} build/code.h`); - await executeCommand(`${CC} --target=wasm32-wasi -nostartfiles -Oz -flto ${DEFS} ${INCLUDES} ${SOURCES} ${LIBS} -Wl,--no-entry -Wl,--allow-undefined -Wl,-z,stack-size=${256 * 1024} -Wl,--lto-O3 -o ${standaloneContractTarget}`); + await executeCommand(`${CC} --target=wasm32-wasi -nostartfiles -Oz -flto ${DEFS} ${INCLUDES} ${SOURCES} ${LIBS} -Wl,--no-entry -Wl,--allow-undefined -Wl,-z,stack-size=${256 * 1024} -Wl,--lto-O3 -o ${contractTarget}`); } -async function wasiStubStandaloneContract(standaloneContractTarget) { +async function wasiStubContract(contractTarget) { console.log(`Executing wasi-stub...`); const WASI_STUB = `${NEAR_SDK_JS}/cli/deps/binaryen/wasi-stub/run.sh`; - await executeCommand(`${WASI_STUB} ${standaloneContractTarget} >/dev/null`); + await executeCommand(`${WASI_STUB} ${contractTarget} >/dev/null`); } diff --git a/cli/post-install.js b/cli/post-install.js index 5eee4634..557f4785 100644 --- a/cli/post-install.js +++ b/cli/post-install.js @@ -29,7 +29,7 @@ await executeCommand(`mkdir -p binaryen && tar xvf ${BINARYEN_TAR_NAME} --direct await executeCommand(`rm ${BINARYEN_TAR_NAME}`); console.log('Installing QuickJS...'); -const QUICK_JS_VERSION = `0.1.0`; +const QUICK_JS_VERSION = `0.1.1`; const QUICK_JS_VERSION_TAG = `v${QUICK_JS_VERSION}`; const QUICK_JS_SYSTEM_NAME = OS === 'Linux' ? 'Linux' : OS === 'Darwin' ? 'macOS' : 'other'; const QUICK_JS_ARCH_NAME = ARCH === 'x86_64' ? 'X64' : ARCH === 'arm64' ? 'arm64' : 'other'; diff --git a/examples/__tests__/test-clean-state.ava.js b/examples/__tests__/test-clean-state.ava.js index 718eb33e..31f5e07c 100644 --- a/examples/__tests__/test-clean-state.ava.js +++ b/examples/__tests__/test-clean-state.ava.js @@ -11,9 +11,6 @@ test.beforeEach(async t => { // Deploy the clean-state contract. const cleanState = await root.devDeploy('./build/clean-state.wasm'); - // Init the contract - await cleanState.call(cleanState, 'init', {}); - // Save state for test runs, it is unique for each test t.context.worker = worker; t.context.accounts = { @@ -22,7 +19,7 @@ test.beforeEach(async t => { }; }); -test.afterEach(async t => { +test.afterEach.always(async t => { await t.context.worker.tearDown().catch(error => { console.log('Failed tear down the worker:', error); }); diff --git a/examples/__tests__/test-counter.ava.js b/examples/__tests__/test-counter.ava.js index f132e1e4..8a696480 100644 --- a/examples/__tests__/test-counter.ava.js +++ b/examples/__tests__/test-counter.ava.js @@ -15,8 +15,6 @@ test.beforeEach(async t => { (process.env['COUNTER_TS'] ? './build/counter-ts.wasm' : './build/counter.wasm') ); - // Init the contract - await counter.call(counter, 'init', {}); // Test users const ali = await root.createSubAccount('ali'); @@ -28,7 +26,7 @@ test.beforeEach(async t => { }); // If the environment is reused, use test.after to replace test.afterEach -test.afterEach(async t => { +test.afterEach.always(async t => { await t.context.worker.tearDown().catch(error => { console.log('Failed to tear down the worker:', error); }); diff --git a/examples/__tests__/test-cross-contract-call.ava.js b/examples/__tests__/test-cross-contract-call.ava.js index feb2b8fc..4b366698 100644 --- a/examples/__tests__/test-cross-contract-call.ava.js +++ b/examples/__tests__/test-cross-contract-call.ava.js @@ -13,9 +13,6 @@ test.beforeEach(async t => { './build/status-message.wasm', ); - // Init the contract - await statusMessage.call(statusMessage, 'init', {}); - // Deploy the onCall contract. const onCall = await root.devDeploy( './build/cross-contract-call.wasm', @@ -39,7 +36,7 @@ test.beforeEach(async t => { }; }); -test.afterEach(async t => { +test.afterEach.always(async t => { await t.context.worker.tearDown().catch(error => { console.log('Failed tear down the worker:', error); }); diff --git a/examples/__tests__/test-fungible-token-lockable.ava.js b/examples/__tests__/test-fungible-token-lockable.ava.js index 39350e8b..5481f8b2 100644 --- a/examples/__tests__/test-fungible-token-lockable.ava.js +++ b/examples/__tests__/test-fungible-token-lockable.ava.js @@ -25,7 +25,7 @@ test.beforeEach(async t => { t.context.accounts = { root, lockableFt, ali, bob }; }); -test.afterEach(async t => { +test.afterEach.always(async t => { await t.context.worker.tearDown().catch(error => { console.log('Failed to tear down the worker:', error); }); diff --git a/examples/__tests__/test-fungible-token.ava.js b/examples/__tests__/test-fungible-token.ava.js index 857d6f17..7cab26de 100644 --- a/examples/__tests__/test-fungible-token.ava.js +++ b/examples/__tests__/test-fungible-token.ava.js @@ -18,7 +18,6 @@ test.beforeEach(async (t) => { // Init the contracts await ft.call(ft, 'init', { prefix: 'a', totalSupply: '1000' }); - await xcc.call(xcc, 'init', {}); // Create test accounts const ali = await root.createSubAccount('ali'); @@ -29,7 +28,7 @@ test.beforeEach(async (t) => { t.context.accounts = { root, ft, ali, bob, xcc }; }); -test.afterEach(async t => { +test.afterEach.always(async t => { await t.context.worker.tearDown().catch(error => { console.log('Failed tear down the worker:', error); }); diff --git a/examples/__tests__/test-non-fungible-token.ava.js b/examples/__tests__/test-non-fungible-token.ava.js index f143774c..6f897050 100644 --- a/examples/__tests__/test-non-fungible-token.ava.js +++ b/examples/__tests__/test-non-fungible-token.ava.js @@ -38,7 +38,7 @@ test.beforeEach(async t => { t.context.accounts = { root, nft, tokenReceiver, tokenId, ali, bob }; }); -test.afterEach(async t => { +test.afterEach.always(async t => { await t.context.worker.tearDown().catch(error => { console.log('Failed tear down the worker:', error); }); diff --git a/examples/__tests__/test-parking-lot.ava.js b/examples/__tests__/test-parking-lot.ava.js index 641e6102..af1d3b3a 100644 --- a/examples/__tests__/test-parking-lot.ava.js +++ b/examples/__tests__/test-parking-lot.ava.js @@ -8,7 +8,7 @@ test.beforeEach(async t => { const parkingLot = await root.devDeploy( 'build/parking-lot.wasm', ); - await parkingLot.call(parkingLot, 'init', {}); + const ali = await root.createSubAccount('ali'); @@ -16,7 +16,7 @@ test.beforeEach(async t => { t.context.accounts = { root, parkingLot, ali }; }); -test.afterEach(async t => { +test.afterEach.always(async t => { await t.context.worker.tearDown().catch(error => { console.log('Failed to tear down the worker:', error); }); diff --git a/examples/__tests__/test-status-message-collections.ava.js b/examples/__tests__/test-status-message-collections.ava.js index 87a038fe..ab1ba23a 100644 --- a/examples/__tests__/test-status-message-collections.ava.js +++ b/examples/__tests__/test-status-message-collections.ava.js @@ -13,8 +13,6 @@ test.beforeEach(async t => { './build/status-message-collections.wasm', ); - // Init the contract - await statusMessage.call(statusMessage, 'init', {}); // Test users const ali = await root.createSubAccount('ali'); @@ -26,7 +24,7 @@ test.beforeEach(async t => { t.context.accounts = { root, statusMessage, ali, bob, carl }; }); -test.afterEach(async t => { +test.afterEach.always(async t => { await t.context.worker.tearDown().catch(error => { console.log('Failed to tear down the worker:', error); }); diff --git a/examples/__tests__/test-status-message.ava.js b/examples/__tests__/test-status-message.ava.js index a8982819..9310cf02 100644 --- a/examples/__tests__/test-status-message.ava.js +++ b/examples/__tests__/test-status-message.ava.js @@ -13,9 +13,6 @@ test.before(async t => { './build/status-message.wasm', ); - // Init the contract - await statusMessage.call(statusMessage, 'init', {}); - // Create test users const ali = await root.createSubAccount('ali'); const bob = await root.createSubAccount('bob'); @@ -26,7 +23,7 @@ test.before(async t => { t.context.accounts = { root, statusMessage, ali, bob, carl }; }); -test.after(async t => { +test.after.always(async t => { await t.context.worker.tearDown().catch(error => { console.log('Failed to tear down the worker:', error); }); diff --git a/examples/babel.config.json b/examples/babel.config.json index ec175674..d01c909c 100644 --- a/examples/babel.config.json +++ b/examples/babel.config.json @@ -1,5 +1,6 @@ { "plugins": [ + "near-sdk-js/lib/build-tools/include-bytes", "near-sdk-js/lib/build-tools/near-bindgen-exporter", ["@babel/plugin-proposal-decorators", {"version": "legacy"}] ], diff --git a/examples/package.json b/examples/package.json index e5afb391..7749e090 100644 --- a/examples/package.json +++ b/examples/package.json @@ -1,5 +1,5 @@ { - "name": "standalone-examples", + "name": "examples", "version": "1.0.0", "description": "Status message example with near-sdk-js", "main": "index.js", @@ -39,7 +39,7 @@ }, "devDependencies": { "ava": "^4.2.0", - "near-workspaces": "3.1.0", + "near-workspaces": "3.2.1", "typescript": "^4.7.4" } } diff --git a/examples/src/clean-state.js b/examples/src/clean-state.js index cb3f3083..cb960067 100644 --- a/examples/src/clean-state.js +++ b/examples/src/clean-state.js @@ -1,23 +1,20 @@ -import { NearContract, NearBindgen, call, view, near } from 'near-sdk-js' +import { NearBindgen, call, view, near } from 'near-sdk-js' -@NearBindgen -class CleanState extends NearContract { - @call - clean({keys}) { +@NearBindgen({}) +class CleanState { + @call({}) + clean({ keys }) { keys.forEach(key => near.storageRemove(key)) } - @call - put({key, value}) { + @call({}) + put({ key, value }) { near.storageWrite(key, value) } - @view - get({key}) { + @view({}) + get({ key }) { + return near.storageRead(key) } - - default() { - return new CleanState() - } } diff --git a/examples/src/counter-lowlevel.js b/examples/src/counter-lowlevel.js index 3cdfb44f..c750eb71 100644 --- a/examples/src/counter-lowlevel.js +++ b/examples/src/counter-lowlevel.js @@ -1,12 +1,12 @@ // This contract implements exact same functionality as counter.js, but only use low level APIs -import {near} from 'near-sdk-js' +import { near } from 'near-sdk-js' export function init() { let argsRaw = near.input() let args = JSON.parse(argsRaw || "{}") let initial = args.initial || 0 let count = initial - let state = JSON.stringify({count}) + let state = JSON.stringify({ count }) near.storageWrite('STATE', state) } @@ -15,7 +15,7 @@ function deserialize() { if (state) { return JSON.parse(state) } else { - throw new Error("Contract state is empty") + return { count: 0 } } } diff --git a/examples/src/counter.js b/examples/src/counter.js index fac5a9e8..1f898a98 100644 --- a/examples/src/counter.js +++ b/examples/src/counter.js @@ -1,20 +1,19 @@ -import { NearContract, NearBindgen, near, call, view } from 'near-sdk-js' +import { NearBindgen, near, call, view, initialize } from 'near-sdk-js' import { isUndefined } from 'lodash-es' -@NearBindgen -class Counter extends NearContract { - constructor({ initial = 0 }) { - super() - this.count = initial +@NearBindgen({}) +class Counter { + constructor() { + this.count = 0 } - @call + @call({}) increase({ n = 1 }) { this.count += n near.log(`Counter increased to ${this.count}`) } - @call + @call({}) decrease({ n }) { // you can use default argument `n=1` too // this is to illustrate a npm dependency: lodash can be used @@ -26,13 +25,9 @@ class Counter extends NearContract { near.log(`Counter decreased to ${this.count}`) } - @view + @view({}) getCount() { return this.count } - - default() { - return new Counter({ initial: 0 }) - } } diff --git a/examples/src/counter.ts b/examples/src/counter.ts index b8b053b6..9ab98cb6 100644 --- a/examples/src/counter.ts +++ b/examples/src/counter.ts @@ -1,23 +1,18 @@ -import { NearContract, NearBindgen, near, call, view } from 'near-sdk-js' +import { NearBindgen, near, call, view, initialize } from 'near-sdk-js' import { isUndefined } from 'lodash-es' import { log } from './log' -@NearBindgen -class Counter extends NearContract { - count: number; +@NearBindgen({}) +class Counter { + count: number = 0; - constructor({ initial = 0 }: { initial: number }) { - super() - this.count = initial - } - - @call + @call({}) increase({ n = 1 }: { n: number }) { this.count += n near.log(`Counter increased to ${this.count}`) } - @call + @call({}) decrease({ n }: { n: number }) { // you can use default argument `n=1` too // this is to illustrate a npm dependency: lodash can be used @@ -30,13 +25,9 @@ class Counter extends NearContract { log(`Counter decreased to ${this.count}`) } - @view + @view({}) getCount(): number { return this.count } - - default() { - return new Counter({ initial: 0 }) - } } diff --git a/examples/src/cross-contract-call.js b/examples/src/cross-contract-call.js index a315bfe9..40388903 100644 --- a/examples/src/cross-contract-call.js +++ b/examples/src/cross-contract-call.js @@ -1,14 +1,19 @@ -import { NearContract, NearBindgen, call, view, near, bytes } from 'near-sdk-js' +import { NearBindgen, call, view, initialize, near, bytes } from 'near-sdk-js' -@NearBindgen -class OnCall extends NearContract { - constructor({ statusMessageContract }) { - super() +@NearBindgen({ requireInit: true }) +class OnCall { + constructor() { + this.personOnCall = '' + this.statusMessageContract = '' + } + + @initialize({}) + init({ statusMessageContract }) { this.personOnCall = "undefined" this.statusMessageContract = statusMessageContract } - @call + @call({}) set_person_on_call({ accountId }) { near.log(`Trying to set ${accountId} on-call`) const promise = near.promiseBatchCreate(this.statusMessageContract) @@ -16,12 +21,9 @@ class OnCall extends NearContract { near.promiseThen(promise, near.currentAccountId(), '_set_person_on_call_private', bytes(JSON.stringify({ accountId: accountId })), 0, 30000000000000); } - @call + @call({ privateFunction: true }) _set_person_on_call_private({ accountId }) { near.log(`_set_person_on_call_private called, accountId ${accountId}`) - if (near.currentAccountId() !== near.predecessorAccountId()) { - throw Error('Function can be used as a callback only') - } const status = JSON.parse(near.promiseResult(0)) near.log(`${accountId} status is ${status}`) if (status === 'AVAILABLE') { @@ -32,13 +34,9 @@ class OnCall extends NearContract { } } - @view + @view({}) person_on_call() { near.log(`Returning person on-call: ${this.personOnCall}`) return this.personOnCall } - - default() { - return new OnCall({ statusMessageContract: '' }) - } } diff --git a/examples/src/fungible-token-helper.js b/examples/src/fungible-token-helper.js index 82bcfa22..fd2bc18a 100644 --- a/examples/src/fungible-token-helper.js +++ b/examples/src/fungible-token-helper.js @@ -1,24 +1,19 @@ -import { NearContract, NearBindgen, call, view } from "near-sdk-js"; +import { NearBindgen, call, view } from "near-sdk-js"; -@NearBindgen -class FungibleTokenHelper extends NearContract { +@NearBindgen({}) +class FungibleTokenHelper { constructor() { - super(); this.data = ""; } - @call + @call({}) ftOnTransfer({ senderId, amount, msg, receiverId }) { const concatString = `[${amount} from ${senderId} to ${receiverId}] ${msg} `; this.data = this.data.concat("", concatString); } - @view + @view({}) getContractData() { return this.data; } - - default() { - return new FungibleTokenHelper(); - } } \ No newline at end of file diff --git a/examples/src/fungible-token-lockable.js b/examples/src/fungible-token-lockable.js index c0a688ba..9b3c36d4 100644 --- a/examples/src/fungible-token-lockable.js +++ b/examples/src/fungible-token-lockable.js @@ -1,8 +1,8 @@ import { - NearContract, NearBindgen, call, view, + initialize, near, LookupMap, } from 'near-sdk-js' @@ -49,15 +49,17 @@ class Account { } } -@NearBindgen -class LockableFungibleToken extends NearContract { - constructor({ prefix, totalSupply }) { - super() - this.accounts = new LookupMap(prefix) // Account ID -> Account mapping - this.totalSupply = totalSupply // Total supply of the all tokens +@NearBindgen({ initRequired: true }) +class LockableFungibleToken { + constructor() { + this.accounts = new LookupMap('a') // Account ID -> Account mapping + this.totalSupply = 0 // Total supply of the all tokens } - init() { + @initialize({}) + init({ prefix, totalSupply }) { + this.accounts = new LookupMap(prefix) + this.totalSupply = totalSupply let ownerId = near.signerAccountId() let ownerAccount = this.getAccount(ownerId) ownerAccount.balance = this.totalSupply @@ -76,7 +78,7 @@ class LockableFungibleToken extends NearContract { this.accounts.set(accountId, account) } - @call + @call({}) setAllowance({ escrowAccountId, allowance }) { let ownerId = near.predecessorAccountId() if (escrowAccountId === ownerId) { @@ -92,7 +94,7 @@ class LockableFungibleToken extends NearContract { this.setAccount(ownerId, account) } - @call + @call({}) lock({ ownerId, lockAmount }) { if (lockAmount <= 0) { throw Error("Can't lock 0 or less tokens") @@ -122,7 +124,7 @@ class LockableFungibleToken extends NearContract { this.setAccount(ownerId, account) } - @call + @call({}) unlock({ ownerId, unlockAmount }) { if (unlockAmount <= 0) { throw Error("Can't unlock 0 or less tokens") @@ -149,7 +151,7 @@ class LockableFungibleToken extends NearContract { this.setAccount(ownerId, account) } - @call + @call({}) transferFrom({ ownerId, newOwnerId, amount }) { if (amount <= 0) { throw Error("Can't transfer 0 or less tokens") @@ -195,37 +197,33 @@ class LockableFungibleToken extends NearContract { this.setAccount(newOwnerId, newAccount) } - @call + @call({}) transfer({ newOwnerId, amount }) { this.transferFrom({ ownerId: near.predecessorAccountId(), newOwnerId, amount }) } - @view + @view({}) getTotalSupply() { return this.totalSupply } - @view + @view({}) getTotalBalance({ ownerId }) { return this.getAccount(ownerId).totalBalance() } - @view + @view({}) getUnlockedBalance({ ownerId }) { return this.getAccount(ownerId).balance } - @view + @view({}) getAllowance({ ownerId, escrowAccountId }) { return this.getAccount(ownerId).getAllowance(escrowAccountId) } - @view + @view({}) getLockedBalance({ ownerId, escrowAccountId }) { return this.getAccount(ownerId).getLockedBalance(escrowAccountId) } - - default() { - return new LockableFungibleToken({ prefix: '', totalSupply: 0 }) - } } diff --git a/examples/src/fungible-token.js b/examples/src/fungible-token.js index 11d82289..0cb6be8d 100644 --- a/examples/src/fungible-token.js +++ b/examples/src/fungible-token.js @@ -1,24 +1,27 @@ import { - NearContract, NearBindgen, call, view, + initialize, near, LookupMap, assert } from 'near-sdk-js' -@NearBindgen -class FungibleToken extends NearContract { - constructor({ prefix, totalSupply }) { - super() - this.accounts = new LookupMap(prefix) - this.totalSupply = totalSupply - // In a real world Fungible Token contract, storage management is required to denfense drain-storage attack + +@NearBindgen({ initRequired: true }) +class FungibleToken { + constructor() { + this.accounts = new LookupMap('a') + this.totalSupply = 0 } - init() { + @initialize({}) + init({ prefix, totalSupply }) { + this.accounts = new LookupMap(prefix) + this.totalSupply = totalSupply this.accounts.set(near.signerAccountId(), this.totalSupply) + // In a real world Fungible Token contract, storage management is required to denfense drain-storage attack } internalDeposit({ accountId, amount }) { @@ -46,13 +49,13 @@ class FungibleToken extends NearContract { this.internalDeposit({ accountId: receiverId, amount }) } - @call + @call({}) ftTransfer({ receiverId, amount, memo }) { let senderId = near.predecessorAccountId() this.internalTransfer({ senderId, receiverId, amount, memo }) } - @call + @call({}) ftTransferCall({ receiverId, amount, memo, msg }) { let senderId = near.predecessorAccountId() this.internalTransfer({ senderId, receiverId, amount, memo }); @@ -62,17 +65,13 @@ class FungibleToken extends NearContract { return near.promiseReturn(); } - @view + @view({}) ftTotalSupply() { return this.totalSupply } - @view + @view({}) ftBalanceOf({ accountId }) { return this.accounts.get(accountId) || '0' } - - default() { - return new FungibleToken({ prefix: '', totalSupply: 0 }) - } } diff --git a/examples/src/non-fungible-token-receiver.js b/examples/src/non-fungible-token-receiver.js index 37860283..a7e57571 100644 --- a/examples/src/non-fungible-token-receiver.js +++ b/examples/src/non-fungible-token-receiver.js @@ -1,13 +1,17 @@ -import { NearContract, NearBindgen, call, near, assert } from 'near-sdk-js' +import { NearBindgen, call, near, assert, initialize } from 'near-sdk-js' -@NearBindgen -class NftContract extends NearContract { - constructor({ nonFungibleTokenAccountId }) { - super() +@NearBindgen({ requireInit: true }) +class NftContract { + constructor() { + this.nonFungibleTokenAccountId = '' + } + + @initialize({}) + init({ nonFungibleTokenAccountId }) { this.nonFungibleTokenAccountId = nonFungibleTokenAccountId } - @call + @call({}) nftOnTransfer({ senderId, previousOwnerId, tokenId, msg }) { near.log(`nftOnTransfer called, params: senderId: ${senderId}, previousOwnerId: ${previousOwnerId}, tokenId: ${tokenId}, msg: ${msg}`) assert( @@ -24,8 +28,4 @@ class NftContract extends NearContract { throw Error("unsupported msg") } } - - default() { - return new NftContract({ nonFungibleTokenAccountId: '' }) - } } diff --git a/examples/src/non-fungible-token.js b/examples/src/non-fungible-token.js index 77d677f4..b9fb45c4 100644 --- a/examples/src/non-fungible-token.js +++ b/examples/src/non-fungible-token.js @@ -1,4 +1,4 @@ -import { NearContract, NearBindgen, call, view, near, LookupMap, bytes, assert } from 'near-sdk-js' +import { NearBindgen, call, view, initialize, near, LookupMap, bytes, assert } from 'near-sdk-js' class Token { constructor(token_id, owner_id) { @@ -7,10 +7,15 @@ class Token { } } -@NearBindgen -class NftContract extends NearContract { - constructor({ owner_id, owner_by_id_prefix }) { - super() +@NearBindgen({ requireInit: true }) +class NftContract { + constructor() { + this.owner_id = '' + this.owner_by_id = new LookupMap('a') + } + + @initialize({}) + init({ owner_id, owner_by_id_prefix }) { this.owner_id = owner_id this.owner_by_id = new LookupMap(owner_by_id_prefix) } @@ -27,13 +32,13 @@ class NftContract extends NearContract { return owner_id } - @call + @call({}) nftTransfer({ receiver_id, token_id, approval_id, memo }) { let sender_id = near.predecessorAccountId() this.internalTransfer({ sender_id, receiver_id, token_id, approval_id, memo }) } - @call + @call({}) nftTransferCall({ receiver_id, token_id, approval_id, memo, msg }) { near.log(`nftTransferCall called, receiver_id ${receiver_id}, token_id ${token_id}`) let sender_id = near.predecessorAccountId() @@ -44,12 +49,9 @@ class NftContract extends NearContract { near.promiseThen(promise, near.currentAccountId(), '_nftResolveTransfer', bytes(JSON.stringify({ sender_id, receiver_id, token_id })), 0, 30000000000000); } - @call + @call({ privateFunction: true }) _nftResolveTransfer({ sender_id, receiver_id, token_id }) { near.log(`_nftResolveTransfer called, receiver_id ${receiver_id}, token_id ${token_id}`) - if (near.currentAccountId() == !near.predecessorAccountId()) { - throw Error('Function can be used as a callback only') - } const isTokenTransfered = JSON.parse(near.promiseResult(0)) near.log(`${token_id} ${isTokenTransfered ? 'was transfered' : 'was NOT transfered'}`) @@ -65,7 +67,7 @@ class NftContract extends NearContract { } } - @call + @call({}) nftMint({ token_id, token_owner_id, token_metadata }) { let sender_id = near.predecessorAccountId() assert(sender_id === this.owner_id, "Unauthorized") @@ -76,7 +78,7 @@ class NftContract extends NearContract { return new Token(token_id, token_owner_id) } - @view + @view({}) nftToken({ token_id }) { let owner_id = this.owner_by_id.get(token_id) if (owner_id === null) { @@ -85,8 +87,4 @@ class NftContract extends NearContract { return new Token(token_id, owner_id) } - - default() { - return new NftContract({ owner_id: '', owner_by_id_prefix: '' }) - } } diff --git a/examples/src/parking-lot.ts b/examples/src/parking-lot.ts index 9c1f5417..023eff75 100644 --- a/examples/src/parking-lot.ts +++ b/examples/src/parking-lot.ts @@ -1,4 +1,4 @@ -import { NearContract, NearBindgen, near, call, view, LookupMap } from 'near-sdk-js' +import { NearBindgen, near, call, view, LookupMap } from 'near-sdk-js' class CarSpecs { id: number; @@ -30,15 +30,14 @@ class Engine { } } -@NearBindgen -class ParkingLot extends NearContract { +@NearBindgen({}) +class ParkingLot { cars: LookupMap; constructor() { - super() this.cars = new LookupMap('a'); } - @call + @call({}) addCar({ name, id, color, price, engineHp }: { name: string, id: number, color: string, price: number, engineHp: number }) { // args can be json arguments only, they cannot be of a JS/TS class like following, unless override NearContract.deserializeArgs method. // addCar({ name, specs }: { name: string, specs: CarSpecs }) { @@ -48,19 +47,19 @@ class ParkingLot extends NearContract { this.cars.set(name, car) } - @call + @call({}) removeCar({ name }: { name: string }) { near.log(`removeCar() called, name: ${name}`) this.cars.remove(name) } - @view + @view({}) getCarSpecs({ name }: { name: string }) { near.log(`getCarSpecs() called, name: ${name}`) return this.cars.get(name) } - @view + @view({}) runCar({ name }: { name: string }) { /* We are getting plain carSpecs object from the storage. It needs to be converted to the class object in order to execute engine.run() function.*/ @@ -68,8 +67,4 @@ class ParkingLot extends NearContract { let engine = new Engine(carSpecs.engine.hp) return engine.run() } - - default() { - return new ParkingLot() - } } \ No newline at end of file diff --git a/examples/src/status-message-collections.js b/examples/src/status-message-collections.js index 704cc1b1..f84dddfe 100644 --- a/examples/src/status-message-collections.js +++ b/examples/src/status-message-collections.js @@ -1,14 +1,13 @@ -import { NearContract, NearBindgen, call, view, near, LookupSet, UnorderedMap, Vector } from 'near-sdk-js' +import { NearBindgen, call, view, near, LookupSet, UnorderedMap } from 'near-sdk-js' -@NearBindgen -class StatusMessage extends NearContract { +@NearBindgen({}) +class StatusMessage { constructor() { - super() this.records = new UnorderedMap('a') this.uniqueValues = new LookupSet('b') } - @call + @call({}) set_status({ message }) { let account_id = near.signerAccountId() near.log(`${account_id} set_status with message ${message}`) @@ -16,26 +15,22 @@ class StatusMessage extends NearContract { this.uniqueValues.set(message) } - @view + @view({}) get_status({ account_id }) { near.log(`get_status for account_id ${account_id}`) return this.records.get(account_id) } - @view + @view({}) has_status({ message }) { // used for test LookupMap return this.uniqueValues.contains(message) } - @view + @view({}) get_all_statuses() { // used for test UnorderedMap return this.records.toArray() } - - default() { - return new StatusMessage() - } } diff --git a/examples/src/status-message.js b/examples/src/status-message.js index 1ecdd997..7ec2168f 100644 --- a/examples/src/status-message.js +++ b/examples/src/status-message.js @@ -1,27 +1,22 @@ -import { NearContract, NearBindgen, call, view, near } from 'near-sdk-js' +import { NearBindgen, call, view, near } from 'near-sdk-js' -@NearBindgen -class StatusMessage extends NearContract { +@NearBindgen({}) +class StatusMessage { constructor() { - super() this.records = {} } - @call + @call({}) set_status({ message }) { let account_id = near.signerAccountId() near.log(`${account_id} set_status with message ${message}`) this.records[account_id] = message } - @view + @view({}) get_status({ account_id }) { near.log(`get_status for account_id ${account_id}`) return this.records[account_id] || null } - - default() { - return new StatusMessage() - } } diff --git a/examples/yarn.lock b/examples/yarn.lock index d6b1e31d..13b0a4b7 100644 --- a/examples/yarn.lock +++ b/examples/yarn.lock @@ -379,6 +379,11 @@ estree-walker "^1.0.1" picomatch "^2.2.2" +"@scure/base@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" + integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== + "@sindresorhus/is@^4.0.0": version "4.6.0" resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" @@ -605,6 +610,11 @@ base-x@^3.0.2: dependencies: safe-buffer "^5.0.1" +base-x@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.0.tgz#d0e3b7753450c73f8ad2389b5c018a4af7b2224a" + integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== + base64url@^3.0.1: version "3.0.1" resolved "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz" @@ -680,6 +690,13 @@ bs58@^4.0.0, bs58@^4.0.1: dependencies: base-x "^3.0.2" +bs58@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-5.0.0.tgz#865575b4d13c09ea2a84622df6c8cbeb54ffc279" + integrity sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ== + dependencies: + base-x "^4.0.0" + builtin-modules@^3.0.0: version "3.3.0" resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" @@ -1594,16 +1611,16 @@ near-api-js@^0.44.1: text-encoding-utf-8 "^1.0.2" tweetnacl "^1.0.1" -near-sandbox@^0.0.12: - version "0.0.12" - resolved "https://registry.npmjs.org/near-sandbox/-/near-sandbox-0.0.12.tgz#b0e36c9458a437c5cb4e1218f715585f087904b1" - integrity sha512-NfMSbPYiSpSMijM3JoC1FuNJuc3Pop86OF+/01ahc8phWQbjT404rMR+UvvuCZQ6Qge8/MC76KjBUPg3d7mg1Q== +near-sandbox@^0.0.13: + version "0.0.13" + resolved "https://registry.yarnpkg.com/near-sandbox/-/near-sandbox-0.0.13.tgz#139b70708ccefcdf2dd406710f6615590d1880e5" + integrity sha512-rtRn51BBD1oT9SeGAIInKVedfaS/i4VqKqznZIvFddWo0jcI4lMoK1yHuTVuEE7YfEE12NsspFG1GxN1SlPV2g== dependencies: got "^11.8.2" tar "^6.1.0" "near-sdk-js@file:..": - version "0.4.0-2" + version "0.4.0-5" dependencies: "@babel/core" "^7.17.5" "@babel/plugin-proposal-decorators" "^7.17.2" @@ -1611,6 +1628,8 @@ near-sandbox@^0.0.12: "@rollup/plugin-babel" "^5.3.1" "@rollup/plugin-commonjs" "^21.0.1" "@rollup/plugin-node-resolve" "^13.1.1" + "@scure/base" "^1.1.1" + bs58 "^5.0.0" rollup "^2.61.1" rollup-plugin-sourcemaps "^0.6.3" yargs "^17.5.1" @@ -1622,10 +1641,10 @@ near-units@^0.1.9: dependencies: bn.js "^5.2.0" -near-workspaces@3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/near-workspaces/-/near-workspaces-3.1.0.tgz#d462ecb4bf2ae1cc33063995a1ef7db5e204910f" - integrity sha512-0f/S2YU0xNQ7UQwCW/pkqXspjeK0N+nYj3x7/sx+tUMsckNzahTLNww+3I0YBa/UtcMrCVsT5WDG8emvhdRxnQ== +near-workspaces@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/near-workspaces/-/near-workspaces-3.2.1.tgz#38c33474ece5898323f10cff7c75f771bb5a991a" + integrity sha512-761D8lsbSetS+Nu9C4IWdONn0gBSVpfjY8V09AOQt1Zb5XjtURFWpFTZun6vQJhvWv5+RsSNTF6uYsLyTLJBAA== dependencies: base64url "^3.0.1" bn.js "^5.2.0" @@ -1635,7 +1654,7 @@ near-workspaces@3.1.0: fs-extra "^10.0.0" js-sha256 "^0.9.0" near-api-js "^0.44.1" - near-sandbox "^0.0.12" + near-sandbox "^0.0.13" near-units "^0.1.9" node-port-check "^2.0.1" promisify-child-process "^4.1.1" diff --git a/jsvm/README.md b/jsvm/README.md deleted file mode 100644 index 37ea1983..00000000 --- a/jsvm/README.md +++ /dev/null @@ -1,516 +0,0 @@ -# NEAR-SDK-JS (Enclave) - -## Getting started with template project - -The fastest and recommended way to develop with near-sdk-js is to create a project with our github template: https://github.com/near/near-sdk-js-template-project. - -## Running examples - -There are a couple of contract examples in the project: - -- [Clean contract state](https://github.com/near/near-sdk-js/tree/master/examples/clean-state) -- [Doing cross contract call](https://github.com/near/near-sdk-js/tree/master/examples/cross-contract-call) -- [Fungible token](https://github.com/near/near-sdk-js/tree/master/examples/fungible-token) -- [Lockable fungible token](https://github.com/near/near-sdk-js/tree/master/examples/lockable-fungible-token) -- [Non fungible token](https://github.com/near/near-sdk-js/tree/master/examples/non-fungible-token) -- [Status message board](https://github.com/near/near-sdk-js/tree/master/examples/status-message) - -The general steps to run these contracts are same. You can also follow their corresponding READMEs to build, test and run the contracts. - -### General steps to run examples locally -1. Use near-cli to deploy `jsvm.wasm` from the `jsvm/build` folder to one of account you controlled. For example, `jsvm.`: -```sh -export NEAR_ENV=local -near deploy jsvm/build/jsvm.wasm -``` -2. `cd examples/` -3. `yarn && yarn build` to get .base64 file (JS smart-contract). -4. Deploy .base64 file to `JSVM` account from the previous step. -```sh -near js deploy --accountId --base64File build/.base64 --deposit 0.1 --jsvm -``` - -5. Interact with your contract using NEAR CLI or `near-api-js`. Encode the parameters and call. If the call cause the state increasement, you also need to attach NEAR to cover the storage deposit for the delta. - -```sh -near js call --accountId --args --deposit 0.1 --jsvm -``` - -6. If you want to remove the js contract and withdraw the storage deposit, use: - -```sh -near js remove --accountId --jsvm -``` - -### General steps to run examples on testnet -1. `export NEAR_ENV=testnet` -2. `cd examples/` -3. `yarn && yarn build` to get .base64 file (JS smart-contract). -4. Deploy, call and remove JS contract is same as above, except is `jsvm.testnet`. This is also the default value, so you omit `--jsvm`. - -## Error Handling in NEAR-SDK-JS - -If you want to indicate an error happened and fail the transaction, just throw an error object in JavaScript. Our JSVM runtime will detect and automatically invoke `panic_utf8` with `"{error.message}\n:{error.stack}"`. As a result, transaction will fail with `"Smart contract panicked: {error.message}\n{error.stack}"` error message. You can also use an error utilities library to organize your errors, such as verror. - -When your JS code or library throws an error, uncaught, the transaction will also fail with GuestPanic error, with the error message and stacktrace. - -When call host function with inappropriate type, means incorrect number of arguments or arg is not expected type: - - if arguments less than params, remaining argument are set as 'undefined' - - if arguments more than params, remaining argument are ignored - - if argument is different than the required type, it'll be coerced to required type - - if argument is different than the required type but cannot be coerced, will throw runtime type error, also with message and stacktrace - -## Test -We recommend to use near-workspaces to write tests for your smart contracts. See any of the examples for how tests are setup and written. - -## NEAR-SDK-JS API Reference - -All NEAR blockchain provided functionality (host functions) are defined in `src/api.js` and exported as `near`. You can use them by: -```js -import {near} from 'near-sdk-js' - -// near.. e.g.: -let signer = near.signerAccountId() -``` - -To use nightly host functions, such as `altBn128G1Sum`, the enclave contract need to be built with `make jsvm-nightly` and deployed to a nearcore node that has nightly enabled. - -### About Type - -- In arguments, `Uint64: Number | BigInt`. In return, `Uint64: BigInt`. Because JavaScript Number cannot hold all Uint64 without losing precision. But as arguments, interger number is also allowed for convinience. Same for `Uint128`. -- `Bytes` in both arguments and return represent a byte buffer, internally it's a JavaScript String Object. Any binary data `0x00-0xff` is stored as the char '\x00-\xff'. This is because QuickJS doesn't have ArrayBuffer in C API. If the bytes happens to have only 1-byte chars, it happens to be same as the the same content string. - -### Context API - -``` -function signerAccountId(): String; -function signerAccountPk(): String; -function predecessorAccountId(): String; -function blockIndex(): Uint64; -function blockHeight(): Uint64; -function blockTimestamp(): Uint64; -function epochHeight(): Uint64; -``` - - -### Economics API -``` -function attachedDeposit(): Uint128; -function prepaidGas(): Uint64; -function usedGas(): Uint64; -``` - -### Math API - -``` -function randomSeed(): Bytes; -function sha256(value: Bytes): Bytes; -function keccak256(value: Bytes): Bytes; -function keccak512(value: Bytes): Bytes; -function ripemd160(value: Bytes): Bytes; -function ecrecover(hash: Bytes, sign: Bytes, v: Uint64, malleability_flag: Uint64): Bytes | null; -``` - -### Miscellaneous API - -``` -function panic(msg?: String); -function panicUtf8(msg: Bytes); -function log(msg: String); -function logUtf8(msg: Bytes); -function logUtf16(msg: Bytes); -``` - -### Storage API - -``` -function storageRead(key: Bytes): Bytes | null; -function storageHasKey(key: Bytes): bool; -``` - -### Validator API - -``` -function validatorStake(account_id: String): Uint128; -function validatorTotalStake(): Uint128; -``` - -### Alt BN128 - -``` -function altBn128G1Multiexp(value: Bytes): Bytes; -function altBn128G1Sum(value: Bytes): Bytes; -function altBn128PairingCheck(value: Bytes): bool; -``` - -### JSVM Specific APIs -Due to the design of JavaScript VM Contract, some additonal APIs are provided to obtain context, access storage and cross contract call. Since they're not documented at [NEAR nomicon](https://nomicon.io/). They're explained here. - -#### Obtain Context -``` -function jsvmAccountId(): String; -function jsvmJsContractName(): String; -function jsvmMethodName(): String; -function jsvmArgs(): Bytes; -``` - -The `jsvmAccountId` returns the JavaScript VM's contract account ID. - -The `jsvmJsContractName`, when called, returns the JavaScript contract name that are called at the moment. - -The `jsvmJsContractName` returns the method name being called. - -The `jsvmArgs` return the arguments passed to the method. - -#### Storage Access -``` -function jsvmStorageWrite(key: Bytes, value: Bytes): bool; -function jsvmStorageRead(key: Bytes): Bytes | null; -function jsvmStorageRemove(key: Bytes): bool; -function jsvmStorageHasKey(key: Bytes): bool; -function storageGetEvicted(): Bytes; -``` - -These are equivalent to `storage*` but access limit to the substate of current JS contract. The `jsvmStorageWrite` and `jsvmStorageRemove` require and refund deposit to cover the storage delta. `jsvmStorage*` access the substate of current JS contract by prefix the key of current JS contract name (deployer's account id). You can use `storageRead` and `storageHasKey` to get code and state of other JS contracts. More specifically: code of `contractA` is stored under the key `contractA/code`. state of `contractA` is stored under `contractA/state/` concat with developer specifid key. And: -``` -jsvmStorageRead(k) -// equvalent to -storageRead(jsvmJsContractName() + '/state/' + k) -``` - -When `jsvmStorageWrite` write to a key that already exists, the old value would be saved and can be obtained by `storageGetEvicted()`. In this case, jsvmStorageWrite returns `true`. If key doesn't exist before, returns `false`. - -When `jsvmStroageRemove` remove a key that exists, the old value would be saved and can be obtained by `storageGetEvicted()`. In this case, jsvmStroageRemove returns `true`. If key doesn't exist before, nothing is removed and returns `false`. - -#### Cross Contract Call -``` -function jsvmValueReturn(value: Bytes); -function jsvmCall(contract_name: String, method: String, args: Bytes): any; -function jsvmCallRaw(contract_name: String, method: String, args: Bytes): Bytes; -``` - -The `jsvmValueReturn` is the version of `valueReturn` that should be used in all JavaScript contracts. It play well with `jsvmCall`. - -The `jsvmCall` invoke a synchronous cross contract call, to the given JavaScript `contract_name`, `method` with `args`. And returned the return value parsed as JSON into a JS object. - -The `jsvmCallRaw` is similar to `jsvmCall`, but return the raw, unparsed Bytes. - -### Collections -A few useful on-chain persistent collections are provided. All keys, values and elements are of type `Bytes`. - -#### Vector -Vector is an iterable implementation of vector that stores its content on the trie. Usage: - -```js -import {Vector} from 'near-sdk-js' - -// in contract class constructor: -constructor() { - super() - this.v = new Vector('my_prefix_') -} - -// Override the deserializer to load vector from chain -deserialize() { - super.deserialize() - this.v = Object.assign(new Vector, this.v) -} - -someMethod() { - // insert - this.v.push('abc') - this.v.push('def') - this.v.push('ghi') - - // batch insert, extend: - this.v.extend(['xyz', '123']) - - // get - let first = this.v.get(0) - - // remove, move the last element to the given index - this.v.swapRemove(0) - - // replace - this.v.replace(1, 'jkl') - - // remove the last - this.v.pop() - - // len, isEmpty - let len = this.v.len() - let isEmpty = this.v.isEnpty() - - // iterate - for (let element of this.v) { - near.log(element) - } - - // toArray, convert to JavaScript Array - let a = this.v.toArray() - - // clear - ths.v.clear() -} -``` - -#### LookupMap -LookupMap is an non-iterable implementation of a map that stores its content directly on the trie. It's like a big hash map, but on trie. Usage: -```js -import {LookupMap} from 'near-sdk-js' - -// in contract class constructor: -constructor() { - super() - this.m = new LookupMap('prefix_a') -} - -// Override the deserializer to load vector from chain -deserialize() { - super.deserialize() - this.m = Object.assign(new LookupMap, this.m) -} - -someMethod() { - // insert - this.m.set('abc', 'aaa') - this.m.set('def', 'bbb') - this.m.set('ghi', 'ccc') - - // batch insert, extend: - this.m.extend([['xyz', '123'], ['key2', 'value2']]) - - // check exist - let exist = this.m.containsKey('abc') - - // get - let value = this.m.get('abc') - - // remove - this.m.remove('def') - - // replace - this.m.set('ghi', 'ddd') -} -``` - -#### LookupSet -LookupSet is an non-iterable implementation of a set that stores its content directly on the trie. It's like LookupMap, but it only stores whether the value presents. Usage: -```js -import {LookupSet} from 'near-sdk-js' - -// in contract class constructor: -constructor() { - super() - this.s = new LookupSet('prefix_b') -} - -// Override the deserializer to load vector from chain -deserialize() { - super.deserialize() - this.s = Object.assign(new LookupSet, this.s) -} - -someMethod() { - // insert - this.s.set('abc') - this.s.set('def') - this.s.set('ghi') - - // batch insert, extend: - this.s.extend(['xyz', '123']) - - // check exist - let exist = this.s.contains('abc') - - // remove - this.s.remove('def') -} -``` - -#### UnorderedMap -UnorderedMap is an iterable implementation of a map that stores its content directly on the trie. Usage: -```js -import {UnorderedMap} from 'near-sdk-js' - -// in contract class constructor: -constructor() { - super() - this.m = new UnorderedMap('prefix_c') -} - -// Override the deserializer to load vector from chain -deserialize() { - super.deserialize() - this.m.keys = Object.assign(new Vector, this.m.keys) - this.m.values = Object.assign(new Vector, this.m.values) - this.m = Object.assign(new UnorderedMap, this.m) -} - -someMethod() { - // insert - this.m.set('abc', 'aaa') - this.m.set('def', 'bbb') - this.m.set('ghi', 'ccc') - - // batch insert, extend: - this.m.extend([['xyz', '123'], ['key2', 'value2']]) - - // get - let value = this.m.get('abc') - - // remove - this.m.remove('def') - - // replace - this.m.set('ghi', 'ddd') - - // len, isEmpty - let len = this.m.len() - let isEmpty = this.m.isEnpty() - - // iterate - for (let [k, v] of this.m) { - near.log(k+v) - } - - // toArray, convert to JavaScript Array - let a = this.m.toArray() - - // clear - this.m.clear() -} -``` - -#### UnorderedSet -UnorderedSet is an iterable implementation of a set that stores its content directly on the trie. It's like UnorderedMap but it only stores whether the value presents. Usage: -```js -import {UnorderedSet} from 'near-sdk-js' - -// in contract class constructor: -constructor() { - super() - this.s = new UnorderedSet('prefix_d') -} - -// Override the deserializer to load vector from chain -deserialize() { - super.deserialize() - this.s.elements = Object.assign(new Vector, this.s.elements) - this.s = Object.assign(new UnorderedSet, this.s) -} - -someMethod() { - // insert - this.s.set('abc') - this.s.set('def') - this.s.set('ghi') - - // batch insert, extend: - this.s.extend(['xyz', '123']) - - // check exist - let exist = this.s.contains('abc') - - // remove - this.s.remove('def') - - // len, isEmpty - let len = this.s.len() - let isEmpty = this.s.isEnpty() - - // iterate - for (let e of this.s) { - near.log(e) - } - - // toArray, convert to JavaScript Array - let a = this.s.toArray() - - // clear - this.s.clear() -} -``` - -### APIs not available in JSVM -Due to the architecture of the JSVM, some NEAR host functions, part of Standalone SDK or Rust SDK, are not revelant or being replaced by above JSVM specific APIs. Those unavailable APIs are explained here. - -- The `current_account_id` would always puts the account id of the JavaScript VM contract account in given register. The naming `current_account_id` is therefore confusing and not as helpful as a Rust contract. In some case, developer may want to get JavaScript VM contract account name, for example, determines whether it's running on testnet or mainnet, and behaves differently. So we expose this functionality under `jsvm_account_id()`. - -- The `input` puts the argument passed to call the contract in given register. In JavaScript VM, this is encoded as `"js_contract_name\0method_name\0args...`. This format isn't very convinient to developer, therefore, separate API `jsvm_js_contract_name`, `jsvm_method_name` and `jsvm_args` are provided. - -- The `storage_usage` return the storage bytes used by JavaScript VM contract. User doesn't care about the storage usage of the JSVM. Instead, users care about storage usage of a given JavaScript contract. This can be obtained by `storage_read` and count the sum of `register_len`. - -- The `account_balance` and `account_locked_balance` returns balance and locked_balance of JavaScript VM. Those are also not cared by users. - -- The `value_return` is a NEAR primitive that puts the value to return in a receipt. However we would want to access it as a JavaScript return value in a cross contract call. So we have a new API `jsvmValueReturn`, which does return the value in receipt and also as a JavaScript value returned by `jsvm_call`. The `jsvmValueReturn` should be used whenever you need `value_return`. - -- `abort` is intended to mark error location (line number). A full stacktrace with line numbers is provided by QuickJS, available when you throw a JS Error. So this API isn't needed. - -- Promise APIs act on the JSVM contract and could create subaccount, use the balance from JSVM account.JSVM would be a common VM used by the community instead of a Rust contract owned by the deployer. Therefore, promise APIs are not allowed. - -- The `storage_write` and `storage_remove` have access to all JavaScript contract codes and states deployed on JSVM. User can only write to their account owned code and state, as a substate of the JSVM. Therefor these two APIs are disallowed. Use `jsvm_storage_write` and `jsvm_storage_remove` instead. Read to other people owned code and state is allowed, as they're public as part of the blockchain anyway. - - -## Advanced guides - -### Manual setup with npm package - -You can also layout your project by install the npm package manually: -``` -yarn add near-sdk-js -# or -npm install near-sdk-js -``` - -### NEAR-SDK-JS contributor setup - -It is tested on Ubuntu 20.04, Intel Mac and M1 Mac. Other linux should also work but they're not tested. - -1. Make sure you have `curl`, `make`, `cmake` and `nodejs`. On Linux, also make sure you have `gcc`. -2. Run `make` to get platform specific `qjsc` and `jsvm` contract in `jsvm/build` folder. - - -### Run NEAR-SDK-JS tests -See https://github.com/near/near-sdk-js/tree/master/tests - - -### Low level way to invoke NEAR-CLI - -`near js` subcommand in near-cli is a recent feature. Under the hood, it is encoding a special function call to jsvm contract. - -#### Deploy a JS contract - -
-The equivalent raw command is: -

- - near call deploy_js_contract --accountId --args $(cat .base64) --base64 --deposit 0.1 - -

-
- -#### Call a JS contract - -
-The equivalent raw command is: -

- - near call call_js_contract --accountId --args --base64 - - # where `` can be obtained by: - node scripts/encode_call.js - -

-
- -#### Remove a JS contract - -
-The equivalent raw command is: -

- - near call remove_js_contract --accountId - -

-
diff --git a/jsvm/build.sh b/jsvm/build.sh deleted file mode 100755 index 3f434990..00000000 --- a/jsvm/build.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/bash -set -euo pipefail - -SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) -WASI_SDK_PATH=${SCRIPT_DIR}/../vendor/wasi-sdk-11.0 -CC="${WASI_SDK_PATH}/bin/clang --sysroot=${WASI_SDK_PATH}/share/wasi-sysroot" -QUICKJS_SRC_DIR=${SCRIPT_DIR}/../quickjs -WASI_STUB=${SCRIPT_DIR}/../vendor/binaryen/wasi-stub/run.sh -TARGET_NAME=jsvm - -DEFS='-D_GNU_SOURCE -DCONFIG_VERSION="2021-03-27" -DCONFIG_BIGNUM' -set +u -if [[ -n "${NEAR_NIGHTLY}" ]]; then - DEFS+=' -DNIGHTLY' - TARGET_NAME+='_nightly' -fi -if [[ -n "${NEAR_SANDBOX}" ]]; then - DEFS+=' -DSANDBOX' - TARGET_NAME+='_sandbox' -fi -set -u -TARGET_NAME+='.wasm' - -INCLUDES="-I${QUICKJS_SRC_DIR} -I." -LIBS='-lm' -QUICKJS_SOURCES=(quickjs.c libregexp.c libunicode.c cutils.c quickjs-libc-min.c libbf.c) -SOURCES="${SCRIPT_DIR}/jsvm.c" - -for i in "${QUICKJS_SOURCES[@]}"; do - SOURCES="${SOURCES} ${QUICKJS_SRC_DIR}/${i}" -done - -$CC --target=wasm32-wasi \ - -nostartfiles -Oz -flto \ - ${DEFS} ${INCLUDES} ${SOURCES} ${LIBS} \ - -Wl,--no-entry \ - -Wl,--allow-undefined \ - -Wl,-z,stack-size=$[256 * 1024] \ - -Wl,--lto-O3 \ - -o ${TARGET_NAME} - -${WASI_STUB} ${TARGET_NAME} >/dev/null - -mkdir -p build -mv ${TARGET_NAME} build \ No newline at end of file diff --git a/jsvm/build/jsvm.wasm b/jsvm/build/jsvm.wasm deleted file mode 100755 index 90e8ff458ea888ae305a3e75d02d18ddd8d8ba53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 498124 zcmdSC34mN>mG^zus#{&XRCl_QUV_{z0t65yqAVhi+z@tW#s$}Jd?7* zIKB||43eB0D#oM0w+H%k6&+j}E=!<{JsGkzk=IMylXUBe8zrtIrwA%9Z>zAK<{)+R?K5xb9i`HF`SMON8eANZ#o_+E9 zmmTZ6>tDV0q6;rrx8m%VE?#X|Hl^2~mcJ>9U&RcPbBS()*S%1NWE7q-Fe&K4D+6fsz@cb1Qy!`z2E~(1ctX_V> zd1t?T`8t=9T)Ym7HD9aXdfr7Bp1p3xihRUM>&{<(x_gpBl)_bN7KcW4Q6Z$;GaoiC0IQ=iK7N%Q&3&q>uPiSw7upYPA( zXYsrv=T)8?#^KZUd(y!PE&1iS{B(FFEM3JrupTr{4j#|XKzP=nN$|V_Pw6_WtK07k z8o`r0qTu<_F(*gCVaKWkzw7BiaOz+%H;9541i`UUpq_$ce|iqOdn!GpfuyHv=!KO^ zy;kn@!%As*;o))Di#i4dN?y$a&5jPQQu2l?0H&V-;O*{yarggoXsy(hc%9v$_jhrn zKS;`lmE*9hJ~yg$RlL#xhxU|Sl5`CW_YWO6TuYM9(qXkDlG*_!h!}=`;tz(4qGxpX zJ)`HSMSrzuFgo^t{;vOZe8ubby}0X?v;EK;g1}w1@;O80u)B6>I8ZviCmgCh%@32V z^4#UgkiRfY%6_??^zf4m_E!eH(_Xr)bumKy zL;X*Fa!2os-wxjRSLyBW@(j-p7S_Vr>8I8DJcc3RH;4}7f5brOUr$t>Ukw8O^@TwX zMWQo0qZ+?~-{39i@uRL9rKuRfh+)*@57v5k4|;l5s5SSaW@|h~eq4&^$qxcvlVI@p zs5U@jr>jP!QZGAzN1yIr-ai=h44!{f=>lsaacw1obasGJtVR%|K?W>7ED#)c;KES@ zF&HB=oHGpDBNk!@C=$+z` ziO_tGAF72;zZ{0hVY%Y_b7H!Sy&lHS_n&fNED4QENSTe2ANKpDjyNs{!|@ynmcmk{ z)Hm22)DB6KZb4qrpCGOu9bCA75(a%kPxAYp+<)|6b@cW{2lgzCqEZxfM^UZ2o4+6g zX=@^lYWY!Q3}HgP%I|9abVtEO0{|NF?}#IgJM+vwZy@T6`udG-eSLjiixs-1D=Oe{ zh~L@S+1+zS(%A`PfngLyeiYNA?;Xy2C5-D*B)(q*JHvMl=+b%Y`C+M4QlfsmL!JW0 zWg3MDq~|}!b%=1Vzdz@Y!^^AZcqf*h;XkE3%u9Jr*x5OUe{ndcJiNy5d`fBUa7b#o z9F_gm{wKmus7nMP!QsrVzGt9X{$FwFLM+x$C_t zzt0)G8L69*t>r6M&PaQgU)ylOidW1?dyilFPRaK&zxwg;jA#DMvtIZ<|NZ_4{9F86 z{SW#d@^AA$?tjAH;&1go>EGdR_dnx**8iM;um5@f3;uon7yU2!|Lp&Zzr+7m|KI#C z`}g}_@xSVS&HuXp4gcT$Z~EWz|HJ>b{~dp)|6Tuk{`dVK_z(CG`v2)akxKy5RM}8-jlbt`6QDToYUyyd`*R@V4OX!F9n6!9NA>4Bi#o7)%CJ z!E~@Wcz5ug;Jv|3!Og+@f(Oc9POj{@J@|+4ec>(P=4eN>HF`(s=F+b6>yl3--%EBT zKS&--ewzF&`FZlL%HA0@r`i}c6|6ciKKfoyyM2cPrnke82M6j`u|G zjc$s55Iqn*82xATQ1rv-N70X?pF}^6eir>a+7FUy(OV^a%QhHnI`qB-he=5DR^sds4rQPwXOP7@{ zFa0Y1b^M?4598m&kHo)^{}4YK|0Mod{PTEM{LA>k_@Vem@sH#0#}CB+5q~@WPW+Mh zWAVr1PsCf|PsVq|+u~2hpNa2|?}_h??~A_}e<}Xwct`xN@mJ&9;%no##&3(?9A6W^ zDSmr=UHnh+JK`JTsrcRTd*Ykor#$VcH^)bAxa5_uy3D`If0O^d_$~h1{iEI=U*W&i zzs`Tf-*0@K|7QOh|7!oz55%{`x5gigKNNqh^o7#bOW!E{d+D2{|0sRC^qtaurF%>N zTKaDJSLI)qe^dUi@^8xzmmewrzWj&sAIp!He_GyMzC5`mxi)!y@`mJ%$v-AHF-yJeR4zc&g5Omjmc#4mgHZO9m&5Y?@y+a&B?oy4nljPr%2a+Eq-%q}l{8QzfmA6*j zR(X5n`bx*uKN$QiW;*+#*HcCDR`bVwe579O(CW=k@vGwpcv)?%;VR5H4^8HW~fW#O8WyF60;HEFaq^VcbBeIw4c zZ;eM623{k|lF_>Ll|~DLq)|%aY%6(<_|z^h^RPLa((n~)j#fvVepOvgZjIB@nZqf6 zj}DTQ8b=46)ig@2=~5Q1JvxYZEsZw#SQtc^uar*8gsOiXAeaBT%MX^M9>599)JvoF zS->Aa2Hdf=Yx0LR+4yLKl&o_@RwEI#vUo$5tN~JQt$Gob!Gop9liS-vS5#Q zzxh7e0LB?K5aQk}h?icmrV;Fkx@V|+LY+Debt9sqK!LovD2+m$aI68H04xomYFcvC z0OztsrmT@lC~Q=(8-d=vHLgcSmLT)fWPKx9+mIxKSKqX&T?Mpbp`y#Xwq!9pc~I=L$(y*64e zRYL%+0~I6HUM{iRG|6$OrVy5)?(C>$NRe7MR<*U=GE1;mnE>Q z-uI`AFx$O*ciC!@Gx6x+(X3|dF40iR&iyR~cK2W~$Tl(2V<|9vX?@nS0TLkyrL|*{ zgY__lmko?=Kmn}H=8x8^VhF|n`nz9XZX2b@z!GSV!7?u!qJ+O;jKBMzGP1r7AJr}2 zhR?*?Mzs;7rN4#DL7l;>Cuv|Ux#y_vb%u~Hjq*Xpmt|DrY(L2@&^uLh$_Pb*k-Ek> z%DhwQECnDNAP?TB#UQOVRYY2b1{x&5L1pZlfngSDiuj3ZiZ;^JVKsX5#S3lR3D&3A zV-2I20BC{67`Yx*K@#OS0zrUY56C9S8A@p)=`ZE_kP#8>V5C9g2_8Dp70C=%Cb6BB z6R|R=wG>fjMf_we%D6aIcDyMn8M8(LKdJ|?vax)#oH05yYO-?RSUI7|LTSS|r)yLf zN}c2yO3Z{lt&stV+cg}6;`9vk+o+hdc@ zg~6`dLDcNt((z-0U*Assr4tiZOiWB{_l^mEqW9F#I!6)i?CbCU%KPJWM+ek)VE>_b z_#zJz6A>&S;bDwqD?bOS? zDviJy4)d_3)^K~(%sbpux6zue$O*c}P1K2m+79sYOoB=E)Rt5ZZ9(}_y+~Y*-z0yT zS34Sh89${9o~#EB5Rga1V4b0~IT^6{7?{PQV1zi1*3sjE1}4Ufc+{yiBt>u(DCyZD z6yyk@(NffPiK_Go=bYN*cb3%nB5Dv1)@>2672~K z%x)TtsdL7+;pG5>O%5f>5r^z(SCs0Y0t}!PjMa`F?nJU_=G3kjrDmE^dG)vx-n8_9 zS2b?*hr{^9=oF1((T$p-srR?oUjxZcq2(#O0pb|CG|Y}2b>o`T2q+pz0Mrt2O1%5_ z*qB}_fM?_0f`j)QXekOe(0oLVWb~9SbU;49py4%nAERm9rW!yetdU+)g(Ll@I7Ii0 zv6T!Pf$I3t!EKT(0R{6P9em8a9UXk@_Ba%@+wmy*Fvk+{W5BYzm6Sij%~-Yok5d%9 z1PWw5Yt#dR$SoxlEDGv8K@f#U@ ztcsHyV|x4y1kiOT)nXmuyMoX{H7CMX(^6BFFhW?j(b@V(wYmO*NGc{ut9k!E^aUMS z6nztvy(1uR@GLHzx~Z3(TsnCz{)&L&@se>zF=T;UpByDwr9UmvPQY`SM%9_)WFyE> znDjV|W~IK+FH~g-VwG}Ym2zUqtF4a7sqj)tf(E#v2iyb#nm`ISRHCL7ypc(Qp3e+I zs3Y2-=i92~THhuNc{TKZtD2tRDmh$gK(;Glb`Y+~e7eR=T(YKK78QBitr?Sfi1pAF zO%O5)Z)j8s=erR}GcdMi4y(B^6+=3}@wu4?Rf>5KK|Cj}ViyVH#73rP8zW}rjCj+fMYLlgrF!5VV4LbPIgQRaiA zxXOWSIaQ^5M5StqyN?xd_|Io1m^*&ftP!4Jqkm+)%Xf(5s}>VL9wkPVtd{ks71{=& z5frSI7Yl-X<>+A0HIFYuXC#4E%{4n{MCs2nfY^z@bxB^C(S(EIv^-juCbjX*HZk>- z|DTU^YxL>H%ZC;3LDRxw4rM5coftKc^fjx*3^J4&vwQ~SnOQd#C{K+pG-ooGMN?Yn z)yap(#3}j6`omKXWj^=UOr+_lhls~aPu)^lp1Nk63}Bn59-F5waMBo0ohkBqI*-~t zb)Yf;=BK5l_!a4zv9jl-<#8QqC~>Qzj$FQpF8 zNU1X+YbtdC@06wnB|D}~-JEW^c{IyZ178|8C)SZ<2h666osxkVRi}&P{$}1G!Pjq( zkAcGxi9=+*jtO|;EkU7^#WM`Ohkc_d3>k$Mz@U)F%gSPUxFn0vW@r|hg3JE^E>X^L ztpSNKS7Dhi^F-mJAm`gae5+W5oBPk;Ta9ap37+Fy2C~VwC21E%KVe=946vy9HrF1; zx5mr~Zi+0n^#|XU9N&UplW!THcD^mC;%(@bI91i*=)HusK=Cu@kQHz5?T3I){4^Momi@ju!XwXxtlUNIb{A z0#&7E=U!Tt_|521Ary5id9g@~^oPljsR{U7YE{C;hlES2UoiliO`yU6Be5bR$ zq!Uxev~KmB>S3(R+i1{UV`r_2U6J)nCjv zHIjfyU{b|U@0ylMU1%o57@+;h&bu7M+yzUZXOFD3ky0L^o1LK?crhm>cNgG)j9yzX zO|N-rxqPOJtUYJ;5wU&R2j+)u_5n6*%9*BpZT0~yBxihJzy&+OB*z{y*47(Rmd8)1 zij9Cxnz9Bf?ICNH(vmfdlv#~dGzYyvGzTtOn}$U+M>?l1nuDwvEc4UYiCjz2WU$I0 zhlGW4dU430x5ky$oN+Mt2WcTkN+=3x_!{G|hj_^mk>LrK;BW9^0_J>D37F)}1WZ%g z+&tibc+LUA`7y>4!SW78KJ}{(X-d;)6UM~?Sh>x z+ZZBp>rBxhgoVv}r!ThZb)a8`qdoSXNG z7aRXFX5wa)i|7rCyrG9AKIVIi;*5Z04rx8jh@#U;$B@uXutbTP3iuZOqM8$9 zDs|e-o(C;dnE8Yr&U`jd_F^GcCXh!+SlYvTFBjgsn=GVx`B>gNr9}z1lp%+OE(Y_- zgSy2G=DcDpj~^bCSVAlT+C*A?Q+m{e~tsMJ*EB*)`k;yM{B^HT>^kS2vJAuot@;i#!Iq!jo<6 z8n&}5?ABygnxCCr$uM@!-HkSOg_VoZ)Kji?TU;ae$8nAEXU@p8RnjQVn1(Xwv$^xk zozh@^BUj9fYtzlpJl?q(;2Vg&rHc7T)Sup{$y*PaS)o_Dlb?Z<;9ncD-8#PcQb+W@Nu%+6CUrx+GEojh{D_J|bBf+gxh z8oX>8+yzxDqYYXn!o6ps@QgJJl`U@Q06+p1Jk;2`=9>-6Q79Ugk#P-!o*~|XUaYte z=v|9K9GK`=NE6`7r}1JI`~&TvsI(BLEWFf27uiHmZ6{f|cY#J|mG;GcE8x&xR8|IoF$GRlIrk_$K06B^0O01s;DuYSPHeDU|B!N~r(*%ye6reU zo=&Gcow7^^@KWBq`!MZvo(|2|8ooRo(--(eDyCSZOoz*mr(-;k=YepwaO{mKI$BK8 zF_S55@ z7K0%eAa_3JPA$hPoN0yuZ3=f5Z*ZrAX>ezVqK#3o?L}GCX7=JXsKnw<)|-qwn|?SD z%*S~zxKqsnhH(@9Gmo0do$>5`xF_y(1arrSDfi}yEPCwBBqVSAf|}nbf=P= ztw38c;hx9zx?63Uo>VoP9$1^EF$>59qZ2>5KQ>iV1X>EzF)UygN)zxMTk@dkp|NGt z9cw%mTL#7S&^&MFMZ;yYu%)AM!ItV)lhJ}Lt@jpN2K!)3Td^q^5v%s!!j=ez8^^ua zQY3f$vv0PX>2C+^YzfLuwgkc1*^&%nOM2LYEn(SW9Q9O~@Fu^=-*&uddM;LOp1ww)77I+{`TNQOJ9E38|1*zkAL34~C*nZHfEi|+8Z zZ9mBVr~^9B_h*?e-P)g3tnsuWdhtH?X9*hHpM@q~p8{vQzpb^IB9w=}?PR-9G19ss zn!Ignk1#Zk0)>sf0a5rc_qIKGz7}*t&>eDobef~7=pKFJY=_R-W=RL#<@V&IC3%|` z-NT_2bVTV{F@_dnGAGER)pT9$li6t!KKV!K5xv&mi&jL2lF6w!s(q6+Nj| zUl{n~!6vs4HXz&-K#vgDVCh5b+Q7%I9WYGU;E)jYzjWd)KmJxY(TI)->5cJ>T*{_P zZ^|Ajuez0rCR_`k4%=|OYD}@~?eC5D_n++VJM8Z}tEYLv5_#&2u@mdfRoDE=W;A&8 z&os+J)`le>-ab1(XtnU+$HCLpsx9)WWxA;?@Tzz-Rj+nzjaF;NcvTKw*mfg?qWY^a z=-_}Nn-}pH;KO}%z{C^5SvqmgKYnuK#s&|Y#kVNy!@o(2EFP5= zTh`L6!%f*>218|}!>K%Yr;U(%%R7S$dD-#$SB&bJ1-?>t|MxCk$-W|TKVDVlm%n%E zD39co5e-=K2j0q28Y^e_tmxddcmS0_Go|Ikd+N{(& z@B`$|RI>e_9u0%MveL-_<(;~g?S5+-YzDdJQubLU8Uq~~@UnEvi zoNm2n8;)e!up<8!__O0zj+wf!4O-RxjbS9f&cUJ5hb$BxI)7(-;D`AH7TWm15^11` zt;G&Go@yu7H4#wyRa=U5o@yti{#whbEt3PLFmbp9N>i|3e+K0$LUE|UTiWY;!;Zhn zXCz=ll(j2QXi;Sld8-36hhw*7zS0)-c6&^DJ&T4QJcFh|LzbSTNVQz(z);zzX@76E zT01%Qop|pX5*0Tnih@zYx+9wAK=7Hk%>Y5D?A1Mb=isK)he*Bc6p^%0zxG^!)-*_J zuKEo}>Bmp3CT$)QuqNhin69|PZSwllV_}}=V`A-Egbngdibgm6nPqgJNQ*Gge_M;y zzhej>IZz!>Fk>9mh@Cv%q3@BB*bYWhn~H2?rp=9gT&;z2cVR5)XjqrAqp2rLrWoHJ z_{_76ah-2uN(ALz%eok2+$CHMx?6@=RS1L<36-`k*mJ)d&m+ zG^n+Zx(KPPGp6D1h7lL#P)w+n)RQ*IRNox1*dtk5nQ#5Yd#!2r2N2SVA*&=d?|=s> zLbf!PMnV>Q0nj7~SzG;}7EvZjk_g7=(=@USl^m^O?-lFPb`;9shmYn3@KRX~9IaQ- zQ()gAZ9M~f*Hwp*Y_QguV^5Gs*mq>(>!`u{UQPr-={8c}eh7OOVTFBc*q7B)j!z^P zIzUzVBXVg{f0fSkTy+Q8UiFZsh?~bEHtEc+-r{Kb+&XOFgxqf{>0AJ8efz9VpeNNP)Dene=SDS}~qKwsv~;C4P{*9w;GHYh=U^@BX*8&v*tg3ifDxrmPXlA6$;&L2u z(8di!8(|k4Yg$}BvyqH6e7(q7hQZQ=2uhj3))1&nTE;lSZ|pmQQ4AoAZeHpGaQPMTYIpnJI3O(Gz^|!Br;%BUpij* zjq13(lGL2)eiaJk00yr^jCs}!B2xF+HUG)+daiF)oo3J4J#cTED zcXK?APHw(CR{Q#75A)p;DgA~^=xKW*-KD^epM42!M-rl|XUNQAEE!WmX%j4nzJ7$dHut|nJ}UEO%Ib5HPf5zXzL29YwQ(;Ij4<25(xA|y&aSfYpHGY?@*#mHx~WXtSG-4rb zN^7b{O)fq@6c}TO+z`zIj=aDqOV?<~Qh9G`UUYJrlew09qf<@K7B>4KBZQV*%MLu1)eyhl$N!oss2VIt zwTz1&ytIb6qI&vBqe$&=FR0IYeC;OjohrM+W~7DSCXXLMm1^Gy|MG?l~w zGy}PmAZM)$ZKk#jr__J4=QsMZXN@)nvWm8jjo0UjvsjfGr4BL@WD8Dd^o`K>03*S} z+{{nA_0X+Sy!4HXGOMZgi+B1A-Tv$x$>9E4nioDY3>5U&)647rRoiLvWYvJGB0$|w z2hzT^!r8$@69d`)XF_5Sr}jXrcGZ|W?avNH$gM}=AuMXlsA%26O(r4??U=}Qn34vo z`aDCL^$@nrWD}Qaze#;C^XuKhySpIIJP}dG%a~wLLt?It2VRlW_^u)as_CH3iQ%Ea zvHBomH?iFV6DLmE712gvu$kvF7<|aB>{|B4>p%LS_JTstMA_VBq{|7Y+m)ulE~e=7|Z85NA<^oFN;Hbe@Pj&>|r3 zfe7e30#Yl?7B~X>EdtI1cRIGhGYHsU5N{rwYRbS7&(d?k4djFy5aIf(5M_K_w*Ll$ zD4l0404)Xt#js;Wzdi)SYJ(5Ptv+BR12M|Ck!+qw=BLA>>2OXmUnGMgX(1gD*@kIY zh5`EZ)6}r*#mJ@@eob_Ri#c>DCVKjrU3kekS7yhpOxgasV?aVm<~SP0$c;RQqOsAr zmW_y9a~0{aLq~Hp7_$CzMZdHr2E?)DHC#VR4Ca{dSQ{zHsuq<&%F(QcFqY{c1Td&Q zPr6|D?pLj8%tP3Xwa|of^IkO_QAnYN(x-S$CsEk!z~jJ3VhdsUlS(tvri1v_eLV?vA->>lEO?ewcUQevJB3GN*lK!%Lwe;F z^rj1L5{Yjc7B8f=wRD{>SQ=f`Sg_Q4jzo~wnGF(}qP1u7Ig&*eLzmI|ez>dirABD3 z)tl>VM)T!0*`mDNu-R@4(!7Tt?N7U$?#D&wPix|L>_W5YrQ^?|advj53odOefZ31* zH$slr=4KN$&08&b3j-%9+d2TO^uUnKAF1!>)a(Ka<<(wHa|`MR8gbB+GpPa*Iwl$i zF6~h4v;be)>qh_iknq6z0xXYQssnE_GuXmdOxv*v4(V7qme-ULM;`mcKB@#xLmHNT zNfe4>uE|3>HyuI{a(<%>@s_kXe!$1<8j@fm9i_-aw40>rfJdzE@!l~_=7kvjX&D<& z?Q|ZdP>fB$>W;YfY;CQ zfl+^FmurJQ`nAGWuQ6yyJ1!88hXHgVfjNaVb*kW4>2Z5@oz>D_*;vTehZb$jv0Z)S zv(a--?c&B9DAa&v=^WuXhTNkuP}zOF;zfWz_LL5*5Eioqg-+}06n)`_?VJjqM}@(( zMy#4Pw{x~J)$17gcp^Y&P6Vgp3e;YLTc_R!Bp-7m(`ldjJehum>vPPf!GE!+h--%0 zazCtEeSqGn+2~jKIoZUfQQ)?{3k(&m5jxyoQy&(!=g9T6CQ>TPfuS$CQ4mg!LvKNZ zHWH+LqYa!05T&fmI?M%fG|Ii8UJ<1ieX66!#$fYgv!%diL%(0>>(31IduKtv|FO~U zt->y#KQIgW1EAk;=$qkeL!Y>j`EP(H5Rvwpo$;l(CgJH&myE_?sNRF11>E$Lzy{`^ zJDnmp=!W`1aQBn4?Zfr`_tF4Q%0Aee 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
BR5bm+BD?ytsRQI&Oer?LuY5NYzqmZC)) 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≷b(jI7t`eMY_fIL62^_dGo<` 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

nf5J;KS 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 aj0+5qVb2X&ph6wB1m_Z|TBMW&dH)X=0=;1X diff --git a/jsvm/build/jsvm_nightly.wasm b/jsvm/build/jsvm_nightly.wasm deleted file mode 100755 index 84a59103333d5cda0ef003a6f785b38b7f27c043..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 498724 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�OY%y(aaeSIyl*{Q3xAwbzL8J_mm4f!|i42XFJ2##eIf0yaF)Fjjio88CxJN@XxGp~kvIPP?5{%<*;edNDv>@Sh(zqNK~ z8~w56Z$c|}F>njL+lck2|Hno&X>Yfi57Flu?5)^+VP9v9*o=~9-PwBG;wGKLncF|L zeR#6X@-)<^pJ+OGrA=%n-39IKn16}<(qb?lrqOTFWxA1P(uCjYd+YnV(te_bxA%2v zzef+j6Tkg&?%k%6@cPu-c%7Ux;&y^(Ce<)go0|YMMSXOBb_DzdSBQ zpR8L&BCv3%vMM5{JYrLMWwBib79swuIK3*bc>2bwh>caXr4ixb5%<*;G^c9um75egus(bQUvRF0qkJcIYSQjr=%@FH`0rCGUh=Paz7my(S{{&L_ z-wS9CNJt35zIWomamA@C&Xpx zvvdie`B8h+fgW8>{rC<#{!bHddLc z^+k|-R#xjv@%tI6!J0Ju=37QY;r0wwz+zQ&ygn@>E=He}692!>8d>J#BR{=9CtqJ# zF8+&m&%u!XnUH49f)p$g(y6%&NfVcw-8p9HGiJ_Rc#G@%tSpFG{nt5#Dg0i(eB1RSauO8jZsn}ATrby1wloWhuJO~*-ODeB7BS~h@plGIpPBoOUli@XLpVI ztNMNBo_p>+k9+r?d+xn^e&_s-)uJ=A+T*^&A~IU7@=UZvqfZ~}9EeOSu`I`e-m9=k zMihp{n9ZRAh{<4=IH8bp`;>%Vj2IS;fh>OoxqV7cTniNf z7@MHgR0M6x8d^)m1e@yg0hLl2l@ps_xPm^Sb@VaLWj$>G8_7 z9Wk?D+i3^Y(@tstyJ$BtyN*rNOf6s!eL{P|r{n-mYNdT(KYa$;Fr(Y&bb!79U(#3L zYx;%`f2Ffmy1q10=np1&<%~;`gn_e z2DiZ&xC4Fxzk<799Q+1;2ls#r`~mKJ%Y_wGPBv@?c#28PiqKO|Vitsvp%?>gGNbHS zy%u0$H}Mrb9461iH}@L+&wOqYhRoQB2Ji5wyDAx}%%a^W*wi>>thB)y}{$>SM*>OfZ!@Ph1cZ4;>wJY zw{JuRk57Na@3?*}DCm-J>3m6h(Cn>(0d|gF;a+^G4V}hmuJD zs!F8U(94gqBi*JCE3KQ6w%XZQT!ZwrvX-~%kjJ*jDUmynPkovq4OR{?Xjf;=XIA9m z$mn@c;AViPO#}1na;r&>VbHofIUcRvTg$t0N3lRDMiKe3DXc>{3&2gpR+>EXL^wTr zW diff --git a/jsvm/examples/.gitignore b/jsvm/examples/.gitignore deleted file mode 100644 index 48912d24..00000000 --- a/jsvm/examples/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -build -node_modules \ No newline at end of file diff --git a/jsvm/examples/README-CLEAN-STATE.md b/jsvm/examples/README-CLEAN-STATE.md deleted file mode 100644 index c6db7c02..00000000 --- a/jsvm/examples/README-CLEAN-STATE.md +++ /dev/null @@ -1,38 +0,0 @@ -# Clean state contract in JavaScript - -This is an equivalent JavaScript implementation of the clean state example. - -## Build the contract - -First ensure JSVM contract is build and deployed locally, follow [Local Installation](https://github.com/near/near-sdk-js#local-installation). Then run: -``` -npm i -npm run build -``` - -## Test the contract with workspaces-js -``` -npm run test -``` - -## Guide on how to clean arbitrary account's state - -First, build the contract as described above and deploy it to the account which state you want to clean up (this will override the contract that is currently there, but you can then re-deploy the original contract after the cleanup is done). Assuming that you are using JSVM contract deployed to `jsvm.testnet`, run the following command: - -``` -near call jsvm.testnet deploy_js_contract --accountId account-to-cleanup.testnet --args $(cat build/contract.base64) --base64 --deposit 0.1 -``` - -Now, you can call the `clean` method to delete the unwanted keys: - -``` -near call jsvm.testnet call_js_contract --accountId account-to-cleanup.testnet --base64 --args $(node encode_call.js account-to-cleanup.testnet clean '[["key1", "key2"]]') --deposit 0.1 -``` - -If gas limit prevents you from deleting all keys you want at once, just split the array into multiple parts and make a few subsequent `clean` calls. - -Once you are done, just de-deploy the original contract and you should be all set: - -``` -near call jsvm.testnet deploy_js_contract --accountId account-to-cleanup.testnet --args $(cat path-to-original-contract.base64) --base64 --deposit 0.1 -``` diff --git a/jsvm/examples/README-COUNTER.md b/jsvm/examples/README-COUNTER.md deleted file mode 100644 index d100de74..00000000 --- a/jsvm/examples/README-COUNTER.md +++ /dev/null @@ -1,15 +0,0 @@ -# NEAR-SDK-JS template project - -This is a template project. It implements a counter. You can copy this folder to start writing your first contract. - -# Build the contract - -``` -npm i -npm run build -``` - -# Run tests -``` -npm run test -``` diff --git a/jsvm/examples/README-CROSS-CONTRACT-CALL.md b/jsvm/examples/README-CROSS-CONTRACT-CALL.md deleted file mode 100644 index f7196c7b..00000000 --- a/jsvm/examples/README-CROSS-CONTRACT-CALL.md +++ /dev/null @@ -1,74 +0,0 @@ -# Enclaved cross-contract-call in JavaScript - -This example demonstrates how you can make a cross-contract call (contract call that is made from inside of the contract). Here we have 2 smart contracts: `status_message` from `../status-message` example and `on-call` contract in `src`. When somebody is trying to set a person on-call, smart-contract will check if the person is `AVAILABLE`. A person's status is in control of the person itself. - -A good place to start is the integration test stored in `__tests__/` folder. - -## Build the contract - -First ensure JSVM contract is built and deployed locally, follow [Local Installation](https://github.com/near/near-sdk-js#local-installation). Then run: -``` -yarn -yarn build -``` - -The result contract bytecode file will be in `build/on-call.base64`. An intermediate JavaScript file can be found in `build/on-call.js`. You'll only need the `base64` file to deploy contract to chain. The intermediate JavaScript file is for the curious user and near-sdk-js developers to understand what code generation happened under the hood. - -## Test the contract with workspaces-js -``` -yarn test -``` - -## Deploy the contract - -Suppose JSVM contract was deployed to `jsvm.test.near`. Now you want to deploy the status-message contract to `status-message.test.near` and on-call contract to `on-call.test.near`. Create `status-message.test.near`, `on-call.test.near`, `alice.test.near` and `bob.test.near` locally. Then deploy the contracts following this pattern using the latest `near-cli`: -```sh -export NEAR_ENV=local -near js deploy --accountId --base64File .base64 --deposit 0.1 --jsvm jsvm.test.near -``` - -

-Or with the raw CLI call command -

- - export NEAR_ENV=local - near call jsvm.test.near deploy_js_contract --accountId --args $(cat .base64) --base64 --deposit 0.1 - -

-
- -## Initialize the contract - -Now we need to initialize `status-message` and `on-call` contracts after deployment is ready, call the `init` method which will execute `new OnCall()` or `new StatusMessage()` respectfully. - -Go back to the root dir of near-sdk-js, where we have a helper `encode-call.js` and use this pattern to init contracts: - -```sh -near js call init --deposit 0.1 --accountId --jsvm jsvm.test.near -``` - -
-Or with the raw CLI call command -

- - near call jsvm.test.near call_js_contract --base64 --args $(node encode_call.js init '') --accountId - -

-
- - -## Call the contract -Under the root dir of near-sdk-js, call the `set_status` and `set_person_on_call` using this pattern: - -```sh -near js call [--args ''] --deposit 0.1 --accountId --jsvm jsvm.test.near -``` - -or with t
-Or with the raw CLI call command -

- - near call jsvm.test.near call_js_contract --accountId --base64 --args $(node encode_call.js '[]') --deposit 0.1 - -

-
diff --git a/jsvm/examples/README-FT.md b/jsvm/examples/README-FT.md deleted file mode 100644 index 66ed0f38..00000000 --- a/jsvm/examples/README-FT.md +++ /dev/null @@ -1,16 +0,0 @@ -# Fungible token contract in JavaScript - -This is an equivalent JavaScript implementation of the fungible token example. Every user can send and recieve a fungible token. - -## Build the contract - -First ensure JSVM contract is build and deployed locally, follow [Local Installation](https://github.com/near/near-sdk-js#local-installation). Then run: -``` -npm i -npm run build -``` - -## Test the contract with workspaces-js -``` -npm run test -``` diff --git a/jsvm/examples/README-LOCKABLE-FT.md b/jsvm/examples/README-LOCKABLE-FT.md deleted file mode 100644 index 94a609ca..00000000 --- a/jsvm/examples/README-LOCKABLE-FT.md +++ /dev/null @@ -1,16 +0,0 @@ -# Lockable fungible token contract in JavaScript - -This is an equivalent JavaScript implementation of the lockable fungible token example. - -## Build the contract - -First ensure JSVM contract is build and deployed locally, follow [Local Installation](https://github.com/near/near-sdk-js#local-installation). Then run: -``` -npm i -npm run build -``` - -## Test the contract with workspaces-js -``` -npm run test -``` diff --git a/jsvm/examples/README-NFT.md b/jsvm/examples/README-NFT.md deleted file mode 100644 index d1d2bc69..00000000 --- a/jsvm/examples/README-NFT.md +++ /dev/null @@ -1,89 +0,0 @@ -# Non-fungible token contract in JavaScript - -This is an equivalent JavaScript implementation of the non-fungible token example. Every user can send and receive a non-fungible token. - -## Build the contract - -First ensure JSVM contract is build and deployed locally, follow [Local Installation](https://github.com/near/near-sdk-js#local-installation). Then run: -``` -npm i -npm run build -``` - -Result contract bytecode file will be in `build/fungible-token.base64`. Intermediate JavaScript file can be found in `build/fungible-token.js`. You'll only need the `base64` file to deploy contract to chain. The intermediate JavaScript file is for curious user and near-sdk-js developers to understand what code generation happened under the hood. - -## Deploy the contract - -Suppose JSVM contract was deployed to `jsvm.test.near`. Developer want to deploy the fungible token contract to `nft-jsvm.test.near`. Create `nft-jsvm.test.near`, `alice.test.near` and `bob.test.near` locally. Then: - -```sh -export NEAR_ENV=local -near js deploy --accountId nft-jsvm.test.near --base64File build/non-fungible-token.base64 --deposit 0.1 --jsvm jsvm.test.near -``` - -
-Or with the raw CLI call command -

- - export NEAR_ENV=local - near call jsvm.test.near deploy_js_contract --accountId nft-jsvm.test.near --args $(cat build/non-fungible-token.base64) --base64 --deposit 0.1 - -

-
- -## Initialize the contract - -Now we need to initialize the contract after deployment is ready, call the `init` method which will execute `new NftContract(owner_id, owner_by_id_prefix)` for the class. -Go back to the root dir of near-sdk-js, where we have a helper `encode-call.js`. Call it with: - -```sh -near js call nft-jsvm.test.near init --args '["nft-jsvm.test.near", "prefix"]' --deposit 0.1 --accountId nft-jsvm.test.near --jsvm jsvm.test.near -``` - -
-Or with the raw CLI call command -

- - near call jsvm.test.near call_js_contract --accountId nft-jsvm.test.near --base64 --args $(node encode_call.js nft-jsvm.test.near init '["nft-jsvm.test.near", "prefix"]') --deposit 0.1 - -

-
- -## Call the contract -Under the root dir of near-sdk-js, call the `nftMint` and `nftToken` methods with: - -```sh -near js call nft-jsvm.test.near nftMint --args '["1", "alice.test.near"]' --deposit 0.1 --accountId nft-jsvm.test.near --jsvm jsvm.test.near - -near js call nft-jsvm.test.near nftToken --args '["1"]' --deposit 0.1 --accountId nft-jsvm.test.near --jsvm jsvm.test.near -``` - -
-Or with the raw CLI call command -

- - near call jsvm.test.near call_js_contract --accountId nft-jsvm.test.near --base64 --args $(node encode_call.js nft-jsvm.test.near nftMint '["1", "alice.test.near"]') --deposit 0.1 - - near call jsvm.test.near call_js_contract --accountId nft-jsvm.test.near --base64 --args $(node encode_call.js nft-jsvm.test.near nftToken '["1"]') - -

-
- -To transfer the NFT to Bob and check its new owner: - -```sh -near js call nft-jsvm.test.near nftTransfer --args '["bob.test.near", "1"]' --deposit 0.1 --accountId nft-jsvm.test.near --jsvm jsvm.test.near - -near js call nft-jsvm.test.near nftToken --args '["1"]' --deposit 0.1 --accountId nft-jsvm.test.near --jsvm jsvm.test.near -``` - -
-Or with the raw CLI call command -

- - near call jsvm.test.near call_js_contract --accountId nft-jsvm.test.near --base64 --args $(node encode_call.js nft-jsvm.test.near nftTransfer '["bob.test.near", "1"]') --deposit 0.1 - - near call jsvm.test.near call_js_contract --accountId nft-jsvm.test.near --base64 --args $(node encode_call.js nft-jsvm.test.near nftToken '["1"]') - -

-
diff --git a/jsvm/examples/README-STATUS-MESSAGE.md b/jsvm/examples/README-STATUS-MESSAGE.md deleted file mode 100644 index cd1b8f60..00000000 --- a/jsvm/examples/README-STATUS-MESSAGE.md +++ /dev/null @@ -1,76 +0,0 @@ -# Status message contract in JavaScript - -This is an equivalent JavaScript implementation of the status message example. Every user can store a message on chain. Every user can view everyone's message. Logic is implemented two times with the use of collections and without them. - -## Build the contract -``` -npm i -npm run build -``` - -Result contract bytecode files will be stored in `build/status-message.base64` and `build/status-message-collections.base64`. Intermediate JavaScript file can be found in `build/` folder. You'll only need the `base64` file to deploy contract to chain. The intermediate JavaScript file is for curious user and near-sdk-js developers to understand what code generation happened under the hood. - -## Test the contracts with workspaces-js -``` -npm run test -``` - -## Deploy the contract - -Suppose JSVM contract was deployed to `jsvm.test.near`. Developer want to deploy the status message contract to `status-message.test.near`. Create `status-message.test.near`, `alice.test.near` and `bob.test.near` locally. Then: - -```sh -export NEAR_ENV=local -near js deploy --accountId status-message.test.near --base64File build/status-message.base64 --deposit 0.1 --jsvm jsvm.test.near -``` - -
-Or with the raw CLI call command -

- - export NEAR_ENV=local - near call jsvm.test.near deploy_js_contract --accountId status-message.test.near --args $(cat build/status-message.base64) --base64 --deposit 0.1 - -

-
- - - -## Initialize the contract - -Now we need to initialize the contract after deployment is ready, call the `init` method which will execute `new StatusMessage()` for the class. -Go back to the root dir of near-sdk-js, where we have a helper `encode-call.js`. Call it with: - -```sh -near js call status-message.test.near init --deposit 0.1 --accountId status-message.test.near --jsvm jsvm.test.near -``` - -
-Or with the raw CLI call command -

- - near call jsvm.test.near call_js_contract --accountId status-message.test.near --base64 --args $(node encode_call.js status-message.test.near init '') - -

-
- -## Call the contract -Under the root dir of near-sdk-js, call the `set_status` and `get_status` methods with: - - -```sh -near js call status-message.test.near set_status --args '["hello"]' --deposit 0.1 --accountId alice.test.near--jsvm jsvm.test.near - -near js view status-message.test.near get_status --args '["alice.test.near"]' --deposit 0.1 --accountId bob.test.near --jsvm jsvm.test.near -``` - -
-Or with the raw CLI call command -

- - near call jsvm.test.near call_js_contract --accountId alice.test.near --base64 --args $(node encode_call.js status-message.test.near set_status '["hello"]') --deposit 0.1 - - near call jsvm.test.near call_js_contract --accountId bob.test.near --base64 --args $(node encode_call.js status-message.test.near get_status '["alice.test.near"]') - -

-
\ No newline at end of file diff --git a/jsvm/examples/README.md b/jsvm/examples/README.md deleted file mode 100644 index 2722cdba..00000000 --- a/jsvm/examples/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# Examples of contracts writen in JS with the use of `near-sdk-js` - -## Install dependencies -```bash -yarn -``` -## Build contracts -```bash -yarn build -``` -## Run Tests -```bash -yarn test -``` -## Example specific info -- [Status Message](README-STATUS-MESSAGE.md) - -- [Counter](README-COUNTER.md) - -- [Cross-contract call](README-CROSS-CONTRACT-CALL.md) - -- [NFT](README-NFT.md) - -- [FT](README-FT.md) - -- [Lockable FT](README-LOCKABLE-FT.md) - -- [Clean State](README-CLEAN-STATE.md) \ No newline at end of file diff --git a/jsvm/examples/__tests__/test-clean-state.ava.js b/jsvm/examples/__tests__/test-clean-state.ava.js deleted file mode 100644 index 46b346df..00000000 --- a/jsvm/examples/__tests__/test-clean-state.ava.js +++ /dev/null @@ -1,51 +0,0 @@ -import { Worker } from 'near-workspaces'; -import { readFile } from 'fs/promises' -import test from 'ava'; - -// TODO: make this function part of the npm package when it is available -function encodeCall(contract, method, args) { - return Buffer.concat([Buffer.from(contract), Buffer.from([0]), Buffer.from(method), Buffer.from([0]), Buffer.from(JSON.stringify(args))]) -} - -test.beforeEach(async t => { - // Init the worker and start a Sandbox server - const worker = await Worker.init(); - - // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount; - - // Deploy the jsvm contract. - const jsvm = await root.devDeploy( - './node_modules/near-sdk-js/jsvm/build/jsvm.wasm', - ); - - // Deploy clean state contract - const cleanStateContract = await root.createSubAccount('clean-state'); - let cleanStateContractBase64 = (await readFile('build/clean-state.base64')).toString(); - await cleanStateContract.call(jsvm, 'deploy_js_contract', Buffer.from(cleanStateContractBase64, 'base64'), { attachedDeposit: '400000000000000000000000' }); - await cleanStateContract.call(jsvm, 'call_js_contract', encodeCall(cleanStateContract.accountId, 'init', {}), { attachedDeposit: '400000000000000000000000' }); - - // Save state for test runs, it is unique for each test - t.context.worker = worker; - t.context.accounts = { - root, - jsvm, - cleanStateContract, - }; -}); - -test.afterEach(async t => { - await t.context.worker.tearDown().catch(error => { - console.log('Failed tear down the worker:', error); - }); -}); - -test('Clean state after storing', async t => { - const { jsvm, cleanStateContract } = t.context.accounts; - await cleanStateContract.call(jsvm, 'call_js_contract', encodeCall(cleanStateContract.accountId, 'put', { key: '1', value: 1 }), { attachedDeposit: '400000000000000000000000' }); - const value1 = await jsvm.view('view_js_contract', encodeCall(cleanStateContract.accountId, 'get', { key: '1' })); - t.is(value1, '1'); - await cleanStateContract.call(jsvm, 'call_js_contract', encodeCall(cleanStateContract.accountId, 'clean', { keys: ['1'] }), { attachedDeposit: '400000000000000000000000' }); - const value2 = await jsvm.view('view_js_contract', encodeCall(cleanStateContract.accountId, 'get', { key: '1' })); - t.is(value2, null); -}); diff --git a/jsvm/examples/__tests__/test-counter.ava.js b/jsvm/examples/__tests__/test-counter.ava.js deleted file mode 100644 index cae1a676..00000000 --- a/jsvm/examples/__tests__/test-counter.ava.js +++ /dev/null @@ -1,73 +0,0 @@ -import { Worker } from 'near-workspaces'; -import { readFile } from 'fs/promises' -import test from 'ava'; - -function encodeCall(contract, method, args) { - return Buffer.concat([Buffer.from(contract), Buffer.from([0]), Buffer.from(method), Buffer.from([0]), Buffer.from(JSON.stringify(args))]) -} - -// Use test.beforeEach to setup the environment with clean state before each test -// If tests can be run in parallel in any order, you can reuse the environment by use test.before -test.beforeEach(async t => { - // Init the worker and start a Sandbox server - const worker = await Worker.init(); - - // Prepare sandbox for tests, create accounts, deploy contracts, etc. - const root = worker.rootAccount; - - // Deploy the jsvm contract. - const jsvm = await root.devDeploy( - './node_modules/near-sdk-js/jsvm/build/jsvm.wasm', - ); - - // Deploy and init the counter JS contract - const counter = await root.createSubAccount('counter'); - let contract_base64 = (await readFile('build/counter.base64')).toString(); - await counter.call(jsvm, 'deploy_js_contract', Buffer.from(contract_base64, 'base64'), { attachedDeposit: '400000000000000000000000' }); - await counter.call(jsvm, 'call_js_contract', encodeCall(counter.accountId, 'init', {}), { attachedDeposit: '400000000000000000000000' }); - - // Test users - const ali = await root.createSubAccount('ali'); - const bob = await root.createSubAccount('bob'); - - // Save state for test runs - t.context.worker = worker; - t.context.accounts = { root, jsvm, counter, ali, bob }; -}); - -// If the environment is reused, use test.after to replace test.afterEach -test.afterEach(async t => { - await t.context.worker.tearDown().catch(error => { - console.log('Failed to tear down the worker:', error); - }); -}); - -test('Initial count is 0', async t => { - const { jsvm, counter } = t.context.accounts; - const result = await jsvm.view('view_js_contract', encodeCall(counter.accountId, 'getCount', {})); - t.is(result, 0); -}); - -test('Increase works', async t => { - const { jsvm, counter, ali, bob } = t.context.accounts; - await ali.call(jsvm, 'call_js_contract', encodeCall(counter.accountId, 'increase', {}), { attachedDeposit: '100000000000000000000000' }); - - let result = await jsvm.view('view_js_contract', encodeCall(counter.accountId, 'getCount', {})); - t.is(result, 1); - - await bob.call(jsvm, 'call_js_contract', encodeCall(counter.accountId, 'increase', { n: 4 }), { attachedDeposit: '100000000000000000000000' }); - result = await jsvm.view('view_js_contract', encodeCall(counter.accountId, 'getCount', {})); - t.is(result, 5); -}); - -test('Decrease works', async t => { - const { jsvm, counter, ali, bob } = t.context.accounts; - await ali.call(jsvm, 'call_js_contract', encodeCall(counter.accountId, 'decrease', {}), { attachedDeposit: '100000000000000000000000' }); - - let result = await jsvm.view('view_js_contract', encodeCall(counter.accountId, 'getCount', {})); - t.is(result, -1); - - await bob.call(jsvm, 'call_js_contract', encodeCall(counter.accountId, 'decrease', { n: 4 }), { attachedDeposit: '100000000000000000000000' }); - result = await jsvm.view('view_js_contract', encodeCall(counter.accountId, 'getCount', {})); - t.is(result, -5); -}); \ No newline at end of file diff --git a/jsvm/examples/__tests__/test-cross-contract-call.ava.js b/jsvm/examples/__tests__/test-cross-contract-call.ava.js deleted file mode 100644 index 8bfb77f9..00000000 --- a/jsvm/examples/__tests__/test-cross-contract-call.ava.js +++ /dev/null @@ -1,90 +0,0 @@ -import { Worker } from 'near-workspaces'; -import { readFile } from 'fs/promises' -import test from 'ava'; - -// TODO: make this function part of the npm package when it is available -function encodeCall(contract, method, args) { - return Buffer.concat([Buffer.from(contract), Buffer.from([0]), Buffer.from(method), Buffer.from([0]), Buffer.from(JSON.stringify(args))]) -} - -test.beforeEach(async t => { - // Init the worker and start a Sandbox server - const worker = await Worker.init(); - - // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount; - - // Deploy the jsvm contract. - const jsvm = await root.devDeploy( - './node_modules/near-sdk-js/jsvm/build/jsvm.wasm', - ); - - // Deploy status-message JS contract - const statusMessageContract = await root.createSubAccount('status-message'); - let statusContractBase64 = (await readFile('build/status-message.base64')).toString(); - await statusMessageContract.call(jsvm, 'deploy_js_contract', Buffer.from(statusContractBase64, 'base64'), { attachedDeposit: '400000000000000000000000' }); - await statusMessageContract.call(jsvm, 'call_js_contract', encodeCall(statusMessageContract.accountId, 'init', {}), { attachedDeposit: '400000000000000000000000' }); - - // Deploy on-call contrat - const onCallContract = await root.createSubAccount('on-call'); - let cross_cc_contract_base64 = (await readFile('build/cross-contract-call.base64')).toString(); - await onCallContract.call(jsvm, 'deploy_js_contract', Buffer.from(cross_cc_contract_base64, 'base64'), { attachedDeposit: '400000000000000000000000' }); - await onCallContract.call(jsvm, 'call_js_contract', encodeCall(onCallContract.accountId, 'init', {}), { attachedDeposit: '400000000000000000000000' }); - - // Create test accounts - const ali = await root.createSubAccount('ali'); - const bob = await root.createSubAccount('bob'); - - // Save state for test runs, it is unique for each test - t.context.worker = worker; - t.context.accounts = { - root, - jsvm, - statusMessageContract, - onCallContract, - ali, - bob, - }; -}); - -test.afterEach(async t => { - await t.context.worker.tearDown().catch(error => { - console.log('Failed tear down the worker:', error); - }); -}); - -test('Nobody is on-call in the beginning', async t => { - const { jsvm, onCallContract } = t.context.accounts; - const result = await jsvm.view('view_js_contract', encodeCall(onCallContract.accountId, 'person_on_call', {})); - t.is(result, 'undefined'); -}); - -test('Person can be set on-call if AVAILABLE', async t => { - const { ali, bob, jsvm, statusMessageContract, onCallContract } = t.context.accounts; - - // Ali set her status as AVAILABLE - await ali.call(jsvm, 'call_js_contract', encodeCall(statusMessageContract.accountId, 'set_status', { message: 'AVAILABLE' }), { attachedDeposit: '100000000000000000000000' }); - // Bob sets Ali on-call - await bob.call(jsvm, 'call_js_contract', encodeCall(onCallContract.accountId, 'set_person_on_call', { accountId: ali.accountId }), { attachedDeposit: '100000000000000000000000' }); - - // Check that Ali is on-call - t.is( - await jsvm.view('view_js_contract', encodeCall(onCallContract.accountId, 'person_on_call', {})), - ali.accountId - ); -}); - -test('Person can NOT be set on-call if UNAVAILABLE', async t => { - const { ali, bob, jsvm, statusMessageContract, onCallContract } = t.context.accounts; - - // Ali set her status as AVAILABLE - await ali.call(jsvm, 'call_js_contract', encodeCall(statusMessageContract.accountId, 'set_status', { message: 'UNAVAILABLE' }), { attachedDeposit: '100000000000000000000000' }); - // Bob tries to sets Ali on-call - await bob.call(jsvm, 'call_js_contract', encodeCall(onCallContract.accountId, 'set_person_on_call', { accountId: ali.accountId }), { attachedDeposit: '100000000000000000000000' }); - - // Check that Ali is NOT on-call - t.not( - await jsvm.view('view_js_contract', encodeCall(onCallContract.accountId, 'person_on_call', {})), - ali.accountId - ); -}); diff --git a/jsvm/examples/__tests__/test-fungible-token-lockable.ava.js b/jsvm/examples/__tests__/test-fungible-token-lockable.ava.js deleted file mode 100644 index 5c26e26f..00000000 --- a/jsvm/examples/__tests__/test-fungible-token-lockable.ava.js +++ /dev/null @@ -1,232 +0,0 @@ -import { Worker } from 'near-workspaces'; -import { readFile } from 'fs/promises' -import test from 'ava'; - -function encodeCall(contract, method, args) { - return Buffer.concat([Buffer.from(contract), Buffer.from([0]), Buffer.from(method), Buffer.from([0]), Buffer.from(JSON.stringify(args))]) -} - -test.beforeEach(async t => { - // Init the worker and start a Sandbox server - const worker = await Worker.init(); - - // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount; - - // Deploy the jsvm contract. - const jsvm = await root.devDeploy( - './node_modules/near-sdk-js/jsvm/build/jsvm.wasm', - ); - - // Deploy lockable FT JS contract - const lockableFt = await root.createSubAccount('lockable-ft'); - let contract_base64 = (await readFile('build/fungible-token-lockable.base64')).toString(); - await lockableFt.call(jsvm, 'deploy_js_contract', Buffer.from(contract_base64, 'base64'), { attachedDeposit: '1000000000000000000000000' }); - await lockableFt.call(jsvm, 'call_js_contract', encodeCall(lockableFt.accountId, 'init', { prefix: 'prefix', totalSupply: 10000 }), { attachedDeposit: '1000000000000000000000000' }); - - // Test users - const ali = await root.createSubAccount('ali'); - const bob = await root.createSubAccount('bob'); - - // Save state for test runs - t.context.worker = worker; - t.context.accounts = { root, jsvm, lockableFt, ali, bob }; -}); - -test.afterEach(async t => { - await t.context.worker.tearDown().catch(error => { - console.log('Failed to tear down the worker:', error); - }); -}); - -test('Owner initial details', async t => { - const { jsvm, lockableFt } = t.context.accounts; - const totalSupply = await jsvm.view('view_js_contract', encodeCall(lockableFt.accountId, 'getTotalSupply', {})); - t.is(totalSupply, 10000); - const totalBalance = await jsvm.view('view_js_contract', encodeCall(lockableFt.accountId, 'getTotalBalance', { ownerId: lockableFt.accountId })); - t.is(totalBalance, 10000); - const unlockedBalance = await jsvm.view('view_js_contract', encodeCall(lockableFt.accountId, 'getUnlockedBalance', { ownerId: lockableFt.accountId })); - t.is(unlockedBalance, 10000); - const allowance = await jsvm.view( - 'view_js_contract', - encodeCall(lockableFt.accountId, 'getAllowance', { ownerId: lockableFt.accountId, escrowAccountId: lockableFt.accountId }) - ); - t.is(allowance, 0); - const lockedBalance = await jsvm.view( - 'view_js_contract', - encodeCall(lockableFt.accountId, 'getLockedBalance', { ownerId: lockableFt.accountId, escrowAccountId: lockableFt.accountId }) - ); - t.is(lockedBalance, 0); -}); - -test('Set allowance', async t => { - const { jsvm, lockableFt, ali } = t.context.accounts; - await lockableFt.call( - jsvm, - 'call_js_contract', - encodeCall(lockableFt.accountId, 'setAllowance', { escrowAccountId: ali.accountId, allowance: 100 }), - { attachedDeposit: '100000000000000000000000' } - ); - const aliAllowance = await jsvm.view( - 'view_js_contract', - encodeCall(lockableFt.accountId, 'getAllowance', { ownerId: lockableFt.accountId, escrowAccountId: ali.accountId }) - ); - t.is(aliAllowance, 100); - const contractAllowance = await jsvm.view( - 'view_js_contract', - encodeCall(lockableFt.accountId, 'getAllowance', { ownerId: lockableFt.accountId, escrowAccountId: lockableFt.accountId }) - ); - t.is(contractAllowance, 0); -}); - -test('Fail to set allowance for oneself', async t => { - const { jsvm, lockableFt } = t.context.accounts; - const error = await t.throwsAsync(() => lockableFt.call( - jsvm, - 'call_js_contract', - encodeCall(lockableFt.accountId, 'setAllowance', { escrowAccountId: lockableFt.accountId, allowance: 100 }), - { attachedDeposit: '100000000000000000000000' } - )); - t.assert(error.message.includes(`Can't set allowance for yourself`)); -}); - -test('Lock owner', async t => { - const { jsvm, lockableFt, ali } = t.context.accounts; - await lockableFt.call( - jsvm, - 'call_js_contract', - encodeCall(lockableFt.accountId, 'lock', { ownerId: lockableFt.accountId, lockAmount: 100 }), - { attachedDeposit: '100000000000000000000000' } - ); - const unlockedBalance = await jsvm.view( - 'view_js_contract', - encodeCall(lockableFt.accountId, 'getUnlockedBalance', { ownerId: lockableFt.accountId }) - ); - t.is(unlockedBalance, 9900); - const allowance = await jsvm.view( - 'view_js_contract', - encodeCall(lockableFt.accountId, 'getAllowance', { ownerId: lockableFt.accountId, escrowAccountId: lockableFt.accountId }) - ); - t.is(allowance, 0); - const lockedBalance = await jsvm.view( - 'view_js_contract', - encodeCall(lockableFt.accountId, 'getLockedBalance', { ownerId: lockableFt.accountId, escrowAccountId: lockableFt.accountId }) - ); - t.is(lockedBalance, 100); -}); - -test('Lock failures', async t => { - const { jsvm, lockableFt, ali } = t.context.accounts; - const error1 = await t.throwsAsync(() => lockableFt.call( - jsvm, - 'call_js_contract', - encodeCall(lockableFt.accountId, 'lock', { ownerId: lockableFt.accountId, lockAmount: 0 }), - { attachedDeposit: '100000000000000000000000' } - )); - t.assert(error1.message.includes(`Can't lock 0 or less tokens`)); - - const error2 = await t.throwsAsync(() => lockableFt.call( - jsvm, - 'call_js_contract', - encodeCall(lockableFt.accountId, 'lock', { ownerId: lockableFt.accountId, lockAmount: 10001 }), - { attachedDeposit: '100000000000000000000000' } - )); - t.assert(error2.message.includes(`Not enough unlocked balance`)); - - const error3 = await t.throwsAsync(() => ali.call( - jsvm, - 'call_js_contract', - encodeCall(lockableFt.accountId, 'lock', { ownerId: lockableFt.accountId, lockAmount: 10 }), - { attachedDeposit: '100000000000000000000000' } - )); - t.assert(error3.message.includes(`Not enough allowance`)); -}); - -test('Unlock owner', async t => { - const { jsvm, lockableFt, ali } = t.context.accounts; - await lockableFt.call( - jsvm, - 'call_js_contract', - encodeCall(lockableFt.accountId, 'lock', { ownerId: lockableFt.accountId, lockAmount: 100 }), - { attachedDeposit: '100000000000000000000000' } - ); - await lockableFt.call( - jsvm, - 'call_js_contract', - encodeCall(lockableFt.accountId, 'unlock', { ownerId: lockableFt.accountId, unlockAmount: 100 }), - { attachedDeposit: '100000000000000000000000' } - ); - const unlockedBalance = await jsvm.view( - 'view_js_contract', - encodeCall(lockableFt.accountId, 'getUnlockedBalance', { ownerId: lockableFt.accountId }) - ); - t.is(unlockedBalance, 10000); - const allowance = await jsvm.view( - 'view_js_contract', - encodeCall(lockableFt.accountId, 'getAllowance', { ownerId: lockableFt.accountId, escrowAccountId: lockableFt.accountId }) - ); - t.is(allowance, 0); - const lockedBalance = await jsvm.view( - 'view_js_contract', - encodeCall(lockableFt.accountId, 'getLockedBalance', { ownerId: lockableFt.accountId, escrowAccountId: lockableFt.accountId }) - ); - t.is(lockedBalance, 0); -}); - -test('Unlock failures', async t => { - const { jsvm, lockableFt } = t.context.accounts; - const error1 = await t.throwsAsync(() => lockableFt.call( - jsvm, - 'call_js_contract', - encodeCall(lockableFt.accountId, 'unlock', { ownerId: lockableFt.accountId, unlockAmount: 0 }), - { attachedDeposit: '100000000000000000000000' } - )); - t.assert(error1.message.includes(`Can't unlock 0 or less tokens`)); - - const error2 = await t.throwsAsync(() => lockableFt.call( - jsvm, - 'call_js_contract', - encodeCall(lockableFt.accountId, 'unlock', { ownerId: lockableFt.accountId, unlockAmount: 1 }), - { attachedDeposit: '100000000000000000000000' } - )); - t.assert(error2.message.includes(`Not enough locked tokens`)); -}); - -test('Simple transfer', async t => { - const { jsvm, lockableFt, ali } = t.context.accounts; - await lockableFt.call( - jsvm, - 'call_js_contract', - encodeCall(lockableFt.accountId, 'transfer', { newOwnerId: ali.accountId, amount: 100 }), - { attachedDeposit: '100000000000000000000000' } - ); - const ownerUnlockedBalance = await jsvm.view( - 'view_js_contract', - encodeCall(lockableFt.accountId, 'getUnlockedBalance', { ownerId: lockableFt.accountId }) - ); - t.is(ownerUnlockedBalance, 9900); - const aliUnlockedBalance = await jsvm.view( - 'view_js_contract', - encodeCall(lockableFt.accountId, 'getUnlockedBalance', { ownerId: ali.accountId }) - ); - t.is(aliUnlockedBalance, 100); -}); - -test('Transfer failures', async t => { - const { jsvm, lockableFt, ali } = t.context.accounts; - const error1 = await t.throwsAsync(() => lockableFt.call( - jsvm, - 'call_js_contract', - encodeCall(lockableFt.accountId, 'transfer', { newOwnerId: ali.accountId, amount: 0 }), - { attachedDeposit: '100000000000000000000000' } - )); - t.assert(error1.message.includes(`Can't transfer 0 or less tokens`)); - - const error2 = await t.throwsAsync(() => lockableFt.call( - jsvm, - 'call_js_contract', - encodeCall(lockableFt.accountId, 'transfer', { newOwnerId: ali.accountId, amount: 10001 }), - { attachedDeposit: '100000000000000000000000' } - )); - t.assert(error2.message.includes(`Not enough unlocked balance`)); -}); diff --git a/jsvm/examples/__tests__/test-fungible-token.ava.js b/jsvm/examples/__tests__/test-fungible-token.ava.js deleted file mode 100644 index 6eb6b528..00000000 --- a/jsvm/examples/__tests__/test-fungible-token.ava.js +++ /dev/null @@ -1,72 +0,0 @@ -import { Worker } from 'near-workspaces'; -import { readFile } from 'fs/promises' -import test from 'ava'; - -// TODO: make this function part of the npm package when it is available -function encodeCall(contract, method, args) { - return Buffer.concat([Buffer.from(contract), Buffer.from([0]), Buffer.from(method), Buffer.from([0]), Buffer.from(JSON.stringify(args))]) -} - -test.beforeEach(async t => { - // Init the worker and start a Sandbox server - const worker = await Worker.init(); - - // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount; - - // Deploy the jsvm contract. - const jsvm = await root.devDeploy( - './node_modules/near-sdk-js/jsvm/build/jsvm.wasm', - ); - - // Deploy fungible token contract - const fungibleTokenContract = await root.createSubAccount('fungible-token'); - let ftContractBase64 = (await readFile('build/fungible-token.base64')).toString(); - await fungibleTokenContract.call(jsvm, 'deploy_js_contract', Buffer.from(ftContractBase64, 'base64'), { attachedDeposit: '400000000000000000000000' }); - await fungibleTokenContract.call(jsvm, 'call_js_contract', encodeCall(fungibleTokenContract.accountId, 'init', { prefix: 'a', totalSupply: '1000' }), { attachedDeposit: '400000000000000000000000' }); - - // Create test accounts - const ali = await root.createSubAccount('ali'); - const bob = await root.createSubAccount('bob'); - - // Save state for test runs, it is unique for each test - t.context.worker = worker; - t.context.accounts = { - root, - jsvm, - fungibleTokenContract, - ali, - bob, - }; -}); - -test.afterEach(async t => { - await t.context.worker.tearDown().catch(error => { - console.log('Failed tear down the worker:', error); - }); -}); - -test('Owner has all balance in the beginning', async t => { - const { jsvm, fungibleTokenContract } = t.context.accounts; - const result = await jsvm.view('view_js_contract', encodeCall(fungibleTokenContract.accountId, 'ftBalanceOf', { accountId: fungibleTokenContract.accountId })); - t.is(result, '1000'); -}); - -test('Can transfer if balance is sufficient', async t => { - const { ali, jsvm, fungibleTokenContract } = t.context.accounts; - - await fungibleTokenContract.call(jsvm, 'call_js_contract', encodeCall(fungibleTokenContract.accountId, 'ftTransfer', { receiverId: ali.accountId, amount: '100' }), { attachedDeposit: '400000000000000000000000' }); - const aliBalance = await jsvm.view('view_js_contract', encodeCall(fungibleTokenContract.accountId, 'ftBalanceOf', { accountId: ali.accountId })); - t.is(aliBalance, '100'); - const ownerBalance = await jsvm.view('view_js_contract', encodeCall(fungibleTokenContract.accountId, 'ftBalanceOf', { accountId: fungibleTokenContract.accountId })); - t.is(ownerBalance, '900'); -}); - -test('Cannot transfer if balance is not sufficient', async t => { - const { ali, bob, jsvm, fungibleTokenContract } = t.context.accounts; - try { - await ali.call(jsvm, 'call_js_contract', encodeCall(fungibleTokenContract.accountId, 'ftTransfer', { receiverId: bob.accountId, amount: '100' }), { attachedDeposit: '400000000000000000000000' }); - } catch (e) { - t.assert(e.toString().indexOf('Smart contract panicked: assertion failed: The account doesn\'t have enough balance') >= 0); - } -}); diff --git a/jsvm/examples/__tests__/test-non-fungible-token.ava.js b/jsvm/examples/__tests__/test-non-fungible-token.ava.js deleted file mode 100644 index cbb6a6f5..00000000 --- a/jsvm/examples/__tests__/test-non-fungible-token.ava.js +++ /dev/null @@ -1,127 +0,0 @@ -import { Worker } from 'near-workspaces'; -import { readFile } from 'fs/promises' -import test from 'ava'; - -// TODO: make this function part of the npm package when it is available -function encodeCall(contract, method, args) { - return Buffer.concat([Buffer.from(contract), Buffer.from([0]), Buffer.from(method), Buffer.from([0]), Buffer.from(JSON.stringify(args))]) -} - -test.beforeEach(async t => { - // Init the worker and start a Sandbox server - const worker = await Worker.init(); - - // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount; - - // Deploy the jsvm contract. - const jsvm = await root.devDeploy( - './node_modules/near-sdk-js/jsvm/build/jsvm.wasm', - ); - - // Deploy fungible token contract - const nftContract = await root.createSubAccount('fungible-token'); - let nftContractBase64 = (await readFile('build/non-fungible-token.base64')).toString(); - await nftContract.call(jsvm, 'deploy_js_contract', Buffer.from(nftContractBase64, 'base64'), { attachedDeposit: '400000000000000000000000' }); - await nftContract.call(jsvm, 'call_js_contract', encodeCall(nftContract.accountId, 'init', { owner_id: nftContract.accountId, owner_by_id_prefix: 'prefix' }), { attachedDeposit: '400000000000000000000000' }); - - // Deploy token receiver contract - const tokenReceiverContract = await root.createSubAccount('token-receiver'); - let tokenReceiverContractBase64 = (await readFile('build/test-token-receiver.base64')).toString(); - await tokenReceiverContract.call(jsvm, 'deploy_js_contract', Buffer.from(tokenReceiverContractBase64, 'base64'), { attachedDeposit: '400000000000000000000000' }); - await tokenReceiverContract.call(jsvm, 'call_js_contract', encodeCall(tokenReceiverContract.accountId, 'init', { nonFungibleTokenAccountId: nftContract.accountId }), { attachedDeposit: '400000000000000000000000' }); - - // Mint an NFT - let tokenId = 'my-cool-nft'; - await nftContract.call(jsvm, 'call_js_contract', encodeCall(nftContract.accountId, 'nftMint', { token_id: tokenId, token_owner_id: nftContract.accountId }), { attachedDeposit: '400000000000000000000000' }); - - - // Create test accounts - const ali = await root.createSubAccount('ali'); - const bob = await root.createSubAccount('bob'); - - // Save state for test runs, it is unique for each test - t.context.worker = worker; - t.context.accounts = { - root, - jsvm, - nftContract, - tokenReceiverContract, - tokenId, - ali, - bob, - }; -}); - -test.afterEach(async t => { - await t.context.worker.tearDown().catch(error => { - console.log('Failed tear down the worker:', error); - }); -}); - -test('Owner has the NFT in the beginning', async t => { - const { jsvm, nftContract, tokenId } = t.context.accounts; - const result = await jsvm.view('view_js_contract', encodeCall(nftContract.accountId, 'nftToken', { token_id: tokenId })); - t.deepEqual(result, { owner_id: nftContract.accountId, token_id: tokenId }); -}); - -test('Simple transfer', async t => { - const { jsvm, nftContract, tokenId, ali } = t.context.accounts; - await nftContract.call(jsvm, 'call_js_contract', encodeCall(nftContract.accountId, 'nftTransfer', { receiver_id: ali.accountId, token_id: tokenId }), { attachedDeposit: '400000000000000000000000' }); - const result = await jsvm.view('view_js_contract', encodeCall(nftContract.accountId, 'nftToken', { token_id: tokenId })); - t.deepEqual(result, { owner_id: ali.accountId, token_id: tokenId }); -}); - -test('Transfer failures', async t => { - const { jsvm, nftContract, tokenId, ali } = t.context.accounts; - const error1 = await t.throwsAsync(() => ali.call( - jsvm, - 'call_js_contract', - encodeCall(nftContract.accountId, 'nftTransfer', { receiver_id: nftContract.accountId, token_id: 'non-existent-id' }), - { attachedDeposit: '400000000000000000000000' } - )); - t.assert(error1.message.includes(`Token not found`)); - - const error2 = await t.throwsAsync(() => ali.call( - jsvm, - 'call_js_contract', - encodeCall(nftContract.accountId, 'nftTransfer', { receiver_id: nftContract.accountId, token_id: tokenId }), - { attachedDeposit: '400000000000000000000000' } - )); - t.assert(error2.message.includes(`Sender must be the current owner`)); - - const error3 = await t.throwsAsync(() => nftContract.call( - jsvm, - 'call_js_contract', - encodeCall(nftContract.accountId, 'nftTransfer', { receiver_id: nftContract.accountId, token_id: tokenId }), - { attachedDeposit: '400000000000000000000000' } - )); - t.assert(error3.message.includes(`Current and next owner must differ`)); -}); - -test('Transfer call where receiver returns the token', async t => { - const { jsvm, nftContract, tokenReceiverContract, tokenId } = t.context.accounts; - await nftContract.call( - jsvm, - 'call_js_contract', - encodeCall(nftContract.accountId, 'nftTransferCall', { receiver_id: tokenReceiverContract.accountId, token_id: tokenId, approval_id: null, memo: null, msg: 'return-it-now' }), - { - attachedDeposit: '400000000000000000000000', - gas: '40000000000000', - } - ); - const result = await jsvm.view('view_js_contract', encodeCall(nftContract.accountId, 'nftToken', { token_id: tokenId })); - t.deepEqual(result, { owner_id: nftContract.accountId, token_id: tokenId }); -}); - -test('Transfer call where receiver keeps the token', async t => { - const { jsvm, nftContract, tokenReceiverContract, tokenId } = t.context.accounts; - await nftContract.call( - jsvm, - 'call_js_contract', - encodeCall(nftContract.accountId, 'nftTransferCall', { receiver_id: tokenReceiverContract.accountId, token_id: tokenId, approval_id: null, memo: null, msg: 'keep-it-now' }), - { attachedDeposit: '400000000000000000000000' } - ); - const result = await jsvm.view('view_js_contract', encodeCall(nftContract.accountId, 'nftToken', { token_id: tokenId })); - t.deepEqual(result, { owner_id: tokenReceiverContract.accountId, token_id: tokenId }); -}); diff --git a/jsvm/examples/__tests__/test-status-message-collections.ava.js b/jsvm/examples/__tests__/test-status-message-collections.ava.js deleted file mode 100644 index 31e95c41..00000000 --- a/jsvm/examples/__tests__/test-status-message-collections.ava.js +++ /dev/null @@ -1,92 +0,0 @@ -import { Worker } from 'near-workspaces'; -import { readFile } from 'fs/promises' -import test from 'ava'; - -function encodeCall(contract, method, args) { - return Buffer.concat([Buffer.from(contract), Buffer.from([0]), Buffer.from(method), Buffer.from([0]), Buffer.from(JSON.stringify(args))]) -} - -test.beforeEach(async t => { - // Init the worker and start a Sandbox server - const worker = await Worker.init(); - - // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount; - - // Deploy the jsvm contract. - const jsvm = await root.devDeploy( - './node_modules/near-sdk-js/jsvm/build/jsvm.wasm', - ); - - // Deploy status-message JS contract - const statusMessage = await root.createSubAccount('status-message'); - let contract_base64 = (await readFile('build/status-message-collections.base64')).toString(); - await statusMessage.call(jsvm, 'deploy_js_contract', Buffer.from(contract_base64, 'base64'), { attachedDeposit: '400000000000000000000000' }); - await statusMessage.call(jsvm, 'call_js_contract', encodeCall(statusMessage.accountId, 'init', {}), { attachedDeposit: '400000000000000000000000' }); - - // Test users - const ali = await root.createSubAccount('ali'); - const bob = await root.createSubAccount('bob'); - const carl = await root.createSubAccount('carl'); - - // Save state for test runs - t.context.worker = worker; - t.context.accounts = { root, jsvm, statusMessage, ali, bob, carl }; -}); - -test.afterEach(async t => { - await t.context.worker.tearDown().catch(error => { - console.log('Failed to tear down the worker:', error); - }); -}); - -test('Root gets null status', async t => { - const { root, jsvm, statusMessage } = t.context.accounts; - const result = await jsvm.view('view_js_contract', encodeCall(statusMessage.accountId, 'get_status', { account_id: root.accountId })); - t.is(result, null); -}); - -test('Ali sets then gets status', async t => { - const { ali, jsvm, statusMessage } = t.context.accounts; - await ali.call(jsvm, 'call_js_contract', encodeCall(statusMessage.accountId, 'set_status', { message: 'hello' }), { attachedDeposit: '100000000000000000000000' }); - - t.is( - await jsvm.view('view_js_contract', encodeCall(statusMessage.accountId, 'get_status', { account_id: ali.accountId })), - 'hello' - ); -}); - -test('Bob and Carl have different statuses', async t => { - const { jsvm, statusMessage, bob, carl } = t.context.accounts; - await bob.call(jsvm, 'call_js_contract', encodeCall(statusMessage.accountId, 'set_status', { message: 'hello' }), { attachedDeposit: '100000000000000000000000' }); - await carl.call(jsvm, 'call_js_contract', encodeCall(statusMessage.accountId, 'set_status', { message: 'world' }), { attachedDeposit: '100000000000000000000000' }); - - const bobStatus = await jsvm.view('view_js_contract', encodeCall(statusMessage.accountId, 'get_status', { account_id: bob.accountId })); - const carlStatus = await jsvm.view('view_js_contract', encodeCall(statusMessage.accountId, 'get_status', { account_id: carl.accountId })); - t.is(bobStatus, 'hello'); - t.is(carlStatus, 'world'); -}); - -test('Get statuses from the contract', async t => { - const { jsvm, statusMessage, bob, carl } = t.context.accounts; - await bob.call(jsvm, 'call_js_contract', encodeCall(statusMessage.accountId, 'set_status', { message: 'hello' }), { attachedDeposit: '100000000000000000000000' }); - await carl.call(jsvm, 'call_js_contract', encodeCall(statusMessage.accountId, 'set_status', { message: 'world' }), { attachedDeposit: '100000000000000000000000' }); - - const statuses = await jsvm.view('view_js_contract', encodeCall(statusMessage.accountId, 'get_all_statuses', {})); - t.deepEqual(statuses, [[bob.accountId, 'hello'], [carl.accountId, 'world']]); -}); - -test('message has stored by someone', async t => { - const { ali, jsvm, statusMessage } = t.context.accounts; - await ali.call(jsvm, 'call_js_contract', encodeCall(statusMessage.accountId, 'set_status', { message: 'hello' }), { attachedDeposit: '100000000000000000000000' }); - - t.is( - await jsvm.view('view_js_contract', encodeCall(statusMessage.accountId, 'has_status', { message: 'hello' })), - true - ); - - t.is( - await jsvm.view('view_js_contract', encodeCall(statusMessage.accountId, 'has_status', { message: 'world' })), - false - ); -}); \ No newline at end of file diff --git a/jsvm/examples/__tests__/test-status-message.ava.js b/jsvm/examples/__tests__/test-status-message.ava.js deleted file mode 100644 index 9d774209..00000000 --- a/jsvm/examples/__tests__/test-status-message.ava.js +++ /dev/null @@ -1,68 +0,0 @@ -import { Worker } from 'near-workspaces'; -import { readFile } from 'fs/promises' -import test from 'ava'; - -function encodeCall(contract, method, args) { - return Buffer.concat([Buffer.from(contract), Buffer.from([0]), Buffer.from(method), Buffer.from([0]), Buffer.from(JSON.stringify(args))]) -} - -test.before(async t => { - // Init the worker and start a Sandbox server - const worker = await Worker.init(); - - // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount; - - // Deploy the jsvm contract. - const jsvm = await root.devDeploy( - './node_modules/near-sdk-js/jsvm/build/jsvm.wasm', - ); - - // Deploy status-message JS contract - const statusMessage = await root.createSubAccount('status-message'); - let contract_base64 = (await readFile('build/status-message.base64')).toString(); - await statusMessage.call(jsvm, 'deploy_js_contract', Buffer.from(contract_base64, 'base64'), { attachedDeposit: '400000000000000000000000' }); - await statusMessage.call(jsvm, 'call_js_contract', encodeCall(statusMessage.accountId, 'init', {}), { attachedDeposit: '400000000000000000000000' }); - - // Test users - const ali = await root.createSubAccount('ali'); - const bob = await root.createSubAccount('bob'); - const carl = await root.createSubAccount('carl'); - - // Save state for test runs - t.context.worker = worker; - t.context.accounts = { root, jsvm, statusMessage, ali, bob, carl }; -}); - -test.after(async t => { - await t.context.worker.tearDown().catch(error => { - console.log('Failed to tear down the worker:', error); - }); -}); - -test('Root gets null status', async t => { - const { root, jsvm, statusMessage } = t.context.accounts; - const result = await jsvm.view('view_js_contract', encodeCall(statusMessage.accountId, 'get_status', { account_id: root.accountId })); - t.is(result, null); -}); - -test('Ali sets then gets status', async t => { - const { ali, jsvm, statusMessage } = t.context.accounts; - await ali.call(jsvm, 'call_js_contract', encodeCall(statusMessage.accountId, 'set_status', { message: 'hello' }), { attachedDeposit: '100000000000000000000000' }); - - t.is( - await jsvm.view('view_js_contract', encodeCall(statusMessage.accountId, 'get_status', { account_id: ali.accountId })), - 'hello' - ); -}); - -test('Bob and Carl have different statuses', async t => { - const { jsvm, statusMessage, bob, carl } = t.context.accounts; - await bob.call(jsvm, 'call_js_contract', encodeCall(statusMessage.accountId, 'set_status', { message: 'hello' }), { attachedDeposit: '100000000000000000000000' }); - await carl.call(jsvm, 'call_js_contract', encodeCall(statusMessage.accountId, 'set_status', { message: 'world' }), { attachedDeposit: '100000000000000000000000' }); - - const bobStatus = await jsvm.view('view_js_contract', encodeCall(statusMessage.accountId, 'get_status', { account_id: bob.accountId })); - const carlStatus = await jsvm.view('view_js_contract', encodeCall(statusMessage.accountId, 'get_status', { account_id: carl.accountId })); - t.is(bobStatus, 'hello'); - t.is(carlStatus, 'world'); -}); diff --git a/jsvm/examples/ava.config.cjs b/jsvm/examples/ava.config.cjs deleted file mode 100644 index a100daf6..00000000 --- a/jsvm/examples/ava.config.cjs +++ /dev/null @@ -1,8 +0,0 @@ -require('util').inspect.defaultOptions.depth = 5; // Increase AVA's printing depth - -module.exports = { - timeout: '300000', - files: ['**/*.ava.js'], - failWithoutAssertions: false, - extensions: ['js'], -}; diff --git a/jsvm/examples/babel.config.json b/jsvm/examples/babel.config.json deleted file mode 100644 index 76a04fe0..00000000 --- a/jsvm/examples/babel.config.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "plugins": [ - "near-sdk-js/lib/build-tools/near-bindgen-exporter", - ["@babel/plugin-proposal-decorators", {"version": "legacy"}] - ] -} diff --git a/jsvm/examples/jsconfig.json b/jsvm/examples/jsconfig.json deleted file mode 100644 index d49b0207..00000000 --- a/jsvm/examples/jsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "compilerOptions": { - "experimentalDecorators": true, - }, - "exclude": [ - "node_modules" - ], -} \ No newline at end of file diff --git a/jsvm/examples/package.json b/jsvm/examples/package.json deleted file mode 100644 index df71d2c0..00000000 --- a/jsvm/examples/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "enclaved-examples", - "version": "1.0.0", - "description": "Status message example with near-sdk-js", - "main": "index.js", - "type": "module", - "scripts": { - "build": "yarn build:clean-state && yarn build:counter && yarn build:cross-contract-call && yarn build:fungible-token-lockable && yarn build:fungible-token && yarn build:non-fungible-token && yarn build:status-message-collections && yarn build:status-message", - "rebuild": "cd ../../ && yarn build && cd jsvm/examples && rm -rf node_modules && rm -rf build && yarn && yarn build", - "build:clean-state": "near-sdk-js build src/clean-state.js build/clean-state.base64", - "build:counter": "near-sdk-js build src/counter.js build/counter.base64", - "build:cross-contract-call": "near-sdk-js build src/status-message.js build/status-message.base64 && near-sdk-js build src/cross-contract-call.js build/cross-contract-call.base64", - "build:fungible-token-lockable": "near-sdk-js build src/fungible-token-lockable.js build/fungible-token-lockable.base64", - "build:fungible-token": "near-sdk-js build src/fungible-token.js build/fungible-token.base64", - "build:non-fungible-token": "near-sdk-js build src/test-token-receiver.js build/test-token-receiver.base64 && near-sdk-js build src/non-fungible-token.js build/non-fungible-token.base64", - "build:status-message-collections": "near-sdk-js build src/status-message-collections.js build/status-message-collections.base64", - "build:status-message": "near-sdk-js build src/status-message.js build/status-message.base64", - "test": "ava", - "test:clean-state": "ava __tests__/test-clean-state.ava.js", - "test:counter": "ava __tests__/test-counter.ava.js", - "test:cross-contract-call": "ava __tests__/test-cross-contract-call.ava.js", - "test:fungible-token-lockable": "ava __tests__/test-fungible-token-lockable.ava.js", - "test:fungible-token": "ava __tests__/test-fungible-token.ava.js", - "test:non-fungible-token": "ava __tests__/test-non-fungible-token.ava.js", - "test:status-message-collections": "ava __tests__/test-status-message-collections.ava.js", - "test:status-message": "ava __tests__/test-status-message.ava.js" - }, - "author": "Near Inc ", - "license": "Apache-2.0", - "dependencies": { - "near-sdk-js": "file:../../", - "lodash-es": "^4.17.21" - }, - "devDependencies": { - "ava": "^4.2.0", - "near-workspaces": "^3.0.0" - } -} \ No newline at end of file diff --git a/jsvm/examples/src/clean-state.js b/jsvm/examples/src/clean-state.js deleted file mode 100644 index 30418e73..00000000 --- a/jsvm/examples/src/clean-state.js +++ /dev/null @@ -1,19 +0,0 @@ -import { NearContract, NearBindgen, call, view, near, LookupMap } from 'near-sdk-js' - -@NearBindgen -class CleanState extends NearContract { - @call - clean({keys}) { - keys.forEach(key => near.jsvmStorageRemove(key)) - } - - @call - put({key, value}) { - near.jsvmStorageWrite(key, value) - } - - @view - get({key}) { - return near.jsvmStorageRead(key) - } -} diff --git a/jsvm/examples/src/counter.js b/jsvm/examples/src/counter.js deleted file mode 100644 index c015f789..00000000 --- a/jsvm/examples/src/counter.js +++ /dev/null @@ -1,34 +0,0 @@ -import { NearContract, NearBindgen, near, call, view } from 'near-sdk-js' -import { isUndefined } from 'lodash-es' - -@NearBindgen -class Counter extends NearContract { - constructor({ initial = 0 }) { - super() - this.count = initial - } - - @call - increase({ n = 1 }) { - this.count += n - near.log(`Counter increased to ${this.count}`) - } - - @call - decrease({ n }) { - // you can use default argument `n=1` too - // this is to illustrate a npm dependency: lodash can be used - if (isUndefined(n)) { - this.count -= 1 - } else { - this.count -= n - } - near.log(`Counter decreased to ${this.count}`) - } - - @view - getCount() { - return this.count - } -} - diff --git a/jsvm/examples/src/cross-contract-call.js b/jsvm/examples/src/cross-contract-call.js deleted file mode 100644 index 02cc9695..00000000 --- a/jsvm/examples/src/cross-contract-call.js +++ /dev/null @@ -1,28 +0,0 @@ -import { NearContract, NearBindgen, call, view, near } from 'near-sdk-js' - -@NearBindgen -class OnCall extends NearContract { - constructor({ }) { - super() - this.personOnCall = "undefined" - } - - @call - set_person_on_call({ accountId }) { - near.log(`Trying to set ${accountId} on-call`) - const status = near.jsvmCall('status-message.test.near', 'get_status', { account_id: accountId }) - near.log(`${accountId} status is ${status}`) - if (status === 'AVAILABLE') { - this.personOnCall = accountId - near.log(`${accountId} set on-call`) - } else { - near.log(`${accountId} can not be set on-call`) - } - } - - @view - person_on_call() { - near.log(`Returning person on-call: ${this.personOnCall}`) - return this.personOnCall - } -} diff --git a/jsvm/examples/src/fungible-token-lockable.js b/jsvm/examples/src/fungible-token-lockable.js deleted file mode 100644 index 5f6649d5..00000000 --- a/jsvm/examples/src/fungible-token-lockable.js +++ /dev/null @@ -1,230 +0,0 @@ -import { - NearContract, - NearBindgen, - call, - view, - near, - LookupMap, - assert -} from 'near-sdk-js' - -class Account { - constructor(balance, allowances, lockedBalances) { - this.balance = balance // Current unlocked balance - this.allowances = allowances // Allowed account to the allowance amount - this.lockedBalances = lockedBalances // Allowed account to locked balance - } - - setAllowance(escrowAccountId, allowance) { - if (allowance > 0) { - this.allowances[escrowAccountId] = allowance - } else if (allowance === 0) { - delete this.allowances[escrowAccountId] - } else { - throw Error("Allowance can't be negative") - } - } - - getAllowance(escrowAccountId) { - return this.allowances[escrowAccountId] || 0 - } - - setLockedBalance(escrowAccountId, lockedBalance) { - if (lockedBalance > 0) { - this.lockedBalances[escrowAccountId] = lockedBalance - } else if (lockedBalance === 0) { - delete this.lockedBalances[escrowAccountId] - } else { - throw Error("Locked balance cannot be negative") - } - } - - getLockedBalance(escrowAccountId) { - return this.lockedBalances[escrowAccountId] || 0 - } - - totalBalance() { - let totalLockedBalance = - Object.values(this.lockedBalances).reduce((acc, val) => acc + val, 0) - return this.balance + totalLockedBalance - } -} - -@NearBindgen -class LockableFungibleToken extends NearContract { - constructor({ prefix, totalSupply }) { - super() - this.accounts = new LookupMap(prefix) // Account ID -> Account mapping - this.totalSupply = totalSupply // Total supply of the all tokens - let ownerId = near.signerAccountId() - let ownerAccount = this.getAccount(ownerId) - ownerAccount.balance = totalSupply - this.setAccount(ownerId, ownerAccount) - } - - deserialize() { - super.deserialize() - this.accounts = Object.assign(new LookupMap, this.accounts) - } - - getAccount(ownerId) { - let account = this.accounts.get(ownerId) - if (account === null) { - return new Account(0, {}, {}) - } - return Object.assign(new Account(), JSON.parse(account)) - } - - setAccount(accountId, account) { - this.accounts.set(accountId, JSON.stringify(account)) - } - - @call - setAllowance({ escrowAccountId, allowance }) { - let ownerId = near.predecessorAccountId() - if (escrowAccountId === ownerId) { - throw Error("Can't set allowance for yourself") - } - let account = this.getAccount(ownerId) - let lockedBalance = account.getLockedBalance(escrowAccountId) - if (lockedBalance > allowance) { - throw Error("The new allowance can't be less than the amount of locked tokens") - } - - account.setAllowance(escrowAccountId, allowance - lockedBalance) - this.setAccount(ownerId, account) - } - - @call - lock({ ownerId, lockAmount }) { - if (lockAmount <= 0) { - throw Error("Can't lock 0 or less tokens") - } - let escrowAccountId = near.predecessorAccountId() - let account = this.getAccount(ownerId) - - // Checking and updating unlocked balance - if (account.balance < lockAmount) { - throw Error("Not enough unlocked balance") - } - account.balance -= lockAmount - - // If locking by escrow, need to check and update the allowance. - if (escrowAccountId !== ownerId) { - let allowance = account.getAllowance(escrowAccountId) - if (allowance < lockAmount) { - throw Error("Not enough allowance") - } - account.setAllowance(escrowAccountId, allowance - lockAmount) - } - - // Updating total lock balance - let lockedBalance = account.getLockedBalance(escrowAccountId) - account.setLockedBalance(escrowAccountId, lockedBalance + lockAmount) - - this.setAccount(ownerId, account) - } - - @call - unlock({ ownerId, unlockAmount }) { - if (unlockAmount <= 0) { - throw Error("Can't unlock 0 or less tokens") - } - let escrowAccountId = near.predecessorAccountId() - let account = this.getAccount(ownerId) - - // Checking and updating locked balance - let lockedBalance = account.getLockedBalance(escrowAccountId) - if (lockedBalance < unlockAmount) { - throw Error("Not enough locked tokens") - } - account.setLockedBalance(escrowAccountId, lockedBalance - unlockAmount) - - // If unlocking by escrow, need to update allowance. - if (escrowAccountId !== ownerId) { - let allowance = account.getAllowance(escrowAccountId) - account.setAllowance(escrowAccountId, allowance + unlockAmount) - } - - // Updating unlocked balance - account.balance += unlockAmount - - this.setAccount(ownerId, account) - } - - @call - transferFrom({ ownerId, newOwnerId, amount }) { - if (amount <= 0) { - throw Error("Can't transfer 0 or less tokens") - } - let escrowAccountId = near.predecessorAccountId() - let account = this.getAccount(ownerId) - - // Checking and updating locked balance - let lockedBalance = account.getLockedBalance(escrowAccountId) - var remainingAmount - if (lockedBalance >= amount) { - account.setLockedBalance(escrowAccountId, lockedBalance - amount) - remainingAmount = 0 - } else { - account.setLockedBalance(escrowAccountId, 0) - remainingAmount = amount - lockedBalance - } - - // If there is remaining balance after the locked balance, we try to use unlocked tokens. - if (remainingAmount > 0) { - // Checking and updating unlocked balance - if (account.balance < remainingAmount) { - throw Error("Not enough unlocked balance") - } - account.balance -= remainingAmount - - // If transferring by escrow, need to check and update allowance. - if (escrowAccountId !== ownerId) { - let allowance = account.getAllowance(escrowAccountId) - // Checking and updating unlocked balance - if (allowance < remainingAmount) { - throw Error("Not enough allowance") - } - account.setAllowance(escrowAccountId, allowance - remainingAmount) - } - } - - this.setAccount(ownerId, account) - - // Deposit amount to the new owner - let newAccount = this.getAccount(newOwnerId) - newAccount.balance += amount - this.setAccount(newOwnerId, newAccount) - } - - @call - transfer({ newOwnerId, amount }) { - this.transferFrom({ ownerId: near.predecessorAccountId(), newOwnerId, amount }) - } - - @view - getTotalSupply() { - return this.totalSupply - } - - @view - getTotalBalance({ ownerId }) { - return this.getAccount(ownerId).totalBalance() - } - - @view - getUnlockedBalance({ ownerId }) { - return this.getAccount(ownerId).balance - } - - @view - getAllowance({ ownerId, escrowAccountId }) { - return this.getAccount(ownerId).getAllowance(escrowAccountId) - } - - @view - getLockedBalance({ ownerId, escrowAccountId }) { - return this.getAccount(ownerId).getLockedBalance(escrowAccountId) - } -} diff --git a/jsvm/examples/src/fungible-token.js b/jsvm/examples/src/fungible-token.js deleted file mode 100644 index 3e7acccd..00000000 --- a/jsvm/examples/src/fungible-token.js +++ /dev/null @@ -1,76 +0,0 @@ -import { - NearContract, - NearBindgen, - call, - view, - near, - LookupMap, - assert -} from 'near-sdk-js' - -@NearBindgen -class FungibleToken extends NearContract { - constructor({ prefix, totalSupply }) { - super() - this.accounts = new LookupMap(prefix) - this.totalSupply = totalSupply - this.accounts.set(near.signerAccountId(), totalSupply) - // don't need accountStorageUsage like rust in JS contract, storage deposit management is automatic in JSVM - } - - deserialize() { - super.deserialize() - this.accounts = Object.assign(new LookupMap, this.accounts) - } - - internalDeposit({ accountId, amount }) { - let balance = this.accounts.get(accountId) || '0' - let newBalance = BigInt(balance) + BigInt(amount) - this.accounts.set(accountId, newBalance.toString()) - this.totalSupply = (BigInt(this.totalSupply) + BigInt(amount)).toString() - } - - internalWithdraw({ accountId, amount }) { - let balance = this.accounts.get(accountId) || '0' - let newBalance = BigInt(balance) - BigInt(amount) - assert(newBalance >= 0n, "The account doesn't have enough balance") - this.accounts.set(accountId, newBalance.toString()) - let newSupply = BigInt(this.totalSupply) - BigInt(amount) - assert(newSupply >= 0n, "Total supply overflow") - this.totalSupply = newSupply.toString() - } - - internalTransfer({ senderId, receiverId, amount, memo }) { - assert(senderId != receiverId, "Sender and receiver should be different") - let amountInt = BigInt(amount) - assert(amountInt > 0n, "The amount should be a positive number") - this.internalWithdraw({ accountId: senderId, amount }) - this.internalDeposit({ accountId: receiverId, amount }) - } - - @call - ftTransfer({ receiverId, amount, memo }) { - let senderId = near.predecessorAccountId() - this.internalTransfer({ senderId, receiverId, amount, memo }) - } - - @call - ftTransferCall({ receiverId, amount, memo, msg }) { - let senderId = near.predecessorAccountId() - this.internalTransfer({ senderId, receiverId, amount, memo }) - let onTransferRet = near.jsvmCall(receiverId, 'ftOnTransfer', { senderId, amount, msg, receiverId }) - // In JS, do not need a callback, ftResolveTransfer after ftOnTransfer Returns - // If any logic after ftOnTransfer Returns is required, just do it on onTransferRet. - return onTransferRet - } - - @view - ftTotalSupply() { - return this.totalSupply - } - - @view - ftBalanceOf({ accountId }) { - return this.accounts.get(accountId) || '0' - } -} diff --git a/jsvm/examples/src/non-fungible-token.js b/jsvm/examples/src/non-fungible-token.js deleted file mode 100644 index dfd92d20..00000000 --- a/jsvm/examples/src/non-fungible-token.js +++ /dev/null @@ -1,87 +0,0 @@ -import { NearContract, NearBindgen, call, view, near, LookupMap, assert } from 'near-sdk-js' - -class Token { - constructor(token_id, owner_id) { - this.token_id = token_id; - this.owner_id = owner_id; - } -} - -@NearBindgen -class NftContract extends NearContract { - constructor({ owner_id, owner_by_id_prefix }) { - super() - this.owner_id = owner_id - this.owner_by_id = new LookupMap(owner_by_id_prefix) - } - - deserialize() { - super.deserialize() - this.owner_by_id = Object.assign(new LookupMap, this.owner_by_id) - } - - internalTransfer({ sender_id, receiver_id, token_id, approval_id, memo }) { - let owner_id = this.owner_by_id.get(token_id) - - assert(owner_id !== null, "Token not found") - assert(sender_id === owner_id, "Sender must be the current owner") - assert(owner_id !== receiver_id, "Current and next owner must differ") - - this.owner_by_id.set(token_id, receiver_id) - - return owner_id - } - - @call - nftTransfer({ receiver_id, token_id, approval_id, memo }) { - let sender_id = near.predecessorAccountId() - this.internalTransfer({ sender_id, receiver_id, token_id, approval_id, memo }) - } - - @call - nftTransferCall({ receiver_id, token_id, approval_id, memo, msg }) { - let sender_id = near.predecessorAccountId() - let old_owner_id = this.internalTransfer({ sender_id, receiver_id, token_id, approval_id, memo }) - - let onTransferRet = near.jsvmCall(receiver_id, 'nftOnTransfer', { senderId: sender_id, previousOwnerId: old_owner_id, tokenId: token_id, msg: msg }) - - // NOTE: Arbitrary logic can be run here, as an example we return the token to the initial - // owner if receiver's `nftOnTransfer` returns `true` - if (onTransferRet) { - let currentOwner = this.owner_by_id.get(token_id) - if (currentOwner === null) { - // The token was burned and doesn't exist anymore. - return true - } else if (currentOwner !== receiver_id) { - // The token is not owned by the receiver anymore. Can't return it. - return true - } else { - this.internalTransfer({ sender_id: receiver_id, receiver_id: sender_id, token_id: token_id, approval_id: null, memo: null }) - return false - } - } else { - return true - } - } - - @call - nftMint({ token_id, token_owner_id, token_metadata }) { - let sender_id = near.predecessorAccountId() - assert(sender_id === this.owner_id, "Unauthorized") - assert(this.owner_by_id.get(token_id) === null, "Token ID must be unique") - - this.owner_by_id.set(token_id, token_owner_id) - - return new Token(token_id, token_owner_id) - } - - @view - nftToken({ token_id }) { - let owner_id = this.owner_by_id.get(token_id) - if (owner_id === null) { - return null - } - - return new Token(token_id, owner_id) - } -} diff --git a/jsvm/examples/src/status-message-collections.js b/jsvm/examples/src/status-message-collections.js deleted file mode 100644 index fb6e42d9..00000000 --- a/jsvm/examples/src/status-message-collections.js +++ /dev/null @@ -1,45 +0,0 @@ -import { NearContract, NearBindgen, call, view, near, LookupSet, UnorderedMap, Vector } from 'near-sdk-js' - -@NearBindgen -class StatusMessage extends NearContract { - constructor() { - super() - this.records = new UnorderedMap('a') - this.uniqueValues = new LookupSet('b') - } - - deserialize() { - super.deserialize() - this.records.keys = Object.assign(new Vector, this.records.keys) - this.records.values = Object.assign(new Vector, this.records.values) - this.records = Object.assign(new UnorderedMap, this.records) - this.uniqueValues = Object.assign(new LookupSet, this.uniqueValues) - } - - @call - set_status({ message }) { - let account_id = near.signerAccountId() - near.log(`${account_id} set_status with message ${message}`) - this.records.set(account_id, message) - this.uniqueValues.set(message) - } - - @view - get_status({ account_id }) { - near.log(`get_status for account_id ${account_id}`) - return this.records.get(account_id) - } - - @view - has_status({ message }) { - // used for test LookupMap - return this.uniqueValues.contains(message) - } - - @view - get_all_statuses() { - // used for test UnorderedMap - return this.records.toArray() - } -} - diff --git a/jsvm/examples/src/status-message.js b/jsvm/examples/src/status-message.js deleted file mode 100644 index 96c3e0e9..00000000 --- a/jsvm/examples/src/status-message.js +++ /dev/null @@ -1,23 +0,0 @@ -import { NearContract, NearBindgen, call, view, near } from 'near-sdk-js' - -@NearBindgen -class StatusMessage extends NearContract { - constructor() { - super() - this.records = {} - } - - @call - set_status({ message }) { - let account_id = near.signerAccountId() - near.log(`${account_id} set_status with message ${message}`) - this.records[account_id] = message - } - - @view - get_status({ account_id }) { - near.log(`get_status for account_id ${account_id}`) - return this.records[account_id] || null - } -} - diff --git a/jsvm/examples/src/test-token-receiver.js b/jsvm/examples/src/test-token-receiver.js deleted file mode 100644 index feac37e6..00000000 --- a/jsvm/examples/src/test-token-receiver.js +++ /dev/null @@ -1,24 +0,0 @@ -import { NearContract, NearBindgen, call, near, assert } from 'near-sdk-js' - -@NearBindgen -class NftContract extends NearContract { - constructor({ nonFungibleTokenAccountId }) { - super() - this.nonFungibleTokenAccountId = nonFungibleTokenAccountId - } - - @call - nftOnTransfer({ senderId, previousOwnerId, tokenId, msg }) { - assert( - near.predecessorAccountId() === this.nonFungibleTokenAccountId, - "Only supports the one non-fungible token contract" - ) - if (msg === "return-it-now") { - return true - } else if (msg === "keep-it-now") { - return false - } else { - throw Error("unsupported msg") - } - } -} diff --git a/jsvm/examples/yarn.lock b/jsvm/examples/yarn.lock deleted file mode 100644 index a964ba55..00000000 --- a/jsvm/examples/yarn.lock +++ /dev/null @@ -1,2183 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@ampproject/remapping@^2.1.0": - version "2.2.0" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== - dependencies: - "@jridgewell/gen-mapping" "^0.1.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@babel/code-frame@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== - dependencies: - "@babel/highlight" "^7.16.7" - -"@babel/compat-data@^7.17.10": - version "7.17.10" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz#711dc726a492dfc8be8220028b1b92482362baab" - integrity sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw== - -"@babel/core@^7.17.5": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.2.tgz#87b2fcd7cce9becaa7f5acebdc4f09f3dd19d876" - integrity sha512-A8pri1YJiC5UnkdrWcmfZTJTV85b4UXTAfImGmCfYmax4TR9Cw8sDS0MOk++Gp2mE/BefVJ5nwy5yzqNJbP/DQ== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.18.2" - "@babel/helper-compilation-targets" "^7.18.2" - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helpers" "^7.18.2" - "@babel/parser" "^7.18.0" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.2" - "@babel/types" "^7.18.2" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.1" - semver "^6.3.0" - -"@babel/generator@^7.18.2": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz#33873d6f89b21efe2da63fe554460f3df1c5880d" - integrity sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw== - dependencies: - "@babel/types" "^7.18.2" - "@jridgewell/gen-mapping" "^0.3.0" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" - integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-compilation-targets@^7.18.2": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz#67a85a10cbd5fc7f1457fec2e7f45441dc6c754b" - integrity sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ== - dependencies: - "@babel/compat-data" "^7.17.10" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.20.2" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.18.0": - version "7.18.0" - resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz#fac430912606331cb075ea8d82f9a4c145a4da19" - integrity sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-member-expression-to-functions" "^7.17.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - -"@babel/helper-environment-visitor@^7.16.7", "@babel/helper-environment-visitor@^7.18.2": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz#8a6d2dedb53f6bf248e31b4baf38739ee4a637bd" - integrity sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ== - -"@babel/helper-function-name@^7.17.9": - version "7.17.9" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz#136fcd54bc1da82fcb47565cf16fd8e444b1ff12" - integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg== - dependencies: - "@babel/template" "^7.16.7" - "@babel/types" "^7.17.0" - -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-member-expression-to-functions@^7.17.7": - version "7.17.7" - resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4" - integrity sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw== - dependencies: - "@babel/types" "^7.17.0" - -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-module-transforms@^7.18.0": - version "7.18.0" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz#baf05dec7a5875fb9235bd34ca18bad4e21221cd" - integrity sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.17.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.0" - "@babel/types" "^7.18.0" - -"@babel/helper-optimise-call-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" - integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-plugin-utils@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz#86c2347da5acbf5583ba0a10aed4c9bf9da9cf96" - integrity sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA== - -"@babel/helper-replace-supers@^7.16.7", "@babel/helper-replace-supers@^7.18.2": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz#41fdfcc9abaf900e18ba6e5931816d9062a7b2e0" - integrity sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q== - dependencies: - "@babel/helper-environment-visitor" "^7.18.2" - "@babel/helper-member-expression-to-functions" "^7.17.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/traverse" "^7.18.2" - "@babel/types" "^7.18.2" - -"@babel/helper-simple-access@^7.17.7": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz#4dc473c2169ac3a1c9f4a51cfcd091d1c36fcff9" - integrity sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ== - dependencies: - "@babel/types" "^7.18.2" - -"@babel/helper-split-export-declaration@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" - integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - -"@babel/helper-validator-option@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" - integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== - -"@babel/helpers@^7.18.2": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz#970d74f0deadc3f5a938bfa250738eb4ac889384" - integrity sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg== - dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.2" - "@babel/types" "^7.18.2" - -"@babel/highlight@^7.16.7": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz#257de56ee5afbd20451ac0a75686b6b404257351" - integrity sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.16.7", "@babel/parser@^7.18.0": - version "7.18.4" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.18.4.tgz#6774231779dd700e0af29f6ad8d479582d7ce5ef" - integrity sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow== - -"@babel/plugin-proposal-decorators@^7.17.2": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.2.tgz#dbe4086d2d42db489399783c3aa9272e9700afd4" - integrity sha512-kbDISufFOxeczi0v4NQP3p5kIeW6izn/6klfWBrIIdGZZe4UpHR+QU03FAoWjGGd9SUXAwbw2pup1kaL4OQsJQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-replace-supers" "^7.18.2" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/plugin-syntax-decorators" "^7.17.12" - charcodes "^0.2.0" - -"@babel/plugin-syntax-decorators@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.12.tgz#02e8f678602f0af8222235271efea945cfdb018a" - integrity sha512-D1Hz0qtGTza8K2xGyEdVNCYLdVHukAcbQr4K3/s6r/esadyEriZovpJimQOpu8ju4/jV8dW/1xdaE0UpDroidw== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/template@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/traverse@^7.18.0", "@babel/traverse@^7.18.2": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.2.tgz#b77a52604b5cc836a9e1e08dca01cba67a12d2e8" - integrity sha512-9eNwoeovJ6KH9zcCNnENY7DMFwTU9JdGCFtqNLfUAqtUHRCOsTOqWoffosP8vKmNYeSBUv3yVJXjfd8ucwOjUA== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.18.2" - "@babel/helper-environment-visitor" "^7.18.2" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.18.0" - "@babel/types" "^7.18.2" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.16.7", "@babel/types@^7.17.0", "@babel/types@^7.18.0", "@babel/types@^7.18.2": - version "7.18.4" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz#27eae9b9fd18e9dccc3f9d6ad051336f307be354" - integrity sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - to-fast-properties "^2.0.0" - -"@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/gen-mapping@^0.3.0": - version "0.3.1" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz#cf92a983c83466b8c0ce9124fadeaf09f7c66ea9" - integrity sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.0.3": - version "3.0.7" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe" - integrity sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA== - -"@jridgewell/set-array@^1.0.0": - version "1.1.1" - resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz#36a6acc93987adcf0ba50c66908bd0b70de8afea" - integrity sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ== - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.13" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz#b6461fb0c2964356c469e115f504c95ad97ab88c" - integrity sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w== - -"@jridgewell/trace-mapping@^0.3.9": - version "0.3.13" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz#dcfe3e95f224c8fe97a87a5235defec999aa92ea" - integrity sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@rollup/plugin-babel@^5.3.1": - version "5.3.1" - resolved "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" - integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@rollup/pluginutils" "^3.1.0" - -"@rollup/plugin-commonjs@^21.0.1": - version "21.1.0" - resolved "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-21.1.0.tgz#45576d7b47609af2db87f55a6d4b46e44fc3a553" - integrity sha512-6ZtHx3VHIp2ReNNDxHjuUml6ur+WcQ28N1yHgCQwsbNkQg2suhxGMDQGJOn/KuDxKtd1xuZP5xSTwBA4GQ8hbA== - dependencies: - "@rollup/pluginutils" "^3.1.0" - commondir "^1.0.1" - estree-walker "^2.0.1" - glob "^7.1.6" - is-reference "^1.2.1" - magic-string "^0.25.7" - resolve "^1.17.0" - -"@rollup/plugin-node-resolve@^13.1.1": - version "13.3.0" - resolved "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz#da1c5c5ce8316cef96a2f823d111c1e4e498801c" - integrity sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw== - dependencies: - "@rollup/pluginutils" "^3.1.0" - "@types/resolve" "1.17.1" - deepmerge "^4.2.2" - is-builtin-module "^3.1.0" - is-module "^1.0.0" - resolve "^1.19.0" - -"@rollup/pluginutils@^3.0.9", "@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" - -"@sindresorhus/is@^4.0.0": - version "4.6.0" - resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== - dependencies: - defer-to-connect "^2.0.0" - -"@types/cacheable-request@^6.0.1": - version "6.0.2" - resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz" - integrity sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "*" - "@types/node" "*" - "@types/responselike" "*" - -"@types/estree@*": - version "0.0.51" - resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== - -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - -"@types/http-cache-semantics@*": - version "4.0.1" - resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz" - integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== - -"@types/json-buffer@~3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz" - integrity sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ== - -"@types/keyv@*": - version "3.1.4" - resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== - dependencies: - "@types/node" "*" - -"@types/node@*": - version "17.0.23" - resolved "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz" - integrity sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw== - -"@types/resolve@1.17.1": - version "1.17.1" - resolved "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" - integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== - dependencies: - "@types/node" "*" - -"@types/responselike@*", "@types/responselike@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz" - integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== - dependencies: - "@types/node" "*" - -acorn-walk@^8.2.0: - version "8.2.0" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^8.7.0: - version "8.7.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz" - integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -aggregate-error@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz" - integrity sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w== - dependencies: - clean-stack "^4.0.0" - indent-string "^5.0.0" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^6.0.0, ansi-styles@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz" - integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== - -anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -arrgv@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/arrgv/-/arrgv-1.0.2.tgz" - integrity sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw== - -arrify@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz" - integrity sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw== - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -ava@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/ava/-/ava-4.2.0.tgz" - integrity sha512-96N/rH2ZlBjoh18CsjH3zfo/rzukkRoqNK7R/Z3MLRrqu6cRRf+i4Zwna7ZRYEIl55yF1BKh/nSPCZWqoXfPJA== - dependencies: - acorn "^8.7.0" - acorn-walk "^8.2.0" - ansi-styles "^6.1.0" - arrgv "^1.0.2" - arrify "^3.0.0" - callsites "^4.0.0" - cbor "^8.1.0" - chalk "^5.0.0" - chokidar "^3.5.3" - chunkd "^2.0.1" - ci-info "^3.3.0" - ci-parallel-vars "^1.0.1" - clean-yaml-object "^0.1.0" - cli-truncate "^3.1.0" - code-excerpt "^4.0.0" - common-path-prefix "^3.0.0" - concordance "^5.0.4" - currently-unhandled "^0.4.1" - debug "^4.3.3" - del "^6.0.0" - emittery "^0.10.1" - figures "^4.0.0" - globby "^13.1.1" - ignore-by-default "^2.0.0" - indent-string "^5.0.0" - is-error "^2.2.2" - is-plain-object "^5.0.0" - is-promise "^4.0.0" - matcher "^5.0.0" - mem "^9.0.2" - ms "^2.1.3" - p-event "^5.0.1" - p-map "^5.3.0" - picomatch "^2.3.1" - pkg-conf "^4.0.0" - plur "^5.1.0" - pretty-ms "^7.0.1" - resolve-cwd "^3.0.0" - slash "^3.0.0" - stack-utils "^2.0.5" - strip-ansi "^7.0.1" - supertap "^3.0.1" - temp-dir "^2.0.0" - write-file-atomic "^4.0.1" - yargs "^17.3.1" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base-x@^3.0.2: - version "3.0.9" - resolved "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== - dependencies: - safe-buffer "^5.0.1" - -base64url@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz" - integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -blueimp-md5@^2.10.0: - version "2.19.0" - resolved "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz" - integrity sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w== - -bn.js@5.2.0, bn.js@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz" - integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== - -borsh@^0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/borsh/-/borsh-0.5.0.tgz" - integrity sha512-p9w/qGBeeFdUf2GPBPHdX5JQyez8K5VtoFN7PqSfmR+cVUMSmcwAKhP9n2aXoDSKbtS7xZlZt3MVnrJL7GdYhg== - dependencies: - bn.js "^5.2.0" - bs58 "^4.0.0" - text-encoding-utf-8 "^1.0.2" - -borsh@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/borsh/-/borsh-0.6.0.tgz" - integrity sha512-sl5k89ViqsThXQpYa9XDtz1sBl3l1lI313cFUY1HKr+wvMILnb+58xpkqTNrYbelh99dY7K8usxoCusQmqix9Q== - dependencies: - bn.js "^5.2.0" - bs58 "^4.0.0" - text-encoding-utf-8 "^1.0.2" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.20.2: - version "4.20.3" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz#eb7572f49ec430e054f56d52ff0ebe9be915f8bf" - integrity sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg== - dependencies: - caniuse-lite "^1.0.30001332" - electron-to-chromium "^1.4.118" - escalade "^3.1.1" - node-releases "^2.0.3" - picocolors "^1.0.0" - -bs58@^4.0.0, bs58@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz" - integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo= - dependencies: - base-x "^3.0.2" - -builtin-modules@^3.0.0: - version "3.3.0" - resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" - integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== - -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-request@^7.0.2: - version "7.0.2" - resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz" - integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - -callsites@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-4.0.0.tgz" - integrity sha512-y3jRROutgpKdz5vzEhWM34TidDU8vkJppF8dszITeb1PQmSqV3DTxyV8G/lyO/DNvtE1YTedehmw9MPZsCBHxQ== - -caniuse-lite@^1.0.30001332: - version "1.0.30001344" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001344.tgz#8a1e7fdc4db9c2ec79a05e9fd68eb93a761888bb" - integrity sha512-0ZFjnlCaXNOAYcV7i+TtdKBp0L/3XEU2MF/x6Du1lrh+SRX4IfzIVL4HNJg5pB2PmFb8rszIGyOvsZnqqRoc2g== - -capability@^0.2.5: - version "0.2.5" - resolved "https://registry.npmjs.org/capability/-/capability-0.2.5.tgz" - integrity sha1-Ua2HNT8ZNv/Xfy8hx0YzpN6oiAE= - -cbor@^8.1.0: - version "8.1.0" - resolved "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz" - integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== - dependencies: - nofilter "^3.1.0" - -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz" - integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w== - -charcodes@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/charcodes/-/charcodes-0.2.0.tgz#5208d327e6cc05f99eb80ffc814707572d1f14e4" - integrity sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ== - -chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -chunkd@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/chunkd/-/chunkd-2.0.1.tgz" - integrity sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ== - -ci-info@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz" - integrity sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw== - -ci-parallel-vars@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/ci-parallel-vars/-/ci-parallel-vars-1.0.1.tgz" - integrity sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -clean-stack@^4.0.0: - version "4.2.0" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz" - integrity sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg== - dependencies: - escape-string-regexp "5.0.0" - -clean-yaml-object@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz" - integrity sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g= - -cli-truncate@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz" - integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== - dependencies: - slice-ansi "^5.0.0" - string-width "^5.0.0" - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz" - integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= - dependencies: - mimic-response "^1.0.0" - -code-excerpt@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz" - integrity sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA== - dependencies: - convert-to-spaces "^2.0.1" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -common-path-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz" - integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - -compress-brotli@^1.3.8: - version "1.3.8" - resolved "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz" - integrity sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ== - dependencies: - "@types/json-buffer" "~3.0.0" - json-buffer "~3.0.1" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concordance@^5.0.4: - version "5.0.4" - resolved "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz" - integrity sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw== - dependencies: - date-time "^3.1.0" - esutils "^2.0.3" - fast-diff "^1.2.0" - js-string-escape "^1.0.1" - lodash "^4.17.15" - md5-hex "^3.0.1" - semver "^7.3.2" - well-known-symbols "^2.0.0" - -convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - -convert-to-spaces@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz" - integrity sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ== - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - -date-time@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz" - integrity sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg== - dependencies: - time-zone "^1.0.0" - -debug@^4.1.0, debug@^4.3.3: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -defer-to-connect@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -del@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/del/-/del-6.0.0.tgz" - integrity sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ== - dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" - -depd@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -electron-to-chromium@^1.4.118: - version "1.4.143" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.143.tgz#10f1bb595ad6cd893c05097039c685dcf5c8e30c" - integrity sha512-2hIgvu0+pDfXIqmVmV5X6iwMjQ2KxDsWKwM+oI1fABEOy/Dqmll0QJRmIQ3rm+XaoUa/qKrmy5h7LSTFQ6Ldzg== - -emittery@^0.10.1: - version "0.10.2" - resolved "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz" - integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -error-polyfill@^0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/error-polyfill/-/error-polyfill-0.1.3.tgz" - integrity sha512-XHJk60ufE+TG/ydwp4lilOog549iiQF2OAPhkk9DdiYWMrltz5yhDz/xnKuenNwP7gy3dsibssO5QpVhkrSzzg== - dependencies: - capability "^0.2.5" - o3 "^1.0.3" - u3 "^0.1.1" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-string-regexp@5.0.0, escape-string-regexp@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz" - integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - -estree-walker@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - -esutils@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -fast-diff@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - -fast-glob@^3.2.11, fast-glob@^3.2.9: - version "3.2.11" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== - dependencies: - reusify "^1.0.4" - -figures@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/figures/-/figures-4.0.1.tgz" - integrity sha512-rElJwkA/xS04Vfg+CaZodpso7VqBknOYbzi6I76hI4X80RUjkSxO2oAyPmGbuXUppywjqndOrQDl817hDnI++w== - dependencies: - escape-string-regexp "^5.0.0" - is-unicode-supported "^1.2.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-up@^6.0.0: - version "6.3.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz" - integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== - dependencies: - locate-path "^7.1.0" - path-exists "^5.0.0" - -fs-extra@^10.0.0: - version "10.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@^7.1.3: - version "7.2.0" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.1.6: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globby@^11.0.1: - version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -globby@^13.1.1: - version "13.1.1" - resolved "https://registry.npmjs.org/globby/-/globby-13.1.1.tgz" - integrity sha512-XMzoDZbGZ37tufiv7g0N4F/zp3zkwdFtVbV3EHsVl1KQr4RPLfNoT068/97RPshz2J5xYNEjLKKBKaGHifBd3Q== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.2.11" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^4.0.0" - -got@^11.8.2: - version "11.8.3" - resolved "https://registry.npmjs.org/got/-/got-11.8.3.tgz" - integrity sha512-7gtQ5KiPh1RtGS9/Jbv1ofDpBFuq42gyfEib+ejaRBJuj/3tQFeR5+gw57e4ipaU8c/rCjvX6fkQz2lyDlGAOg== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.10" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -http-errors@^1.7.2: - version "1.8.1" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz" - integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.1" - -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - -ignore-by-default@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-2.1.0.tgz" - integrity sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw== - -ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -indent-string@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz" - integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -irregular-plurals@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.3.0.tgz" - integrity sha512-MVBLKUTangM3EfRPFROhmWQQKRDsrgI83J8GS3jXy+OwYqiR2/aoWndYQ5416jLE3uaGgLH7ncme3X9y09gZ3g== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-builtin-module@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz#6fdb24313b1c03b75f8b9711c0feb8c30b903b00" - integrity sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg== - dependencies: - builtin-modules "^3.0.0" - -is-core-module@^2.8.1: - version "2.9.0" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" - integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== - dependencies: - has "^1.0.3" - -is-error@^2.2.2: - version "2.2.2" - resolved "https://registry.npmjs.org/is-error/-/is-error-2.2.2.tgz" - integrity sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-fullwidth-code-point@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" - integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== - -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-inside@^3.0.2: - version "3.0.3" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-promise@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz" - integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== - -is-reference@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" - integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== - dependencies: - "@types/estree" "*" - -is-unicode-supported@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.2.0.tgz" - integrity sha512-wH+U77omcRzevfIG8dDhTS0V9zZyweakfD01FULl97+0EHiJTTZtJqxPSkIIo/SDPv/i07k/C9jAPY+jwLLeUQ== - -js-sha256@^0.9.0: - version "0.9.0" - resolved "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz" - integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== - -js-string-escape@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz" - integrity sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8= - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.14.1: - version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json-buffer@3.0.1, json-buffer@~3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json5@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" - integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -keyv@^4.0.0: - version "4.2.5" - resolved "https://registry.npmjs.org/keyv/-/keyv-4.2.5.tgz" - integrity sha512-WQpVVZvax2BpGIXviWPnBuwbTPd3qcMcmsWzJJWKyV5r3JUw5kEkbs5FguywUxd+Oi4OpuSmDQE5qtH51u9Hqw== - dependencies: - compress-brotli "^1.3.8" - json-buffer "3.0.1" - -load-json-file@^7.0.0: - version "7.0.1" - resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-7.0.1.tgz" - integrity sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ== - -locate-path@^7.1.0: - version "7.1.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-7.1.0.tgz" - integrity sha512-HNx5uOnYeK4SxEoid5qnhRfprlJeGMzFRKPLCf/15N3/B4AiofNwC/yq7VBKdVk9dx7m+PiYCJOGg55JYTAqoQ== - dependencies: - p-locate "^6.0.0" - -lodash-es@^4.17.21: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" - integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== - -lodash@^4.17.15: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -magic-string@^0.25.7: - version "0.25.9" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" - integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== - dependencies: - sourcemap-codec "^1.4.8" - -map-age-cleaner@^0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - -matcher@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/matcher/-/matcher-5.0.0.tgz" - integrity sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw== - dependencies: - escape-string-regexp "^5.0.0" - -md5-hex@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz" - integrity sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw== - dependencies: - blueimp-md5 "^2.10.0" - -mem@^9.0.2: - version "9.0.2" - resolved "https://registry.npmjs.org/mem/-/mem-9.0.2.tgz" - integrity sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A== - dependencies: - map-age-cleaner "^0.1.3" - mimic-fn "^4.0.0" - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -minimatch@^3.0.4, minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minipass@^3.0.0: - version "3.1.6" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz" - integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ== - dependencies: - yallist "^4.0.0" - -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mustache@^4.0.0: - version "4.2.0" - resolved "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz" - integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== - -near-api-js@^0.44.1: - version "0.44.2" - resolved "https://registry.npmjs.org/near-api-js/-/near-api-js-0.44.2.tgz" - integrity sha512-eMnc4V+geggapEUa3nU2p8HSHn/njtloI4P2mceHQWO8vDE1NGpnAw8FuTBrLmXSgIv9m6oocgFc9t3VNf5zwg== - dependencies: - bn.js "5.2.0" - borsh "^0.6.0" - bs58 "^4.0.0" - depd "^2.0.0" - error-polyfill "^0.1.3" - http-errors "^1.7.2" - js-sha256 "^0.9.0" - mustache "^4.0.0" - node-fetch "^2.6.1" - text-encoding-utf-8 "^1.0.2" - tweetnacl "^1.0.1" - -near-sandbox@^0.0.8: - version "0.0.8" - resolved "https://registry.npmjs.org/near-sandbox/-/near-sandbox-0.0.8.tgz" - integrity sha512-3JrDcA9rI+wA9lWqfOtSovGxBE/TDZL011TLk+jz5wGezVbm7m3tDh/zCfq+++eFyJ3ZbGkG0KF6+trMQJFPQQ== - dependencies: - got "^11.8.2" - tar "^6.1.0" - -"near-sdk-js@file:../..": - version "0.3.0" - dependencies: - "@babel/core" "^7.17.5" - "@babel/plugin-proposal-decorators" "^7.17.2" - "@rollup/plugin-babel" "^5.3.1" - "@rollup/plugin-commonjs" "^21.0.1" - "@rollup/plugin-node-resolve" "^13.1.1" - rollup "^2.61.1" - rollup-plugin-sourcemaps "^0.6.3" - yargs "^17.5.1" - -near-units@^0.1.9: - version "0.1.9" - resolved "https://registry.npmjs.org/near-units/-/near-units-0.1.9.tgz" - integrity sha512-xiuBjpNsi+ywiu7P6iWRZdgFm7iCr/cfWlVO6+e5uaAqH4mE1rrurElyrL91llNDSnMwogd9XmlZOw5KbbHNsA== - dependencies: - bn.js "^5.2.0" - -near-workspaces@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/near-workspaces/-/near-workspaces-2.0.0.tgz" - integrity sha512-oxV9B/LBGKM1cQHfZI476GSiUFLRg/0t7PiPGDyUVVsFWpkBLbQEF9EVP2nxctO7HWopAe5SJJTGp0o0ct8B1A== - dependencies: - base64url "^3.0.1" - bn.js "^5.2.0" - borsh "^0.5.0" - bs58 "^4.0.1" - callsites "^4.0.0" - fs-extra "^10.0.0" - js-sha256 "^0.9.0" - near-api-js "^0.44.1" - near-sandbox "^0.0.8" - near-units "^0.1.9" - node-port-check "^2.0.1" - promisify-child-process "^4.1.1" - pure-uuid "^1.6.2" - rimraf "^3.0.2" - temp-dir "^2.0.0" - -node-fetch@^2.6.1: - version "2.6.7" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-port-check@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/node-port-check/-/node-port-check-2.0.1.tgz" - integrity sha512-PV1tj5OPbWwxvhPcChXxwCIKl/IfVEdPP4u/gQz2lao/VGoeIUXb/4U72KSHLZpTVBmgTnMm0me7yR0wUsIuPg== - -node-releases@^2.0.3: - version "2.0.5" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz#280ed5bc3eba0d96ce44897d8aee478bfb3d9666" - integrity sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q== - -nofilter@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz" - integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -o3@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/o3/-/o3-1.0.3.tgz" - integrity sha1-GSzod6iC36Z1HwQSqGX6+y2h2sA= - dependencies: - capability "^0.2.5" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= - -p-event@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/p-event/-/p-event-5.0.1.tgz" - integrity sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ== - dependencies: - p-timeout "^5.0.2" - -p-limit@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz" - integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== - dependencies: - yocto-queue "^1.0.0" - -p-locate@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz" - integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== - dependencies: - p-limit "^4.0.0" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-map@^5.3.0: - version "5.3.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-5.3.0.tgz" - integrity sha512-SRbIQFoLYNezHkqZslqeg963HYUtqOrfMCxjNrFOpJ19WTYuq26rQoOXeX8QQiMLUlLqdYV/7PuDsdYJ7hLE1w== - dependencies: - aggregate-error "^4.0.0" - -p-timeout@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-5.0.2.tgz" - integrity sha512-sEmji9Yaq+Tw+STwsGAE56hf7gMy9p0tQfJojIAamB7WHJYJKf1qlsg9jqBWG8q9VCxKPhZaP/AcXwEoBcYQhQ== - -parse-ms@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz" - integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== - -path-exists@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz" - integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pkg-conf@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/pkg-conf/-/pkg-conf-4.0.0.tgz" - integrity sha512-7dmgi4UY4qk+4mj5Cd8v/GExPo0K+SlY+hulOSdfZ/T6jVH6//y7NtzZo5WrfhDBxuQ0jCa7fLZmNaNh7EWL/w== - dependencies: - find-up "^6.0.0" - load-json-file "^7.0.0" - -plur@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/plur/-/plur-5.1.0.tgz" - integrity sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg== - dependencies: - irregular-plurals "^3.3.0" - -pretty-ms@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz" - integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q== - dependencies: - parse-ms "^2.1.0" - -promisify-child-process@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/promisify-child-process/-/promisify-child-process-4.1.1.tgz" - integrity sha512-/sRjHZwoXf1rJ+8s4oWjYjGRVKNK1DUnqfRC1Zek18pl0cN6k3yJ1cCbqd0tWNe4h0Gr+SY4vR42N33+T82WkA== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pure-uuid@^1.6.2: - version "1.6.2" - resolved "https://registry.npmjs.org/pure-uuid/-/pure-uuid-1.6.2.tgz" - integrity sha512-WQ4xz74ApW6s0BToRuuyuMo9g0VHx1HljY0H2gPng+mqqz/K1yLj7sHZonZZQ2++WfHl/ZzruilWvuz+WtmxjQ== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -resolve-alpn@^1.0.0: - version "1.2.1" - resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve@^1.17.0, resolve@^1.19.0: - version "1.22.0" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== - dependencies: - is-core-module "^2.8.1" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -responselike@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz" - integrity sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw== - dependencies: - lowercase-keys "^2.0.0" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rollup-plugin-sourcemaps@^0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz#bf93913ffe056e414419607f1d02780d7ece84ed" - integrity sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw== - dependencies: - "@rollup/pluginutils" "^3.0.9" - source-map-resolve "^0.6.0" - -rollup@^2.61.1: - version "2.75.5" - resolved "https://registry.npmjs.org/rollup/-/rollup-2.75.5.tgz#7985c1962483235dd07966f09fdad5c5f89f16d0" - integrity sha512-JzNlJZDison3o2mOxVmb44Oz7t74EfSd1SQrplQk0wSaXV7uLQXtVdHbxlcT3w+8tZ1TL4r/eLfc7nAbz38BBA== - optionalDependencies: - fsevents "~2.3.2" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-buffer@^5.0.1, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -semver@^6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.3.2: - version "7.3.7" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - -serialize-error@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz" - integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== - dependencies: - type-fest "^0.13.1" - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - -slice-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" - integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== - dependencies: - ansi-styles "^6.0.0" - is-fullwidth-code-point "^4.0.0" - -source-map-resolve@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" - integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - -sourcemap-codec@^1.4.8: - version "1.4.8" - resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -stack-utils@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz" - integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== - dependencies: - escape-string-regexp "^2.0.0" - -"statuses@>= 1.5.0 < 2": - version "1.5.0" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.0: - version "5.1.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== - dependencies: - ansi-regex "^6.0.1" - -supertap@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/supertap/-/supertap-3.0.1.tgz" - integrity sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw== - dependencies: - indent-string "^5.0.0" - js-yaml "^3.14.1" - serialize-error "^7.0.1" - strip-ansi "^7.0.1" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -tar@^6.1.0: - version "6.1.11" - resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" - integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -temp-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz" - integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== - -text-encoding-utf-8@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz" - integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== - -time-zone@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz" - integrity sha1-mcW/VZWJZq9tBtg73zgA3IL67F0= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= - -tweetnacl@^1.0.1: - version "1.0.3" - resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz" - integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== - -type-fest@^0.13.1: - version "0.13.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz" - integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== - -u3@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/u3/-/u3-0.1.1.tgz" - integrity sha512-+J5D5ir763y+Am/QY6hXNRlwljIeRMZMGs0cT6qqZVVzzT3X3nFPXVyPOFRMOR4kupB0T8JnCdpWdp6Q/iXn3w== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= - -well-known-symbols@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz" - integrity sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz" - integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@^21.0.0: - version "21.0.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz" - integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== - -yargs@^17.3.1: - version "17.4.1" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.4.1.tgz" - integrity sha512-WSZD9jgobAg3ZKuCQZSa3g9QOJeCCqLoLAykiWgmXnDo9EPnn4RPf5qVTtzgOx66o6/oqhcA5tHtJXpG8pMt3g== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.0.0" - -yargs@^17.5.1: - version "17.5.1" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" - integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.0.0" - -yocto-queue@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz" - integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== diff --git a/jsvm/jsvm.c b/jsvm/jsvm.c deleted file mode 100644 index e0dca7b9..00000000 --- a/jsvm/jsvm.c +++ /dev/null @@ -1,1136 +0,0 @@ -#include -#include -#include "../quickjs/quickjs-libc-min.h" -#include "../quickjs/libbf.h" - -static JSContext *JS_NewCustomContext(JSRuntime *rt) -{ - JSContext *ctx = JS_NewContextRaw(rt); - if (!ctx) - return NULL; - JS_AddIntrinsicBaseObjects(ctx); - JS_AddIntrinsicDate(ctx); - JS_AddIntrinsicEval(ctx); - JS_AddIntrinsicStringNormalize(ctx); - JS_AddIntrinsicRegExp(ctx); - JS_AddIntrinsicJSON(ctx); - JS_AddIntrinsicProxy(ctx); - JS_AddIntrinsicMapSet(ctx); - JS_AddIntrinsicTypedArrays(ctx); - JS_AddIntrinsicPromise(ctx); - JS_AddIntrinsicBigInt(ctx); - return ctx; -} - -// ############# -// # Registers # -// ############# -extern void read_register(uint64_t register_id, uint64_t ptr); -extern uint64_t register_len(uint64_t register_id); -extern void write_register(uint64_t register_id, uint64_t data_len, uint64_t data_ptr); -// ############### -// # Context API # -// ############### -extern void current_account_id(uint64_t register_id); -extern void signer_account_id(uint64_t register_id); -extern void signer_account_pk(uint64_t register_id); -extern void predecessor_account_id(uint64_t register_id); -extern void input(uint64_t register_id); -extern uint64_t block_index(); -extern uint64_t block_timestamp(); -extern uint64_t epoch_height(); -extern uint64_t storage_usage(); -// ################# -// # Economics API # -// ################# -extern void account_balance(uint64_t balance_ptr); -extern void account_locked_balance(uint64_t balance_ptr); -extern void attached_deposit(uint64_t balance_ptr); -extern uint64_t prepaid_gas(); -extern uint64_t used_gas(); -// ############ -// # Math API # -// ############ -extern void random_seed(uint64_t register_id); -extern void sha256(uint64_t value_len, uint64_t value_ptr, uint64_t register_id); -extern void keccak256(uint64_t value_len, uint64_t value_ptr, uint64_t register_id); -extern void keccak512(uint64_t value_len, uint64_t value_ptr, uint64_t register_id); -extern void ripemd160(uint64_t value_len, uint64_t value_ptr, uint64_t register_id); -extern uint64_t ecrecover(uint64_t hash_len, uint64_t hash_ptr, uint64_t sign_len, uint64_t sig_ptr, uint64_t v, uint64_t malleability_flag, uint64_t register_id); -// ##################### -// # Miscellaneous API # -// ##################### -extern void value_return(uint64_t value_len, uint64_t value_ptr); -extern void panic(void); -extern void panic_utf8(uint64_t len, uint64_t ptr); -extern void log_utf8(uint64_t len, uint64_t ptr); -extern void log_utf16(uint64_t len, uint64_t ptr); -// ################ -// # Promises API # -// ################ -extern uint64_t promise_batch_create(uint64_t account_id_len, uint64_t account_id_ptr); -// ####################### -// # Promise API actions # -// ####################### -extern void promise_batch_action_transfer(uint64_t promise_index, uint64_t amount_ptr); -// ####################### -// # Promise API results # -// ####################### -extern void promise_return(uint64_t promise_idx); -// ############### -// # Storage API # -// ############### -extern uint64_t storage_write(uint64_t key_len, uint64_t key_ptr, uint64_t value_len, uint64_t value_ptr, uint64_t register_id); -extern uint64_t storage_read(uint64_t key_len, uint64_t key_ptr, uint64_t register_id); -extern uint64_t storage_remove(uint64_t key_len, uint64_t key_ptr, uint64_t register_id); -extern uint64_t storage_has_key(uint64_t key_len, uint64_t key_ptr); -// ################# -// # Validator API # -// ################# -extern void validator_stake(uint64_t account_id_len, uint64_t account_id_ptr, uint64_t stake_ptr); -extern void validator_total_stake(uint64_t stake_ptr); -// ############# -// # Alt BN128 # -// ############# -#ifdef NIGHTLY -extern void alt_bn128_g1_multiexp(uint64_t value_len, uint64_t value_ptr, uint64_t register_id); -extern void alt_bn128_g1_sum(uint64_t value_len, uint64_t value_ptr, uint64_t register_id); -extern uint64_t alt_bn128_pairing_check(uint64_t value_len, uint64_t value_ptr); -#endif -// ############# -// # Sandbox # -// ############# -#ifdef SANDBOX -extern void sandbox_debug_log(uint64_t len, uint64_t ptr); -#endif - -static JSValue near_read_register(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - uint64_t register_id; - char *data; - uint64_t data_len; - JSValue ret; - - if (JS_ToUint64Ext(ctx, ®ister_id, argv[0]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); - } - data_len = register_len(register_id); - if (data_len != UINT64_MAX) { - data = malloc(data_len); - read_register(register_id, (uint64_t)data); - ret = JS_NewStringLenRaw(ctx, data, data_len); - free(data); - return ret; - } else { - return JS_UNDEFINED; - } -} - -static JSValue near_register_len(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - uint64_t register_id, len; - - if (JS_ToUint64Ext(ctx, ®ister_id, argv[0]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); - } - len = register_len(register_id); - return JS_NewBigUint64(ctx, len); -} - -static JSValue near_write_register(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - uint64_t register_id; - const char *data_ptr; - size_t data_len; - - if (JS_ToUint64Ext(ctx, ®ister_id, argv[0]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); - } - data_ptr = JS_ToCStringLenRaw(ctx, &data_len, argv[1]); - - write_register(register_id, data_len, (uint64_t)data_ptr); - return JS_UNDEFINED; -} - -static JSValue near_jsvm_account_id(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - uint64_t register_id; - - if (JS_ToUint64Ext(ctx, ®ister_id, argv[0]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); - } - current_account_id(register_id); - return JS_UNDEFINED; -} - -static JSValue near_signer_account_id(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) { - uint64_t register_id; - - if (JS_ToUint64Ext(ctx, ®ister_id, argv[0]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); - } - signer_account_id(register_id); - return JS_UNDEFINED; -} - -static JSValue near_signer_account_pk(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) { - uint64_t register_id; - - if (JS_ToUint64Ext(ctx, ®ister_id, argv[0]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); - } - signer_account_pk(register_id); - return JS_UNDEFINED; -} - -static JSValue near_predecessor_account_id(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) { - uint64_t register_id; - - if (JS_ToUint64Ext(ctx, ®ister_id, argv[0]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); - } - predecessor_account_id(register_id); - return JS_UNDEFINED; -} - -static JSValue near_block_index(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - uint64_t value; - - value = block_index(); - return JS_NewBigUint64(ctx, value); -} - -static JSValue near_block_timestamp(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - uint64_t value; - - value = block_timestamp(); - return JS_NewBigUint64(ctx, value); -} - -static JSValue near_epoch_height(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - uint64_t value; - - value = epoch_height(); - return JS_NewBigUint64(ctx, value); -} - -// ptr[0] ptr[1] is little-endian u128. -static JSValue u128_to_quickjs(JSContext *ctx, uint64_t* ptr) { - JSValue value; - bf_t* bn; - bf_t b; - - value = JS_NewBigInt(ctx); - bn = JS_GetBigInt(value); - // from ptr[] to bn - // high 64 bits - bf_set_ui(bn, ptr[1]); - bf_mul_2exp(bn, 64, BF_PREC_INF, BF_RNDZ); - // low 64 bits - bf_init(bn->ctx, &b); - bf_set_ui(&b, ptr[0]); - bf_add(bn, bn, &b, BF_PREC_INF, BF_RNDZ); - bf_delete(&b); - - return value; -} - -static int quickjs_bigint_to_u128(JSContext *ctx, JSValueConst val, uint64_t* ptr) { - bf_t* a; - bf_t q, r, b, one, u128max; - a = JS_GetBigInt(val); - bf_init(a->ctx, &u128max); - bf_set_ui(&u128max, 1); - bf_mul_2exp(&u128max, 128, BF_PREC_INF, BF_RNDZ); - if (bf_cmp_le(&u128max, a)) { - return 1; - } - bf_init(a->ctx, &q); - bf_init(a->ctx, &r); - bf_init(a->ctx, &b); - bf_init(a->ctx, &one); - bf_set_ui(&b, UINT64_MAX); - bf_set_ui(&one, 1); - bf_add(&b, &b, &one, BF_PREC_INF, BF_RNDZ); - bf_divrem(&q, &r, a, &b, BF_PREC_INF, BF_RNDZ, BF_RNDZ); - - bf_get_uint64(ptr, &r); - bf_get_uint64(ptr+1, &q); - return 0; -} - -static int quickjs_int_to_u128(JSContext *ctx, JSValueConst val, uint64_t* ptr) { - if (JS_ToUint64Ext(ctx, ptr, val) < 0) { - return 1; - } - ptr[1] = 0; - return 0; -} - -static int quickjs_to_u128(JSContext *ctx, JSValueConst val, uint64_t* ptr) { - if (JS_IsBigInt(ctx, val)) - return quickjs_bigint_to_u128(ctx, val, ptr); - else { - return quickjs_int_to_u128(ctx, val, ptr); - } -} - -static JSValue near_attached_deposit(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - uint64_t ptr[2]; - - attached_deposit((uint64_t)ptr); - return u128_to_quickjs(ctx, ptr); -} - -static JSValue near_prepaid_gas(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - uint64_t value; - - value = prepaid_gas(); - return JS_NewBigUint64(ctx, value); -} - -static JSValue near_used_gas(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - uint64_t value; - - value = used_gas(); - return JS_NewBigUint64(ctx, value); -} - -static JSValue near_random_seed(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - uint64_t register_id; - - if (JS_ToUint64Ext(ctx, ®ister_id, argv[0]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); - } - random_seed(register_id); - return JS_UNDEFINED; -} - -static JSValue near_sha256(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - uint64_t register_id; - const char *data_ptr; - size_t data_len; - - data_ptr = JS_ToCStringLenRaw(ctx, &data_len, argv[0]); - if (JS_ToUint64Ext(ctx, ®ister_id, argv[1]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); - } - - sha256(data_len, (uint64_t)data_ptr, register_id); - return JS_UNDEFINED; -} - -static JSValue near_keccak256(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - uint64_t register_id; - const char *data_ptr; - size_t data_len; - - data_ptr = JS_ToCStringLenRaw(ctx, &data_len, argv[0]); - if (JS_ToUint64Ext(ctx, ®ister_id, argv[1]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); - } - keccak256(data_len, (uint64_t)data_ptr, register_id); - return JS_UNDEFINED; -} - -static JSValue near_keccak512(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - uint64_t register_id; - const char *data_ptr; - size_t data_len; - - data_ptr = JS_ToCStringLenRaw(ctx, &data_len, argv[0]); - if (JS_ToUint64Ext(ctx, ®ister_id, argv[1]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); - } - - keccak512(data_len, (uint64_t)data_ptr, register_id); - return JS_UNDEFINED; -} - -static JSValue near_ripemd160(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - uint64_t register_id; - const char *data_ptr; - size_t data_len; - - data_ptr = JS_ToCStringLenRaw(ctx, &data_len, argv[0]); - if (JS_ToUint64Ext(ctx, ®ister_id, argv[1]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); - } - - ripemd160(data_len, (uint64_t)data_ptr, register_id); - return JS_UNDEFINED; -} - -static JSValue near_ecrecover(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - uint64_t malleability_flag, v, register_id, result; - const char *hash_ptr, *sig_ptr; - size_t hash_len, sign_len; - - hash_ptr = JS_ToCStringLenRaw(ctx, &hash_len, argv[0]); - sig_ptr = JS_ToCStringLenRaw(ctx, &sign_len, argv[1]); - if (JS_ToUint64Ext(ctx, &malleability_flag, argv[2]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for malleability_flag"); - } - if (JS_ToUint64Ext(ctx, &v, argv[3]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for v"); - } - if (JS_ToUint64Ext(ctx, ®ister_id, argv[4]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); - } - - result = ecrecover(hash_len, (uint64_t)hash_ptr, sign_len, (uint64_t)sig_ptr, malleability_flag, v, register_id); - return JS_NewBigUint64(ctx, result); -} - -static JSValue near_panic(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - const char *data_ptr; - size_t data_len; - - if (argc == 1) { - data_ptr = JS_ToCStringLen(ctx, &data_len, argv[0]); - panic_utf8(data_len, (uint64_t)data_ptr); - } else { - panic(); - } - return JS_UNDEFINED; -} - -static JSValue near_panic_utf8(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - const char *data_ptr; - size_t data_len; - - data_ptr = JS_ToCStringLenRaw(ctx, &data_len, argv[0]); - - panic_utf8(data_len, (uint64_t)data_ptr); - return JS_UNDEFINED; -} - -static JSValue near_log(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - const char *data_ptr; - size_t data_len; - - data_ptr = JS_ToCStringLen(ctx, &data_len, argv[0]); - - log_utf8(data_len, (uint64_t)data_ptr); - return JS_UNDEFINED; -} - -static JSValue near_log_utf8(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - const char *data_ptr; - size_t data_len; - - data_ptr = JS_ToCStringLenRaw(ctx, &data_len, argv[0]); - - log_utf8(data_len, (uint64_t)data_ptr); - return JS_UNDEFINED; -} - -static JSValue near_log_utf16(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - const char *data_ptr; - size_t data_len; - - data_ptr = JS_ToCStringLenRaw(ctx, &data_len, argv[0]); - log_utf16(data_len, (uint64_t)data_ptr); - return JS_UNDEFINED; -} - -const uint64_t STORAGE_PRICE_PER_BYTE_U64 = 10000000000000000000ul; -const char *STORAGE_PRICE_PER_BYTE = "10000000000000000000"; - -static void mult64to128(uint64_t op1, uint64_t op2, uint64_t *hi, uint64_t *lo) -{ - uint64_t u1 = (op1 & 0xffffffff); - uint64_t v1 = (op2 & 0xffffffff); - uint64_t t = (u1 * v1); - uint64_t w3 = (t & 0xffffffff); - uint64_t k = (t >> 32); - - op1 >>= 32; - t = (op1 * v1) + k; - k = (t & 0xffffffff); - uint64_t w1 = (t >> 32); - - op2 >>= 32; - t = (u1 * op2) + k; - k = (t >> 32); - - *hi = (op1 * op2) + w1 + k; - *lo = (t << 32) + w3; -} - -static void uint128minus(uint64_t *op1_hi, uint64_t *op1_lo, uint64_t *op2_hi, uint64_t *op2_lo) { - *op1_lo = *op1_lo - *op2_lo; - uint64_t c = (((*op1_lo & *op2_lo) & 1) + (*op2_lo >> 1) + (*op1_lo >> 1)) >> 63; - *op1_hi = *op1_hi - (*op2_hi + c); -} - -static void uint128add(uint64_t *op1_hi, uint64_t *op1_lo, uint64_t *op2_hi, uint64_t *op2_lo) { - uint64_t c = (((*op1_lo & *op2_lo) & 1) + (*op1_lo >> 1) + (*op2_lo >> 1)) >> 63; - *op1_hi = *op1_hi + *op2_hi + c; - *op1_lo = *op1_lo + *op2_lo; -} - -static void storage_cost_for_bytes(uint64_t n, uint64_t* cost) { - // cost = n * STORAGE_PRICE_PER_BYTE - mult64to128(n, STORAGE_PRICE_PER_BYTE_U64, cost+1, cost); -} - -static bool u128_less_than(uint64_t *a, uint64_t *b) { - return (a[1] < b[1]) || ((a[1] == b[1]) && (a[0] < b[0])); -} - -static void panic_str(char *s) { - panic_utf8(strlen(s), (uint64_t)s); -} - -#define GET 0 -#define SET 1 - -static void remaining_deposit(uint64_t *deposit, int flag) { - static bool remain_deposit_set = false; - static uint64_t remain_deposit[2]; - - if (flag == GET) { - if (!remain_deposit_set) { - remain_deposit_set = true; - attached_deposit((uint64_t)remain_deposit); - } - deposit[0] = remain_deposit[0]; - deposit[1] = remain_deposit[1]; - } else { - if (!remain_deposit_set) { - remain_deposit_set = true; - } - remain_deposit[0] = deposit[0]; - remain_deposit[1] = deposit[1]; - } -} - -static void input_js_contract_name(char **name, uint64_t *len, int flag) { - static char *js_contract_name; - static uint64_t js_contract_name_len; - - if (flag == GET) { - *name = js_contract_name; - *len = js_contract_name_len; - } else { - js_contract_name = *name; - js_contract_name_len = *len; - } -} - -static void input_method_name(char **name, uint64_t *len, int flag) { - static char *method_name; - static uint64_t method_name_len; - - if (flag == GET) { - *name = method_name; - *len = method_name_len; - } else { - method_name = *name; - method_name_len = *len; - } -} - -static void input_args(char **name, uint64_t *len, int flag) { - static char *args; - static uint64_t args_len; - - if (flag == GET) { - *name = args; - *len = args_len; - } else { - args = *name; - args_len = *len; - } -} - -static void jsvm_call_returns(char **val, uint64_t *len, int flag) { - static char *ret = ""; - static uint64_t ret_len = 0; - - if (flag == GET) { - *val = ret; - *len = ret_len; - } else { - ret = *val; - ret_len = *len; - } -} - -static JSValue near_jsvm_value_return(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - const char *value_ptr; - size_t value_len; - char *value; - uint64_t value_len_u64; - - value_ptr = JS_ToCStringLenRaw(ctx, &value_len, argv[0]); - value = (char *)value_ptr; - value_len_u64 = (uint64_t)value_len; - value_return(value_len, (uint64_t)value_ptr); - jsvm_call_returns(&value, &value_len_u64, SET); - return JS_UNDEFINED; -} - -static void deduct_cost(uint64_t *cost) { - uint64_t deposit[2]; - remaining_deposit(deposit, GET); - if (u128_less_than(deposit, cost)) { - panic_str("insufficient deposit for storage"); - } else { - uint128minus(deposit+1, deposit, cost+1, cost); - remaining_deposit(deposit, SET); - } -} - -static void refund_cost(uint64_t *cost) { - uint64_t deposit[2]; - remaining_deposit(deposit, GET); - uint128add(deposit+1, deposit, cost+1, cost); - remaining_deposit(deposit, SET); -} - -static void refund_storage_deposit() { - uint64_t deposit[2]; - uint64_t promise_id; - char account[64]; - uint64_t account_len; - - predecessor_account_id(0); - read_register(0, (uint64_t)account); - account_len = register_len(0); - - remaining_deposit(deposit, GET); - - if (deposit[0] > 0 || deposit[1] > 0) { - promise_id = promise_batch_create(account_len, (uint64_t)account); - promise_batch_action_transfer(promise_id, (uint64_t)deposit); - promise_return(promise_id); - } -} - -static uint64_t storage_write_enclave(uint64_t key_len, uint64_t key_ptr, uint64_t value_len, uint64_t value_ptr, uint64_t register_id) { - uint64_t cost[2]; - uint64_t ret; - uint64_t initial = storage_usage(), after; - - ret = storage_write(key_len, key_ptr, value_len, value_ptr, register_id); - after = storage_usage(); - if (after > initial) { - storage_cost_for_bytes(after - initial, cost); - deduct_cost(cost); - } else if (after < initial) { - storage_cost_for_bytes(initial - after, cost); - refund_cost(cost); - } - return ret; -} - -static uint64_t storage_remove_enclave(uint64_t key_len, uint64_t key_ptr, uint64_t register_id) { - uint64_t cost[2]; - uint64_t ret; - uint64_t initial = storage_usage(), after; - - ret = storage_remove(key_len, key_ptr, register_id); - after = storage_usage(); - if (after < initial) { - storage_cost_for_bytes(initial - after, cost); - refund_cost(cost); - } - return ret; -} - -static JSValue near_jsvm_js_contract_name(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - uint64_t register_id; - char* contract_name; - uint64_t contract_name_len; - - if (JS_ToUint64Ext(ctx, ®ister_id, argv[0]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); - } - input_js_contract_name(&contract_name, &contract_name_len, GET); - write_register(register_id, contract_name_len, (uint64_t)contract_name); - return JS_UNDEFINED; -} - -static JSValue near_jsvm_method_name(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - uint64_t register_id; - char* method_name; - uint64_t method_name_len; - - if (JS_ToUint64Ext(ctx, ®ister_id, argv[0]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); - } - input_method_name(&method_name, &method_name_len, GET); - write_register(register_id, method_name_len, (uint64_t)method_name); - return JS_UNDEFINED; -} - -static JSValue near_jsvm_args(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - uint64_t register_id; - char* args; - uint64_t args_len; - - if (JS_ToUint64Ext(ctx, ®ister_id, argv[0]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); - } - input_args(&args, &args_len, GET); - write_register(register_id, args_len, (uint64_t)args); - return JS_UNDEFINED; -} - -static JSValue near_jsvm_storage_write(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - const char *key_ptr, *value_ptr; - char *key_with_account_prefix, *contract_name; - size_t key_len, value_len, key_with_prefix_len; - uint64_t register_id, contract_name_len, ret; - - key_ptr = JS_ToCStringLenRaw(ctx, &key_len, argv[0]); - value_ptr = JS_ToCStringLenRaw(ctx, &value_len, argv[1]); - if (JS_ToUint64Ext(ctx, ®ister_id, argv[2]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); - } - input_js_contract_name(&contract_name, &contract_name_len, GET); - key_with_prefix_len = contract_name_len + 7 + key_len; - key_with_account_prefix = malloc(key_with_prefix_len); - strncpy(key_with_account_prefix, contract_name, contract_name_len); - strncpy(key_with_account_prefix+contract_name_len, "/state/", 7); - memcpy(key_with_account_prefix+contract_name_len+7, key_ptr, key_len); - - ret = storage_write_enclave(key_with_prefix_len, (uint64_t)key_with_account_prefix, value_len, (uint64_t)value_ptr, register_id); - return JS_NewBigUint64(ctx, ret); -} - -static JSValue near_jsvm_storage_read(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - const char *key_ptr; - char *key_with_account_prefix, *contract_name; - size_t key_len, key_with_prefix_len; - uint64_t register_id, contract_name_len, ret; - - input_js_contract_name(&contract_name, &contract_name_len, GET); - key_ptr = JS_ToCStringLenRaw(ctx, &key_len, argv[0]); - if (JS_ToUint64Ext(ctx, ®ister_id, argv[1]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); - } - key_with_prefix_len = contract_name_len + 7 + key_len; - key_with_account_prefix = malloc(key_with_prefix_len); - strncpy(key_with_account_prefix, contract_name, contract_name_len); - strncpy(key_with_account_prefix+contract_name_len, "/state/", 7); - memcpy(key_with_account_prefix+contract_name_len+7, key_ptr, key_len); - - ret = storage_read(key_with_prefix_len, (uint64_t)key_with_account_prefix, register_id); - return JS_NewBigUint64(ctx, ret); -} - -static JSValue near_storage_read(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) { - const char *key_ptr; - size_t key_len; - uint64_t register_id; - uint64_t ret; - - key_ptr = JS_ToCStringLenRaw(ctx, &key_len, argv[0]); - if (JS_ToUint64Ext(ctx, ®ister_id, argv[1]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); - } - ret = storage_read(key_len, (uint64_t)key_ptr, register_id); - return JS_NewBigUint64(ctx, ret); -} - -static JSValue near_jsvm_storage_remove(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - const char *key_ptr; - char *key_with_account_prefix, *contract_name; - size_t key_len, key_with_prefix_len; - uint64_t register_id, contract_name_len, ret; - - input_js_contract_name(&contract_name, &contract_name_len, GET); - key_ptr = JS_ToCStringLenRaw(ctx, &key_len, argv[0]); - if (JS_ToUint64Ext(ctx, ®ister_id, argv[1]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); - } - key_with_prefix_len = contract_name_len + 7 + key_len; - key_with_account_prefix = malloc(key_with_prefix_len); - strncpy(key_with_account_prefix, contract_name, contract_name_len); - strncpy(key_with_account_prefix+contract_name_len, "/state/", 7); - memcpy(key_with_account_prefix+contract_name_len+7, key_ptr, key_len); - - ret = storage_remove_enclave(key_with_prefix_len, (uint64_t)key_with_account_prefix, register_id); - return JS_NewBigUint64(ctx, ret); -} - -static JSValue near_jsvm_storage_has_key(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - const char *key_ptr; - char *key_with_account_prefix, *contract_name; - size_t key_len, key_with_prefix_len; - uint64_t register_id, contract_name_len, ret; - - input_js_contract_name(&contract_name, &contract_name_len, GET); - key_ptr = JS_ToCStringLenRaw(ctx, &key_len, argv[0]); - key_with_prefix_len = contract_name_len + 7 + key_len; - key_with_account_prefix = malloc(key_with_prefix_len); - strncpy(key_with_account_prefix, contract_name, contract_name_len); - strncpy(key_with_account_prefix+contract_name_len, "/state/", 7); - memcpy(key_with_account_prefix+contract_name_len+7, key_ptr, key_len); - - ret = storage_has_key(key_with_prefix_len, (uint64_t)key_with_account_prefix); - return JS_NewBigUint64(ctx, ret); -} - -static JSValue near_storage_has_key(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - const char *key_ptr; - size_t key_len; - uint64_t ret; - - key_ptr = JS_ToCStringLenRaw(ctx, &key_len, argv[0]); - ret = storage_has_key(key_len, (uint64_t)key_ptr); - return JS_NewBigUint64(ctx, ret); -} - -static void js_add_near_host_functions(JSContext* ctx); - -static void jsvm_call(uint64_t contract_len, char *contract, uint64_t method_len, char *method, uint64_t args_len, char *args, bool has_prev_call) -{ - char key[69]; - int has_read; - size_t code_len; - char *code; - - JSRuntime *rt; - JSContext *ctx; - JSValue mod_obj, fun_obj, result, error, error_message, error_stack; - const char *error_message_c, *error_stack_c; - char *error_c; - size_t msg_len, stack_len; - - char *prev_contract, *prev_method, *prev_args; - uint64_t prev_contract_len, prev_method_len, prev_args_len; - - if (has_prev_call) { - // called from a cross contract call - // keep track of previous contract name, method and args - input_js_contract_name(&prev_contract, &prev_contract_len, GET); - input_method_name(&prev_method, &prev_method_len, GET); - input_args(&prev_args, &prev_args_len, GET); - } - - input_js_contract_name(&contract, &contract_len, SET); - input_method_name(&method, &method_len, SET); - input_args(&args, &args_len, SET); - - strncpy(key, contract, contract_len); - strncpy(key+contract_len, "/code", 5); - has_read = storage_read(contract_len+5, (uint64_t)key, UINT64_MAX); - if (!has_read) { - panic_str("JS contract does not exist"); - } - code_len = register_len(UINT64_MAX); - code = malloc(code_len); - read_register(UINT64_MAX, (uint64_t)code); - - rt = JS_NewRuntime(); - ctx = JS_NewCustomContext(rt); - js_add_near_host_functions(ctx); - mod_obj = js_load_module_binary(ctx, (const uint8_t *)code, code_len); - fun_obj = JS_GetProperty(ctx, mod_obj, JS_NewAtom(ctx, method)); - result = JS_Call(ctx, fun_obj, mod_obj, 0, NULL); - if (JS_IsException(result)) { - error = JS_GetException(ctx); - error_message = JS_GetPropertyStr(ctx, error, "message"); - error_stack = JS_GetPropertyStr(ctx, error, "stack"); - error_message_c = JS_ToCStringLen(ctx, &msg_len, error_message); - error_stack_c = JS_ToCStringLen(ctx, &stack_len, error_stack); - error_c = malloc(msg_len+1+stack_len); - memcpy(error_c, error_message_c, msg_len); - error_c[msg_len] = '\n'; - strncpy(error_c+msg_len+1, error_stack_c, stack_len); - panic_utf8(msg_len+1+stack_len, (uint64_t)error_c); - } - js_std_loop(ctx); - - if (has_prev_call) { - // restore previous contract name, method and args - input_js_contract_name(&prev_contract, &prev_contract_len, SET); - input_method_name(&prev_method, &prev_method_len, SET); - input_args(&prev_args, &prev_args_len, SET); - } -} - -static JSValue near_jsvm_call(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - const char *contract_name_ptr, *method_name_ptr, *arguments_ptr; - char *call_ret; - size_t contract_name_len, method_name_len, arguments_len; - uint64_t register_id, ret_len; - - contract_name_ptr = JS_ToCStringLen(ctx, &contract_name_len, argv[0]); - method_name_ptr = JS_ToCStringLen(ctx, &method_name_len, argv[1]); - arguments_ptr = JS_ToCStringLenRaw(ctx, &arguments_len, argv[2]); - if (JS_ToUint64Ext(ctx, ®ister_id, argv[3]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); - } - - jsvm_call(contract_name_len, (char *)contract_name_ptr, method_name_len, (char *)method_name_ptr, arguments_len, (char *)arguments_ptr, true); - jsvm_call_returns(&call_ret, &ret_len, GET); - write_register(register_id, ret_len, (uint64_t)call_ret); - return JS_UNDEFINED; -} - -static JSValue near_validator_stake(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - const char *account_id_ptr; - size_t account_id_len; - uint64_t stake_ptr[2]; - - account_id_ptr = JS_ToCStringLen(ctx, &account_id_len, argv[0]); - validator_stake(account_id_len, (uint64_t)account_id_ptr, (uint64_t)stake_ptr); - - return u128_to_quickjs(ctx, stake_ptr); -} - -static JSValue near_validator_total_stake(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - uint64_t stake_ptr[2]; - - validator_total_stake((uint64_t)stake_ptr); - return u128_to_quickjs(ctx, stake_ptr); -} - -static JSValue near_storage_byte_cost(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) { - JSValue value; - bf_t *a; - - value = JS_NewBigInt(ctx); - a = JS_GetBigInt(value); - bf_atof(a, STORAGE_PRICE_PER_BYTE, NULL, 10, BF_PREC_INF, BF_RNDZ); - return value; -} - -#ifdef NIGHTLY -static JSValue near_alt_bn128_g1_multiexp(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - uint64_t register_id; - const char *data_ptr; - size_t data_len; - - data_ptr = JS_ToCStringLenRaw(ctx, &data_len, argv[0]); - if (JS_ToUint64Ext(ctx, ®ister_id, argv[1]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); - } - - alt_bn128_g1_multiexp(data_len, (uint64_t)data_ptr, register_id); - return JS_UNDEFINED; -} - -static JSValue near_alt_bn128_g1_sum(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - uint64_t register_id; - const char *data_ptr; - size_t data_len; - - data_ptr = JS_ToCStringLenRaw(ctx, &data_len, argv[0]); - if (JS_ToUint64Ext(ctx, ®ister_id, argv[1]) < 0) { - return JS_ThrowTypeError(ctx, "Expect Uint64 for register_id"); - } - - alt_bn128_g1_sum(data_len, (uint64_t)data_ptr, register_id); - return JS_UNDEFINED; -} - -static JSValue near_alt_bn128_pairing_check(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -{ - const char *data_ptr; - size_t data_len; - uint64_t ret; - - data_ptr = JS_ToCStringLenRaw(ctx, &data_len, argv[0]); - - ret = alt_bn128_pairing_check(data_len, (uint64_t)data_ptr); - return JS_NewBigUint64(ctx, ret); -} -#endif - -static JSValue near_debug_log(JSContext *ctx, JSValueConst this_val, int argc, JSValueConst *argv) -#ifdef SANDBOX -{ - const char *data_ptr; - size_t data_len; - - data_ptr = JS_ToCStringLen(ctx, &data_len, argv[0]); - - sandbox_debug_log(data_len, (uint64_t)data_ptr); - return JS_UNDEFINED; -} -#else -{ - return JS_UNDEFINED; -} -#endif - -static void js_add_near_host_functions(JSContext* ctx) { - JSValue global_obj, env; - - global_obj = JS_GetGlobalObject(ctx); - env = JS_NewObject(ctx); - - JS_SetPropertyStr(ctx, env, "read_register", JS_NewCFunction(ctx, near_read_register, "read_register", 1)); - JS_SetPropertyStr(ctx, env, "register_len", JS_NewCFunction(ctx, near_register_len, "register_len", 1)); - JS_SetPropertyStr(ctx, env, "write_register", JS_NewCFunction(ctx, near_write_register, "write_register", 2)); - JS_SetPropertyStr(ctx, env, "signer_account_id", JS_NewCFunction(ctx, near_signer_account_id, "signer_account_id", 1)); - JS_SetPropertyStr(ctx, env, "signer_account_pk", JS_NewCFunction(ctx, near_signer_account_pk, "signer_account_pk", 1)); - JS_SetPropertyStr(ctx, env, "predecessor_account_id", JS_NewCFunction(ctx, near_predecessor_account_id, "predecessor_account_id", 1)); - JS_SetPropertyStr(ctx, env, "block_index", JS_NewCFunction(ctx, near_block_index, "block_index", 0)); - JS_SetPropertyStr(ctx, env, "block_timestamp", JS_NewCFunction(ctx, near_block_timestamp, "block_timestamp", 0)); - JS_SetPropertyStr(ctx, env, "epoch_height", JS_NewCFunction(ctx, near_epoch_height, "epoch_height", 0)); - JS_SetPropertyStr(ctx, env, "attached_deposit", JS_NewCFunction(ctx, near_attached_deposit, "attached_deposit", 0)); - JS_SetPropertyStr(ctx, env, "prepaid_gas", JS_NewCFunction(ctx, near_prepaid_gas, "prepaid_gas", 0)); - JS_SetPropertyStr(ctx, env, "used_gas", JS_NewCFunction(ctx, near_used_gas, "used_gas", 0)); - JS_SetPropertyStr(ctx, env, "random_seed", JS_NewCFunction(ctx, near_random_seed, "random_seed", 1)); - JS_SetPropertyStr(ctx, env, "sha256", JS_NewCFunction(ctx, near_sha256, "sha256", 2)); - JS_SetPropertyStr(ctx, env, "keccak256", JS_NewCFunction(ctx, near_keccak256, "keccak256", 2)); - JS_SetPropertyStr(ctx, env, "keccak512", JS_NewCFunction(ctx, near_keccak512, "keccak512", 2)); - JS_SetPropertyStr(ctx, env, "ripemd160", JS_NewCFunction(ctx, near_ripemd160, "ripemd160", 2)); - JS_SetPropertyStr(ctx, env, "ecrecover", JS_NewCFunction(ctx, near_ecrecover, "ecrecover", 5)); - JS_SetPropertyStr(ctx, env, "panic", JS_NewCFunction(ctx, near_panic, "panic", 1)); - JS_SetPropertyStr(ctx, env, "panic_utf8", JS_NewCFunction(ctx, near_panic_utf8, "panic_utf8", 1)); - JS_SetPropertyStr(ctx, env, "log", JS_NewCFunction(ctx, near_log, "log", 1)); - JS_SetPropertyStr(ctx, env, "log_utf8", JS_NewCFunction(ctx, near_log_utf8, "log_utf8", 1)); - JS_SetPropertyStr(ctx, env, "log_utf16", JS_NewCFunction(ctx, near_log_utf16, "log_utf16", 1)); - JS_SetPropertyStr(ctx, env, "storage_read", JS_NewCFunction(ctx, near_storage_read, "storage_read", 2)); - JS_SetPropertyStr(ctx, env, "storage_has_key", JS_NewCFunction(ctx, near_storage_has_key, "storage_has_key", 1)); - JS_SetPropertyStr(ctx, env, "validator_stake", JS_NewCFunction(ctx, near_validator_stake, "validator_stake", 2)); - JS_SetPropertyStr(ctx, env, "validator_total_stake", JS_NewCFunction(ctx, near_validator_total_stake, "validator_total_stake", 1)); - #ifdef NIGHTLY - JS_SetPropertyStr(ctx, env, "alt_bn128_g1_multiexp", JS_NewCFunction(ctx, near_alt_bn128_g1_multiexp, "alt_bn128_g1_multiexp", 2)); - JS_SetPropertyStr(ctx, env, "alt_bn128_g1_sum", JS_NewCFunction(ctx, near_alt_bn128_g1_sum, "alt_bn128_g1_sum", 2)); - JS_SetPropertyStr(ctx, env, "alt_bn128_pairing_check", JS_NewCFunction(ctx, near_alt_bn128_pairing_check, "alt_bn128_pairing_check", 1)); - #endif - - // APIs that unique to JSVM - JS_SetPropertyStr(ctx, env, "jsvm_account_id", JS_NewCFunction(ctx, near_jsvm_account_id, "jsvm_account_id", 1)); - JS_SetPropertyStr(ctx, env, "jsvm_js_contract_name", JS_NewCFunction(ctx, near_jsvm_js_contract_name, "jsvm_js_contract_name", 1)); - JS_SetPropertyStr(ctx, env, "jsvm_method_name", JS_NewCFunction(ctx, near_jsvm_method_name, "jsvm_method_name", 1)); - JS_SetPropertyStr(ctx, env, "jsvm_args", JS_NewCFunction(ctx, near_jsvm_args, "jsvm_args", 1)); - JS_SetPropertyStr(ctx, env, "jsvm_storage_write", JS_NewCFunction(ctx, near_jsvm_storage_write, "jsvm_storage_write", 3)); - JS_SetPropertyStr(ctx, env, "jsvm_storage_read", JS_NewCFunction(ctx, near_jsvm_storage_read, "jsvm_storage_read", 2)); - JS_SetPropertyStr(ctx, env, "jsvm_storage_has_key", JS_NewCFunction(ctx, near_jsvm_storage_has_key, "jsvm_storage_has_key", 1)); - JS_SetPropertyStr(ctx, env, "jsvm_storage_remove", JS_NewCFunction(ctx, near_jsvm_storage_remove, "jsvm_storage_remove", 2)); - JS_SetPropertyStr(ctx, env, "jsvm_value_return", JS_NewCFunction(ctx, near_jsvm_value_return, "jsvm_value_return", 1)); - JS_SetPropertyStr(ctx, env, "jsvm_call", JS_NewCFunction(ctx, near_jsvm_call, "jsvm_call", 4)); - - JS_SetPropertyStr(ctx, global_obj, "env", env); - - JSValue debug = JS_NewObject(ctx); - JS_SetPropertyStr(ctx, debug, "log", JS_NewCFunction(ctx, near_debug_log, "log", 1)); - JS_SetPropertyStr(ctx, global_obj, "debug", debug); -} - -JSValue JS_Call(JSContext *ctx, JSValueConst func_obj, JSValueConst this_obj, - int argc, JSValueConst *argv); - -void _start() {} - -void deploy_js_contract () __attribute__((export_name("deploy_js_contract"))) { - char account[64], *code; - size_t account_len, code_len; - char key[69]; - - predecessor_account_id(0); - read_register(0, (uint64_t)account); - account_len = register_len(0); - - input(1); - code_len = register_len(1); - code = malloc(code_len); - read_register(1, (uint64_t)code); - strncpy(key, account, account_len); - strncpy(key+account_len, "/code", 5); - storage_write_enclave(account_len+5, (uint64_t)key, code_len, (uint64_t)code, 2); - refund_storage_deposit(); -} - -void remove_js_contract () __attribute__((export_name("remove_js_contract"))) { - char account[64]; - size_t account_len; - char key[69]; - - predecessor_account_id(0); - read_register(0, (uint64_t)account); - account_len = register_len(0); - strncpy(key, account, account_len); - strncpy(key+account_len, "/code", 5); - storage_remove_enclave(account_len+5, (uint64_t)key, 1); - refund_storage_deposit(); -} - -static void call_js_contract_internal() { - char *in, *contract, *method, *args; - uint64_t contract_len = 0, method_len = 0, args_len = 0; - size_t in_len; - - input(0); - in_len = register_len(0); - in = malloc(in_len); - read_register(0, (uint64_t)in); - for (size_t i = 0; i < in_len; i++) { - if (in[i] == '\0') { - contract_len = i; - contract = in; - break; - } - } - for (size_t i = contract_len+1; i < in_len; i++) { - if (in[i] == '\0') { - method = in + contract_len + 1; - method_len = i - contract_len - 1; - args_len = in_len - contract_len - method_len - 2; - args = in + i + 1; - break; - } - } - - if (contract_len == 0) { - panic_str("JS contract name is empty"); - } - if (contract_len > 64) { - panic_str("JS contract name is too long, invalid NEAR account"); - } - if (method_len == 0) { - panic_str("method name is empty"); - } - - jsvm_call(contract_len, contract, method_len, method, args_len, args, false); -} - -void call_js_contract () __attribute__((export_name("call_js_contract"))) { - call_js_contract_internal(); - refund_storage_deposit(); -} - -void view_js_contract () __attribute__((export_name("view_js_contract"))) { - call_js_contract_internal(); -} \ No newline at end of file diff --git a/jsvm/tests/.gitignore b/jsvm/tests/.gitignore deleted file mode 100644 index b7dab5e9..00000000 --- a/jsvm/tests/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -build \ No newline at end of file diff --git a/jsvm/tests/README.md b/jsvm/tests/README.md deleted file mode 100644 index 95f17681..00000000 --- a/jsvm/tests/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# NEAR-SDK-JS Tests - -This tests the functionality of high level APIs of NEAR-SDK-JS. Currently, it directly tests all collections and indirectly tests all decorators, serialization/deserialization, utils, code generation and some important APIs. Majority of near-sdk-js can be seen as tested. - -# Run tests -``` -yarn -yarn build -yarn test -``` - -# Add a new test - -Create a test contract that covers the API you want to test in `src/`. Add a build command in `build.sh`. Write ava test in `__tests__`. \ No newline at end of file diff --git a/jsvm/tests/__tests__/bytes.ava.js b/jsvm/tests/__tests__/bytes.ava.js deleted file mode 100644 index 08314afe..00000000 --- a/jsvm/tests/__tests__/bytes.ava.js +++ /dev/null @@ -1,224 +0,0 @@ -import { Worker } from 'near-workspaces'; -import { readFile } from 'fs/promises' -import test from 'ava'; - -function encodeCall(contract, method, args) { - return Buffer.concat([Buffer.from(contract), Buffer.from([0]), Buffer.from(method), Buffer.from([0]), Buffer.from(JSON.stringify(args))]) -} - -test.beforeEach(async t => { - // Init the worker and start a Sandbox server - const worker = await Worker.init(); - - // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount; - - // Deploy the jsvm contract. - const jsvm = await root.devDeploy( - '../../jsvm/build/jsvm.wasm', - ); - - // Deploy test JS contract - const testContract = await root.createSubAccount('test-contract'); - let contract_base64 = (await readFile('build/bytes.base64')).toString(); - await testContract.call(jsvm, 'deploy_js_contract', Buffer.from(contract_base64, 'base64'), { attachedDeposit: '400000000000000000000000' }); - - // Test users - const ali = await root.createSubAccount('ali'); - - // Save state for test runs - t.context.worker = worker; - t.context.accounts = { root, jsvm, testContract, ali }; -}); - -test.afterEach(async t => { - await t.context.worker.tearDown().catch(error => { - console.log('Failed to tear down the worker:', error); - }); -}); - - -test('Log expected types work', async t => { - const { jsvm, ali, testContract } = t.context.accounts; - - let r = await ali.callRaw(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'log_expected_input_tests', ''), { attachedDeposit: '100000000000000000000000' }); - t.deepEqual( - r.result.receipts_outcome[0].outcome.logs, - [ - "abc", - "æ°´", - "333", - '\x00\x01\xff', - '\xe6\xb0\xb4', - "æ°´", - "æ°´" - ] - ); -}); - -test('Log unexpected types not logging', async t => { - const { jsvm, ali, testContract } = t.context.accounts; - - let r = await ali.callRaw(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'log_unexpected_input_tests', ''), { attachedDeposit: '100000000000000000000000' }); - // logUtf8 and logUtf16 only works with bytes, trying to log it with string is unexpected and behavior is undefined - // in this specific case, it logs nothing - t.deepEqual( - r.result.receipts_outcome[0].outcome.logs, - [ - "", - "", - ] - ); -}); - -test('Log invalid utf-8 sequence panic', async t => { - const { jsvm, ali, testContract } = t.context.accounts; - - let r = await ali.callRaw(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'log_invalid_utf8_sequence_test', ''), { attachedDeposit: '100000000000000000000000' }); - // console.log(JSON.stringify(r, null, 2)) - t.deepEqual( - r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError, - 'String encoding is bad UTF-8 sequence.' - ); -}); - -test('Log invalid utf-16 sequence panic', async t => { - const { jsvm, ali, testContract } = t.context.accounts; - - let r = await ali.callRaw(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'log_invalid_utf16_sequence_test', ''), { attachedDeposit: '100000000000000000000000' }); - t.deepEqual( - r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError, - 'String encoding is bad UTF-16 sequence.' - ); -}); - -function encodeStateKey(k) { - return Buffer.concat([Buffer.from('test-contract.test.near/state/'), Buffer.from(k)]).toString('base64') -} - -test('storage write bytes tests', async t => { - const { jsvm, ali, testContract } = t.context.accounts; - - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'storage_write_bytes', ''), { attachedDeposit: '100000000000000000000000' }); - let stateMap = new Map() - // viewState doesn't work, because it tries to convert key to utf-8 string, which is not - let state = await jsvm.viewStateRaw() - for (let {key, value} of state) { - stateMap.set(key, value) - } - - t.deepEqual( - stateMap.get(encodeStateKey('abc')), - Buffer.from('def').toString('base64') - ); - t.deepEqual( - stateMap.get(encodeStateKey([0x00, 0x01, 0xff])), - Buffer.from([0xe6, 0xb0, 0xb4]).toString('base64') - ); - t.deepEqual( - stateMap.get(encodeStateKey([0xe6, 0xb0, 0xb4])), - Buffer.from([0x00, 'a'.charCodeAt(0), 'b'.charCodeAt(0)]).toString('base64') - ); -}); - -test('storage write unexpected types tests', async t => { - const { jsvm, ali, testContract } = t.context.accounts; - - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'storage_write_unexpected_input', ''), { attachedDeposit: '100000000000000000000000' }); - let stateMap = new Map() - // viewState doesn't work, because it tries to convert key to utf-8 string, which is not - let state = await jsvm.viewStateRaw() - for (let {key, value} of state) { - stateMap.set(key, value) - } - console.log(await jsvm.viewState()) - - t.deepEqual( - stateMap.get(encodeStateKey('123')), - Buffer.from('456').toString('base64') - ); - // pass in utf-8 string instead of bytes, key and value become empty - t.deepEqual( - stateMap.get(encodeStateKey([0xe6, 0xb0, 0xb4])), - undefined - ); - t.deepEqual( - stateMap.get(encodeStateKey([])), - '' - ); -}); - -test('Storage read bytes tests', async t => { - const { jsvm, ali, testContract } = t.context.accounts; - - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'storage_write_bytes', ''), { attachedDeposit: '100000000000000000000000' }); - let r = await jsvm.viewRaw('view_js_contract', encodeCall(testContract.accountId, 'storage_read_ascii_bytes', '')) - console.log(r) - t.deepEqual( - r.result, - [100, 101, 102] - ); - - r = await jsvm.viewRaw('view_js_contract', encodeCall(testContract.accountId, 'storage_read_arbitrary_bytes_key_utf8_sequence_bytes_value', '')) - t.deepEqual( - r.result, - [0xe6, 0xb0, 0xb4] - ); - - r = await jsvm.viewRaw('view_js_contract', encodeCall(testContract.accountId, 'storage_read_utf8_sequence_bytes_key_arbitrary_bytes_value', '')) - t.deepEqual( - r.result, - [0x00, 'a'.charCodeAt(0), 'b'.charCodeAt(0)] - ); -}); - -test('panic tests', async t => { - const { jsvm, ali, testContract } = t.context.accounts; - let r = await ali.callRaw(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'panic_test', '')); - t.deepEqual( - r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError, - 'Smart contract panicked: explicit guest panic' - ); - - r = await ali.callRaw(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'panic_ascii_test', '')); - t.deepEqual( - r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError, - 'Smart contract panicked: abc' - ); - - r = await ali.callRaw(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'panic_js_number', '')); - t.deepEqual( - r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError, - 'Smart contract panicked: 356' - ); - - r = await ali.callRaw(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'panic_js_undefined', '')); - t.deepEqual( - r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError, - 'Smart contract panicked: explicit guest panic' - ); - - r = await ali.callRaw(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'panic_js_null', '')); - t.deepEqual( - r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError, - 'Smart contract panicked: null' - ); - - r = await ali.callRaw(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'panic_utf8_test', '')); - t.deepEqual( - r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError, - 'Smart contract panicked: æ°´' - ); - - r = await ali.callRaw(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'panicUtf8_valid_utf8_sequence', '')); - t.deepEqual( - r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError, - 'Smart contract panicked: æ°´' - ); - - r = await ali.callRaw(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'panicUtf8_invalid_utf8_sequence', '')); - t.deepEqual( - r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError, - 'String encoding is bad UTF-8 sequence.' - ); -}) \ No newline at end of file diff --git a/jsvm/tests/__tests__/function-params.ava.js b/jsvm/tests/__tests__/function-params.ava.js deleted file mode 100644 index ff325afe..00000000 --- a/jsvm/tests/__tests__/function-params.ava.js +++ /dev/null @@ -1,53 +0,0 @@ -import { Worker } from 'near-workspaces'; -import { readFile } from 'fs/promises' -import test from 'ava'; - -function encodeCall(contract, method, args) { - return Buffer.concat([Buffer.from(contract), Buffer.from([0]), Buffer.from(method), Buffer.from([0]), Buffer.from(JSON.stringify(args))]) -} - -test.beforeEach(async t => { - // Init the worker and start a Sandbox server - const worker = await Worker.init(); - - // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount; - - // Deploy the jsvm contract. - const jsvm = await root.devDeploy( - '../../jsvm/build/jsvm.wasm', - ); - - // Deploy test JS contract - const testContract = await root.createSubAccount('test-contract'); - let contract_base64 = (await readFile('build/function-params.base64')).toString(); - await testContract.call(jsvm, 'deploy_js_contract', Buffer.from(contract_base64, 'base64'), { attachedDeposit: '400000000000000000000000' }); - await testContract.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'init', {}), { attachedDeposit: '400000000000000000000000' }); - - // Test users - const ali = await root.createSubAccount('ali'); - const bob = await root.createSubAccount('bob'); - const carl = await root.createSubAccount('carl'); - - // Save state for test runs - t.context.worker = worker; - t.context.accounts = { root, jsvm, testContract, ali, bob, carl }; -}); - -test.afterEach(async t => { - await t.context.worker.tearDown().catch(error => { - console.log('Failed to tear down the worker:', error); - }); -}); - - -test('Developer can pass parameters as dictionary', async t => { - const { ali, jsvm, testContract } = t.context.accounts; - - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'set_values', { param1: 'newVal1', param2: 'newVal2', param3: 'newVal3' }), { attachedDeposit: '100000000000000000000000' }); - - t.deepEqual( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'get_values', {})), - { val3: 'newVal3', val2: 'newVal2', val1: 'newVal1' } - ); -}); diff --git a/jsvm/tests/__tests__/lookup-map.ava.js b/jsvm/tests/__tests__/lookup-map.ava.js deleted file mode 100644 index d566316f..00000000 --- a/jsvm/tests/__tests__/lookup-map.ava.js +++ /dev/null @@ -1,116 +0,0 @@ -import { Worker } from 'near-workspaces'; -import { readFile } from 'fs/promises' -import test from 'ava'; - -function encodeCall(contract, method, args) { - return Buffer.concat([Buffer.from(contract), Buffer.from([0]), Buffer.from(method), Buffer.from([0]), Buffer.from(JSON.stringify(args))]) -} - -test.beforeEach(async t => { - // Init the worker and start a Sandbox server - const worker = await Worker.init(); - - // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount; - - // Deploy the jsvm contract. - const jsvm = await root.devDeploy( - '../../jsvm/build/jsvm.wasm', - ); - - // Deploy test JS contract - const testContract = await root.createSubAccount('test-contract'); - let contract_base64 = (await readFile('build/lookup-map.base64')).toString(); - await testContract.call(jsvm, 'deploy_js_contract', Buffer.from(contract_base64, 'base64'), { attachedDeposit: '400000000000000000000000' }); - await testContract.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'init', {}), { attachedDeposit: '400000000000000000000000' }); - - // Test users - const ali = await root.createSubAccount('ali'); - const bob = await root.createSubAccount('bob'); - const carl = await root.createSubAccount('carl'); - - // Save state for test runs - t.context.worker = worker; - t.context.accounts = { root, jsvm, testContract, ali, bob, carl }; -}); - -test.afterEach(async t => { - await t.context.worker.tearDown().catch(error => { - console.log('Failed to tear down the worker:', error); - }); -}); - -test('LookupMap set() get()', async t => { - const { ali, jsvm, testContract } = t.context.accounts; - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'get', { key: 'hello' })), - null - ); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'containsKey', { key: 'hello' })), - false - ); - - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'set', { key: 'hello', value: 'world' }), { attachedDeposit: '100000000000000000000000' }); - - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'get', { key: 'hello' })), - 'world' - ); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'containsKey', { key: 'hello' })), - true - ); -}); - - -test('LookupMap update, remove', async t => { - const { ali, jsvm, testContract } = t.context.accounts; - - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'set', { key: 'hello', value: 'world' }), { attachedDeposit: '100000000000000000000000' }); - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'set', { key: 'hello1', value: 'world0' }), { attachedDeposit: '100000000000000000000000' }); - - // update a value, len shouldn't change - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'set', { key: 'hello1', value: 'world1' }), { attachedDeposit: '100000000000000000000000' }); - // update should have effect - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'get', { key: 'hello1' })), - 'world1' - ); - // not update key should not changed - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'get', { key: 'hello' })), - 'world' - ); - // remove non existing element should not error - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'remove', { key: 'hello3' }), { attachedDeposit: '100000000000000000000000' }); - // remove existing key should work - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'remove', { key: 'hello1' })); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'containsKey', { key: 'hello1' })), - false - ); - // not removed key should not affected - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'get', { key: 'hello' })), - 'world' - ); -}); - -test('LookupMap extend', async t => { - const { ali, jsvm, testContract } = t.context.accounts; - - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'extend', { kvs: [['hello', 'world'], ['hello1', 'world1'], ['hello2', 'world2']] }), { attachedDeposit: '100000000000000000000000' }); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'get', { key: 'hello' })), - 'world' - ); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'get', { key: 'hello1' })), - 'world1' - ); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'get', { key: 'hello2' })), - 'world2' - ); -}) \ No newline at end of file diff --git a/jsvm/tests/__tests__/lookup-set.ava.js b/jsvm/tests/__tests__/lookup-set.ava.js deleted file mode 100644 index 02054844..00000000 --- a/jsvm/tests/__tests__/lookup-set.ava.js +++ /dev/null @@ -1,96 +0,0 @@ -import { Worker } from 'near-workspaces'; -import { readFile } from 'fs/promises' -import test from 'ava'; - -function encodeCall(contract, method, args) { - return Buffer.concat([Buffer.from(contract), Buffer.from([0]), Buffer.from(method), Buffer.from([0]), Buffer.from(JSON.stringify(args))]) -} - -test.beforeEach(async t => { - // Init the worker and start a Sandbox server - const worker = await Worker.init(); - - // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount; - - // Deploy the jsvm contract. - const jsvm = await root.devDeploy( - '../../jsvm/build/jsvm.wasm', - ); - - // Deploy test JS contract - const testContract = await root.createSubAccount('test-contract'); - let contract_base64 = (await readFile('build/lookup-set.base64')).toString(); - await testContract.call(jsvm, 'deploy_js_contract', Buffer.from(contract_base64, 'base64'), { attachedDeposit: '400000000000000000000000' }); - await testContract.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'init', {}), { attachedDeposit: '400000000000000000000000' }); - - // Test users - const ali = await root.createSubAccount('ali'); - const bob = await root.createSubAccount('bob'); - const carl = await root.createSubAccount('carl'); - - // Save state for test runs - t.context.worker = worker; - t.context.accounts = { root, jsvm, testContract, ali, bob, carl }; -}); - -test.afterEach(async t => { - await t.context.worker.tearDown().catch(error => { - console.log('Failed to tear down the worker:', error); - }); -}); - -test('LookupSet set() contains()', async t => { - const { ali, jsvm, testContract } = t.context.accounts; - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'contains', { key: 'hello' })), - false - ); - - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'set', { key: 'hello' }), { attachedDeposit: '100000000000000000000000' }); - - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'contains', { key: 'hello' })), - true - ); -}); - - -test('LookupSet remove', async t => { - const { ali, jsvm, testContract } = t.context.accounts; - - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'set', { key: 'hello' }), { attachedDeposit: '100000000000000000000000' }); - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'set', { key: 'hello1' }), { attachedDeposit: '100000000000000000000000' }); - - // remove non existing element should not error - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'remove', { key: 'hello3' }), { attachedDeposit: '100000000000000000000000' }); - // remove existing key should work - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'remove', { key: 'hello1' })); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'contains', { key: 'hello1' })), - false - ); - // not removed key should not affected - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'contains', { key: 'hello' })), - true - ); -}); - -test('LookupSet extend', async t => { - const { ali, jsvm, testContract } = t.context.accounts; - - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'extend', { keys: ['hello', 'world', 'hello1'] }), { attachedDeposit: '100000000000000000000000' }); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'contains', { key: 'hello' })), - true - ); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'contains', { key: 'hello1' })), - true - ); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'contains', { key: 'world' })), - true - ); -}) \ No newline at end of file diff --git a/jsvm/tests/__tests__/unordered-map.ava.js b/jsvm/tests/__tests__/unordered-map.ava.js deleted file mode 100644 index a70bd7d3..00000000 --- a/jsvm/tests/__tests__/unordered-map.ava.js +++ /dev/null @@ -1,180 +0,0 @@ -import { Worker } from 'near-workspaces'; -import { readFile } from 'fs/promises' -import test from 'ava'; - -function encodeCall(contract, method, args) { - return Buffer.concat([Buffer.from(contract), Buffer.from([0]), Buffer.from(method), Buffer.from([0]), Buffer.from(JSON.stringify(args))]) -} - -test.beforeEach(async t => { - // Init the worker and start a Sandbox server - const worker = await Worker.init(); - - // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount; - - // Deploy the jsvm contract. - const jsvm = await root.devDeploy( - '../../jsvm/build/jsvm.wasm', - ); - - // Deploy test JS contract - const testContract = await root.createSubAccount('test-contract'); - let contract_base64 = (await readFile('build/unordered-map.base64')).toString(); - await testContract.call(jsvm, 'deploy_js_contract', Buffer.from(contract_base64, 'base64'), { attachedDeposit: '400000000000000000000000' }); - await testContract.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'init', {}), { attachedDeposit: '400000000000000000000000' }); - - // Test users - const ali = await root.createSubAccount('ali'); - const bob = await root.createSubAccount('bob'); - const carl = await root.createSubAccount('carl'); - - // Save state for test runs - t.context.worker = worker; - t.context.accounts = { root, jsvm, testContract, ali, bob, carl }; -}); - -test.afterEach(async t => { - await t.context.worker.tearDown().catch(error => { - console.log('Failed to tear down the worker:', error); - }); -}); - -test('UnorderedMap is empty by default', async t => { - const { root, jsvm, testContract } = t.context.accounts; - const result = await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'len', {})); - t.is(result, 0); -}); - -test('UnorderedMap set() get()', async t => { - const { ali, jsvm, testContract } = t.context.accounts; - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'get', { key: 'hello' })), - null - ); - - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'set', { key: 'hello', value: 'world' }), { attachedDeposit: '100000000000000000000000' }); - - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'get', { key: 'hello' })), - 'world' - ); -}); - - -test('UnorderedMap insert, update, len and iterate', async t => { - const { ali, jsvm, testContract } = t.context.accounts; - - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'len', {})), - 0 - ); - t.deepEqual( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'toArray', {})), - [] - ); - - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'set', { key: 'hello', value: 'world' }), { attachedDeposit: '100000000000000000000000' }); - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'set', { key: 'hello1', value: 'world0' }), { attachedDeposit: '100000000000000000000000' }); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'len', {})), - 2 - ); - - // update a value, len shouldn't change - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'set', { key: 'hello1', value: 'world1' }), { attachedDeposit: '100000000000000000000000' }); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'len', {})), - 2 - ); - // update should have effect - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'get', { key: 'hello1' })), - 'world1' - ); - - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'set', { key: 'hello2', value: 'world2' }), { attachedDeposit: '100000000000000000000000' }); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'len', {})), - 3 - ); - - // Try to set a key with same value, len shouldn't change - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'set', { key: 'hello2', value: 'world2' }), { attachedDeposit: '100000000000000000000000' }); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'len', {})), - 3 - ); - - t.deepEqual( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'toArray', {})), - [['hello', 'world'], ['hello1', 'world1'], ['hello2', 'world2']] - ); -}); - -test('UnorderedMap extend, remove, clear', async t => { - const { ali, jsvm, testContract } = t.context.accounts; - - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'extend', { kvs: [['hello', 'world'], ['hello1', 'world1'], ['hello2', 'world2']] }), { attachedDeposit: '100000000000000000000000' }); - - t.deepEqual( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'toArray', {})), - [['hello', 'world'], ['hello1', 'world1'], ['hello2', 'world2']] - ); - - // remove non existing element should not error - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'remove', { key: 'hello3' }), { attachedDeposit: '100000000000000000000000' }); - t.deepEqual( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'toArray', {})), - [['hello', 'world'], ['hello1', 'world1'], ['hello2', 'world2']] - ); - - // remove not the last one should work - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'remove', { key: 'hello' }), { attachedDeposit: '100000000000000000000000' }); - t.deepEqual( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'toArray', {})), - [['hello2', 'world2'], ['hello1', 'world1']] - ); - - // remove the last one should work - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'remove', { key: 'hello1' }), { attachedDeposit: '100000000000000000000000' }); - t.deepEqual( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'toArray', {})), - [['hello2', 'world2']] - ); - - // remove when length is 1 should work - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'len', {})), - 1 - ); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'isEmpty', {})), - false - ); - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'remove', { key: 'hello2' }), { attachedDeposit: '100000000000000000000000' }); - t.deepEqual( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'toArray', {})), - [] - ); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'isEmpty', {})), - true - ); - - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'extend', { kvs: [['hello', 'world'], ['hello1', 'world1'], ['hello2', 'world2']] }), { attachedDeposit: '100000000000000000000000' }); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'isEmpty', {})), - false - ); - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'clear', {}), { attachedDeposit: '100000000000000000000000' }); - - t.deepEqual( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'toArray', {})), - [] - ); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'isEmpty', {})), - true - ); -}) \ No newline at end of file diff --git a/jsvm/tests/__tests__/unordered-set.ava.js b/jsvm/tests/__tests__/unordered-set.ava.js deleted file mode 100644 index c0b5112b..00000000 --- a/jsvm/tests/__tests__/unordered-set.ava.js +++ /dev/null @@ -1,174 +0,0 @@ -import { Worker } from 'near-workspaces'; -import { readFile } from 'fs/promises' -import test from 'ava'; - -function encodeCall(contract, method, args) { - return Buffer.concat([Buffer.from(contract), Buffer.from([0]), Buffer.from(method), Buffer.from([0]), Buffer.from(JSON.stringify(args))]) -} - -test.beforeEach(async t => { - // Init the worker and start a Sandbox server - const worker = await Worker.init(); - - // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount; - - // Deploy the jsvm contract. - const jsvm = await root.devDeploy( - '../../jsvm/build/jsvm.wasm', - ); - - // Deploy test JS contract - const testContract = await root.createSubAccount('test-contract'); - let contract_base64 = (await readFile('build/unordered-set.base64')).toString(); - await testContract.call(jsvm, 'deploy_js_contract', Buffer.from(contract_base64, 'base64'), { attachedDeposit: '400000000000000000000000' }); - await testContract.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'init', {}), { attachedDeposit: '400000000000000000000000' }); - - // Test users - const ali = await root.createSubAccount('ali'); - const bob = await root.createSubAccount('bob'); - const carl = await root.createSubAccount('carl'); - - // Save state for test runs - t.context.worker = worker; - t.context.accounts = { root, jsvm, testContract, ali, bob, carl }; -}); - -test.afterEach(async t => { - await t.context.worker.tearDown().catch(error => { - console.log('Failed to tear down the worker:', error); - }); -}); - -test('UnorderedSet is empty by default', async t => { - const { root, jsvm, testContract } = t.context.accounts; - const result = await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'len', {})); - t.is(result, 0); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'isEmpty', {})), - true - ); -}); - -test('UnorderedSet set() contains()', async t => { - const { ali, jsvm, testContract } = t.context.accounts; - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'contains', { element: 'hello' })), - false - ); - - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'set', { element: 'hello' }), { attachedDeposit: '100000000000000000000000' }); - - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'contains', { element: 'hello' })), - true - ); -}); - - -test('UnorderedSet insert, len and iterate', async t => { - const { ali, jsvm, testContract } = t.context.accounts; - - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'len', {})), - 0 - ); - t.deepEqual( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'toArray', {})), - [] - ); - - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'set', { element: 'hello' }), { attachedDeposit: '100000000000000000000000' }); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'len', {})), - 1 - ); - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'set', { element: 'hello1' }), { attachedDeposit: '100000000000000000000000' }); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'len', {})), - 2 - ); - - // insert the same value, len shouldn't change - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'set', { element: 'hello1' }), { attachedDeposit: '100000000000000000000000' }); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'len', {})), - 2 - ); - - t.deepEqual( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'toArray', {})), - ['hello', 'hello1'] - ); -}); - -test('UnorderedSet extend, remove, clear', async t => { - const { ali, jsvm, testContract } = t.context.accounts; - - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'extend', { elements: ['hello', 'world', 'hello1'] }), { attachedDeposit: '100000000000000000000000' }); - - t.deepEqual( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'toArray', {})), - ['hello', 'world', 'hello1'] - ); - - // remove non existing element should not error - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'remove', { element: 'hello3' }), { attachedDeposit: '100000000000000000000000' }); - t.deepEqual( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'toArray', {})), - ['hello', 'world', 'hello1'] - ); - - // remove not the last one should work - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'remove', { element: 'hello' }), { attachedDeposit: '100000000000000000000000' }); - t.deepEqual( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'toArray', {})), - ['hello1', 'world'] - ); - - // remove the last one should work - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'remove', { element: 'world' }), { attachedDeposit: '100000000000000000000000' }); - t.deepEqual( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'toArray', {})), - ['hello1'] - ); - - // remove when length is 1 should work - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'len', {})), - 1 - ); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'isEmpty', {})), - false - ); - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'remove', { element: 'hello1' }), { attachedDeposit: '100000000000000000000000' }); - t.deepEqual( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'toArray', {})), - [] - ); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'isEmpty', {})), - true - ); - - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'extend', { elements: ['hello', 'world', 'hello1'] }), { attachedDeposit: '100000000000000000000000' }); - t.deepEqual( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'toArray', {})), - ['hello', 'world', 'hello1'] - ); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'isEmpty', {})), - false - ); - // clear should work - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'clear', {}), { attachedDeposit: '100000000000000000000000' }); - t.deepEqual( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'toArray', {})), - [] - ); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'isEmpty', {})), - true - ); -}) \ No newline at end of file diff --git a/jsvm/tests/__tests__/vector.ava.js b/jsvm/tests/__tests__/vector.ava.js deleted file mode 100644 index c6c35fc9..00000000 --- a/jsvm/tests/__tests__/vector.ava.js +++ /dev/null @@ -1,159 +0,0 @@ -import { Worker } from 'near-workspaces'; -import { readFile } from 'fs/promises' -import test from 'ava'; - -function encodeCall(contract, method, args) { - return Buffer.concat([Buffer.from(contract), Buffer.from([0]), Buffer.from(method), Buffer.from([0]), Buffer.from(JSON.stringify(args))]) -} - -test.beforeEach(async t => { - // Init the worker and start a Sandbox server - const worker = await Worker.init(); - - // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount; - - // Deploy the jsvm contract. - const jsvm = await root.devDeploy( - '../../jsvm/build/jsvm.wasm', - ); - - // Deploy test JS contract - const testContract = await root.createSubAccount('test-contract'); - let contract_base64 = (await readFile('build/vector.base64')).toString(); - await testContract.call(jsvm, 'deploy_js_contract', Buffer.from(contract_base64, 'base64'), { attachedDeposit: '400000000000000000000000' }); - await testContract.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'init', {}), { attachedDeposit: '400000000000000000000000' }); - - // Test users - const ali = await root.createSubAccount('ali'); - const bob = await root.createSubAccount('bob'); - const carl = await root.createSubAccount('carl'); - - // Save state for test runs - t.context.worker = worker; - t.context.accounts = { root, jsvm, testContract, ali, bob, carl }; -}); - -test.afterEach(async t => { - await t.context.worker.tearDown().catch(error => { - console.log('Failed to tear down the worker:', error); - }); -}); - -test('Vector is empty by default', async t => { - const { root, jsvm, testContract } = t.context.accounts; - let result = await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'len', {})); - t.is(result, 0); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'isEmpty', {})), - true - ); -}); - -test('Vector push, get, pop, replace', async t => { - const { ali, jsvm, testContract } = t.context.accounts; - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'push', { value: 'hello' }), { attachedDeposit: '100000000000000000000000' }); - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'push', { value: 'world' }), { attachedDeposit: '100000000000000000000000' }); - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'push', { value: 'aaa' }), { attachedDeposit: '100000000000000000000000' }); - let result = await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'len', {})); - t.is(result, 3); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'get', { index: 0 })), - 'hello' - ); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'get', { index: 2 })), - 'aaa' - ); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'get', { index: 3 })), - null - ); - - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'pop', {})); - result = await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'len', {})); - t.is(result, 2); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'get', { index: 2 })), - null - ); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'get', { index: 1 })), - 'world' - ); - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'replace', { index: 1, value: 'aaa' }), { attachedDeposit: '100000000000000000000000' }); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'get', { index: 1 })), - 'aaa' - ); -}); - -test('Vector extend, toArray, swapRemove, clear', async t => { - const { ali, jsvm, testContract } = t.context.accounts; - - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'extend', { kvs: ['hello', 'world', 'aaa'] }), { attachedDeposit: '100000000000000000000000' }); - - t.deepEqual( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'toArray', {})), - ['hello', 'world', 'aaa'] - ); - - // swapRemove non existing element should error - const error1 = await t.throwsAsync(() => ali.call( - jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'swapRemove', { index: 3 }) - )); - t.assert(error1.message.includes(`Index out of bounds`)); - t.deepEqual( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'toArray', {})), - ['hello', 'world', 'aaa'] - ); - - // swapRemove not the last one should work - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'swapRemove', { index: 0 })); - t.deepEqual( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'toArray', {})), - ['aaa', 'world'] - ); - - // swapRemove the last one should work - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'swapRemove', { index: 1 })); - t.deepEqual( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'toArray', {})), - ['aaa'] - ); - - // swapRemove when length is 1 should work - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'len', {})), - 1 - ); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'isEmpty', {})), - false - ); - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'swapRemove', { index: 0 }), { attachedDeposit: '100000000000000000000000' }); - t.deepEqual( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'toArray', {})), - [] - ); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'isEmpty', {})), - true - ); - - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'extend', { kvs: ['hello', 'world', 'aaa'] }), { attachedDeposit: '100000000000000000000000' }); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'isEmpty', {})), - false - ); - await ali.call(jsvm, 'call_js_contract', encodeCall(testContract.accountId, 'clear', {}), { attachedDeposit: '100000000000000000000000' }); - - t.deepEqual( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'toArray', {})), - [] - ); - t.is( - await jsvm.view('view_js_contract', encodeCall(testContract.accountId, 'isEmpty', {})), - true - ); -}) \ No newline at end of file diff --git a/jsvm/tests/ava.config.cjs b/jsvm/tests/ava.config.cjs deleted file mode 100644 index a100daf6..00000000 --- a/jsvm/tests/ava.config.cjs +++ /dev/null @@ -1,8 +0,0 @@ -require('util').inspect.defaultOptions.depth = 5; // Increase AVA's printing depth - -module.exports = { - timeout: '300000', - files: ['**/*.ava.js'], - failWithoutAssertions: false, - extensions: ['js'], -}; diff --git a/jsvm/tests/babel.config.json b/jsvm/tests/babel.config.json deleted file mode 100644 index 76a04fe0..00000000 --- a/jsvm/tests/babel.config.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "plugins": [ - "near-sdk-js/lib/build-tools/near-bindgen-exporter", - ["@babel/plugin-proposal-decorators", {"version": "legacy"}] - ] -} diff --git a/jsvm/tests/build.sh b/jsvm/tests/build.sh deleted file mode 100755 index ce767b5f..00000000 --- a/jsvm/tests/build.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash -## Run this script with `npm run build` - -near-sdk-js build src/unordered-map.js build/unordered-map.base64 -near-sdk-js build src/vector.js build/vector.base64 -near-sdk-js build src/lookup-map.js build/lookup-map.base64 -near-sdk-js build src/lookup-set.js build/lookup-set.base64 -near-sdk-js build src/unordered-set.js build/unordered-set.base64 -near-sdk-js build src/function-params.js build/function-params.base64 -near-sdk-js build src/bytes.js build/bytes.base64 \ No newline at end of file diff --git a/jsvm/tests/jsconfig.json b/jsvm/tests/jsconfig.json deleted file mode 100644 index d49b0207..00000000 --- a/jsvm/tests/jsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "compilerOptions": { - "experimentalDecorators": true, - }, - "exclude": [ - "node_modules" - ], -} \ No newline at end of file diff --git a/jsvm/tests/package.json b/jsvm/tests/package.json deleted file mode 100644 index fea94d4a..00000000 --- a/jsvm/tests/package.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "name": "tests", - "version": "1.0.0", - "description": "near-sdk-js tests", - "main": "index.js", - "type": "module", - "scripts": { - "build": "./build.sh", - "rebuild": "cd ../../ && yarn build && cd jsvm/tests && rm -rf node_modules && rm -rf build && yarn && yarn build", - "test": "ava" - }, - "author": "Near Inc ", - "license": "Apache-2.0", - "dependencies": { - "near-sdk-js": "file:../../" - }, - "devDependencies": { - "ava": "^4.2.0", - "near-workspaces": "^3.0.0" - } -} \ No newline at end of file diff --git a/jsvm/tests/src/bytes.js b/jsvm/tests/src/bytes.js deleted file mode 100644 index a10d1ac3..00000000 --- a/jsvm/tests/src/bytes.js +++ /dev/null @@ -1,89 +0,0 @@ -import {near, bytes} from 'near-sdk-js' - -export function log_expected_input_tests() { - // log ascii string - near.log('abc') - // log string with utf-8 chars - near.log('æ°´') - // log number - near.log(333) - // log aribrary byte sequence - near.log(bytes('\x00\x01\xff')) - // log valid utf8 seqence - near.log(bytes('\xe6\xb0\xb4')) - - // log valid utf8 sequence - near.logUtf8(bytes('\xe6\xb0\xb4')) - // log valid utf16 sequence - near.logUtf16(bytes('\x34\x6c')) -} - -export function log_unexpected_input_tests() { - // log non-bytes with logUtf8 - near.logUtf8('æ°´') - // log non-bytes with logUtf16 - near.logUtf16('æ°´') -} - -export function log_invalid_utf8_sequence_test() { - near.logUtf8(bytes('\x00\x01\xff')) -} - -export function log_invalid_utf16_sequence_test() { - near.logUtf16(bytes('\x00\x01\xff')) -} - -export function storage_write_bytes() { - near.jsvmStorageWrite(bytes('abc'), bytes('def')) - near.jsvmStorageWrite(bytes('\x00\x01\xff'), bytes('\xe6\xb0\xb4')) - near.jsvmStorageWrite(bytes('\xe6\xb0\xb4'), bytes('\x00ab')) -} - -export function storage_write_unexpected_input() { - near.jsvmStorageWrite('æ°´', 'æ°´') - near.jsvmStorageWrite(123, 456) -} - -export function storage_read_ascii_bytes() { - near.jsvmValueReturn(near.jsvmStorageRead(bytes('abc'))) -} - -export function storage_read_arbitrary_bytes_key_utf8_sequence_bytes_value() { - near.jsvmValueReturn(near.jsvmStorageRead(bytes('\x00\x01\xff'))) -} - -export function storage_read_utf8_sequence_bytes_key_arbitrary_bytes_value() { - near.jsvmValueReturn(near.jsvmStorageRead(bytes('\xe6\xb0\xb4'))) -} - -export function panic_test() { - throw Error() -} - -export function panic_ascii_test() { - throw Error('abc') -} - -export function panic_js_number() { - throw Error(356) -} - -export function panic_js_undefined() { - throw Error(undefined) -} - -export function panic_js_null() { - throw Error(null) -} - -export function panic_utf8_test() { - throw Error('æ°´') -} - -export function panicUtf8_valid_utf8_sequence() { - near.panicUtf8(bytes('\xe6\xb0\xb4')) -} - -export function panicUtf8_invalid_utf8_sequence() { - near.panicUtf8(bytes('\x00\x01\xff')) -} \ No newline at end of file diff --git a/jsvm/tests/src/function-params.js b/jsvm/tests/src/function-params.js deleted file mode 100644 index 305f26e0..00000000 --- a/jsvm/tests/src/function-params.js +++ /dev/null @@ -1,33 +0,0 @@ -import { - NearContract, - NearBindgen, - call, - view, - near, -} from 'near-sdk-js' - -/** - * Simple contract to test function parameters - */ -@NearBindgen -class FunctionParamsTestContract extends NearContract { - constructor() { - super() - this.val1 = 'default1'; - this.val2 = 'default2'; - this.val3 = 'default3'; - } - - @call - set_values({ param1, param2, param3 }) { - near.log(JSON.stringify({ param1, param2, param3 })); - this.val1 = param1; - this.val2 = param2; - this.val3 = param3; - } - - @view - get_values() { - return { val3: this.val3, val2: this.val2, val1: this.val1 } - } -} \ No newline at end of file diff --git a/jsvm/tests/src/lookup-map.js b/jsvm/tests/src/lookup-map.js deleted file mode 100644 index 6d56c0a8..00000000 --- a/jsvm/tests/src/lookup-map.js +++ /dev/null @@ -1,45 +0,0 @@ -import { - NearContract, - NearBindgen, - call, - view, - LookupMap -} from 'near-sdk-js' - -@NearBindgen -class LookupMapTestContract extends NearContract { - constructor() { - super() - this.lookupMap = new LookupMap('a'); - } - - deserialize() { - super.deserialize(); - this.lookupMap = Object.assign(new LookupMap, this.lookupMap); - } - - @view - get({key}) { - return this.lookupMap.get(key); - } - - @view - containsKey({key}) { - return this.lookupMap.containsKey(key); - } - - @call - set({key, value}) { - this.lookupMap.set(key, value); - } - - @call - remove({key}) { - this.lookupMap.remove(key); - } - - @call - extend({kvs}) { - this.lookupMap.extend(kvs); - } -} diff --git a/jsvm/tests/src/lookup-set.js b/jsvm/tests/src/lookup-set.js deleted file mode 100644 index a019f8e7..00000000 --- a/jsvm/tests/src/lookup-set.js +++ /dev/null @@ -1,41 +0,0 @@ -import { - NearContract, - NearBindgen, - call, - view, - LookupSet -} from 'near-sdk-js' - -@NearBindgen -class LookupSetTestContract extends NearContract { - constructor() { - super() - this.lookupSet = new LookupSet('a'); - } - - deserialize() { - super.deserialize(); - this.lookupSet = Object.assign(new LookupSet, this.lookupSet); - } - - @view - contains({key}) { - return this.lookupSet.contains(key); - } - - @call - set({key}) { - this.lookupSet.set(key); - } - - @call - remove({key}) { - this.lookupSet.remove(key); - } - - @call - extend({keys}) { - this.lookupSet.extend(keys); - } -} - diff --git a/jsvm/tests/src/unordered-map.js b/jsvm/tests/src/unordered-map.js deleted file mode 100644 index 6aaf25c5..00000000 --- a/jsvm/tests/src/unordered-map.js +++ /dev/null @@ -1,79 +0,0 @@ -import { - NearContract, - NearBindgen, - call, - view, - UnorderedMap, - Vector -} from 'near-sdk-js' - -@NearBindgen -class UnorderedMapTestContract extends NearContract { - constructor() { - super() - this.unorderedMap = new UnorderedMap('a'); - } - - deserialize() { - super.deserialize() - this.unorderedMap.keys = Object.assign(new Vector, this.unorderedMap.keys) - this.unorderedMap.values = Object.assign(new Vector, this.unorderedMap.values) - this.unorderedMap = Object.assign(new UnorderedMap, this.unorderedMap) - } - - @view - len() { - return this.unorderedMap.len(); - } - - @view - isEmpty() { - return this.unorderedMap.isEmpty(); - } - - @view - serializeIndex({index}) { - return this.unorderedMap.serializeIndex(index); - } - - @view - deserializeIndex({rawIndex}) { - return this.unorderedMap.deserializeIndex(rawIndex); - } - - @view - getIndexRaw({key}) { - return this.unorderedMap.getIndexRaw(key); - } - - @view - get({key}) { - return this.unorderedMap.get(key); - } - - @call - set({key, value}) { - this.unorderedMap.set(key, value); - } - - @call - remove({key}) { - this.unorderedMap.remove(key); - } - - @call - clear() { - this.unorderedMap.clear(); - } - - @view - toArray() { - return this.unorderedMap.toArray(); - } - - @call - extend({kvs}) { - this.unorderedMap.extend(kvs); - } -} - diff --git a/jsvm/tests/src/unordered-set.js b/jsvm/tests/src/unordered-set.js deleted file mode 100644 index 687cae28..00000000 --- a/jsvm/tests/src/unordered-set.js +++ /dev/null @@ -1,63 +0,0 @@ -import { - NearContract, - NearBindgen, - call, - view, - UnorderedSet, - Vector -} from 'near-sdk-js' - -@NearBindgen -class UnorderedSetTestContract extends NearContract { - constructor() { - super() - this.unorderedSet = new UnorderedSet('a'); - } - - deserialize() { - super.deserialize() - this.unorderedSet.elements = Object.assign(new Vector, this.unorderedSet.elements) - this.unorderedSet = Object.assign(new UnorderedSet, this.unorderedSet) - } - - @view - len() { - return this.unorderedSet.len(); - } - - @view - isEmpty() { - return this.unorderedSet.isEmpty(); - } - - @view - contains({element}) { - return this.unorderedSet.contains(element); - } - - @call - set({element}) { - this.unorderedSet.set(element); - } - - @call - remove({element}) { - this.unorderedSet.remove(element); - } - - @call - clear() { - this.unorderedSet.clear(); - } - - @view - toArray() { - return this.unorderedSet.toArray(); - } - - @call - extend({elements}) { - this.unorderedSet.extend(elements); - } -} - diff --git a/jsvm/tests/src/vector.js b/jsvm/tests/src/vector.js deleted file mode 100644 index 7d42b962..00000000 --- a/jsvm/tests/src/vector.js +++ /dev/null @@ -1,71 +0,0 @@ -import { - NearContract, - NearBindgen, - call, - view, - Vector -} from 'near-sdk-js' - -@NearBindgen -class VectorTestContract extends NearContract { - constructor() { - super() - this.vector = new Vector('a'); - } - - deserialize() { - super.deserialize(); - this.vector = Object.assign(new Vector, this.vector); - } - - @view - len() { - return this.vector.len(); - } - - @view - isEmpty() { - return this.vector.isEmpty(); - } - - @view - get({index}) { - return this.vector.get(index); - } - - @call - push({value}) { - this.vector.push(value); - } - - @call - pop() { - this.vector.pop(); - } - - @call - clear() { - this.vector.clear(); - } - - @view - toArray() { - return this.vector.toArray(); - } - - @call - extend({kvs}) { - this.vector.extend(kvs); - } - - @call - replace({index, value}) { - this.vector.replace(index, value); - } - - @call - swapRemove({index}) { - this.vector.swapRemove(index); - } -} - diff --git a/jsvm/tests/yarn.lock b/jsvm/tests/yarn.lock deleted file mode 100644 index 34c41c99..00000000 --- a/jsvm/tests/yarn.lock +++ /dev/null @@ -1,2163 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@ampproject/remapping@^2.1.0": - version "2.2.0" - resolved "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== - dependencies: - "@jridgewell/gen-mapping" "^0.1.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@babel/code-frame@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" - integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== - dependencies: - "@babel/highlight" "^7.16.7" - -"@babel/compat-data@^7.17.10": - version "7.17.10" - resolved "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.10.tgz#711dc726a492dfc8be8220028b1b92482362baab" - integrity sha512-GZt/TCsG70Ms19gfZO1tM4CVnXsPgEPBCpJu+Qz3L0LUDsY5nZqFZglIoPC1kIYOtNBZlrnFT+klg12vFGZXrw== - -"@babel/core@^7.17.5": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/core/-/core-7.18.2.tgz#87b2fcd7cce9becaa7f5acebdc4f09f3dd19d876" - integrity sha512-A8pri1YJiC5UnkdrWcmfZTJTV85b4UXTAfImGmCfYmax4TR9Cw8sDS0MOk++Gp2mE/BefVJ5nwy5yzqNJbP/DQ== - dependencies: - "@ampproject/remapping" "^2.1.0" - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.18.2" - "@babel/helper-compilation-targets" "^7.18.2" - "@babel/helper-module-transforms" "^7.18.0" - "@babel/helpers" "^7.18.2" - "@babel/parser" "^7.18.0" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.2" - "@babel/types" "^7.18.2" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.2.1" - semver "^6.3.0" - -"@babel/generator@^7.18.2": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz#33873d6f89b21efe2da63fe554460f3df1c5880d" - integrity sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw== - dependencies: - "@babel/types" "^7.18.2" - "@jridgewell/gen-mapping" "^0.3.0" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz#bb2339a7534a9c128e3102024c60760a3a7f3862" - integrity sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-compilation-targets@^7.18.2": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.2.tgz#67a85a10cbd5fc7f1457fec2e7f45441dc6c754b" - integrity sha512-s1jnPotJS9uQnzFtiZVBUxe67CuBa679oWFHpxYYnTpRL/1ffhyX44R9uYiXoa/pLXcY9H2moJta0iaanlk/rQ== - dependencies: - "@babel/compat-data" "^7.17.10" - "@babel/helper-validator-option" "^7.16.7" - browserslist "^4.20.2" - semver "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.18.0": - version "7.18.0" - resolved "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.18.0.tgz#fac430912606331cb075ea8d82f9a4c145a4da19" - integrity sha512-Kh8zTGR9de3J63e5nS0rQUdRs/kbtwoeQQ0sriS0lItjC96u8XXZN6lKpuyWd2coKSU13py/y+LTmThLuVX0Pg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.16.7" - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-member-expression-to-functions" "^7.17.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/helper-replace-supers" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - -"@babel/helper-environment-visitor@^7.16.7", "@babel/helper-environment-visitor@^7.18.2": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.2.tgz#8a6d2dedb53f6bf248e31b4baf38739ee4a637bd" - integrity sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ== - -"@babel/helper-function-name@^7.17.9": - version "7.17.9" - resolved "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz#136fcd54bc1da82fcb47565cf16fd8e444b1ff12" - integrity sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg== - dependencies: - "@babel/template" "^7.16.7" - "@babel/types" "^7.17.0" - -"@babel/helper-hoist-variables@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz#86bcb19a77a509c7b77d0e22323ef588fa58c246" - integrity sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-member-expression-to-functions@^7.17.7": - version "7.17.7" - resolved "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz#a34013b57d8542a8c4ff8ba3f747c02452a4d8c4" - integrity sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw== - dependencies: - "@babel/types" "^7.17.0" - -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz#25612a8091a999704461c8a222d0efec5d091437" - integrity sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-module-transforms@^7.18.0": - version "7.18.0" - resolved "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.0.tgz#baf05dec7a5875fb9235bd34ca18bad4e21221cd" - integrity sha512-kclUYSUBIjlvnzN2++K9f2qzYKFgjmnmjwL4zlmU5f8ZtzgWe8s0rUPSTGy2HmK4P8T52MQsS+HTQAgZd3dMEA== - dependencies: - "@babel/helper-environment-visitor" "^7.16.7" - "@babel/helper-module-imports" "^7.16.7" - "@babel/helper-simple-access" "^7.17.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/helper-validator-identifier" "^7.16.7" - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.0" - "@babel/types" "^7.18.0" - -"@babel/helper-optimise-call-expression@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz#a34e3560605abbd31a18546bd2aad3e6d9a174f2" - integrity sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-plugin-utils@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.17.12.tgz#86c2347da5acbf5583ba0a10aed4c9bf9da9cf96" - integrity sha512-JDkf04mqtN3y4iAbO1hv9U2ARpPyPL1zqyWs/2WG1pgSq9llHFjStX5jdxb84himgJm+8Ng+x0oiWF/nw/XQKA== - -"@babel/helper-replace-supers@^7.16.7", "@babel/helper-replace-supers@^7.18.2": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.2.tgz#41fdfcc9abaf900e18ba6e5931816d9062a7b2e0" - integrity sha512-XzAIyxx+vFnrOxiQrToSUOzUOn0e1J2Li40ntddek1Y69AXUTXoDJ40/D5RdjFu7s7qHiaeoTiempZcbuVXh2Q== - dependencies: - "@babel/helper-environment-visitor" "^7.18.2" - "@babel/helper-member-expression-to-functions" "^7.17.7" - "@babel/helper-optimise-call-expression" "^7.16.7" - "@babel/traverse" "^7.18.2" - "@babel/types" "^7.18.2" - -"@babel/helper-simple-access@^7.17.7": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.2.tgz#4dc473c2169ac3a1c9f4a51cfcd091d1c36fcff9" - integrity sha512-7LIrjYzndorDY88MycupkpQLKS1AFfsVRm2k/9PtKScSy5tZq0McZTj+DiMRynboZfIqOKvo03pmhTaUgiD6fQ== - dependencies: - "@babel/types" "^7.18.2" - -"@babel/helper-split-export-declaration@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz#0b648c0c42da9d3920d85ad585f2778620b8726b" - integrity sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw== - dependencies: - "@babel/types" "^7.16.7" - -"@babel/helper-validator-identifier@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" - integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== - -"@babel/helper-validator-option@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz#b203ce62ce5fe153899b617c08957de860de4d23" - integrity sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ== - -"@babel/helpers@^7.18.2": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.2.tgz#970d74f0deadc3f5a938bfa250738eb4ac889384" - integrity sha512-j+d+u5xT5utcQSzrh9p+PaJX94h++KN+ng9b9WEJq7pkUPAd61FGqhjuUEdfknb3E/uDBb7ruwEeKkIxNJPIrg== - dependencies: - "@babel/template" "^7.16.7" - "@babel/traverse" "^7.18.2" - "@babel/types" "^7.18.2" - -"@babel/highlight@^7.16.7": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.12.tgz#257de56ee5afbd20451ac0a75686b6b404257351" - integrity sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@^7.16.7", "@babel/parser@^7.18.0": - version "7.18.4" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.18.4.tgz#6774231779dd700e0af29f6ad8d479582d7ce5ef" - integrity sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow== - -"@babel/plugin-proposal-decorators@^7.17.2": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.18.2.tgz#dbe4086d2d42db489399783c3aa9272e9700afd4" - integrity sha512-kbDISufFOxeczi0v4NQP3p5kIeW6izn/6klfWBrIIdGZZe4UpHR+QU03FAoWjGGd9SUXAwbw2pup1kaL4OQsJQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.0" - "@babel/helper-plugin-utils" "^7.17.12" - "@babel/helper-replace-supers" "^7.18.2" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/plugin-syntax-decorators" "^7.17.12" - charcodes "^0.2.0" - -"@babel/plugin-syntax-decorators@^7.17.12": - version "7.17.12" - resolved "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.12.tgz#02e8f678602f0af8222235271efea945cfdb018a" - integrity sha512-D1Hz0qtGTza8K2xGyEdVNCYLdVHukAcbQr4K3/s6r/esadyEriZovpJimQOpu8ju4/jV8dW/1xdaE0UpDroidw== - dependencies: - "@babel/helper-plugin-utils" "^7.17.12" - -"@babel/template@^7.16.7": - version "7.16.7" - resolved "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" - integrity sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/parser" "^7.16.7" - "@babel/types" "^7.16.7" - -"@babel/traverse@^7.18.0", "@babel/traverse@^7.18.2": - version "7.18.2" - resolved "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.2.tgz#b77a52604b5cc836a9e1e08dca01cba67a12d2e8" - integrity sha512-9eNwoeovJ6KH9zcCNnENY7DMFwTU9JdGCFtqNLfUAqtUHRCOsTOqWoffosP8vKmNYeSBUv3yVJXjfd8ucwOjUA== - dependencies: - "@babel/code-frame" "^7.16.7" - "@babel/generator" "^7.18.2" - "@babel/helper-environment-visitor" "^7.18.2" - "@babel/helper-function-name" "^7.17.9" - "@babel/helper-hoist-variables" "^7.16.7" - "@babel/helper-split-export-declaration" "^7.16.7" - "@babel/parser" "^7.18.0" - "@babel/types" "^7.18.2" - debug "^4.1.0" - globals "^11.1.0" - -"@babel/types@^7.16.7", "@babel/types@^7.17.0", "@babel/types@^7.18.0", "@babel/types@^7.18.2": - version "7.18.4" - resolved "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz#27eae9b9fd18e9dccc3f9d6ad051336f307be354" - integrity sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw== - dependencies: - "@babel/helper-validator-identifier" "^7.16.7" - to-fast-properties "^2.0.0" - -"@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@jridgewell/gen-mapping@^0.3.0": - version "0.3.1" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz#cf92a983c83466b8c0ce9124fadeaf09f7c66ea9" - integrity sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.0.3": - version "3.0.7" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz#30cd49820a962aff48c8fffc5cd760151fca61fe" - integrity sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA== - -"@jridgewell/set-array@^1.0.0": - version "1.1.1" - resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz#36a6acc93987adcf0ba50c66908bd0b70de8afea" - integrity sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ== - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.13" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz#b6461fb0c2964356c469e115f504c95ad97ab88c" - integrity sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w== - -"@jridgewell/trace-mapping@^0.3.9": - version "0.3.13" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz#dcfe3e95f224c8fe97a87a5235defec999aa92ea" - integrity sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@rollup/plugin-babel@^5.3.1": - version "5.3.1" - resolved "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" - integrity sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q== - dependencies: - "@babel/helper-module-imports" "^7.10.4" - "@rollup/pluginutils" "^3.1.0" - -"@rollup/plugin-commonjs@^21.0.1": - version "21.1.0" - resolved "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-21.1.0.tgz#45576d7b47609af2db87f55a6d4b46e44fc3a553" - integrity sha512-6ZtHx3VHIp2ReNNDxHjuUml6ur+WcQ28N1yHgCQwsbNkQg2suhxGMDQGJOn/KuDxKtd1xuZP5xSTwBA4GQ8hbA== - dependencies: - "@rollup/pluginutils" "^3.1.0" - commondir "^1.0.1" - estree-walker "^2.0.1" - glob "^7.1.6" - is-reference "^1.2.1" - magic-string "^0.25.7" - resolve "^1.17.0" - -"@rollup/plugin-node-resolve@^13.1.1": - version "13.3.0" - resolved "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz#da1c5c5ce8316cef96a2f823d111c1e4e498801c" - integrity sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw== - dependencies: - "@rollup/pluginutils" "^3.1.0" - "@types/resolve" "1.17.1" - deepmerge "^4.2.2" - is-builtin-module "^3.1.0" - is-module "^1.0.0" - resolve "^1.19.0" - -"@rollup/pluginutils@^3.0.9", "@rollup/pluginutils@^3.1.0": - version "3.1.0" - resolved "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" - integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== - dependencies: - "@types/estree" "0.0.39" - estree-walker "^1.0.1" - picomatch "^2.2.2" - -"@sindresorhus/is@^4.0.0": - version "4.6.0" - resolved "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== - dependencies: - defer-to-connect "^2.0.0" - -"@types/cacheable-request@^6.0.1": - version "6.0.2" - resolved "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz" - integrity sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "*" - "@types/node" "*" - "@types/responselike" "*" - -"@types/estree@*": - version "0.0.51" - resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== - -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - -"@types/http-cache-semantics@*": - version "4.0.1" - resolved "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz" - integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== - -"@types/json-buffer@~3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@types/json-buffer/-/json-buffer-3.0.0.tgz" - integrity sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ== - -"@types/keyv@*": - version "3.1.4" - resolved "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== - dependencies: - "@types/node" "*" - -"@types/node@*": - version "17.0.35" - resolved "https://registry.npmjs.org/@types/node/-/node-17.0.35.tgz" - integrity sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg== - -"@types/resolve@1.17.1": - version "1.17.1" - resolved "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" - integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== - dependencies: - "@types/node" "*" - -"@types/responselike@*", "@types/responselike@^1.0.0": - version "1.0.0" - resolved "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz" - integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== - dependencies: - "@types/node" "*" - -acorn-walk@^8.2.0: - version "8.2.0" - resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^8.7.0: - version "8.7.1" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz" - integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -aggregate-error@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz" - integrity sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w== - dependencies: - clean-stack "^4.0.0" - indent-string "^5.0.0" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^6.0.0, ansi-styles@^6.1.0: - version "6.1.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz" - integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== - -anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz" - integrity sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -arrgv@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/arrgv/-/arrgv-1.0.2.tgz" - integrity sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw== - -arrify@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/arrify/-/arrify-3.0.0.tgz" - integrity sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw== - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -ava@^4.2.0: - version "4.2.0" - resolved "https://registry.npmjs.org/ava/-/ava-4.2.0.tgz" - integrity sha512-96N/rH2ZlBjoh18CsjH3zfo/rzukkRoqNK7R/Z3MLRrqu6cRRf+i4Zwna7ZRYEIl55yF1BKh/nSPCZWqoXfPJA== - dependencies: - acorn "^8.7.0" - acorn-walk "^8.2.0" - ansi-styles "^6.1.0" - arrgv "^1.0.2" - arrify "^3.0.0" - callsites "^4.0.0" - cbor "^8.1.0" - chalk "^5.0.0" - chokidar "^3.5.3" - chunkd "^2.0.1" - ci-info "^3.3.0" - ci-parallel-vars "^1.0.1" - clean-yaml-object "^0.1.0" - cli-truncate "^3.1.0" - code-excerpt "^4.0.0" - common-path-prefix "^3.0.0" - concordance "^5.0.4" - currently-unhandled "^0.4.1" - debug "^4.3.3" - del "^6.0.0" - emittery "^0.10.1" - figures "^4.0.0" - globby "^13.1.1" - ignore-by-default "^2.0.0" - indent-string "^5.0.0" - is-error "^2.2.2" - is-plain-object "^5.0.0" - is-promise "^4.0.0" - matcher "^5.0.0" - mem "^9.0.2" - ms "^2.1.3" - p-event "^5.0.1" - p-map "^5.3.0" - picomatch "^2.3.1" - pkg-conf "^4.0.0" - plur "^5.1.0" - pretty-ms "^7.0.1" - resolve-cwd "^3.0.0" - slash "^3.0.0" - stack-utils "^2.0.5" - strip-ansi "^7.0.1" - supertap "^3.0.1" - temp-dir "^2.0.0" - write-file-atomic "^4.0.1" - yargs "^17.3.1" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base-x@^3.0.2: - version "3.0.9" - resolved "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== - dependencies: - safe-buffer "^5.0.1" - -base64url@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz" - integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -blueimp-md5@^2.10.0: - version "2.19.0" - resolved "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz" - integrity sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w== - -bn.js@5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz" - integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== - -bn.js@^5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -borsh@^0.5.0: - version "0.5.0" - resolved "https://registry.npmjs.org/borsh/-/borsh-0.5.0.tgz" - integrity sha512-p9w/qGBeeFdUf2GPBPHdX5JQyez8K5VtoFN7PqSfmR+cVUMSmcwAKhP9n2aXoDSKbtS7xZlZt3MVnrJL7GdYhg== - dependencies: - bn.js "^5.2.0" - bs58 "^4.0.0" - text-encoding-utf-8 "^1.0.2" - -borsh@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/borsh/-/borsh-0.6.0.tgz" - integrity sha512-sl5k89ViqsThXQpYa9XDtz1sBl3l1lI313cFUY1HKr+wvMILnb+58xpkqTNrYbelh99dY7K8usxoCusQmqix9Q== - dependencies: - bn.js "^5.2.0" - bs58 "^4.0.0" - text-encoding-utf-8 "^1.0.2" - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -browserslist@^4.20.2: - version "4.20.3" - resolved "https://registry.npmjs.org/browserslist/-/browserslist-4.20.3.tgz#eb7572f49ec430e054f56d52ff0ebe9be915f8bf" - integrity sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg== - dependencies: - caniuse-lite "^1.0.30001332" - electron-to-chromium "^1.4.118" - escalade "^3.1.1" - node-releases "^2.0.3" - picocolors "^1.0.0" - -bs58@^4.0.0, bs58@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz" - integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== - dependencies: - base-x "^3.0.2" - -builtin-modules@^3.0.0: - version "3.3.0" - resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" - integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== - -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-request@^7.0.2: - version "7.0.2" - resolved "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz" - integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - -callsites@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/callsites/-/callsites-4.0.0.tgz" - integrity sha512-y3jRROutgpKdz5vzEhWM34TidDU8vkJppF8dszITeb1PQmSqV3DTxyV8G/lyO/DNvtE1YTedehmw9MPZsCBHxQ== - -caniuse-lite@^1.0.30001332: - version "1.0.30001344" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001344.tgz#8a1e7fdc4db9c2ec79a05e9fd68eb93a761888bb" - integrity sha512-0ZFjnlCaXNOAYcV7i+TtdKBp0L/3XEU2MF/x6Du1lrh+SRX4IfzIVL4HNJg5pB2PmFb8rszIGyOvsZnqqRoc2g== - -capability@^0.2.5: - version "0.2.5" - resolved "https://registry.npmjs.org/capability/-/capability-0.2.5.tgz" - integrity sha512-rsJZYVCgXd08sPqwmaIqjAd5SUTfonV0z/gDJ8D6cN8wQphky1kkAYEqQ+hmDxTw7UihvBfjUVUSY+DBEe44jg== - -cbor@^8.1.0: - version "8.1.0" - resolved "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz" - integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== - dependencies: - nofilter "^3.1.0" - -chalk@^2.0.0: - version "2.4.2" - resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^5.0.0: - version "5.0.1" - resolved "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz" - integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w== - -charcodes@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/charcodes/-/charcodes-0.2.0.tgz#5208d327e6cc05f99eb80ffc814707572d1f14e4" - integrity sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ== - -chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -chunkd@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/chunkd/-/chunkd-2.0.1.tgz" - integrity sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ== - -ci-info@^3.3.0: - version "3.3.1" - resolved "https://registry.npmjs.org/ci-info/-/ci-info-3.3.1.tgz" - integrity sha512-SXgeMX9VwDe7iFFaEWkA5AstuER9YKqy4EhHqr4DVqkwmD9rpVimkMKWHdjn30Ja45txyjhSn63lVX69eVCckg== - -ci-parallel-vars@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/ci-parallel-vars/-/ci-parallel-vars-1.0.1.tgz" - integrity sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -clean-stack@^4.0.0: - version "4.2.0" - resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz" - integrity sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg== - dependencies: - escape-string-regexp "5.0.0" - -clean-yaml-object@^0.1.0: - version "0.1.0" - resolved "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz" - integrity sha512-3yONmlN9CSAkzNwnRCiJQ7Q2xK5mWuEfL3PuTZcAUzhObbXsfsnMptJzXwz93nc5zn9V9TwCVMmV7w4xsm43dw== - -cli-truncate@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz" - integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== - dependencies: - slice-ansi "^5.0.0" - string-width "^5.0.0" - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -clone-response@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz" - integrity sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q== - dependencies: - mimic-response "^1.0.0" - -code-excerpt@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz" - integrity sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA== - dependencies: - convert-to-spaces "^2.0.1" - -color-convert@^1.9.0: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -common-path-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/common-path-prefix/-/common-path-prefix-3.0.0.tgz" - integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== - -compress-brotli@^1.3.8: - version "1.3.8" - resolved "https://registry.npmjs.org/compress-brotli/-/compress-brotli-1.3.8.tgz" - integrity sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ== - dependencies: - "@types/json-buffer" "~3.0.0" - json-buffer "~3.0.1" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" - integrity "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - -concordance@^5.0.4: - version "5.0.4" - resolved "https://registry.npmjs.org/concordance/-/concordance-5.0.4.tgz" - integrity sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw== - dependencies: - date-time "^3.1.0" - esutils "^2.0.3" - fast-diff "^1.2.0" - js-string-escape "^1.0.1" - lodash "^4.17.15" - md5-hex "^3.0.1" - semver "^7.3.2" - well-known-symbols "^2.0.0" - -convert-source-map@^1.7.0: - version "1.8.0" - resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" - integrity sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA== - dependencies: - safe-buffer "~5.1.1" - -convert-to-spaces@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz" - integrity sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ== - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - -date-time@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/date-time/-/date-time-3.1.0.tgz" - integrity sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg== - dependencies: - time-zone "^1.0.0" - -debug@^4.1.0, debug@^4.3.3: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== - -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - -deepmerge@^4.2.2: - version "4.2.2" - resolved "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" - integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== - -defer-to-connect@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -del@^6.0.0: - version "6.1.1" - resolved "https://registry.npmjs.org/del/-/del-6.1.1.tgz" - integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== - dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" - -depd@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -electron-to-chromium@^1.4.118: - version "1.4.143" - resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.143.tgz#10f1bb595ad6cd893c05097039c685dcf5c8e30c" - integrity sha512-2hIgvu0+pDfXIqmVmV5X6iwMjQ2KxDsWKwM+oI1fABEOy/Dqmll0QJRmIQ3rm+XaoUa/qKrmy5h7LSTFQ6Ldzg== - -emittery@^0.10.1: - version "0.10.2" - resolved "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz" - integrity sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -error-polyfill@^0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/error-polyfill/-/error-polyfill-0.1.3.tgz" - integrity sha512-XHJk60ufE+TG/ydwp4lilOog549iiQF2OAPhkk9DdiYWMrltz5yhDz/xnKuenNwP7gy3dsibssO5QpVhkrSzzg== - dependencies: - capability "^0.2.5" - o3 "^1.0.3" - u3 "^0.1.1" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-string-regexp@5.0.0, escape-string-regexp@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz" - integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - -estree-walker@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - -esutils@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -fast-diff@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - -fast-glob@^3.2.11, fast-glob@^3.2.9: - version "3.2.11" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== - dependencies: - reusify "^1.0.4" - -figures@^4.0.0: - version "4.0.1" - resolved "https://registry.npmjs.org/figures/-/figures-4.0.1.tgz" - integrity sha512-rElJwkA/xS04Vfg+CaZodpso7VqBknOYbzi6I76hI4X80RUjkSxO2oAyPmGbuXUppywjqndOrQDl817hDnI++w== - dependencies: - escape-string-regexp "^5.0.0" - is-unicode-supported "^1.2.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-up@^6.0.0: - version "6.3.0" - resolved "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz" - integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== - dependencies: - locate-path "^7.1.0" - path-exists "^5.0.0" - -fs-extra@^10.0.0: - version "10.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -gensync@^1.0.0-beta.2: - version "1.0.0-beta.2" - resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" - integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@^7.1.3, glob@^7.1.6: - version "7.2.3" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -globals@^11.1.0: - version "11.12.0" - resolved "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globby@^11.0.1: - version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -globby@^13.1.1: - version "13.1.1" - resolved "https://registry.npmjs.org/globby/-/globby-13.1.1.tgz" - integrity sha512-XMzoDZbGZ37tufiv7g0N4F/zp3zkwdFtVbV3EHsVl1KQr4RPLfNoT068/97RPshz2J5xYNEjLKKBKaGHifBd3Q== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.2.11" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^4.0.0" - -got@^11.8.2: - version "11.8.5" - resolved "https://registry.npmjs.org/got/-/got-11.8.5.tgz" - integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.10" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" - integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -http-errors@^1.7.2: - version "1.8.1" - resolved "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz" - integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.1" - -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - -ignore-by-default@^2.0.0: - version "2.1.0" - resolved "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-2.1.0.tgz" - integrity sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw== - -ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -indent-string@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz" - integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -irregular-plurals@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.3.0.tgz" - integrity sha512-MVBLKUTangM3EfRPFROhmWQQKRDsrgI83J8GS3jXy+OwYqiR2/aoWndYQ5416jLE3uaGgLH7ncme3X9y09gZ3g== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-builtin-module@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz#6fdb24313b1c03b75f8b9711c0feb8c30b903b00" - integrity sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg== - dependencies: - builtin-modules "^3.0.0" - -is-core-module@^2.8.1: - version "2.9.0" - resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" - integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== - dependencies: - has "^1.0.3" - -is-error@^2.2.2: - version "2.2.2" - resolved "https://registry.npmjs.org/is-error/-/is-error-2.2.2.tgz" - integrity sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-fullwidth-code-point@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz" - integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== - -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-inside@^3.0.2: - version "3.0.3" - resolved "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-promise@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz" - integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== - -is-reference@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" - integrity sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ== - dependencies: - "@types/estree" "*" - -is-unicode-supported@^1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.2.0.tgz" - integrity sha512-wH+U77omcRzevfIG8dDhTS0V9zZyweakfD01FULl97+0EHiJTTZtJqxPSkIIo/SDPv/i07k/C9jAPY+jwLLeUQ== - -js-sha256@^0.9.0: - version "0.9.0" - resolved "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz" - integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== - -js-string-escape@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz" - integrity sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8= - -js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.14.1: - version "3.14.1" - resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -json-buffer@3.0.1, json-buffer@~3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - -json5@^2.2.1: - version "2.2.1" - resolved "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" - integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -keyv@^4.0.0: - version "4.3.0" - resolved "https://registry.npmjs.org/keyv/-/keyv-4.3.0.tgz" - integrity sha512-C30Un9+63J0CsR7Wka5quXKqYZsT6dcRQ2aOwGcSc3RiQ4HGWpTAHlCA+puNfw2jA/s11EsxA1nCXgZRuRKMQQ== - dependencies: - compress-brotli "^1.3.8" - json-buffer "3.0.1" - -load-json-file@^7.0.0: - version "7.0.1" - resolved "https://registry.npmjs.org/load-json-file/-/load-json-file-7.0.1.tgz" - integrity sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ== - -locate-path@^7.1.0: - version "7.1.0" - resolved "https://registry.npmjs.org/locate-path/-/locate-path-7.1.0.tgz" - integrity sha512-HNx5uOnYeK4SxEoid5qnhRfprlJeGMzFRKPLCf/15N3/B4AiofNwC/yq7VBKdVk9dx7m+PiYCJOGg55JYTAqoQ== - dependencies: - p-locate "^6.0.0" - -lodash@^4.17.15: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -magic-string@^0.25.7: - version "0.25.9" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" - integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== - dependencies: - sourcemap-codec "^1.4.8" - -map-age-cleaner@^0.1.3: - version "0.1.3" - resolved "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - -matcher@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/matcher/-/matcher-5.0.0.tgz" - integrity sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw== - dependencies: - escape-string-regexp "^5.0.0" - -md5-hex@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/md5-hex/-/md5-hex-3.0.1.tgz" - integrity sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw== - dependencies: - blueimp-md5 "^2.10.0" - -mem@^9.0.2: - version "9.0.2" - resolved "https://registry.npmjs.org/mem/-/mem-9.0.2.tgz" - integrity sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A== - dependencies: - map-age-cleaner "^0.1.3" - mimic-fn "^4.0.0" - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minipass@^3.0.0: - version "3.1.6" - resolved "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz" - integrity sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ== - dependencies: - yallist "^4.0.0" - -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp@^1.0.3: - version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mustache@^4.0.0: - version "4.2.0" - resolved "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz" - integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== - -near-api-js@^0.44.1: - version "0.44.2" - resolved "https://registry.npmjs.org/near-api-js/-/near-api-js-0.44.2.tgz" - integrity sha512-eMnc4V+geggapEUa3nU2p8HSHn/njtloI4P2mceHQWO8vDE1NGpnAw8FuTBrLmXSgIv9m6oocgFc9t3VNf5zwg== - dependencies: - bn.js "5.2.0" - borsh "^0.6.0" - bs58 "^4.0.0" - depd "^2.0.0" - error-polyfill "^0.1.3" - http-errors "^1.7.2" - js-sha256 "^0.9.0" - mustache "^4.0.0" - node-fetch "^2.6.1" - text-encoding-utf-8 "^1.0.2" - tweetnacl "^1.0.1" - -near-sandbox@^0.0.8: - version "0.0.8" - resolved "https://registry.npmjs.org/near-sandbox/-/near-sandbox-0.0.8.tgz" - integrity sha512-3JrDcA9rI+wA9lWqfOtSovGxBE/TDZL011TLk+jz5wGezVbm7m3tDh/zCfq+++eFyJ3ZbGkG0KF6+trMQJFPQQ== - dependencies: - got "^11.8.2" - tar "^6.1.0" - -"near-sdk-js@file:../..": - version "0.3.0" - dependencies: - "@babel/core" "^7.17.5" - "@babel/plugin-proposal-decorators" "^7.17.2" - "@rollup/plugin-babel" "^5.3.1" - "@rollup/plugin-commonjs" "^21.0.1" - "@rollup/plugin-node-resolve" "^13.1.1" - rollup "^2.61.1" - rollup-plugin-sourcemaps "^0.6.3" - yargs "^17.5.1" - -near-units@^0.1.9: - version "0.1.9" - resolved "https://registry.npmjs.org/near-units/-/near-units-0.1.9.tgz" - integrity sha512-xiuBjpNsi+ywiu7P6iWRZdgFm7iCr/cfWlVO6+e5uaAqH4mE1rrurElyrL91llNDSnMwogd9XmlZOw5KbbHNsA== - dependencies: - bn.js "^5.2.0" - -near-workspaces@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/near-workspaces/-/near-workspaces-2.0.0.tgz" - integrity sha512-oxV9B/LBGKM1cQHfZI476GSiUFLRg/0t7PiPGDyUVVsFWpkBLbQEF9EVP2nxctO7HWopAe5SJJTGp0o0ct8B1A== - dependencies: - base64url "^3.0.1" - bn.js "^5.2.0" - borsh "^0.5.0" - bs58 "^4.0.1" - callsites "^4.0.0" - fs-extra "^10.0.0" - js-sha256 "^0.9.0" - near-api-js "^0.44.1" - near-sandbox "^0.0.8" - near-units "^0.1.9" - node-port-check "^2.0.1" - promisify-child-process "^4.1.1" - pure-uuid "^1.6.2" - rimraf "^3.0.2" - temp-dir "^2.0.0" - -node-fetch@^2.6.1: - version "2.6.7" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-port-check@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/node-port-check/-/node-port-check-2.0.1.tgz" - integrity sha512-PV1tj5OPbWwxvhPcChXxwCIKl/IfVEdPP4u/gQz2lao/VGoeIUXb/4U72KSHLZpTVBmgTnMm0me7yR0wUsIuPg== - -node-releases@^2.0.3: - version "2.0.5" - resolved "https://registry.npmjs.org/node-releases/-/node-releases-2.0.5.tgz#280ed5bc3eba0d96ce44897d8aee478bfb3d9666" - integrity sha512-U9h1NLROZTq9uE1SNffn6WuPDg8icmi3ns4rEl/oTfIle4iLjTliCzgTsbaIFMq/Xn078/lfY/BL0GWZ+psK4Q== - -nofilter@^3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz" - integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -o3@^1.0.3: - version "1.0.3" - resolved "https://registry.npmjs.org/o3/-/o3-1.0.3.tgz" - integrity sha1-GSzod6iC36Z1HwQSqGX6+y2h2sA= - dependencies: - capability "^0.2.5" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= - -p-event@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/p-event/-/p-event-5.0.1.tgz" - integrity sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ== - dependencies: - p-timeout "^5.0.2" - -p-limit@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz" - integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== - dependencies: - yocto-queue "^1.0.0" - -p-locate@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/p-locate/-/p-locate-6.0.0.tgz" - integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== - dependencies: - p-limit "^4.0.0" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-map@^5.3.0: - version "5.4.0" - resolved "https://registry.npmjs.org/p-map/-/p-map-5.4.0.tgz" - integrity sha512-obHraaWkwl4y1NHR4vW5D5k+33+S5QrkFqsNrrvK0R7lilXdzo/DZgnloDvYUaRT+Sk6vVK47JUQMQY6cjPMXg== - dependencies: - aggregate-error "^4.0.0" - -p-timeout@^5.0.2: - version "5.0.2" - resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-5.0.2.tgz" - integrity sha512-sEmji9Yaq+Tw+STwsGAE56hf7gMy9p0tQfJojIAamB7WHJYJKf1qlsg9jqBWG8q9VCxKPhZaP/AcXwEoBcYQhQ== - -parse-ms@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz" - integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== - -path-exists@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz" - integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pkg-conf@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/pkg-conf/-/pkg-conf-4.0.0.tgz" - integrity sha512-7dmgi4UY4qk+4mj5Cd8v/GExPo0K+SlY+hulOSdfZ/T6jVH6//y7NtzZo5WrfhDBxuQ0jCa7fLZmNaNh7EWL/w== - dependencies: - find-up "^6.0.0" - load-json-file "^7.0.0" - -plur@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/plur/-/plur-5.1.0.tgz" - integrity sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg== - dependencies: - irregular-plurals "^3.3.0" - -pretty-ms@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz" - integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q== - dependencies: - parse-ms "^2.1.0" - -promisify-child-process@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/promisify-child-process/-/promisify-child-process-4.1.1.tgz" - integrity sha512-/sRjHZwoXf1rJ+8s4oWjYjGRVKNK1DUnqfRC1Zek18pl0cN6k3yJ1cCbqd0tWNe4h0Gr+SY4vR42N33+T82WkA== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pure-uuid@^1.6.2: - version "1.6.2" - resolved "https://registry.npmjs.org/pure-uuid/-/pure-uuid-1.6.2.tgz" - integrity sha512-WQ4xz74ApW6s0BToRuuyuMo9g0VHx1HljY0H2gPng+mqqz/K1yLj7sHZonZZQ2++WfHl/ZzruilWvuz+WtmxjQ== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -resolve-alpn@^1.0.0: - version "1.2.1" - resolved "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve@^1.17.0, resolve@^1.19.0: - version "1.22.0" - resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" - integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== - dependencies: - is-core-module "^2.8.1" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -responselike@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz" - integrity sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw== - dependencies: - lowercase-keys "^2.0.0" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -rollup-plugin-sourcemaps@^0.6.3: - version "0.6.3" - resolved "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz#bf93913ffe056e414419607f1d02780d7ece84ed" - integrity sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw== - dependencies: - "@rollup/pluginutils" "^3.0.9" - source-map-resolve "^0.6.0" - -rollup@^2.61.1: - version "2.75.4" - resolved "https://registry.npmjs.org/rollup/-/rollup-2.75.4.tgz#c3518c326c98e508b628a93015a03a276c331f22" - integrity sha512-JgZiJMJkKImMZJ8ZY1zU80Z2bA/TvrL/7D9qcBCrfl2bP+HUaIw0QHUroB4E3gBpFl6CRFM1YxGbuYGtdAswbQ== - optionalDependencies: - fsevents "~2.3.2" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-buffer@^5.0.1: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -semver@^6.3.0: - version "6.3.0" - resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -semver@^7.3.2: - version "7.3.7" - resolved "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - -serialize-error@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz" - integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== - dependencies: - type-fest "^0.13.1" - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - -slice-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz" - integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== - dependencies: - ansi-styles "^6.0.0" - is-fullwidth-code-point "^4.0.0" - -source-map-resolve@^0.6.0: - version "0.6.0" - resolved "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" - integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - -sourcemap-codec@^1.4.8: - version "1.4.8" - resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -stack-utils@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.5.tgz" - integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== - dependencies: - escape-string-regexp "^2.0.0" - -"statuses@>= 1.5.0 < 2": - version "1.5.0" - resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.0: - version "5.1.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== - dependencies: - ansi-regex "^6.0.1" - -supertap@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/supertap/-/supertap-3.0.1.tgz" - integrity sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw== - dependencies: - indent-string "^5.0.0" - js-yaml "^3.14.1" - serialize-error "^7.0.1" - strip-ansi "^7.0.1" - -supports-color@^5.3.0: - version "5.5.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -tar@^6.1.0: - version "6.1.11" - resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz" - integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -temp-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz" - integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== - -text-encoding-utf-8@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz" - integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== - -time-zone@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/time-zone/-/time-zone-1.0.0.tgz" - integrity sha1-mcW/VZWJZq9tBtg73zgA3IL67F0= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= - -tweetnacl@^1.0.1: - version "1.0.3" - resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz" - integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== - -type-fest@^0.13.1: - version "0.13.1" - resolved "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz" - integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== - -u3@^0.1.1: - version "0.1.1" - resolved "https://registry.npmjs.org/u3/-/u3-0.1.1.tgz" - integrity sha512-+J5D5ir763y+Am/QY6hXNRlwljIeRMZMGs0cT6qqZVVzzT3X3nFPXVyPOFRMOR4kupB0T8JnCdpWdp6Q/iXn3w== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= - -well-known-symbols@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/well-known-symbols/-/well-known-symbols-2.0.0.tgz" - integrity sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz" - integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@^21.0.0: - version "21.0.1" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz" - integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== - -yargs@^17.3.1, yargs@^17.5.1: - version "17.5.1" - resolved "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" - integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.0.0" - -yocto-queue@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz" - integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== diff --git a/lib/api.d.ts b/lib/api.d.ts index a703047e..f80fe858 100644 --- a/lib/api.d.ts +++ b/lib/api.d.ts @@ -16,9 +16,9 @@ export declare function keccak256(value: Bytes): Bytes; export declare function keccak512(value: Bytes): Bytes; export declare function ripemd160(value: Bytes): Bytes; export declare function ecrecover(hash: Bytes, sig: Bytes, v: number, malleabilityFlag: number): Bytes | null; -export declare function panicUtf8(msg: string): never; -export declare function logUtf8(msg: string): void; -export declare function logUtf16(msg: string): void; +export declare function panicUtf8(msg: Bytes): never; +export declare function logUtf8(msg: Bytes): void; +export declare function logUtf16(msg: Bytes): void; export declare function storageRead(key: Bytes): Bytes | null; export declare function storageHasKey(key: Bytes): boolean; export declare function validatorStake(accountId: string): any; @@ -26,18 +26,7 @@ export declare function validatorTotalStake(): bigint; export declare function altBn128G1Multiexp(value: Bytes): Bytes; export declare function altBn128G1Sum(value: Bytes): Bytes; export declare function altBn128PairingCheck(value: Bytes): boolean; -export declare function jsvmAccountId(): string; -export declare function jsvmJsContractName(): string; -export declare function jsvmMethodName(): string; -export declare function jsvmArgs(): Bytes; -export declare function jsvmStorageWrite(key: Bytes, value: Bytes): boolean; -export declare function jsvmStorageRead(key: Bytes): Bytes | null; -export declare function jsvmStorageRemove(key: Bytes): boolean; -export declare function jsvmStorageHasKey(key: Bytes): boolean; -export declare function jsvmCallRaw(contractName: string, method: string, args: any): Bytes | null; -export declare function jsvmCall(contractName: string, method: string, args: any): any | null; export declare function storageGetEvicted(): Bytes; -export declare function jsvmValueReturn(value: Bytes): void; export declare function currentAccountId(): string; export declare function input(): Bytes; export declare function storageUsage(): bigint; @@ -58,13 +47,9 @@ export declare function promiseBatchActionAddKeyWithFullAccess(promiseIndex: num export declare function promiseBatchActionAddKeyWithFunctionCall(promiseIndex: number | bigint, publicKey: Bytes, nonce: number | bigint, allowance: number | bigint, receiverId: string, methodNames: string): void; export declare function promiseBatchActionDeleteKey(promiseIndex: number | bigint, publicKey: Bytes): void; export declare function promiseBatchActionDeleteAccount(promiseIndex: number | bigint, beneficiaryId: string): void; +export declare function promiseBatchActionFunctionCallWeight(promiseIndex: number | bigint, methodName: string, args: Bytes, amount: number | bigint, gas: number | bigint, weight: number | bigint): void; export declare function promiseResultsCount(): bigint; -export declare enum PromiseResult { - NotReady = 0, - Successful = 1, - Failed = 2 -} -export declare function promiseResult(resultIdx: number | bigint): Bytes | PromiseResult.NotReady | PromiseResult.Failed; +export declare function promiseResult(resultIdx: number | bigint): Bytes; export declare function promiseReturn(promiseIdx: number | bigint): void; export declare function storageWrite(key: Bytes, value: Bytes): boolean; export declare function storageRemove(key: Bytes): boolean; diff --git a/lib/api.js b/lib/api.js index 983cad0f..e28e1950 100644 --- a/lib/api.js +++ b/lib/api.js @@ -1,3 +1,4 @@ +import { PromiseResult } from "./types"; const U64_MAX = 2n ** 64n - 1n; const EVICTED_REGISTER = U64_MAX - 1n; export function log(...params) { @@ -118,68 +119,9 @@ export function altBn128PairingCheck(value) { return false; } } -export function jsvmAccountId() { - env.jsvm_account_id(0); - return env.read_register(0); -} -export function jsvmJsContractName() { - env.jsvm_js_contract_name(0); - return env.read_register(0); -} -export function jsvmMethodName() { - env.jsvm_method_name(0); - return env.read_register(0); -} -export function jsvmArgs() { - env.jsvm_args(0); - return env.read_register(0); -} -export function jsvmStorageWrite(key, value) { - let exist = env.jsvm_storage_write(key, value, EVICTED_REGISTER); - if (exist === 1n) { - return true; - } - return false; -} -export function jsvmStorageRead(key) { - let exist = env.jsvm_storage_read(key, 0); - if (exist === 1n) { - return env.read_register(0); - } - return null; -} -export function jsvmStorageRemove(key) { - let exist = env.jsvm_storage_remove(key, EVICTED_REGISTER); - if (exist === 1n) { - return true; - } - return false; -} -export function jsvmStorageHasKey(key) { - let exist = env.jsvm_storage_has_key(key); - if (exist === 1n) { - return true; - } - return false; -} -export function jsvmCallRaw(contractName, method, args) { - env.jsvm_call(contractName, method, JSON.stringify(args), 0); - return env.read_register(0); -} -export function jsvmCall(contractName, method, args) { - let ret = jsvmCallRaw(contractName, method, args); - if (ret === null) { - return ret; - } - return JSON.parse(ret); -} export function storageGetEvicted() { return env.read_register(EVICTED_REGISTER); } -export function jsvmValueReturn(value) { - env.jsvm_value_return(value); -} -// Standalone only APIs export function currentAccountId() { env.current_account_id(0); return env.read_register(0); @@ -242,26 +184,20 @@ export function promiseBatchActionDeleteKey(promiseIndex, publicKey) { export function promiseBatchActionDeleteAccount(promiseIndex, beneficiaryId) { env.promise_batch_action_delete_account(promiseIndex, beneficiaryId); } +export function promiseBatchActionFunctionCallWeight(promiseIndex, methodName, args, amount, gas, weight) { + env.promise_batch_action_function_call_weight(promiseIndex, methodName, args, amount, gas, weight); +} export function promiseResultsCount() { return env.promise_results_count(); } -export var PromiseResult; -(function (PromiseResult) { - PromiseResult[PromiseResult["NotReady"] = 0] = "NotReady"; - PromiseResult[PromiseResult["Successful"] = 1] = "Successful"; - PromiseResult[PromiseResult["Failed"] = 2] = "Failed"; -})(PromiseResult || (PromiseResult = {})); export function promiseResult(resultIdx) { let status = env.promise_result(resultIdx, 0); if (status == PromiseResult.Successful) { return env.read_register(0); } - else if (status == PromiseResult.Failed || - status == PromiseResult.NotReady) { - return status; - } else { - throw Error(`Unexpected return code: ${status}`); + throw Error(`Promise result ${status == PromiseResult.Failed ? "Failed" : + status == PromiseResult.NotReady ? "NotReady" : status}`); } } export function promiseReturn(promiseIdx) { diff --git a/lib/build-tools/include-bytes.d.ts b/lib/build-tools/include-bytes.d.ts new file mode 100644 index 00000000..d016f6f5 --- /dev/null +++ b/lib/build-tools/include-bytes.d.ts @@ -0,0 +1,7 @@ +export default function _default({ types: t }: { + types: any; +}): { + visitor: { + CallExpression(p: any, state: any): void; + }; +}; diff --git a/lib/build-tools/include-bytes.js b/lib/build-tools/include-bytes.js new file mode 100644 index 00000000..265c42cd --- /dev/null +++ b/lib/build-tools/include-bytes.js @@ -0,0 +1,30 @@ +import fs from 'fs'; +import path from 'path'; +export default function ({ types: t }) { + return { + visitor: { + CallExpression(p, state) { + let name = p.node.callee.name; + let args = p.node.arguments; + if (name === 'includeBytes') { + // Get the path of file + var filename = this.file.opts.filename; + // User settings + let root = state.opts.root || path.dirname(filename); + // Read binary file into bytes, so encoding is 'latin1' (each byte is 0-255, become one character) + const encoding = 'latin1'; + // Require first arg to be string + t.assertStringLiteral(args[0]); + // Error if filename is not found + if (filename === undefined || filename === 'unknown') + throw new Error('`includeBytes` function called outside of file'); + // Generate and locate the file + let fileRelPath = args[0].value; // Get literal string value + let filePath = path.join(root, fileRelPath); + let fileSrc = fs.readFileSync(filePath, { encoding }).toString(encoding); + p.replaceWith(t.stringLiteral(fileSrc)); + } + }, + }, + }; +} diff --git a/lib/build-tools/near-bindgen-exporter.js b/lib/build-tools/near-bindgen-exporter.js index d086d3ca..4a201dd0 100644 --- a/lib/build-tools/near-bindgen-exporter.js +++ b/lib/build-tools/near-bindgen-exporter.js @@ -4,51 +4,61 @@ export default function () { visitor: { ClassDeclaration(path) { let classNode = path.node; - if (classNode.decorators && classNode.decorators[0].expression.name == 'NearBindgen') { + if (classNode.decorators && classNode.decorators[0].expression.callee.name == 'NearBindgen') { let classId = classNode.id; let contractMethods = {}; for (let child of classNode.body.body) { if (child.type == 'ClassMethod' && child.kind == 'method' && child.decorators) { - if (child.decorators[0].expression.name == 'call') { + if (child.decorators[0].expression.callee.name == 'call') { let callMethod = child.key.name; contractMethods[callMethod] = 'call'; } - else if (child.decorators[0].expression.name == 'view') { + else if (child.decorators[0].expression.callee.name == 'view') { let viewMethod = child.key.name; contractMethods[viewMethod] = 'view'; } + else if (child.decorators[0].expression.callee.name == 'initialize') { + let initMethod = child.key.name; + contractMethods[initMethod] = 'initialize'; + } } } for (let method of Object.keys(contractMethods)) { path.insertAfter(t.exportNamedDeclaration(t.functionDeclaration(t.identifier(method), [], t.blockStatement([ - // let _contract = ContractClass._get() - t.variableDeclaration('let', [t.variableDeclarator(t.identifier('_contract'), t.callExpression(t.memberExpression(classId, t.identifier('_get')), []))]), - // _contract.deserialize() - t.expressionStatement(t.callExpression(t.memberExpression(t.identifier('_contract'), t.identifier('deserialize')), [])), - // let args = _contract.constructor.deserializeArgs() - t.variableDeclaration('let', [t.variableDeclarator(t.identifier('args'), t.callExpression(t.memberExpression(t.memberExpression(t.identifier('_contract'), t.identifier('constructor')), t.identifier('deserializeArgs')), []))]), - // let ret = _contract.method(args) - t.variableDeclaration('let', [t.variableDeclarator(t.identifier('ret'), t.callExpression(t.memberExpression(t.identifier('_contract'), t.identifier(method)), [t.identifier('args')]))]), - contractMethods[method] == 'call' ? - // _contract.serialize() - t.expressionStatement(t.callExpression(t.memberExpression(t.identifier('_contract'), t.identifier('serialize')), [])) + // const _state = Counter._getState(); + t.variableDeclaration('let', [t.variableDeclarator(t.identifier('_state'), t.callExpression(t.memberExpression(classId, t.identifier('_getState')), []))]), + contractMethods[method] === 'initialize' ? + // if (_state) { throw new Error('Contract already initialized'); } + t.ifStatement(t.identifier('_state'), t.throwStatement(t.newExpression(t.identifier('Error'), [t.stringLiteral('Contract already initialized')]))) + : t.emptyStatement(), + contractMethods[method] === 'call' || contractMethods[method] === 'view' ? + // if (!_state) { throw new Error('Contract must be initialized'); } + t.ifStatement(t.logicalExpression('&&', t.unaryExpression('!', t.identifier('_state')), t.callExpression(t.memberExpression(classId, t.identifier('_requireInit')), [])), t.blockStatement([t.throwStatement(t.newExpression(t.identifier('Error'), [t.stringLiteral('Contract must be initialized')]))])) + : t.emptyStatement(), + // let _contract = Counter._create(); + t.variableDeclaration('let', [t.variableDeclarator(t.identifier('_contract'), t.callExpression(t.memberExpression(classId, t.identifier('_create')), []))]), + contractMethods[method] === 'call' || contractMethods[method] === 'view' ? + // if (_state) { Object.assign(_contract, state); } + t.ifStatement(t.identifier('_state'), t.blockStatement([t.expressionStatement(t.callExpression(t.memberExpression(classId, t.identifier('_reconstruct')), [t.identifier('_contract'), t.identifier('_state')]))])) : t.emptyStatement(), + // let _args = Counter._getArgs(); + t.variableDeclaration('let', [t.variableDeclarator(t.identifier('_args'), t.callExpression(t.memberExpression(classId, t.identifier('_getArgs')), []))]), + // let _result = _contract.method(args); + t.variableDeclaration('let', [t.variableDeclarator(t.identifier('_result'), t.callExpression(t.memberExpression(t.identifier('_contract'), t.identifier(method)), [t.identifier('_args')]))]), + contractMethods[method] === 'initialize' || contractMethods[method] === 'call' ? + // Counter._saveToStorage(_contract); + t.expressionStatement(t.callExpression(t.memberExpression(classId, t.identifier('_saveToStorage')), [t.identifier('_contract')])) : t.emptyStatement(), - // if (ret !== undefined) - t.ifStatement(t.binaryExpression('!==', t.identifier('ret'), t.identifier('undefined')), - // env.value_return(_contract.constructor.serializeReturn(ret)) - t.expressionStatement(t.callExpression(t.memberExpression(t.identifier('env'), t.identifier('value_return')), [ - t.callExpression(t.memberExpression(t.memberExpression(t.identifier('_contract'), t.identifier('constructor')), t.identifier('serializeReturn')), [t.identifier('ret')]) - ]))) - ])), [t.exportSpecifier(t.identifier(method), t.identifier(method))])); - path.scope.registerDeclaration(path.getSibling(path.key + 1)); + // if (_result !== undefined) + // if (_result && _result.constructor && _result.constructor.name === 'NearPromise') + // _result.onReturn(); + // else + // near.valueReturn(_contract._serialize(result)); + t.ifStatement(t.binaryExpression('!==', t.identifier('_result'), t.identifier('undefined')), t.ifStatement(t.logicalExpression('&&', t.logicalExpression('&&', t.identifier('_result'), t.memberExpression(t.identifier('_result'), t.identifier('constructor'))), t.binaryExpression('===', t.memberExpression(t.memberExpression(t.identifier('_result'), t.identifier('constructor')), t.identifier('name')), t.stringLiteral('NearPromise'))), t.expressionStatement(t.callExpression(t.memberExpression(t.identifier('_result'), t.identifier('onReturn')), [])), t.expressionStatement(t.callExpression(t.memberExpression(t.identifier('env'), t.identifier('value_return')), [t.callExpression(t.memberExpression(classId, t.identifier('_serialize')), [t.identifier('_result')])])))) + ])))); + console.log(`Babel ${method} method export done`); } - path.insertAfter(t.exportNamedDeclaration(t.functionDeclaration(t.identifier('init'), [], t.blockStatement([ - t.expressionStatement(t.callExpression(t.memberExpression(classId, t.identifier('_init')), [])), - ])), [t.exportSpecifier(t.identifier('init'), t.identifier('init'))])); - path.scope.registerDeclaration(path.getSibling(path.key + 1)); - console.log('Near bindgen export done'); } - }, - }, + } + } }; } diff --git a/lib/collections/lookup-map.d.ts b/lib/collections/lookup-map.d.ts index ce306dc2..8ab995da 100644 --- a/lib/collections/lookup-map.d.ts +++ b/lib/collections/lookup-map.d.ts @@ -8,5 +8,5 @@ export declare class LookupMap { set(key: Bytes, value: unknown): unknown | null; extend(objects: [Bytes, unknown][]): void; serialize(): string; - static deserialize(data: LookupMap): LookupMap; + static reconstruct(data: LookupMap): LookupMap; } diff --git a/lib/collections/lookup-map.js b/lib/collections/lookup-map.js index ed0b5f47..837a4640 100644 --- a/lib/collections/lookup-map.js +++ b/lib/collections/lookup-map.js @@ -39,7 +39,7 @@ export class LookupMap { return JSON.stringify(this); } // converting plain object to class object - static deserialize(data) { + static reconstruct(data) { return new LookupMap(data.keyPrefix); } } diff --git a/lib/collections/lookup-set.d.ts b/lib/collections/lookup-set.d.ts index 36af50dc..d8f3ef5e 100644 --- a/lib/collections/lookup-set.d.ts +++ b/lib/collections/lookup-set.d.ts @@ -7,5 +7,5 @@ export declare class LookupSet { set(key: Bytes): boolean; extend(keys: Bytes[]): void; serialize(): string; - static deserialize(data: LookupSet): LookupSet; + static reconstruct(data: LookupSet): LookupSet; } diff --git a/lib/collections/lookup-set.js b/lib/collections/lookup-set.js index aa80dd1f..9ba56dba 100644 --- a/lib/collections/lookup-set.js +++ b/lib/collections/lookup-set.js @@ -27,7 +27,7 @@ export class LookupSet { return JSON.stringify(this); } // converting plain object to class object - static deserialize(data) { + static reconstruct(data) { return new LookupSet(data.keyPrefix); } } diff --git a/lib/collections/unordered-map.d.ts b/lib/collections/unordered-map.d.ts index eb31a883..76995b58 100644 --- a/lib/collections/unordered-map.d.ts +++ b/lib/collections/unordered-map.d.ts @@ -1,13 +1,12 @@ import { Bytes } from "../utils"; import { Vector } from "./vector"; +import { LookupMap } from "./lookup-map"; export declare class UnorderedMap { - readonly length: number; readonly prefix: Bytes; - readonly keyIndexPrefix: Bytes; readonly keys: Vector; - readonly values: Vector; + readonly values: LookupMap; constructor(prefix: Bytes); - len(): number; + get length(): number; isEmpty(): boolean; get(key: Bytes): unknown | null; set(key: Bytes, value: unknown): unknown | null; @@ -17,11 +16,11 @@ export declare class UnorderedMap { [Symbol.iterator](): UnorderedMapIterator; extend(kvs: [Bytes, unknown][]): void; serialize(): string; - static deserialize(data: UnorderedMap): UnorderedMap; + static reconstruct(data: UnorderedMap): UnorderedMap; } declare class UnorderedMapIterator { private keys; - private values; + private map; constructor(unorderedMap: UnorderedMap); next(): { value: [unknown | null, unknown | null]; diff --git a/lib/collections/unordered-map.js b/lib/collections/unordered-map.js index b644d262..070f74e6 100644 --- a/lib/collections/unordered-map.js +++ b/lib/collections/unordered-map.js @@ -1,115 +1,68 @@ -import * as near from "../api"; -import { u8ArrayToBytes, bytesToU8Array } from "../utils"; import { Vector, VectorIterator } from "./vector"; +import { LookupMap } from "./lookup-map"; const ERR_INCONSISTENT_STATE = "The collection is an inconsistent state. Did previous smart contract execution terminate unexpectedly?"; -function serializeIndex(index) { - let data = new Uint32Array([index]); - let array = new Uint8Array(data.buffer); - return u8ArrayToBytes(array); -} -function deserializeIndex(rawIndex) { - let array = bytesToU8Array(rawIndex); - let data = new Uint32Array(array.buffer); - return data[0]; -} -function getIndexRaw(keyIndexPrefix, key) { - let indexLookup = keyIndexPrefix + JSON.stringify(key); - let indexRaw = near.storageRead(indexLookup); - return indexRaw; -} export class UnorderedMap { constructor(prefix) { - this.length = 0; this.prefix = prefix; - this.keyIndexPrefix = prefix + "i"; - let indexKey = prefix + "k"; - let indexValue = prefix + "v"; - this.keys = new Vector(indexKey); - this.values = new Vector(indexValue); + this.keys = new Vector(prefix + 'u'); // intentional different prefix with old UnorderedMap + this.values = new LookupMap(prefix + 'm'); } - len() { - let keysLen = this.keys.len(); - let valuesLen = this.values.len(); - if (keysLen != valuesLen) { - throw new Error(ERR_INCONSISTENT_STATE); - } + get length() { + let keysLen = this.keys.length; return keysLen; } isEmpty() { let keysIsEmpty = this.keys.isEmpty(); - let valuesIsEmpty = this.values.isEmpty(); - if (keysIsEmpty != valuesIsEmpty) { - throw new Error(ERR_INCONSISTENT_STATE); - } return keysIsEmpty; } get(key) { - let indexRaw = getIndexRaw(this.keyIndexPrefix, key); - if (indexRaw) { - let index = deserializeIndex(indexRaw); - let value = this.values.get(index); - if (value) { - return value; - } - else { - throw new Error(ERR_INCONSISTENT_STATE); - } + let valueAndIndex = this.values.get(key); + if (valueAndIndex === null) { + return null; } - return null; + let value = valueAndIndex[0]; + return value; } set(key, value) { - let indexLookup = this.keyIndexPrefix + JSON.stringify(key); - let indexRaw = near.storageRead(indexLookup); - if (indexRaw) { - let index = deserializeIndex(indexRaw); - return this.values.replace(index, value); - } - else { - let nextIndex = this.len(); - let nextIndexRaw = serializeIndex(nextIndex); - near.storageWrite(indexLookup, nextIndexRaw); - this.keys.push(key); - this.values.push(value); - return null; + let valueAndIndex = this.values.get(key); + if (valueAndIndex !== null) { + let oldValue = valueAndIndex[0]; + valueAndIndex[0] = value; + this.values.set(key, valueAndIndex); + return oldValue; } + let nextIndex = this.length; + this.keys.push(key); + this.values.set(key, [value, nextIndex]); + return null; } remove(key) { - let indexLookup = this.keyIndexPrefix + JSON.stringify(key); - let indexRaw = near.storageRead(indexLookup); - if (indexRaw) { - if (this.len() == 1) { - // If there is only one element then swap remove simply removes it without - // swapping with the last element. - near.storageRemove(indexLookup); - } - else { - // If there is more than one element then swap remove swaps it with the last - // element. - let lastKey = this.keys.get(this.len() - 1); - if (!lastKey) { - throw new Error(ERR_INCONSISTENT_STATE); - } - near.storageRemove(indexLookup); - // If the removed element was the last element from keys, then we don't need to - // reinsert the lookup back. - if (lastKey != key) { - let lastLookupKey = this.keyIndexPrefix + JSON.stringify(lastKey); - near.storageWrite(lastLookupKey, indexRaw); - } + let oldValueAndIndex = this.values.remove(key); + if (oldValueAndIndex === null) { + return null; + } + let index = oldValueAndIndex[1]; + if (this.keys.swapRemove(index) === null) { + throw new Error(ERR_INCONSISTENT_STATE); + } + // the last key is swapped to key[index], the corresponding [value, index] need update + if (this.keys.length > 0 && index != this.keys.length) { + // if there is still elements and it was not the last element + let swappedKey = this.keys.get(index); + let swappedValueAndIndex = this.values.get(swappedKey); + if (swappedValueAndIndex === null) { + throw new Error(ERR_INCONSISTENT_STATE); } - let index = deserializeIndex(indexRaw); - this.keys.swapRemove(index); - return this.values.swapRemove(index); + this.values.set(swappedKey, [swappedValueAndIndex[0], index]); } - return null; + return oldValueAndIndex[0]; } clear() { for (let key of this.keys) { - let indexLookup = this.keyIndexPrefix + JSON.stringify(key); - near.storageRemove(indexLookup); + // Set instead of remove to avoid loading the value from storage. + this.values.set(key, null); } this.keys.clear(); - this.values.clear(); } toArray() { let ret = []; @@ -130,30 +83,30 @@ export class UnorderedMap { return JSON.stringify(this); } // converting plain object to class object - static deserialize(data) { + static reconstruct(data) { let map = new UnorderedMap(data.prefix); - // reconstruct UnorderedMap - map.length = data.length; // reconstruct keys Vector - map.keys = new Vector(data.prefix + "k"); + map.keys = new Vector(data.prefix + "u"); map.keys.length = data.keys.length; - // reconstruct values Vector - map.values = new Vector(data.prefix + "v"); - map.values.length = data.values.length; + // reconstruct values LookupMap + map.values = new LookupMap(data.prefix + "m"); return map; } } class UnorderedMapIterator { constructor(unorderedMap) { this.keys = new VectorIterator(unorderedMap.keys); - this.values = new VectorIterator(unorderedMap.values); + this.map = unorderedMap.values; } next() { let key = this.keys.next(); - let value = this.values.next(); - if (key.done != value.done) { - throw new Error(ERR_INCONSISTENT_STATE); + let value; + if (!key.done) { + value = this.map.get(key.value); + if (value === null) { + throw new Error(ERR_INCONSISTENT_STATE); + } } - return { value: [key.value, value.value], done: key.done }; + return { value: [key.value, value ? value[0] : value], done: key.done }; } } diff --git a/lib/collections/unordered-set.d.ts b/lib/collections/unordered-set.d.ts index 4db030d9..b7de5f03 100644 --- a/lib/collections/unordered-set.d.ts +++ b/lib/collections/unordered-set.d.ts @@ -1,12 +1,11 @@ import { Bytes } from "../utils"; import { Vector } from "./vector"; export declare class UnorderedSet { - readonly length: number; readonly prefix: Bytes; readonly elementIndexPrefix: Bytes; readonly elements: Vector; constructor(prefix: Bytes); - len(): number; + get length(): number; isEmpty(): boolean; contains(element: unknown): boolean; set(element: unknown): boolean; @@ -16,5 +15,5 @@ export declare class UnorderedSet { [Symbol.iterator](): import("./vector").VectorIterator; extend(elements: unknown[]): void; serialize(): string; - static deserialize(data: UnorderedSet): UnorderedSet; + static reconstruct(data: UnorderedSet): UnorderedSet; } diff --git a/lib/collections/unordered-set.js b/lib/collections/unordered-set.js index 5466bc86..581f8f5c 100644 --- a/lib/collections/unordered-set.js +++ b/lib/collections/unordered-set.js @@ -14,14 +14,13 @@ function deserializeIndex(rawIndex) { } export class UnorderedSet { constructor(prefix) { - this.length = 0; this.prefix = prefix; this.elementIndexPrefix = prefix + "i"; let elementsPrefix = prefix + "e"; this.elements = new Vector(elementsPrefix); } - len() { - return this.elements.len(); + get length() { + return this.elements.length; } isEmpty() { return this.elements.isEmpty(); @@ -36,7 +35,7 @@ export class UnorderedSet { return false; } else { - let nextIndex = this.len(); + let nextIndex = this.length; let nextIndexRaw = serializeIndex(nextIndex); near.storageWrite(indexLookup, nextIndexRaw); this.elements.push(element); @@ -47,7 +46,7 @@ export class UnorderedSet { let indexLookup = this.elementIndexPrefix + JSON.stringify(element); let indexRaw = near.storageRead(indexLookup); if (indexRaw) { - if (this.len() == 1) { + if (this.length == 1) { // If there is only one element then swap remove simply removes it without // swapping with the last element. near.storageRemove(indexLookup); @@ -55,7 +54,7 @@ export class UnorderedSet { else { // If there is more than one element then swap remove swaps it with the last // element. - let lastElement = this.elements.get(this.len() - 1); + let lastElement = this.elements.get(this.length - 1); if (!lastElement) { throw new Error(ERR_INCONSISTENT_STATE); } @@ -99,10 +98,8 @@ export class UnorderedSet { return JSON.stringify(this); } // converting plain object to class object - static deserialize(data) { + static reconstruct(data) { let set = new UnorderedSet(data.prefix); - // reconstruct UnorderedSet - set.length = data.length; // reconstruct Vector let elementsPrefix = data.prefix + "e"; set.elements = new Vector(elementsPrefix); diff --git a/lib/collections/vector.d.ts b/lib/collections/vector.d.ts index a8eae58d..70e5a54b 100644 --- a/lib/collections/vector.d.ts +++ b/lib/collections/vector.d.ts @@ -3,7 +3,6 @@ export declare class Vector { length: number; readonly prefix: Bytes; constructor(prefix: Bytes); - len(): number; isEmpty(): boolean; get(index: number): unknown | null; swapRemove(index: number): unknown | null; @@ -15,7 +14,7 @@ export declare class Vector { clear(): void; toArray(): unknown[]; serialize(): string; - static deserialize(data: Vector): Vector; + static reconstruct(data: Vector): Vector; } export declare class VectorIterator { private current; diff --git a/lib/collections/vector.js b/lib/collections/vector.js index 9bc1a706..e9548621 100644 --- a/lib/collections/vector.js +++ b/lib/collections/vector.js @@ -15,9 +15,6 @@ export class Vector { this.length = 0; this.prefix = prefix; } - len() { - return this.length; - } isEmpty() { return this.length == 0; } @@ -110,7 +107,7 @@ export class Vector { return JSON.stringify(this); } // converting plain object to class object - static deserialize(data) { + static reconstruct(data) { let vector = new Vector(data.prefix); vector.length = data.length; return vector; @@ -122,7 +119,7 @@ export class VectorIterator { this.vector = vector; } next() { - if (this.current < this.vector.len()) { + if (this.current < this.vector.length) { let value = this.vector.get(this.current); this.current += 1; return { value, done: false }; diff --git a/lib/index.d.ts b/lib/index.d.ts index bc77bf6d..3643c08f 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -1,7 +1,6 @@ -import { call, view, NearBindgen } from "./near-bindgen"; -import { NearContract } from "./near-contract"; +import { call, view, initialize, NearBindgen } from "./near-bindgen"; import * as near from "./api"; import { LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet } from "./collections"; import { bytes, Bytes, assert } from "./utils"; -import "./types"; -export { call, view, NearBindgen, NearContract, near, LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet, bytes, Bytes, assert, }; +import { NearPromise, PromiseOrValue } from "./promise"; +export { call, view, initialize, NearBindgen, near, LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet, bytes, Bytes, assert, NearPromise, PromiseOrValue }; diff --git a/lib/index.js b/lib/index.js index f95422c7..836c2647 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,7 +1,6 @@ -import { call, view, NearBindgen } from "./near-bindgen"; -import { NearContract } from "./near-contract"; +import { call, view, initialize, NearBindgen } from "./near-bindgen"; import * as near from "./api"; import { LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet, } from "./collections"; import { bytes, assert } from "./utils"; -import "./types"; -export { call, view, NearBindgen, NearContract, near, LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet, bytes, assert, }; +import { NearPromise } from "./promise"; +export { call, view, initialize, NearBindgen, near, LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet, bytes, assert, NearPromise }; diff --git a/lib/near-bindgen.d.ts b/lib/near-bindgen.d.ts index a26512d4..67608c49 100644 --- a/lib/near-bindgen.d.ts +++ b/lib/near-bindgen.d.ts @@ -1,9 +1,19 @@ -export declare function call(target: Object, key: string | symbol, descriptor: TypedPropertyDescriptor): void; -export declare function view(target: Object, key: string | symbol, descriptor: TypedPropertyDescriptor): void; -export declare function NearBindgen) => void; +export declare function call({ privateFunction, payableFunction }: { + privateFunction?: boolean; + payableFunction?: boolean; +}): (target: Object, key: string | symbol, descriptor: TypedPropertyDescriptor) => void; +export declare function view({}: {}): (target: Object, key: string | symbol, descriptor: TypedPropertyDescriptor) => void; +export declare function NearBindgen({ requireInit }: { + requireInit?: boolean; +}): {}>(target: T) => { new (...args: any[]): {}; -}>(target: T): { - new (...args: any[]): {}; - _init(): {}; - _get(): any; + _create(): {}; + _getState(): Object; + _saveToStorage(obj: Object): void; + _getArgs(): JSON; + _serialize(value: Object): string; + _deserialize(value: string): Object; + _reconstruct(classObject: any, plainObject: JSON): any; + _requireInit(): boolean; } & T; diff --git a/lib/near-bindgen.js b/lib/near-bindgen.js index 6145f87c..2aae629f 100644 --- a/lib/near-bindgen.js +++ b/lib/near-bindgen.js @@ -1,22 +1,62 @@ -export function call(target, key, descriptor) { +import * as near from "./api"; +export function initialize({}) { + return function (target, key, descriptor) { + }; +} +export function call({ privateFunction = false, payableFunction = false }) { + return function (target, key, descriptor) { + const originalMethod = descriptor.value; + descriptor.value = function (...args) { + if (privateFunction && near.predecessorAccountId() !== near.currentAccountId()) { + throw Error("Function is private"); + } + if (!payableFunction && near.attachedDeposit() > BigInt(0)) { + throw Error("Function is not payable"); + } + return originalMethod.apply(this, args); + }; + }; } -export function view(target, key, descriptor) { +export function view({}) { + return function (target, key, descriptor) { + }; } -export function NearBindgen(target) { - return class extends target { - static _init() { - // @ts-ignore - let args = target.deserializeArgs(); - let ret = new target(args); - // @ts-ignore - ret.init(); - // @ts-ignore - ret.serialize(); - return ret; - } - static _get() { - let ret = Object.create(target.prototype); - return ret; - } +export function NearBindgen({ requireInit = false }) { + return (target) => { + return class extends target { + static _create() { + return new target(); + } + static _getState() { + const rawState = near.storageRead("STATE"); + return rawState ? this._deserialize(rawState) : null; + } + static _saveToStorage(obj) { + near.storageWrite("STATE", this._serialize(obj)); + } + static _getArgs() { + return JSON.parse(near.input() || "{}"); + } + static _serialize(value) { + return JSON.stringify(value); + } + static _deserialize(value) { + return JSON.parse(value); + } + static _reconstruct(classObject, plainObject) { + for (const item in classObject) { + if (classObject[item].constructor?.reconstruct !== undefined) { + classObject[item] = classObject[item].constructor.reconstruct(plainObject[item]); + } + else { + classObject[item] = plainObject[item]; + } + } + return classObject; + } + static _requireInit() { + return requireInit; + } + }; }; } diff --git a/lib/near-contract.d.ts b/lib/near-contract.d.ts deleted file mode 100644 index 6ebb4963..00000000 --- a/lib/near-contract.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -export declare abstract class NearContract { - deserialize(): void; - serialize(): void; - static deserializeArgs(): any; - static serializeReturn(ret: any): string; - abstract default(): any; - init(): any; -} diff --git a/lib/near-contract.js b/lib/near-contract.js deleted file mode 100644 index 13a11783..00000000 --- a/lib/near-contract.js +++ /dev/null @@ -1,31 +0,0 @@ -import * as near from "./api"; -export class NearContract { - deserialize() { - const rawState = near.storageRead("STATE"); - if (rawState) { - const state = JSON.parse(rawState); - // reconstruction of the contract class object from plain object - let c = this.default(); - Object.assign(this, state); - for (const item in c) { - if (c[item].constructor?.deserialize !== undefined) { - this[item] = c[item].constructor.deserialize(this[item]); - } - } - } - else { - throw new Error("Contract state is empty"); - } - } - serialize() { - near.storageWrite("STATE", JSON.stringify(this)); - } - static deserializeArgs() { - let args = near.input(); - return JSON.parse(args || "{}"); - } - static serializeReturn(ret) { - return JSON.stringify(ret); - } - init() { } -} diff --git a/lib/promise.d.ts b/lib/promise.d.ts new file mode 100644 index 00000000..936ac453 --- /dev/null +++ b/lib/promise.d.ts @@ -0,0 +1,109 @@ +import { Bytes } from "./utils"; +import { Balance, PublicKey, AccountId, Gas, GasWeight } from "./types"; +import { Nonce } from "./types/primitives"; +export declare abstract class PromiseAction { + abstract add(promise_index: number | bigint): void; +} +export declare class CreateAccount extends PromiseAction { + add(promise_index: number | bigint): void; +} +export declare class DeployContract extends PromiseAction { + code: Bytes; + constructor(code: Bytes); + add(promise_index: number | bigint): void; +} +export declare class FunctionCall extends PromiseAction { + function_name: string; + args: Bytes; + amount: Balance; + gas: Gas; + constructor(function_name: string, args: Bytes, amount: Balance, gas: Gas); + add(promise_index: number | bigint): void; +} +export declare class FunctionCallWeight extends PromiseAction { + function_name: string; + args: Bytes; + amount: Balance; + gas: Gas; + weight: GasWeight; + constructor(function_name: string, args: Bytes, amount: Balance, gas: Gas, weight: GasWeight); + add(promise_index: number | bigint): void; +} +export declare class Transfer extends PromiseAction { + amount: Balance; + constructor(amount: Balance); + add(promise_index: number | bigint): void; +} +export declare class Stake extends PromiseAction { + amount: Balance; + public_key: PublicKey; + constructor(amount: Balance, public_key: PublicKey); + add(promise_index: number | bigint): void; +} +export declare class AddFullAccessKey extends PromiseAction { + public_key: PublicKey; + nonce: Nonce; + constructor(public_key: PublicKey, nonce: Nonce); + add(promise_index: number | bigint): void; +} +export declare class AddAccessKey extends PromiseAction { + public_key: PublicKey; + allowance: Balance; + receiver_id: AccountId; + function_names: string; + nonce: Nonce; + constructor(public_key: PublicKey, allowance: Balance, receiver_id: AccountId, function_names: string, nonce: Nonce); + add(promise_index: number | bigint): void; +} +export declare class DeleteKey extends PromiseAction { + public_key: PublicKey; + constructor(public_key: PublicKey); + add(promise_index: number | bigint): void; +} +export declare class DeleteAccount extends PromiseAction { + beneficiary_id: AccountId; + constructor(beneficiary_id: AccountId); + add(promise_index: number | bigint): void; +} +declare class PromiseSingle { + account_id: AccountId; + actions: PromiseAction[]; + after: NearPromise | null; + promise_index: number | bigint | null; + constructor(account_id: AccountId, actions: PromiseAction[], after: NearPromise | null, promise_index: number | bigint | null); + constructRecursively(): number | bigint; +} +export declare class PromiseJoint { + promise_a: NearPromise; + promise_b: NearPromise; + promise_index: number | bigint | null; + constructor(promise_a: NearPromise, promise_b: NearPromise, promise_index: number | bigint | null); + constructRecursively(): number | bigint; +} +declare type PromiseSubtype = PromiseSingle | PromiseJoint; +export declare class NearPromise { + private subtype; + private should_return; + constructor(subtype: PromiseSubtype, should_return: boolean); + static new(account_id: AccountId): NearPromise; + private add_action; + createAccount(): NearPromise; + deployContract(code: Bytes): NearPromise; + functionCall(function_name: string, args: Bytes, amount: Balance, gas: Gas): NearPromise; + functionCallWeight(function_name: string, args: Bytes, amount: Balance, gas: Gas, weight: GasWeight): NearPromise; + transfer(amount: Balance): NearPromise; + stake(amount: Balance, public_key: PublicKey): NearPromise; + addFullAccessKey(public_key: PublicKey): NearPromise; + addFullAccessKeyWithNonce(public_key: PublicKey, nonce: Nonce): NearPromise; + addAccessKey(public_key: PublicKey, allowance: Balance, receiver_id: AccountId, method_names: string): NearPromise; + addAccessKeyWithNonce(public_key: PublicKey, allowance: Balance, receiver_id: AccountId, method_names: string, nonce: Nonce): NearPromise; + deleteKey(public_key: PublicKey): NearPromise; + deleteAccount(beneficiary_id: AccountId): NearPromise; + and(other: NearPromise): NearPromise; + then(other: NearPromise): NearPromise; + asReturn(): NearPromise; + constructRecursively(): number | bigint; + onReturn(): void; +} +export declare type PromiseOrValue = NearPromise | T; +export {}; diff --git a/lib/promise.js b/lib/promise.js new file mode 100644 index 00000000..f71c0010 --- /dev/null +++ b/lib/promise.js @@ -0,0 +1,230 @@ +import * as near from "./api"; +export class PromiseAction { +} +export class CreateAccount extends PromiseAction { + add(promise_index) { + near.promiseBatchActionCreateAccount(promise_index); + } +} +export class DeployContract extends PromiseAction { + constructor(code) { + super(); + this.code = code; + } + add(promise_index) { + near.promiseBatchActionDeployContract(promise_index, this.code); + } +} +export class FunctionCall extends PromiseAction { + constructor(function_name, args, amount, gas) { + super(); + this.function_name = function_name; + this.args = args; + this.amount = amount; + this.gas = gas; + } + add(promise_index) { + near.promiseBatchActionFunctionCall(promise_index, this.function_name, this.args, this.amount, this.gas); + } +} +export class FunctionCallWeight extends PromiseAction { + constructor(function_name, args, amount, gas, weight) { + super(); + this.function_name = function_name; + this.args = args; + this.amount = amount; + this.gas = gas; + this.weight = weight; + } + add(promise_index) { + near.promiseBatchActionFunctionCallWeight(promise_index, this.function_name, this.args, this.amount, this.gas, this.weight); + } +} +export class Transfer extends PromiseAction { + constructor(amount) { + super(); + this.amount = amount; + } + add(promise_index) { + near.promiseBatchActionTransfer(promise_index, this.amount); + } +} +export class Stake extends PromiseAction { + constructor(amount, public_key) { + super(); + this.amount = amount; + this.public_key = public_key; + } + add(promise_index) { + near.promiseBatchActionStake(promise_index, this.amount, this.public_key.data); + } +} +export class AddFullAccessKey extends PromiseAction { + constructor(public_key, nonce) { + super(); + this.public_key = public_key; + this.nonce = nonce; + } + add(promise_index) { + near.promiseBatchActionAddKeyWithFullAccess(promise_index, this.public_key.data, this.nonce); + } +} +export class AddAccessKey extends PromiseAction { + constructor(public_key, allowance, receiver_id, function_names, nonce) { + super(); + this.public_key = public_key; + this.allowance = allowance; + this.receiver_id = receiver_id; + this.function_names = function_names; + this.nonce = nonce; + } + add(promise_index) { + near.promiseBatchActionAddKeyWithFunctionCall(promise_index, this.public_key.data, this.nonce, this.allowance, this.receiver_id, this.function_names); + } +} +export class DeleteKey extends PromiseAction { + constructor(public_key) { + super(); + this.public_key = public_key; + } + add(promise_index) { + near.promiseBatchActionDeleteKey(promise_index, this.public_key.data); + } +} +export class DeleteAccount extends PromiseAction { + constructor(beneficiary_id) { + super(); + this.beneficiary_id = beneficiary_id; + } + add(promise_index) { + near.promiseBatchActionDeleteAccount(promise_index, this.beneficiary_id); + } +} +class PromiseSingle { + constructor(account_id, actions, after, promise_index) { + this.account_id = account_id; + this.actions = actions; + this.after = after; + this.promise_index = promise_index; + } + constructRecursively() { + if (this.promise_index !== null) { + return this.promise_index; + } + let promise_index; + if (this.after) { + promise_index = near.promiseBatchThen(this.after.constructRecursively(), this.account_id); + } + else { + promise_index = near.promiseBatchCreate(this.account_id); + } + for (let action of this.actions) { + action.add(promise_index); + } + this.promise_index = promise_index; + return promise_index; + } +} +export class PromiseJoint { + constructor(promise_a, promise_b, promise_index) { + this.promise_a = promise_a; + this.promise_b = promise_b; + this.promise_index = promise_index; + } + constructRecursively() { + if (this.promise_index !== null) { + return this.promise_index; + } + let res = near.promiseAnd(BigInt(this.promise_a.constructRecursively()), BigInt(this.promise_b.constructRecursively())); + this.promise_index = res; + return res; + } +} +export class NearPromise { + constructor(subtype, should_return) { + this.subtype = subtype; + this.should_return = should_return; + } + static new(account_id) { + let subtype = new PromiseSingle(account_id, [], null, null); + let ret = new NearPromise(subtype, false); + return ret; + } + add_action(action) { + if (this.subtype instanceof PromiseJoint) { + throw new Error("Cannot add action to a joint promise."); + } + else { + this.subtype.actions.push(action); + } + return this; + } + createAccount() { + return this.add_action(new CreateAccount()); + } + deployContract(code) { + return this.add_action(new DeployContract(code)); + } + functionCall(function_name, args, amount, gas) { + return this.add_action(new FunctionCall(function_name, args, amount, gas)); + } + functionCallWeight(function_name, args, amount, gas, weight) { + return this.add_action(new FunctionCallWeight(function_name, args, amount, gas, weight)); + } + transfer(amount) { + return this.add_action(new Transfer(amount)); + } + stake(amount, public_key) { + return this.add_action(new Stake(amount, public_key)); + } + addFullAccessKey(public_key) { + return this.addFullAccessKeyWithNonce(public_key, 0n); + } + addFullAccessKeyWithNonce(public_key, nonce) { + return this.add_action(new AddFullAccessKey(public_key, nonce)); + } + addAccessKey(public_key, allowance, receiver_id, method_names) { + return this.addAccessKeyWithNonce(public_key, allowance, receiver_id, method_names, 0n); + } + addAccessKeyWithNonce(public_key, allowance, receiver_id, method_names, nonce) { + return this.add_action(new AddAccessKey(public_key, allowance, receiver_id, method_names, nonce)); + } + deleteKey(public_key) { + return this.add_action(new DeleteKey(public_key)); + } + deleteAccount(beneficiary_id) { + return this.add_action(new DeleteAccount(beneficiary_id)); + } + and(other) { + let subtype = new PromiseJoint(this, other, null); + let ret = new NearPromise(subtype, false); + return ret; + } + then(other) { + if (other.subtype instanceof PromiseSingle) { + if (other.subtype.after !== null) { + throw new Error("Cannot callback promise which is already scheduled after another"); + } + other.subtype.after = this; + } + else { + throw new Error("Cannot callback joint promise."); + } + return other; + } + asReturn() { + this.should_return = true; + return this; + } + constructRecursively() { + let res = this.subtype.constructRecursively(); + if (this.should_return) { + near.promiseReturn(res); + } + return res; + } + // Called by NearBindgen, when return object is a NearPromise instance. + onReturn() { + this.asReturn().constructRecursively(); + } +} diff --git a/lib/types/gas.d.ts b/lib/types/gas.d.ts new file mode 100644 index 00000000..a69c177c --- /dev/null +++ b/lib/types/gas.d.ts @@ -0,0 +1,2 @@ +export declare type Gas = bigint; +export declare const ONE_TERA_GAS: Gas; diff --git a/lib/types/gas.js b/lib/types/gas.js new file mode 100644 index 00000000..1708a5f4 --- /dev/null +++ b/lib/types/gas.js @@ -0,0 +1 @@ +export const ONE_TERA_GAS = 1000000000000n; diff --git a/lib/types/index.d.ts b/lib/types/index.d.ts index 5f3628ed..82da4d59 100644 --- a/lib/types/index.d.ts +++ b/lib/types/index.d.ts @@ -1,2 +1,9 @@ import { AccountId } from "./account_id"; -export { AccountId }; +import { BlockHeight, EpochHeight, Balance, StorageUsage } from './primitives'; +import { PromiseResult, PromiseError, PromiseIndex, ReceiptIndex, IteratorIndex } from "./vm_types"; +import { Gas, ONE_TERA_GAS } from "./gas"; +import { PublicKey, CurveType, curveTypeFromStr, ParsePublicKeyError, InvalidLengthError, Base58Error, UnknownCurve } from "./public_key"; +export { AccountId, BlockHeight, EpochHeight, Balance, StorageUsage, PromiseResult, PromiseError, PromiseIndex, ReceiptIndex, IteratorIndex, Gas, ONE_TERA_GAS, PublicKey, CurveType, curveTypeFromStr, ParsePublicKeyError, InvalidLengthError, Base58Error, UnknownCurve }; +export declare type GasWeight = bigint; +export declare const ONE_YOCTO: Balance; +export declare const ONE_NEAR: Balance; diff --git a/lib/types/index.js b/lib/types/index.js index cb0ff5c3..4efb790e 100644 --- a/lib/types/index.js +++ b/lib/types/index.js @@ -1 +1,6 @@ -export {}; +import { PromiseResult, PromiseError } from "./vm_types"; +import { ONE_TERA_GAS } from "./gas"; +import { PublicKey, CurveType, curveTypeFromStr, ParsePublicKeyError, InvalidLengthError, Base58Error, UnknownCurve } from "./public_key"; +export { PromiseResult, PromiseError, ONE_TERA_GAS, PublicKey, CurveType, curveTypeFromStr, ParsePublicKeyError, InvalidLengthError, Base58Error, UnknownCurve }; +export const ONE_YOCTO = 1n; +export const ONE_NEAR = 1000000000000000000000000n; diff --git a/lib/types/primitives.d.ts b/lib/types/primitives.d.ts new file mode 100644 index 00000000..6cd71162 --- /dev/null +++ b/lib/types/primitives.d.ts @@ -0,0 +1,5 @@ +export declare type StorageUsage = bigint; +export declare type BlockHeight = bigint; +export declare type EpochHeight = bigint; +export declare type Balance = bigint; +export declare type Nonce = bigint; diff --git a/lib/types/primitives.js b/lib/types/primitives.js new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/lib/types/primitives.js @@ -0,0 +1 @@ +export {}; diff --git a/lib/types/public_key.d.ts b/lib/types/public_key.d.ts new file mode 100644 index 00000000..c8d09442 --- /dev/null +++ b/lib/types/public_key.d.ts @@ -0,0 +1,25 @@ +import { Bytes } from "../utils"; +export declare enum CurveType { + ED25519 = 0, + SECP256K1 = 1 +} +export declare function curveTypeFromStr(value: string): CurveType; +export declare class ParsePublicKeyError extends Error { +} +export declare class InvalidLengthError extends ParsePublicKeyError { + length: number; + constructor(length: number); +} +export declare class Base58Error extends ParsePublicKeyError { + error: string; + constructor(error: string); +} +export declare class UnknownCurve extends ParsePublicKeyError { + constructor(); +} +export declare class PublicKey { + data: Bytes; + constructor(data: Bytes); + curveType(): CurveType; + static fromString(s: string): PublicKey; +} diff --git a/lib/types/public_key.js b/lib/types/public_key.js new file mode 100644 index 00000000..53b9ef22 --- /dev/null +++ b/lib/types/public_key.js @@ -0,0 +1,80 @@ +import { bytes } from "../utils"; +import { base58 } from '@scure/base'; +export var CurveType; +(function (CurveType) { + CurveType[CurveType["ED25519"] = 0] = "ED25519"; + CurveType[CurveType["SECP256K1"] = 1] = "SECP256K1"; +})(CurveType || (CurveType = {})); +function data_len(c) { + switch (c) { + case CurveType.ED25519: + return 32; + case CurveType.SECP256K1: + return 64; + default: + throw new UnknownCurve(); + } +} +function split_key_type_data(value) { + let idx = value.indexOf(":"); + if (idx >= 0) { + return [curveTypeFromStr(value.substring(0, idx)), value.substring(idx + 1)]; + } + else { + return [CurveType.ED25519, value]; + } +} +export function curveTypeFromStr(value) { + switch (value) { + case "ed25519": + return CurveType.ED25519; + case "secp256k1": + return CurveType.SECP256K1; + default: + throw new UnknownCurve(); + } +} +export class ParsePublicKeyError extends Error { +} +export class InvalidLengthError extends ParsePublicKeyError { + constructor(length) { + super(`Invalid length: ${length}`); + this.length = length; + } +} +export class Base58Error extends ParsePublicKeyError { + constructor(error) { + super(`Base58 error: ${error}`); + this.error = error; + } +} +export class UnknownCurve extends ParsePublicKeyError { + constructor() { + super("Unknown curve"); + } +} +export class PublicKey { + constructor(data) { + this.data = data; + let curve_type = data.charCodeAt(0); + let curve_len = data_len(curve_type); + if (data.length != curve_len + 1) { + throw new InvalidLengthError(data.length); + } + this.data = data; + } + curveType() { + return this.data.charCodeAt(0); + } + static fromString(s) { + let [curve, key_data] = split_key_type_data(s); + let data; + try { + data = bytes(base58.decode(key_data)); + } + catch (err) { + throw new Base58Error(err.message); + } + return new PublicKey(String.fromCharCode(curve) + data); + } +} diff --git a/lib/types/vm_types.d.ts b/lib/types/vm_types.d.ts new file mode 100644 index 00000000..900c8bb8 --- /dev/null +++ b/lib/types/vm_types.d.ts @@ -0,0 +1,12 @@ +export declare type PromiseIndex = bigint; +export declare type ReceiptIndex = bigint; +export declare type IteratorIndex = bigint; +export declare enum PromiseResult { + NotReady = 0, + Successful = 1, + Failed = 2 +} +export declare enum PromiseError { + Failed = 0, + NotReady = 1 +} diff --git a/lib/types/vm_types.js b/lib/types/vm_types.js new file mode 100644 index 00000000..915bf5d2 --- /dev/null +++ b/lib/types/vm_types.js @@ -0,0 +1,11 @@ +export var PromiseResult; +(function (PromiseResult) { + PromiseResult[PromiseResult["NotReady"] = 0] = "NotReady"; + PromiseResult[PromiseResult["Successful"] = 1] = "Successful"; + PromiseResult[PromiseResult["Failed"] = 2] = "Failed"; +})(PromiseResult || (PromiseResult = {})); +export var PromiseError; +(function (PromiseError) { + PromiseError[PromiseError["Failed"] = 0] = "Failed"; + PromiseError[PromiseError["NotReady"] = 1] = "NotReady"; +})(PromiseError || (PromiseError = {})); diff --git a/package.json b/package.json index 5198cb27..8bb07ecc 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "near-sdk-js", - "version": "0.4.0-5", + "version": "0.5.0-1", "description": "High Level JavaScript SDK for building smart contracts on NEAR", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -23,13 +23,9 @@ "scripts": { "build": "tsc -p ./tsconfig.json", "pretest": "yarn build", - "test": "yarn test:standalone && yarn test:enclaved", - "test:standalone": "yarn test:standalone:unit && yarn test:standalone:examples", - "test:standalone:unit": "yarn && cd tests && yarn && yarn build && yarn test && cd ..", - "test:standalone:examples": "yarn && cd examples && yarn && yarn build && yarn test && cd ..", - "test:enclaved": "yarn test:enclaved:unit && yarn test:enclaved:examples", - "test:enclaved:unit": "cd jsvm/tests && yarn rebuild && yarn test && cd ../..", - "test:enclaved:examples": "cd jsvm/examples && yarn && yarn rebuild && yarn test && cd ../..", + "test": "yarn test:unit && yarn test:examples", + "test:unit": "yarn && cd tests && yarn && yarn build && yarn test && cd ..", + "test:examples": "yarn && cd examples && yarn && yarn build && yarn test && cd ..", "postinstall": "cd cli && rm -rf deps && mkdir -p deps && cd deps && node ../post-install.js" }, "bin": { @@ -43,6 +39,7 @@ "@rollup/plugin-babel": "^5.3.1", "@rollup/plugin-commonjs": "^21.0.1", "@rollup/plugin-node-resolve": "^13.1.1", + "@scure/base": "^1.1.1", "rollup": "^2.61.1", "rollup-plugin-sourcemaps": "^0.6.3", "yargs": "^17.5.1" diff --git a/src/api.ts b/src/api.ts index 22d44f0d..5ab8b21b 100644 --- a/src/api.ts +++ b/src/api.ts @@ -1,13 +1,15 @@ import { Bytes } from "./utils"; +import { PromiseResult } from "./types"; const U64_MAX = 2n ** 64n - 1n; const EVICTED_REGISTER = U64_MAX - 1n; +// Interface available in QuickJS interface Env { panic_utf8: (msg: string) => never; [x: string]: any; } -// env object is injected by JSVM + declare let env: Env; export function log(...params: any[]) { @@ -101,15 +103,15 @@ export function ecrecover( // NOTE: "env.panic(msg)" is not exported, use "throw Error(msg)" instead -export function panicUtf8(msg: string): never { +export function panicUtf8(msg: Bytes): never { env.panic_utf8(msg); } -export function logUtf8(msg: string) { +export function logUtf8(msg: Bytes) { env.log_utf8(msg); } -export function logUtf16(msg: string) { +export function logUtf16(msg: Bytes) { env.log_utf16(msg); } @@ -158,88 +160,10 @@ export function altBn128PairingCheck(value: Bytes): boolean { } } -export function jsvmAccountId(): string { - env.jsvm_account_id(0); - return env.read_register(0); -} - -export function jsvmJsContractName(): string { - env.jsvm_js_contract_name(0); - return env.read_register(0); -} - -export function jsvmMethodName(): string { - env.jsvm_method_name(0); - return env.read_register(0); -} - -export function jsvmArgs(): Bytes { - env.jsvm_args(0); - return env.read_register(0); -} - -export function jsvmStorageWrite(key: Bytes, value: Bytes): boolean { - let exist = env.jsvm_storage_write(key, value, EVICTED_REGISTER); - if (exist === 1n) { - return true; - } - return false; -} - -export function jsvmStorageRead(key: Bytes): Bytes | null { - let exist = env.jsvm_storage_read(key, 0); - if (exist === 1n) { - return env.read_register(0); - } - return null; -} - -export function jsvmStorageRemove(key: Bytes): boolean { - let exist = env.jsvm_storage_remove(key, EVICTED_REGISTER); - if (exist === 1n) { - return true; - } - return false; -} - -export function jsvmStorageHasKey(key: Bytes): boolean { - let exist = env.jsvm_storage_has_key(key); - if (exist === 1n) { - return true; - } - return false; -} - -export function jsvmCallRaw( - contractName: string, - method: string, - args: any -): Bytes | null { - env.jsvm_call(contractName, method, JSON.stringify(args), 0); - return env.read_register(0); -} - -export function jsvmCall( - contractName: string, - method: string, - args: any -): any | null { - let ret = jsvmCallRaw(contractName, method, args); - if (ret === null) { - return ret; - } - return JSON.parse(ret); -} - export function storageGetEvicted(): Bytes { return env.read_register(EVICTED_REGISTER); } -export function jsvmValueReturn(value: Bytes) { - env.jsvm_value_return(value); -} - -// Standalone only APIs export function currentAccountId(): string { env.current_account_id(0); return env.read_register(0); @@ -395,29 +319,37 @@ export function promiseBatchActionDeleteAccount( env.promise_batch_action_delete_account(promiseIndex, beneficiaryId); } -export function promiseResultsCount(): bigint { - return env.promise_results_count(); +export function promiseBatchActionFunctionCallWeight( + promiseIndex: number | bigint, + methodName: string, + args: Bytes, + amount: number | bigint, + gas: number | bigint, + weight: number | bigint, +) { + env.promise_batch_action_function_call_weight( + promiseIndex, + methodName, + args, + amount, + gas, + weight + ); } -export enum PromiseResult { - NotReady = 0, - Successful = 1, - Failed = 2, +export function promiseResultsCount(): bigint { + return env.promise_results_count(); } -export function promiseResult( - resultIdx: number | bigint -): Bytes | PromiseResult.NotReady | PromiseResult.Failed { +export function promiseResult(resultIdx: number | bigint): Bytes { let status: PromiseResult = env.promise_result(resultIdx, 0); if (status == PromiseResult.Successful) { return env.read_register(0); - } else if ( - status == PromiseResult.Failed || - status == PromiseResult.NotReady - ) { - return status; } else { - throw Error(`Unexpected return code: ${status}`); + throw Error( + `Promise result ${status == PromiseResult.Failed ? "Failed" : + status == PromiseResult.NotReady ? "NotReady" : status}` + ); } } diff --git a/src/build-tools/include-bytes.js b/src/build-tools/include-bytes.js new file mode 100644 index 00000000..1eee0587 --- /dev/null +++ b/src/build-tools/include-bytes.js @@ -0,0 +1,37 @@ +import fs from 'fs' +import path from 'path' +export default function ({ types: t }) { + return { + visitor: { + CallExpression(p, state) { + let name = p.node.callee.name + let args = p.node.arguments + + if (name === 'includeBytes') { + // Get the path of file + var filename = this.file.opts.filename + + // User settings + let root = state.opts.root || path.dirname(filename) + + // Read binary file into bytes, so encoding is 'latin1' (each byte is 0-255, become one character) + const encoding = 'latin1' + + // Require first arg to be string + t.assertStringLiteral(args[0]) + + // Error if filename is not found + if (filename === undefined || filename === 'unknown') + throw new Error('`includeBytes` function called outside of file') + + // Generate and locate the file + let fileRelPath = args[0].value // Get literal string value + let filePath = path.join(root, fileRelPath) + let fileSrc = fs.readFileSync(filePath, { encoding }).toString(encoding) + + p.replaceWith(t.stringLiteral(fileSrc)) + } + }, + }, + } +} diff --git a/src/build-tools/near-bindgen-exporter.js b/src/build-tools/near-bindgen-exporter.js index 6fdae41d..f4e4335b 100644 --- a/src/build-tools/near-bindgen-exporter.js +++ b/src/build-tools/near-bindgen-exporter.js @@ -4,67 +4,66 @@ export default function () { return { visitor: { ClassDeclaration(path) { - let classNode = path.node - if (classNode.decorators && classNode.decorators[0].expression.name == 'NearBindgen') { - let classId = classNode.id - let contractMethods = {} - - for(let child of classNode.body.body) { + let classNode = path.node; + if (classNode.decorators && classNode.decorators[0].expression.callee.name == 'NearBindgen') { + let classId = classNode.id; + let contractMethods = {}; + for (let child of classNode.body.body) { if (child.type == 'ClassMethod' && child.kind == 'method' && child.decorators) { - if (child.decorators[0].expression.name == 'call') { - let callMethod = child.key.name - contractMethods[callMethod] = 'call' - } else if (child.decorators[0].expression.name == 'view') { - let viewMethod = child.key.name - contractMethods[viewMethod] = 'view' + if (child.decorators[0].expression.callee.name == 'call') { + let callMethod = child.key.name; + contractMethods[callMethod] = 'call'; + } + else if (child.decorators[0].expression.callee.name == 'view') { + let viewMethod = child.key.name; + contractMethods[viewMethod] = 'view'; + } + else if (child.decorators[0].expression.callee.name == 'initialize') { + let initMethod = child.key.name; + contractMethods[initMethod] = 'initialize'; } } } - for (let method of Object.keys(contractMethods)) { - path.insertAfter( - t.exportNamedDeclaration( - t.functionDeclaration(t.identifier(method), [], t.blockStatement([ - // let _contract = ContractClass._get() - t.variableDeclaration('let', [t.variableDeclarator(t.identifier('_contract'), - t.callExpression(t.memberExpression(classId, t.identifier('_get')), []))]), - // _contract.deserialize() - t.expressionStatement( - t.callExpression(t.memberExpression(t.identifier('_contract'), t.identifier('deserialize')), [])), - // let args = _contract.constructor.deserializeArgs() - t.variableDeclaration('let', [t.variableDeclarator(t.identifier('args'), - t.callExpression(t.memberExpression(t.memberExpression(t.identifier('_contract'), t.identifier('constructor')), t.identifier('deserializeArgs')), []))]), - // let ret = _contract.method(args) - t.variableDeclaration('let', [t.variableDeclarator(t.identifier('ret'), - t.callExpression(t.memberExpression(t.identifier('_contract'), t.identifier(method)), [t.identifier('args')]))]), - contractMethods[method] == 'call' ? - // _contract.serialize() - t.expressionStatement( - t.callExpression(t.memberExpression(t.identifier('_contract'), t.identifier('serialize')), [])) - : t.emptyStatement(), - // if (ret !== undefined) - t.ifStatement(t.binaryExpression('!==', t.identifier('ret'), t.identifier('undefined')), - // env.value_return(_contract.constructor.serializeReturn(ret)) - t.expressionStatement(t.callExpression(t.memberExpression(t.identifier('env'), t.identifier('value_return')), [ - t.callExpression(t.memberExpression(t.memberExpression(t.identifier('_contract'), t.identifier('constructor')), t.identifier('serializeReturn')), [t.identifier('ret')]) - ])) - ) - ])), - [t.exportSpecifier(t.identifier(method), t.identifier(method))])) - path.scope.registerDeclaration(path.getSibling(path.key + 1)) + path.insertAfter(t.exportNamedDeclaration(t.functionDeclaration(t.identifier(method), [], t.blockStatement([ + // const _state = Counter._getState(); + t.variableDeclaration('let', [t.variableDeclarator(t.identifier('_state'), t.callExpression(t.memberExpression(classId, t.identifier('_getState')), []))]), + contractMethods[method] === 'initialize' ? + // if (_state) { throw new Error('Contract already initialized'); } + t.ifStatement(t.identifier('_state'), t.throwStatement(t.newExpression(t.identifier('Error'), [t.stringLiteral('Contract already initialized')]))) + : t.emptyStatement(), + contractMethods[method] === 'call' || contractMethods[method] === 'view' ? + // if (!_state) { throw new Error('Contract must be initialized'); } + t.ifStatement(t.logicalExpression('&&', t.unaryExpression('!', t.identifier('_state')), t.callExpression(t.memberExpression(classId, t.identifier('_requireInit')), [])), t.blockStatement([t.throwStatement(t.newExpression(t.identifier('Error'), [t.stringLiteral('Contract must be initialized')]))])) + : t.emptyStatement(), + // let _contract = Counter._create(); + t.variableDeclaration('let', [t.variableDeclarator(t.identifier('_contract'), t.callExpression(t.memberExpression(classId, t.identifier('_create')), []))]), + contractMethods[method] === 'call' || contractMethods[method] === 'view' ? + // if (_state) { Object.assign(_contract, state); } + t.ifStatement(t.identifier('_state'), t.blockStatement([t.expressionStatement( + t.callExpression(t.memberExpression(classId, t.identifier('_reconstruct')), [t.identifier('_contract'), t.identifier('_state')]))])) : t.emptyStatement(), + // let _args = Counter._getArgs(); + t.variableDeclaration('let', [t.variableDeclarator(t.identifier('_args'), t.callExpression(t.memberExpression(classId, t.identifier('_getArgs')), []))]), + // let _result = _contract.method(args); + t.variableDeclaration('let', [t.variableDeclarator(t.identifier('_result'), t.callExpression(t.memberExpression(t.identifier('_contract'), t.identifier(method)), [t.identifier('_args')]))]), + contractMethods[method] === 'initialize' || contractMethods[method] === 'call' ? + // Counter._saveToStorage(_contract); + t.expressionStatement(t.callExpression(t.memberExpression(classId, t.identifier('_saveToStorage')), [t.identifier('_contract')])) + : t.emptyStatement(), + // if (_result !== undefined) + // if (_result && _result.constructor && _result.constructor.name === 'NearPromise') + // _result.onReturn(); + // else + // near.valueReturn(_contract._serialize(result)); + t.ifStatement(t.binaryExpression('!==', t.identifier('_result'), t.identifier('undefined')), + t.ifStatement(t.logicalExpression('&&', t.logicalExpression('&&', t.identifier('_result'), t.memberExpression(t.identifier('_result'), t.identifier('constructor'))), + t.binaryExpression('===', t.memberExpression(t.memberExpression(t.identifier('_result'), t.identifier('constructor')), t.identifier('name')), t.stringLiteral('NearPromise'))), + t.expressionStatement(t.callExpression(t.memberExpression(t.identifier('_result'), t.identifier('onReturn')), [])), + t.expressionStatement(t.callExpression(t.memberExpression(t.identifier('env'), t.identifier('value_return')), [t.callExpression(t.memberExpression(classId, t.identifier('_serialize')), [t.identifier('_result')])]))))])))); + console.log(`Babel ${method} method export done`); } - - path.insertAfter( - t.exportNamedDeclaration( - t.functionDeclaration(t.identifier('init'), [], t.blockStatement([ - t.expressionStatement(t.callExpression(t.memberExpression(classId, t.identifier('_init')), [])), - ])), - [t.exportSpecifier(t.identifier('init'), t.identifier('init'))])) - path.scope.registerDeclaration(path.getSibling(path.key + 1)) - - console.log('Near bindgen export done') } - }, - }, - } + } + } + }; } diff --git a/src/collections/lookup-map.ts b/src/collections/lookup-map.ts index 60c33437..b934adb2 100644 --- a/src/collections/lookup-map.ts +++ b/src/collections/lookup-map.ts @@ -50,7 +50,7 @@ export class LookupMap { } // converting plain object to class object - static deserialize(data: LookupMap): LookupMap { + static reconstruct(data: LookupMap): LookupMap { return new LookupMap(data.keyPrefix) } } \ No newline at end of file diff --git a/src/collections/lookup-set.ts b/src/collections/lookup-set.ts index 5157f46a..e8927e21 100644 --- a/src/collections/lookup-set.ts +++ b/src/collections/lookup-set.ts @@ -37,7 +37,7 @@ export class LookupSet { } // converting plain object to class object - static deserialize(data: LookupSet): LookupSet { + static reconstruct(data: LookupSet): LookupSet { return new LookupSet(data.keyPrefix) } } \ No newline at end of file diff --git a/src/collections/unordered-map.ts b/src/collections/unordered-map.ts index f18abd3c..dcd8a681 100644 --- a/src/collections/unordered-map.ts +++ b/src/collections/unordered-map.ts @@ -1,130 +1,86 @@ -import * as near from "../api"; -import { u8ArrayToBytes, bytesToU8Array, Bytes, Mutable } from "../utils"; +import { Bytes, Mutable } from "../utils"; import { Vector, VectorIterator } from "./vector"; +import { LookupMap } from "./lookup-map"; const ERR_INCONSISTENT_STATE = "The collection is an inconsistent state. Did previous smart contract execution terminate unexpectedly?"; -function serializeIndex(index: number): Bytes { - let data = new Uint32Array([index]); - let array = new Uint8Array(data.buffer); - return u8ArrayToBytes(array); -} - -function deserializeIndex(rawIndex: Bytes) { - let array = bytesToU8Array(rawIndex); - let data = new Uint32Array(array.buffer); - return data[0]; -} - -function getIndexRaw(keyIndexPrefix: Bytes, key: Bytes): Bytes { - let indexLookup = keyIndexPrefix + JSON.stringify(key); - let indexRaw = near.storageRead(indexLookup); - return indexRaw; -} +type ValueAndIndex = [value: unknown, index: number] export class UnorderedMap { - readonly length: number; readonly prefix: Bytes; - readonly keyIndexPrefix: Bytes; readonly keys: Vector; - readonly values: Vector; + readonly values: LookupMap; constructor(prefix: Bytes) { - this.length = 0; this.prefix = prefix; - this.keyIndexPrefix = prefix + "i"; - let indexKey = prefix + "k"; - let indexValue = prefix + "v"; - this.keys = new Vector(indexKey); - this.values = new Vector(indexValue); + this.keys = new Vector(prefix + 'u'); // intentional different prefix with old UnorderedMap + this.values = new LookupMap(prefix + 'm'); } - len() { - let keysLen = this.keys.len(); - let valuesLen = this.values.len(); - if (keysLen != valuesLen) { - throw new Error(ERR_INCONSISTENT_STATE); - } + get length() { + let keysLen = this.keys.length; return keysLen; } isEmpty(): boolean { let keysIsEmpty = this.keys.isEmpty(); - let valuesIsEmpty = this.values.isEmpty(); - if (keysIsEmpty != valuesIsEmpty) { - throw new Error(ERR_INCONSISTENT_STATE); - } return keysIsEmpty; } get(key: Bytes): unknown | null { - let indexRaw = getIndexRaw(this.keyIndexPrefix, key); - if (indexRaw) { - let index = deserializeIndex(indexRaw); - let value = this.values.get(index); - if (value) { - return value; - } else { - throw new Error(ERR_INCONSISTENT_STATE); - } + let valueAndIndex = this.values.get(key); + if (valueAndIndex === null) { + return null; } - return null; + let value = (valueAndIndex as ValueAndIndex)[0]; + return value; } set(key: Bytes, value: unknown): unknown | null { - let indexLookup = this.keyIndexPrefix + JSON.stringify(key); - let indexRaw = near.storageRead(indexLookup); - if (indexRaw) { - let index = deserializeIndex(indexRaw); - return this.values.replace(index, value); - } else { - let nextIndex = this.len(); - let nextIndexRaw = serializeIndex(nextIndex); - near.storageWrite(indexLookup, nextIndexRaw); - this.keys.push(key); - this.values.push(value); - return null; + let valueAndIndex = this.values.get(key); + if (valueAndIndex !== null) { + let oldValue = (valueAndIndex as ValueAndIndex)[0]; + (valueAndIndex as ValueAndIndex)[0] = value; + this.values.set(key, valueAndIndex) + return oldValue; } + + let nextIndex = this.length; + this.keys.push(key); + this.values.set(key, [value, nextIndex]); + return null; } remove(key: Bytes): unknown | null { - let indexLookup = this.keyIndexPrefix + JSON.stringify(key); - let indexRaw = near.storageRead(indexLookup); - if (indexRaw) { - if (this.len() == 1) { - // If there is only one element then swap remove simply removes it without - // swapping with the last element. - near.storageRemove(indexLookup); - } else { - // If there is more than one element then swap remove swaps it with the last - // element. - let lastKey = this.keys.get(this.len() - 1); - if (!lastKey) { - throw new Error(ERR_INCONSISTENT_STATE); - } - near.storageRemove(indexLookup); - // If the removed element was the last element from keys, then we don't need to - // reinsert the lookup back. - if (lastKey != key) { - let lastLookupKey = this.keyIndexPrefix + JSON.stringify(lastKey); - near.storageWrite(lastLookupKey, indexRaw); - } + let oldValueAndIndex = this.values.remove(key); + if (oldValueAndIndex === null) { + return null; + } + let index = (oldValueAndIndex as ValueAndIndex)[1]; + if (this.keys.swapRemove(index) === null) { + throw new Error(ERR_INCONSISTENT_STATE); + } + + // the last key is swapped to key[index], the corresponding [value, index] need update + if (this.keys.length > 0 && index != this.keys.length) { + // if there is still elements and it was not the last element + let swappedKey = this.keys.get(index) as Bytes; + let swappedValueAndIndex = this.values.get(swappedKey); + if (swappedValueAndIndex === null) { + throw new Error(ERR_INCONSISTENT_STATE) } - let index = deserializeIndex(indexRaw); - this.keys.swapRemove(index); - return this.values.swapRemove(index); + this.values.set(swappedKey, [swappedValueAndIndex[0], index]) } - return null; + return (oldValueAndIndex as ValueAndIndex)[0]; } clear() { for (let key of this.keys) { - let indexLookup = this.keyIndexPrefix + JSON.stringify(key); - near.storageRemove(indexLookup); + // Set instead of remove to avoid loading the value from storage. + this.values.set(key as Bytes, null); } this.keys.clear(); - this.values.clear(); } toArray(): [Bytes, unknown][] { @@ -150,36 +106,37 @@ export class UnorderedMap { } // converting plain object to class object - static deserialize(data: UnorderedMap): UnorderedMap { + static reconstruct(data: UnorderedMap): UnorderedMap { // removing readonly modifier type MutableUnorderedMap = Mutable; let map = new UnorderedMap(data.prefix) as MutableUnorderedMap; - // reconstruct UnorderedMap - map.length = data.length; // reconstruct keys Vector - map.keys = new Vector(data.prefix + "k"); + map.keys = new Vector(data.prefix + "u"); map.keys.length = data.keys.length; - // reconstruct values Vector - map.values = new Vector(data.prefix + "v"); - map.values.length = data.values.length; + // reconstruct values LookupMap + map.values = new LookupMap(data.prefix + "m"); return map as UnorderedMap; } } class UnorderedMapIterator { private keys: VectorIterator; - private values: VectorIterator; + private map: LookupMap; + constructor(unorderedMap: UnorderedMap) { this.keys = new VectorIterator(unorderedMap.keys); - this.values = new VectorIterator(unorderedMap.values); + this.map = unorderedMap.values; } next(): { value: [unknown | null, unknown | null]; done: boolean } { let key = this.keys.next(); - let value = this.values.next(); - if (key.done != value.done) { - throw new Error(ERR_INCONSISTENT_STATE); + let value; + if (!key.done) { + value = this.map.get(key.value as Bytes); + if (value === null) { + throw new Error(ERR_INCONSISTENT_STATE); + } } - return { value: [key.value, value.value], done: key.done }; + return { value: [key.value, value ? value[0] : value], done: key.done }; } } diff --git a/src/collections/unordered-set.ts b/src/collections/unordered-set.ts index 2df62eaf..5f72180c 100644 --- a/src/collections/unordered-set.ts +++ b/src/collections/unordered-set.ts @@ -19,21 +19,19 @@ function deserializeIndex(rawIndex: Bytes): number { } export class UnorderedSet { - readonly length: number; readonly prefix: Bytes; readonly elementIndexPrefix: Bytes; readonly elements: Vector; constructor(prefix: Bytes) { - this.length = 0; this.prefix = prefix; this.elementIndexPrefix = prefix + "i"; let elementsPrefix = prefix + "e"; this.elements = new Vector(elementsPrefix); } - len(): number { - return this.elements.len(); + get length(): number { + return this.elements.length; } isEmpty(): boolean { @@ -50,7 +48,7 @@ export class UnorderedSet { if (near.storageRead(indexLookup)) { return false; } else { - let nextIndex = this.len(); + let nextIndex = this.length; let nextIndexRaw = serializeIndex(nextIndex); near.storageWrite(indexLookup, nextIndexRaw); this.elements.push(element); @@ -62,14 +60,14 @@ export class UnorderedSet { let indexLookup = this.elementIndexPrefix + JSON.stringify(element); let indexRaw = near.storageRead(indexLookup); if (indexRaw) { - if (this.len() == 1) { + if (this.length == 1) { // If there is only one element then swap remove simply removes it without // swapping with the last element. near.storageRemove(indexLookup); } else { // If there is more than one element then swap remove swaps it with the last // element. - let lastElement = this.elements.get(this.len() - 1); + let lastElement = this.elements.get(this.length - 1); if (!lastElement) { throw new Error(ERR_INCONSISTENT_STATE); } @@ -119,12 +117,10 @@ export class UnorderedSet { } // converting plain object to class object - static deserialize(data: UnorderedSet): UnorderedSet { + static reconstruct(data: UnorderedSet): UnorderedSet { // removing readonly modifier type MutableUnorderedSet = Mutable; let set = new UnorderedSet(data.prefix) as MutableUnorderedSet; - // reconstruct UnorderedSet - set.length = data.length; // reconstruct Vector let elementsPrefix = data.prefix + "e"; set.elements = new Vector(elementsPrefix); diff --git a/src/collections/vector.ts b/src/collections/vector.ts index d28b25f5..d7036a65 100644 --- a/src/collections/vector.ts +++ b/src/collections/vector.ts @@ -23,10 +23,6 @@ export class Vector { this.prefix = prefix; } - len(): number { - return this.length; - } - isEmpty(): boolean { return this.length == 0; } @@ -123,7 +119,7 @@ export class Vector { } // converting plain object to class object - static deserialize(data: Vector): Vector { + static reconstruct(data: Vector): Vector { let vector = new Vector(data.prefix); vector.length = data.length; return vector; @@ -139,7 +135,7 @@ export class VectorIterator { } next(): { value: unknown | null; done: boolean } { - if (this.current < this.vector.len()) { + if (this.current < this.vector.length) { let value = this.vector.get(this.current); this.current += 1; return { value, done: false }; diff --git a/src/index.ts b/src/index.ts index 3f28afec..2eef8c0b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,9 @@ -import { call, view, NearBindgen } from "./near-bindgen"; - -import { NearContract } from "./near-contract"; +import { + call, + view, + initialize, + NearBindgen +} from "./near-bindgen"; import * as near from "./api"; import { @@ -13,13 +16,13 @@ import { import { bytes, Bytes, assert } from "./utils"; -import "./types" +import { NearPromise, PromiseOrValue } from "./promise"; export { call, view, + initialize, NearBindgen, - NearContract, near, LookupMap, Vector, @@ -29,4 +32,6 @@ export { bytes, Bytes, assert, + NearPromise, + PromiseOrValue }; diff --git a/src/near-bindgen.ts b/src/near-bindgen.ts index 85543374..543eef89 100644 --- a/src/near-bindgen.ts +++ b/src/near-bindgen.ts @@ -1,26 +1,72 @@ -export function call (target: Object, key: string | symbol, descriptor: TypedPropertyDescriptor): void { +import * as near from "./api"; + +export function initialize({ }) { + return function (target: Object, key: string | symbol, descriptor: TypedPropertyDescriptor): void { + } } -export function view (target: Object, key: string | symbol, descriptor: TypedPropertyDescriptor): void { +export function call({ privateFunction = false, payableFunction = false }: { privateFunction?: boolean, payableFunction?: boolean }) { + return function (target: Object, key: string | symbol, descriptor: TypedPropertyDescriptor): void { + const originalMethod = descriptor.value; + descriptor.value = function (...args: any[]) { + if (privateFunction && near.predecessorAccountId() !== near.currentAccountId()) { + throw Error("Function is private"); + } + if (!payableFunction && near.attachedDeposit() > BigInt(0)) { + throw Error("Function is not payable"); + } + return originalMethod.apply(this, args); + } + } } +export function view({ }) { + return function (target: Object, key: string | symbol, descriptor: TypedPropertyDescriptor): void { + } +} -export function NearBindgen(target: T) { - return class extends target { - static _init() { - // @ts-ignore - let args = target.deserializeArgs() - let ret = new target(args) - // @ts-ignore - ret.init() - // @ts-ignore - ret.serialize() - return ret - } +export function NearBindgen({ requireInit = false }: { requireInit?: boolean }) { + return (target: T) => { + return class extends target { + static _create() { + return new target(); + } - static _get() { - let ret = Object.create(target.prototype) - return ret + static _getState(): Object { + const rawState = near.storageRead("STATE"); + return rawState ? this._deserialize(rawState) : null; + } + + static _saveToStorage(obj: Object): void { + near.storageWrite("STATE", this._serialize(obj)); + } + + static _getArgs(): JSON { + return JSON.parse(near.input() || "{}"); + } + + static _serialize(value: Object): string { + return JSON.stringify(value); + } + + static _deserialize(value: string): Object { + return JSON.parse(value); + } + + static _reconstruct(classObject: any, plainObject: JSON) { + for (const item in classObject) { + if (classObject[item].constructor?.reconstruct !== undefined) { + classObject[item] = classObject[item].constructor.reconstruct(plainObject[item]) + } else { + classObject[item] = plainObject[item] + } + } + return classObject + } + + static _requireInit(): boolean { + return requireInit; + } } } -} +} \ No newline at end of file diff --git a/src/near-contract.ts b/src/near-contract.ts deleted file mode 100644 index 76afcb31..00000000 --- a/src/near-contract.ts +++ /dev/null @@ -1,38 +0,0 @@ -import * as near from "./api"; - -export abstract class NearContract { - deserialize() { - const rawState = near.storageRead("STATE"); - if (rawState) { - const state = JSON.parse(rawState) - // reconstruction of the contract class object from plain object - let c = this.default() - Object.assign(this, state); - for (const item in c) { - if (c[item].constructor?.deserialize !== undefined) { - this[item] = c[item].constructor.deserialize(this[item]) - } - } - } else { - throw new Error("Contract state is empty"); - } - } - - serialize() { - near.storageWrite("STATE", JSON.stringify(this)); - } - - static deserializeArgs(): any { - let args = near.input(); - return JSON.parse(args || "{}"); - } - - static serializeReturn(ret: any) { - return JSON.stringify(ret); - } - - // needed for deserialization of the contract class object from plain object - abstract default() - - init(): any {} -} diff --git a/src/promise.ts b/src/promise.ts new file mode 100644 index 00000000..7de4799a --- /dev/null +++ b/src/promise.ts @@ -0,0 +1,228 @@ +import { Bytes } from "./utils"; +import * as near from "./api"; +import { Balance, PublicKey, AccountId, Gas, GasWeight } from "./types"; +import { Nonce } from "./types/primitives"; + +export abstract class PromiseAction { + abstract add(promise_index: number | bigint): void; +} + +export class CreateAccount extends PromiseAction { + add(promise_index: number | bigint) { + near.promiseBatchActionCreateAccount(promise_index); + } +} + +export class DeployContract extends PromiseAction { + constructor(public code: Bytes) { super() } + + add(promise_index: number | bigint) { + near.promiseBatchActionDeployContract(promise_index, this.code); + } +} + +export class FunctionCall extends PromiseAction{ + constructor(public function_name: string, public args: Bytes, public amount: Balance, public gas: Gas) { super() } + + add(promise_index: number | bigint) { + near.promiseBatchActionFunctionCall(promise_index, this.function_name, this.args, this.amount, this.gas); + } +} + +export class FunctionCallWeight extends PromiseAction { + constructor(public function_name: string, public args: Bytes, public amount: Balance, public gas: Gas, public weight: GasWeight) { super() } + + add(promise_index: number | bigint) { + near.promiseBatchActionFunctionCallWeight(promise_index, this.function_name, this.args, this.amount, this.gas, this.weight); + } +} + +export class Transfer extends PromiseAction { + constructor(public amount: Balance) { super() } + + add(promise_index: number | bigint) { + near.promiseBatchActionTransfer(promise_index, this.amount); + } +} + +export class Stake extends PromiseAction { + constructor(public amount: Balance, public public_key: PublicKey) { super() } + + add(promise_index: number | bigint) { + near.promiseBatchActionStake(promise_index, this.amount, this.public_key.data); + } +} + +export class AddFullAccessKey extends PromiseAction { + constructor(public public_key: PublicKey, public nonce: Nonce) { super() } + + add(promise_index: number | bigint) { + near.promiseBatchActionAddKeyWithFullAccess(promise_index, this.public_key.data, this.nonce); + } +} + +export class AddAccessKey extends PromiseAction { + constructor(public public_key: PublicKey, public allowance: Balance, public receiver_id: AccountId, public function_names: string, public nonce: Nonce) { super() } + + add(promise_index: number | bigint) { + near.promiseBatchActionAddKeyWithFunctionCall(promise_index, this.public_key.data, this.nonce, this.allowance, this.receiver_id, this.function_names); + } +} + +export class DeleteKey extends PromiseAction { + constructor(public public_key: PublicKey) { super() } + + add(promise_index: number | bigint) { + near.promiseBatchActionDeleteKey(promise_index, this.public_key.data); + } +} + +export class DeleteAccount extends PromiseAction { + constructor(public beneficiary_id: AccountId) { super() } + + add(promise_index: number | bigint) { + near.promiseBatchActionDeleteAccount(promise_index, this.beneficiary_id); + } +} + +class PromiseSingle { + constructor(public account_id: AccountId, public actions: PromiseAction[], public after: NearPromise | null, public promise_index: number | bigint | null) { } + + constructRecursively(): number | bigint { + if (this.promise_index !== null) { + return this.promise_index; + } + let promise_index; + if (this.after) { + promise_index = near.promiseBatchThen(this.after.constructRecursively(), this.account_id) + } else { + promise_index = near.promiseBatchCreate(this.account_id); + } + for (let action of this.actions) { + action.add(promise_index); + } + this.promise_index = promise_index; + return promise_index + } +} + +export class PromiseJoint { + constructor(public promise_a: NearPromise, public promise_b: NearPromise, public promise_index: number | bigint | null) { } + + constructRecursively(): number | bigint { + if (this.promise_index !== null) { + return this.promise_index; + } + let res = near.promiseAnd(BigInt(this.promise_a.constructRecursively()), BigInt(this.promise_b.constructRecursively())); + this.promise_index = res + return res + } +} + +type PromiseSubtype = PromiseSingle | PromiseJoint; + +export class NearPromise { + constructor(private subtype: PromiseSubtype, private should_return: boolean) { } + + static new(account_id: AccountId): NearPromise { + let subtype = new PromiseSingle(account_id, [], null, null); + let ret = new NearPromise(subtype, false); + return ret; + } + + private add_action(action: PromiseAction): NearPromise{ + if (this.subtype instanceof PromiseJoint) { + throw new Error("Cannot add action to a joint promise.") + } else { + this.subtype.actions.push(action); + } + return this; + } + + createAccount(): NearPromise { + return this.add_action(new CreateAccount()); + } + + deployContract(code: Bytes): NearPromise { + return this.add_action(new DeployContract(code)); + } + + functionCall(function_name: string, args: Bytes, amount: Balance, gas: Gas): NearPromise { + return this.add_action(new FunctionCall(function_name, args, amount, gas)); + } + + functionCallWeight(function_name: string, args: Bytes, amount: Balance, gas: Gas, weight: GasWeight): NearPromise { + return this.add_action(new FunctionCallWeight(function_name, args, amount, gas, weight)); + } + + transfer(amount: Balance): NearPromise { + return this.add_action(new Transfer(amount)); + } + + stake(amount: Balance, public_key: PublicKey): NearPromise { + return this.add_action(new Stake(amount, public_key)); + } + + addFullAccessKey(public_key: PublicKey): NearPromise { + return this.addFullAccessKeyWithNonce(public_key, 0n) + } + + addFullAccessKeyWithNonce(public_key: PublicKey, nonce: Nonce): NearPromise { + return this.add_action(new AddFullAccessKey(public_key, nonce)); + } + + addAccessKey(public_key: PublicKey, allowance: Balance, receiver_id: AccountId, method_names: string): NearPromise { + return this.addAccessKeyWithNonce(public_key, allowance, receiver_id, method_names, 0n) + } + + addAccessKeyWithNonce(public_key: PublicKey, allowance: Balance, receiver_id: AccountId, method_names: string, nonce: Nonce): NearPromise { + return this.add_action(new AddAccessKey(public_key, allowance, receiver_id, method_names, nonce)); + } + + deleteKey(public_key: PublicKey): NearPromise { + return this.add_action(new DeleteKey(public_key)); + } + + deleteAccount(beneficiary_id: AccountId): NearPromise { + return this.add_action(new DeleteAccount(beneficiary_id)); + } + + and(other: NearPromise): NearPromise { + let subtype = new PromiseJoint(this, other, null); + let ret = new NearPromise(subtype, false); + return ret; + } + + then(other: NearPromise): NearPromise { + if (other.subtype instanceof PromiseSingle) { + if (other.subtype.after !== null) { + throw new Error("Cannot callback promise which is already scheduled after another"); + } + other.subtype.after = this; + } else { + throw new Error("Cannot callback joint promise.") + } + return other; + } + + asReturn(): NearPromise { + this.should_return = true; + return this; + } + + constructRecursively(): number | bigint { + let res = this.subtype.constructRecursively(); + if (this.should_return) { + near.promiseReturn(res); + } + return res; + } + + // Called by NearBindgen, when return object is a NearPromise instance. + onReturn() { + this.asReturn().constructRecursively(); + } +} + +export type PromiseOrValue = NearPromise | T; + diff --git a/src/types/gas.ts b/src/types/gas.ts new file mode 100644 index 00000000..4586b181 --- /dev/null +++ b/src/types/gas.ts @@ -0,0 +1,2 @@ +export type Gas = bigint; +export const ONE_TERA_GAS: Gas = 1_000_000_000_000n; diff --git a/src/types/index.ts b/src/types/index.ts index 165d1f17..92e4ab7e 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,3 +1,12 @@ import { AccountId } from "./account_id"; +import {BlockHeight, EpochHeight, Balance, StorageUsage} from './primitives' +import { PromiseResult, PromiseError, PromiseIndex, ReceiptIndex, IteratorIndex } from "./vm_types"; +import { Gas, ONE_TERA_GAS } from "./gas"; +import { PublicKey, CurveType, curveTypeFromStr, ParsePublicKeyError, InvalidLengthError, Base58Error, UnknownCurve } from "./public_key"; -export {AccountId} \ No newline at end of file +export {AccountId, BlockHeight, EpochHeight, Balance, StorageUsage, PromiseResult, PromiseError, PromiseIndex, ReceiptIndex, IteratorIndex, Gas, ONE_TERA_GAS, + PublicKey, CurveType, curveTypeFromStr, ParsePublicKeyError, InvalidLengthError, Base58Error, UnknownCurve} + +export type GasWeight = bigint; +export const ONE_YOCTO: Balance = 1n; +export const ONE_NEAR: Balance = 1_000_000_000_000_000_000_000_000n; diff --git a/src/types/primitives.ts b/src/types/primitives.ts new file mode 100644 index 00000000..7ee3a2be --- /dev/null +++ b/src/types/primitives.ts @@ -0,0 +1,5 @@ +export type StorageUsage = bigint; +export type BlockHeight = bigint; +export type EpochHeight = bigint; +export type Balance = bigint; +export type Nonce = bigint; \ No newline at end of file diff --git a/src/types/public_key.ts b/src/types/public_key.ts new file mode 100644 index 00000000..271690a2 --- /dev/null +++ b/src/types/public_key.ts @@ -0,0 +1,81 @@ +import { Bytes, bytes } from "../utils"; +import { base58 } from '@scure/base'; + +export enum CurveType { + ED25519 = 0, + SECP256K1 = 1, +} + +function data_len(c: CurveType): number { + switch (c) { + case CurveType.ED25519: + return 32; + case CurveType.SECP256K1: + return 64; + default: + throw new UnknownCurve() + } +} + +function split_key_type_data(value: string): [CurveType, string] { + let idx = value.indexOf(":"); + if (idx >= 0) { + return [curveTypeFromStr(value.substring(0, idx)), value.substring(idx + 1)]; + } else { + return [CurveType.ED25519, value]; + } +} + +export function curveTypeFromStr(value: string): CurveType { + switch (value) { + case "ed25519": + return CurveType.ED25519; + case "secp256k1": + return CurveType.SECP256K1; + default: + throw new UnknownCurve(); + } +} + +export class ParsePublicKeyError extends Error {} +export class InvalidLengthError extends ParsePublicKeyError { + constructor(public length: number) { + super(`Invalid length: ${length}`); + } +} +export class Base58Error extends ParsePublicKeyError { + constructor(public error: string) { + super(`Base58 error: ${error}`); + } +} +export class UnknownCurve extends ParsePublicKeyError { + constructor() { + super("Unknown curve"); + } +} + +export class PublicKey { + constructor(public data: Bytes) { + let curve_type = data.charCodeAt(0) as CurveType + let curve_len = data_len(curve_type) + if (data.length != curve_len + 1) { + throw new InvalidLengthError(data.length) + } + this.data = data + } + + curveType(): CurveType { + return this.data.charCodeAt(0) as CurveType + } + + static fromString(s: string) { + let [curve, key_data] = split_key_type_data(s); + let data: Bytes; + try { + data = bytes(base58.decode(key_data)); + } catch (err) { + throw new Base58Error(err.message); + } + return new PublicKey(String.fromCharCode(curve) + data); + } +} \ No newline at end of file diff --git a/src/types/vm_types.ts b/src/types/vm_types.ts new file mode 100644 index 00000000..a37cc924 --- /dev/null +++ b/src/types/vm_types.ts @@ -0,0 +1,14 @@ +export type PromiseIndex = bigint; +export type ReceiptIndex = bigint; +export type IteratorIndex = bigint; + +export enum PromiseResult { + NotReady = 0, + Successful = 1, + Failed = 2, +} + +export enum PromiseError { + Failed, + NotReady, +} \ No newline at end of file diff --git a/tests/__tests__/bytes.ava.js b/tests/__tests__/bytes.ava.js index c2554de4..af0964d6 100644 --- a/tests/__tests__/bytes.ava.js +++ b/tests/__tests__/bytes.ava.js @@ -1,11 +1,6 @@ import { Worker } from 'near-workspaces'; -import { readFile } from 'fs/promises' import test from 'ava'; -function encodeCall(contract, method, args) { - return Buffer.concat([Buffer.from(contract), Buffer.from([0]), Buffer.from(method), Buffer.from([0]), Buffer.from(JSON.stringify(args))]) -} - test.beforeEach(async t => { // Init the worker and start a Sandbox server const worker = await Worker.init(); @@ -25,7 +20,7 @@ test.beforeEach(async t => { t.context.accounts = { root, bytesContract, ali }; }); -test.afterEach(async t => { +test.afterEach.always(async t => { await t.context.worker.tearDown().catch(error => { console.log('Failed to tear down the worker:', error); }); diff --git a/tests/__tests__/decorators/near_bindgen.ava.js b/tests/__tests__/decorators/near_bindgen.ava.js new file mode 100644 index 00000000..048e813e --- /dev/null +++ b/tests/__tests__/decorators/near_bindgen.ava.js @@ -0,0 +1,59 @@ +import { Worker } from 'near-workspaces'; +import test from 'ava'; + +test.beforeEach(async t => { + const worker = await Worker.init(); + const root = worker.rootAccount; + + const reqireInitFalse = await root.devDeploy('build/require_init_false.wasm'); + const reqireInitTrue = await root.devDeploy('build/require_init_true.wasm'); + + const ali = await root.createSubAccount('ali'); + + t.context.worker = worker; + t.context.accounts = { + root, + reqireInitFalse, + reqireInitTrue, + ali, + }; +}); + +test.afterEach.always(async t => { + await t.context.worker.tearDown().catch(error => { + console.log('Failed to tear down the worker:', error); + }); +}); + +test('Uninitialized contract throw error if requireInit = true', async t => { + const { ali, reqireInitTrue } = t.context.accounts; + + const callResult = await ali.callRaw(reqireInitTrue, 'setStatus', { status: 'hello' }); + t.assert(callResult.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.includes('Contract must be initialized')); + + const err = await t.throwsAsync(() => reqireInitTrue.view('getStatus', {})); + t.assert(err.message.includes('Contract must be initialized')); +}) + +test('Uninitialized contract does not throw error if requireInit = false', async t => { + const { ali, reqireInitFalse } = t.context.accounts; + + await ali.callRaw(reqireInitFalse, 'setStatus', { status: 'hello' }); + + t.is(await reqireInitFalse.view('getStatus', {}), 'hello') + +}) + +test('Init function panics if called more then once', async t => { + const { ali, reqireInitTrue, reqireInitFalse } = t.context.accounts; + + await ali.call(reqireInitTrue, 'init', { status: 'hello' }); + const res1 = await ali.callRaw(reqireInitTrue, 'init', { status: 'hello' }); + t.assert(res1.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.includes('Contract already initialized')); + + + await ali.call(reqireInitFalse, 'init', { status: 'hello' }); + const res2 = await ali.callRaw(reqireInitFalse, 'init', { status: 'hello' }); + t.assert(res2.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.includes('Contract already initialized')); +}) + diff --git a/tests/__tests__/decorators/payable.ava.js b/tests/__tests__/decorators/payable.ava.js new file mode 100644 index 00000000..8b2833e4 --- /dev/null +++ b/tests/__tests__/decorators/payable.ava.js @@ -0,0 +1,61 @@ +import { Worker } from 'near-workspaces'; +import test from 'ava'; + +const DEPOSIT = 1_000_000_000; + +test.beforeEach(async t => { + const worker = await Worker.init(); + const root = worker.rootAccount; + + const payableContract = await root.devDeploy('build/payable.wasm'); + const ali = await root.createSubAccount('ali'); + + t.context.worker = worker; + t.context.accounts = { + root, + payableContract, + ali, + }; +}); + + +test.afterEach.always(async t => { + await t.context.worker.tearDown().catch(error => { + console.log('Failed to tear down the worker:', error); + }); +}); + +test('payable: true functions works with deposit', async t => { + const { ali, payableContract } = t.context.accounts; + + await t.notThrowsAsync(ali.call(payableContract, 'setValueWithPayableFunction', { value: 'hello' }, { attachedDeposit: DEPOSIT })); + +}) + +test('payable: true functions works without deposit', async t => { + const { ali, payableContract } = t.context.accounts; + + await t.notThrowsAsync(ali.call(payableContract, 'setValueWithPayableFunction', { value: 'hello' })); + +}) + +test('payable: false throws if atach deposit', async t => { + const { ali, payableContract } = t.context.accounts; + + const result = await ali.callRaw(payableContract, 'setValueWithNotPayableFunction', { value: 'hello' }, { attachedDeposit: DEPOSIT }); + + t.assert(result.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.includes('Function is not payable')); +}) + +test('payable default throws if atach deposit', async t => { + const { ali, payableContract } = t.context.accounts; + + const result = await ali.callRaw(payableContract, 'setValueWithNotPayableFunctionByDefault', { value: 'hello' }, { attachedDeposit: DEPOSIT }); + t.assert(result.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.includes('Function is not payable')); +}) + +test('payable default works without deposit', async t => { + const { ali, payableContract } = t.context.accounts; + + await t.notThrowsAsync(ali.call(payableContract, 'setValueWithNotPayableFunctionByDefault', { value: 'hello' })); +}) diff --git a/tests/__tests__/decorators/private.ava.js b/tests/__tests__/decorators/private.ava.js new file mode 100644 index 00000000..14f675ca --- /dev/null +++ b/tests/__tests__/decorators/private.ava.js @@ -0,0 +1,46 @@ +import { Worker } from 'near-workspaces'; +import test from 'ava'; + +test.beforeEach(async t => { + const worker = await Worker.init(); + const root = worker.rootAccount; + + const contract = await root.devDeploy('build/private.wasm'); + const ali = await root.createSubAccount('ali'); + + t.context.worker = worker; + t.context.accounts = { + root, + contract, + ali, + }; +}); + + +test.afterEach.always(async t => { + await t.context.worker.tearDown().catch(error => { + console.log('Failed to tear down the worker:', error); + }); +}); + +test('private: true throws if called from another acc', async t => { + const { ali, contract } = t.context.accounts; + + const result = await ali.callRaw(contract, 'setValueWithPrivateFunction', { value: 'hello' }); + + t.assert(result.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.includes('Function is private')); + +}) + +test('private: true not throws if called from owner acc', async t => { + const { contract } = t.context.accounts; + + await t.notThrowsAsync(contract.call(contract, 'setValueWithNotPrivateFunction', { value: 'hello' })); + +}) + +test('private: default not throws from another acc', async t => { + const { ali, contract } = t.context.accounts; + + await t.notThrowsAsync(ali.call(contract, 'setValueWithNotPrivateFunctionByDefault', { value: 'hello' })); +}) diff --git a/tests/__tests__/function-params.ava.js b/tests/__tests__/function-params.ava.js index 95a0c376..01cb0555 100644 --- a/tests/__tests__/function-params.ava.js +++ b/tests/__tests__/function-params.ava.js @@ -1,11 +1,6 @@ import { Worker } from 'near-workspaces'; -import { readFile } from 'fs/promises' import test from 'ava'; -function encodeCall(contract, method, args) { - return Buffer.concat([Buffer.from(contract), Buffer.from([0]), Buffer.from(method), Buffer.from([0]), Buffer.from(JSON.stringify(args))]) -} - test.before(async t => { // Init the worker and start a Sandbox server const worker = await Worker.init(); @@ -17,7 +12,6 @@ test.before(async t => { const functionParamsContract = await root.devDeploy( 'build/function-params.wasm', ); - await functionParamsContract.call(functionParamsContract, 'init', {}); // Test users const ali = await root.createSubAccount('ali'); @@ -29,7 +23,7 @@ test.before(async t => { t.context.accounts = { root, functionParamsContract, ali, bob, carl }; }); -test.after(async t => { +test.after.always(async t => { await t.context.worker.tearDown().catch(error => { console.log('Failed to tear down the worker:', error); }); diff --git a/tests/__tests__/lookup-map.ava.js b/tests/__tests__/lookup-map.ava.js index 79ab5261..2cc8b471 100644 --- a/tests/__tests__/lookup-map.ava.js +++ b/tests/__tests__/lookup-map.ava.js @@ -1,11 +1,6 @@ import { Worker } from 'near-workspaces'; -import { readFile } from 'fs/promises' import test from 'ava'; -function encodeCall(contract, method, args) { - return Buffer.concat([Buffer.from(contract), Buffer.from([0]), Buffer.from(method), Buffer.from([0]), Buffer.from(JSON.stringify(args))]) -} - test.beforeEach(async t => { // Init the worker and start a Sandbox server const worker = await Worker.init(); @@ -17,7 +12,6 @@ test.beforeEach(async t => { const lookupMapContract = await root.devDeploy( 'build/lookup-map.wasm', ); - await lookupMapContract.call(lookupMapContract, 'init', {}); // Test users const ali = await root.createSubAccount('ali'); @@ -29,7 +23,7 @@ test.beforeEach(async t => { t.context.accounts = { root, lookupMapContract, ali, bob, carl }; }); -test.afterEach(async t => { +test.afterEach.always(async t => { await t.context.worker.tearDown().catch(error => { console.log('Failed to tear down the worker:', error); }); diff --git a/tests/__tests__/lookup-set.ava.js b/tests/__tests__/lookup-set.ava.js index 9b02771c..4e2a2024 100644 --- a/tests/__tests__/lookup-set.ava.js +++ b/tests/__tests__/lookup-set.ava.js @@ -1,11 +1,6 @@ import { Worker } from 'near-workspaces'; -import { readFile } from 'fs/promises' import test from 'ava'; -function encodeCall(contract, method, args) { - return Buffer.concat([Buffer.from(contract), Buffer.from([0]), Buffer.from(method), Buffer.from([0]), Buffer.from(JSON.stringify(args))]) -} - test.beforeEach(async t => { // Init the worker and start a Sandbox server const worker = await Worker.init(); @@ -17,7 +12,6 @@ test.beforeEach(async t => { const lookupSetContract = await root.devDeploy( 'build/lookup-set.wasm', ); - await lookupSetContract.call(lookupSetContract, 'init', {}); // Test users const ali = await root.createSubAccount('ali'); const bob = await root.createSubAccount('bob'); @@ -28,7 +22,7 @@ test.beforeEach(async t => { t.context.accounts = { root, lookupSetContract, ali, bob, carl }; }); -test.afterEach(async t => { +test.afterEach.always(async t => { await t.context.worker.tearDown().catch(error => { console.log('Failed to tear down the worker:', error); }); diff --git a/tests/__tests__/test-public-key.ava.js b/tests/__tests__/test-public-key.ava.js new file mode 100644 index 00000000..36d5aa68 --- /dev/null +++ b/tests/__tests__/test-public-key.ava.js @@ -0,0 +1,94 @@ +import { Worker } from 'near-workspaces'; +import test from 'ava'; + +test.before(async t => { + // Init the worker and start a Sandbox server + const worker = await Worker.init(); + + // Prepare sandbox for tests, create accounts, deploy contracts, etx. + const root = worker.rootAccount; + + // Create and deploy test contract + const pkContract = await root.createSubAccount('pk'); + await pkContract.deploy('build/public-key.wasm'); + + // Test users + const ali = await root.createSubAccount('ali'); + const bob = await root.createSubAccount('bob'); + const carl = await root.createSubAccount('carl'); + + + // Save state for test runs + t.context.worker = worker; + t.context.accounts = { root, pkContract, ali, bob, carl }; +}); + +test.after.always(async t => { + await t.context.worker.tearDown().catch(error => { + console.log('Failed to tear down the worker:', error); + }); +}); + +test('add signer key should success', async t => { + const { ali, pkContract } = t.context.accounts; + let r = await ali.callRaw(pkContract, 'test_add_signer_key', ''); + t.is(r.result.status.SuccessValue, ''); +}); + +test('add ed25519 key bytes should success', async t => { + const { ali, pkContract } = t.context.accounts; + let r = await ali.callRaw(pkContract, 'test_add_ed25519_key_bytes', ''); + t.is(r.result.status.SuccessValue, ''); +}); + +test('add ed25519 key string should success', async t => { + const { ali, pkContract } = t.context.accounts; + let r = await ali.callRaw(pkContract, 'test_add_ed25519_key_string', ''); + t.is(r.result.status.SuccessValue, ''); +}); + +test('add secp256k1 key bytes should success', async t => { + const { bob, pkContract } = t.context.accounts; + let r = await bob.callRaw(pkContract, 'test_add_secp256k1_key_bytes', ''); + t.is(r.result.status.SuccessValue, ''); +}); + +test('add secp256k1 key string should success', async t => { + const { bob, pkContract } = t.context.accounts; + let r = await bob.callRaw(pkContract, 'test_add_secp256k1_key_string', '', {gas: '100 Tgas'}); + t.is(r.result.status.SuccessValue, ''); +}); + +test('add invalid key should error', async t => { + const { bob, pkContract } = t.context.accounts; + let r = await bob.callRaw(pkContract, 'add_invalid_public_key', ''); + t.is(r.result.status.SuccessValue, undefined); + t.is(r.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError, 'VM Logic provided an invalid public key'); +}); + +test('curve type check should success', async t => { + const { carl, pkContract } = t.context.accounts; + let r = await carl.callRaw(pkContract, 'curve_type', ''); + t.is(r.result.status.SuccessValue, ''); +}) + +test('create invalid curve type should fail', async t => { + const { carl, pkContract } = t.context.accounts; + let r = await carl.callRaw(pkContract, 'create_invalid_curve_type', ''); + t.is(r.result.status.SuccessValue, undefined); + t.assert(r.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.startsWith('Smart contract panicked: Unknown curve')); +}) + +test('create invalid length should fail', async t => { + const { carl, pkContract } = t.context.accounts; + let r = await carl.callRaw(pkContract, 'create_invalid_length', ''); + t.is(r.result.status.SuccessValue, undefined); + t.assert(r.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.startsWith('Smart contract panicked: Invalid length')); +}) + +test('create invalid base58 should fail', async t => { + const { carl, pkContract } = t.context.accounts; + let r = await carl.callRaw(pkContract, 'create_from_invalid_base58', ''); + t.is(r.result.status.SuccessValue, undefined); + t.assert(r.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.startsWith('Smart contract panicked: Base58 error')); +}) \ No newline at end of file diff --git a/tests/__tests__/test_context_api.ava.js b/tests/__tests__/test_context_api.ava.js index 8ff41c07..a2517d44 100644 --- a/tests/__tests__/test_context_api.ava.js +++ b/tests/__tests__/test_context_api.ava.js @@ -24,7 +24,7 @@ test.before(async t => { t.context.accounts = { root, contextApiContract, ali, bob, carl }; }); -test.after(async t => { +test.after.always(async t => { await t.context.worker.tearDown().catch(error => { console.log('Failed to tear down the worker:', error); }); diff --git a/tests/__tests__/test_highlevel_promise.ava.js b/tests/__tests__/test_highlevel_promise.ava.js new file mode 100644 index 00000000..d732f96a --- /dev/null +++ b/tests/__tests__/test_highlevel_promise.ava.js @@ -0,0 +1,144 @@ +import { Worker } from 'near-workspaces'; +import test from 'ava'; + + +test.before(async t => { + // Init the worker and start a Sandbox server + const worker = await Worker.init(); + + // Prepare sandbox for tests, create accounts, deploy contracts, etx. + const root = worker.rootAccount; + + const highlevelPromise = await root.createSubAccount('highlevel-promise', {initialBalance: '100100N'}); + await highlevelPromise.deploy('build/highlevel-promise.wasm'); + + // Create and deploy callee contract + const calleeContract = await root.createSubAccount('callee-contract'); + await calleeContract.deploy('build/promise_api.wasm'); + + // Test users + const ali = await root.createSubAccount('ali'); + const bob = await root.createSubAccount('bob'); + + // Save state for test runs + t.context.worker = worker; + t.context.accounts = { root, highlevelPromise, ali, bob, calleeContract }; +}); + +test.after.always(async t => { + await t.context.worker.tearDown().catch(error => { + console.log('Failed to tear down the worker:', error); + }); +}); + +test('highlevel promise create account, transfer', async t => { + const { bob, highlevelPromise } = t.context.accounts; + + let r = await bob.callRaw(highlevelPromise, 'test_promise_batch_create_transfer', '', {gas: '100 Tgas'}); + t.is(r.result.receipts_outcome[1].outcome.executor_id, highlevelPromise.getSubAccount('a').accountId); + t.is(r.result.receipts_outcome[1].outcome.status.SuccessValue, ''); + + let balance = await highlevelPromise.getSubAccount('a').balance() + t.is(balance.total.toString(), '10000000000000000000000000') +}); + +test('highlevel promise stake', async t => { + const { highlevelPromise } = t.context.accounts; + await highlevelPromise.callRaw(highlevelPromise, 'test_promise_batch_stake', '', {gas: '100 Tgas'}); + let balance = await highlevelPromise.balance(); + t.is(balance.staked.toString(), '100000000000000000000000000000'); +}); + +test('highlevel promise add full access key', async t => { + const { bob, highlevelPromise } = t.context.accounts; + let r = await bob.callRaw(highlevelPromise, 'test_promise_add_full_access_key', '', {gas: '100 Tgas'}); + t.is(r.result.status.SuccessValue, ''); +}); + +test('highlevel promise add function call key', async t => { + const { bob, highlevelPromise } = t.context.accounts; + let r = await bob.callRaw(highlevelPromise, 'test_promise_add_function_call_access_key', '', {gas: '100 Tgas'}); + t.is(r.result.status.SuccessValue, ''); +}); + +test('highlevel promise delete account', async t => { + const { bob, highlevelPromise } = t.context.accounts; + let r = await bob.callRaw(highlevelPromise, 'test_delete_account', '', {gas: '100 Tgas'}); + t.is(r.result.status.SuccessValue, ''); + t.is(await highlevelPromise.getSubAccount('e').exists(), false); +}); + +test('highlevel promise then', async t => { + const { ali, highlevelPromise, calleeContract } = t.context.accounts; + let r = await ali.callRaw(highlevelPromise, 'test_promise_then', '', {gas: '70 Tgas'}); + // call the callee + t.is(r.result.receipts_outcome[1].outcome.executor_id, calleeContract.accountId); + t.deepEqual(JSON.parse(Buffer.from(r.result.receipts_outcome[1].outcome.status.SuccessValue, 'base64')), { + currentAccountId: calleeContract.accountId, + signerAccountId: ali.accountId, + predecessorAccountId: highlevelPromise.accountId, + input: 'abc', + }); + + // the callback scheduled by promise_then + t.is(r.result.receipts_outcome[3].outcome.executor_id, highlevelPromise.accountId); + t.deepEqual(JSON.parse(Buffer.from(r.result.receipts_outcome[3].outcome.status.SuccessValue, 'base64')), { + currentAccountId: highlevelPromise.accountId, + signerAccountId: ali.accountId, + predecessorAccountId: highlevelPromise.accountId, + input: '{"callbackArg1":"def"}', + promiseResults: [JSON.stringify({ + currentAccountId: calleeContract.accountId, + signerAccountId: ali.accountId, + predecessorAccountId: highlevelPromise.accountId, + input: 'abc', + })], + callbackArg1: 'def' + }); +}); + +test('highlevel promise and', async t => { + const { ali, highlevelPromise, calleeContract } = t.context.accounts; + let r = await ali.callRaw(highlevelPromise, 'test_promise_and', '', {gas: '150 Tgas'}); + + // console.log(JSON.stringify(r, null, 2)) + // promise and schedule to call the callee + t.is(r.result.receipts_outcome[1].outcome.executor_id, calleeContract.accountId); + t.deepEqual(JSON.parse(Buffer.from(r.result.receipts_outcome[1].outcome.status.SuccessValue, 'base64')), { + currentAccountId: calleeContract.accountId, + signerAccountId: ali.accountId, + predecessorAccountId: highlevelPromise.accountId, + input: 'abc', + }); + + // promise and schedule to call the callee, with different args + t.is(r.result.receipts_outcome[3].outcome.executor_id, calleeContract.accountId); + t.deepEqual(JSON.parse(Buffer.from(r.result.receipts_outcome[3].outcome.status.SuccessValue, 'base64')), { + currentAccountId: calleeContract.accountId, + signerAccountId: ali.accountId, + predecessorAccountId: highlevelPromise.accountId, + input: 'def', + }); + + // the callback scheduled by promise_then on the promise created by promise_and + t.is(r.result.receipts_outcome[5].outcome.executor_id, highlevelPromise.accountId); + t.deepEqual(JSON.parse(Buffer.from(r.result.receipts_outcome[5].outcome.status.SuccessValue, 'base64')), { + currentAccountId: highlevelPromise.accountId, + signerAccountId: ali.accountId, + predecessorAccountId: highlevelPromise.accountId, + input: '{"callbackArg1":"ghi"}', + promiseResults: [JSON.stringify({ + currentAccountId: calleeContract.accountId, + signerAccountId: ali.accountId, + predecessorAccountId: highlevelPromise.accountId, + input: 'abc', + }), JSON.stringify({ + currentAccountId: calleeContract.accountId, + signerAccountId: ali.accountId, + predecessorAccountId: highlevelPromise.accountId, + input: 'def', + })], + callbackArg1: 'ghi', + }); +}); + diff --git a/tests/__tests__/test_log_panic_api.ava.js b/tests/__tests__/test_log_panic_api.ava.js index 59700165..14a60584 100644 --- a/tests/__tests__/test_log_panic_api.ava.js +++ b/tests/__tests__/test_log_panic_api.ava.js @@ -22,7 +22,7 @@ test.before(async t => { t.context.accounts = { root, testContract, ali }; }); -test.after(async t => { +test.after.always(async t => { await t.context.worker.tearDown().catch(error => { console.log('Failed to tear down the worker:', error); }); diff --git a/tests/__tests__/test_math_api.ava.js b/tests/__tests__/test_math_api.ava.js index 91249ff2..9f2fdaee 100644 --- a/tests/__tests__/test_math_api.ava.js +++ b/tests/__tests__/test_math_api.ava.js @@ -1,7 +1,6 @@ import { Worker } from 'near-workspaces'; import test from 'ava'; - test.before(async t => { // Init the worker and start a Sandbox server const worker = await Worker.init(); @@ -22,7 +21,7 @@ test.before(async t => { t.context.accounts = { root, mathApiContract, ali }; }); -test.after(async t => { +test.after.always(async t => { await t.context.worker.tearDown().catch(error => { console.log('Failed to tear down the worker:', error); }); diff --git a/tests/__tests__/test_promise_api.ava.js b/tests/__tests__/test_promise_api.ava.js index cbc366d0..3dec7def 100644 --- a/tests/__tests__/test_promise_api.ava.js +++ b/tests/__tests__/test_promise_api.ava.js @@ -30,7 +30,7 @@ test.before(async t => { t.context.accounts = { root, callerContract, calleeContract, ali, bob, caller2Contract }; }); -test.after(async t => { +test.after.always(async t => { await t.context.worker.tearDown().catch(error => { console.log('Failed to tear down the worker:', error); }); @@ -169,4 +169,22 @@ test('promise delete account', async t => { let r = await bob.callRaw(caller2Contract, 'test_delete_account', '', {gas: '100 Tgas'}); t.is(r.result.status.SuccessValue, ''); t.is(await caller2Contract.getSubAccount('e').exists(), false); -}); \ No newline at end of file +}); + +test('promise batch function call weight', async t => { + const { ali, caller2Contract, calleeContract } = t.context.accounts; + let r = await ali.callRaw(caller2Contract, 'test_promise_batch_call_weight', '', {gas: '100 Tgas'}); + t.assert(r.result.status.SuccessValue); +}); + +test('promise batch transfer overflow', async t => { + const { bob, caller2Contract } = t.context.accounts; + let r = await bob.callRaw(caller2Contract, 'test_transfer_overflow', '', {gas: '100 Tgas'}); + t.assert(r.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.startsWith('Smart contract panicked: Expect Uint128 for amount')); +}); + +test('promise create gas overflow', async t => { + const { ali, callerContract } = t.context.accounts; + let r = await ali.callRaw(callerContract, 'test_promise_create_gas_overflow', '', {gas: '100 Tgas'}); + t.assert(r.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.startsWith('Smart contract panicked: Expect Uint64 for gas')); +}); diff --git a/tests/__tests__/test_storage_api.ava.js b/tests/__tests__/test_storage_api.ava.js index 48b4a8ba..88a7d2d4 100644 --- a/tests/__tests__/test_storage_api.ava.js +++ b/tests/__tests__/test_storage_api.ava.js @@ -1,7 +1,6 @@ import { Worker } from 'near-workspaces'; import test from 'ava'; - test.beforeEach(async t => { // Use beforeEach instead of before to start from scratch state for each test // Init the worker and start a Sandbox server @@ -23,7 +22,7 @@ test.beforeEach(async t => { t.context.accounts = { root, storageApiContract, ali }; }); -test.afterEach(async t => { +test.afterEach.always(async t => { await t.context.worker.tearDown().catch(error => { console.log('Failed to tear down the worker:', error); }); diff --git a/tests/__tests__/typescript.ava.js b/tests/__tests__/typescript.ava.js index 46b23edd..dbdf5e49 100644 --- a/tests/__tests__/typescript.ava.js +++ b/tests/__tests__/typescript.ava.js @@ -1,7 +1,6 @@ import { Worker } from 'near-workspaces'; import test from 'ava'; - test.before(async t => { // Init the worker and start a Sandbox server const worker = await Worker.init(); @@ -13,8 +12,6 @@ test.before(async t => { const typescriptContract = await root.devDeploy( 'build/typescript.wasm', ); - await typescriptContract.call(typescriptContract, 'init', {}) - // Test users const ali = await root.createSubAccount('ali'); @@ -23,7 +20,7 @@ test.before(async t => { t.context.accounts = { root, typescriptContract, ali }; }); -test.after(async t => { +test.after.always(async t => { await t.context.worker.tearDown().catch(error => { console.log('Failed to tear down the worker:', error); }); diff --git a/tests/__tests__/unordered-map.ava.js b/tests/__tests__/unordered-map.ava.js index 6e2bbc61..c3e532ef 100644 --- a/tests/__tests__/unordered-map.ava.js +++ b/tests/__tests__/unordered-map.ava.js @@ -1,11 +1,6 @@ import { Worker } from 'near-workspaces'; -import { readFile } from 'fs/promises' import test from 'ava'; -function encodeCall(contract, method, args) { - return Buffer.concat([Buffer.from(contract), Buffer.from([0]), Buffer.from(method), Buffer.from([0]), Buffer.from(JSON.stringify(args))]) -} - test.beforeEach(async t => { // Init the worker and start a Sandbox server const worker = await Worker.init(); @@ -17,7 +12,6 @@ test.beforeEach(async t => { const unorderedMapContract = await root.devDeploy( 'build/unordered-map.wasm', ); - await unorderedMapContract.call(unorderedMapContract, 'init', {}); // Test users const ali = await root.createSubAccount('ali'); const bob = await root.createSubAccount('bob'); @@ -28,7 +22,7 @@ test.beforeEach(async t => { t.context.accounts = { root, unorderedMapContract, ali, bob, carl }; }); -test.afterEach(async t => { +test.afterEach.always(async t => { await t.context.worker.tearDown().catch(error => { console.log('Failed to tear down the worker:', error); }); diff --git a/tests/__tests__/unordered-set.ava.js b/tests/__tests__/unordered-set.ava.js index 4e0ac321..a42fae7d 100644 --- a/tests/__tests__/unordered-set.ava.js +++ b/tests/__tests__/unordered-set.ava.js @@ -1,11 +1,6 @@ import { Worker } from 'near-workspaces'; -import { readFile } from 'fs/promises' import test from 'ava'; -function encodeCall(contract, method, args) { - return Buffer.concat([Buffer.from(contract), Buffer.from([0]), Buffer.from(method), Buffer.from([0]), Buffer.from(JSON.stringify(args))]) -} - test.beforeEach(async t => { // Init the worker and start a Sandbox server const worker = await Worker.init(); @@ -17,7 +12,6 @@ test.beforeEach(async t => { const unorderedSetContract = await root.devDeploy( 'build/unordered-set.wasm', ); - await unorderedSetContract.call(unorderedSetContract, 'init', {}); // Test users const ali = await root.createSubAccount('ali'); @@ -29,7 +23,7 @@ test.beforeEach(async t => { t.context.accounts = { root, unorderedSetContract, ali, bob, carl }; }); -test.afterEach(async t => { +test.afterEach.always(async t => { await t.context.worker.tearDown().catch(error => { console.log('Failed to tear down the worker:', error); }); diff --git a/tests/__tests__/vector.ava.js b/tests/__tests__/vector.ava.js index b60233f0..d805c97b 100644 --- a/tests/__tests__/vector.ava.js +++ b/tests/__tests__/vector.ava.js @@ -1,5 +1,4 @@ import { Worker } from 'near-workspaces'; -import { readFile } from 'fs/promises' import test from 'ava'; test.beforeEach(async t => { @@ -13,7 +12,6 @@ test.beforeEach(async t => { const vectorContract = await root.devDeploy( 'build/vector.wasm', ); - await vectorContract.call(vectorContract, 'init', {}); // Test users const ali = await root.createSubAccount('ali'); @@ -25,7 +23,7 @@ test.beforeEach(async t => { t.context.accounts = { root, vectorContract, ali, bob, carl }; }); -test.afterEach(async t => { +test.afterEach.always(async t => { await t.context.worker.tearDown().catch(error => { console.log('Failed to tear down the worker:', error); }); diff --git a/tests/babel.config.json b/tests/babel.config.json index 76a04fe0..d01c909c 100644 --- a/tests/babel.config.json +++ b/tests/babel.config.json @@ -1,6 +1,8 @@ { "plugins": [ + "near-sdk-js/lib/build-tools/include-bytes", "near-sdk-js/lib/build-tools/near-bindgen-exporter", ["@babel/plugin-proposal-decorators", {"version": "legacy"}] - ] + ], + "presets": ["@babel/preset-typescript"] } diff --git a/tests/package.json b/tests/package.json index 0d1bc5b0..43791136 100644 --- a/tests/package.json +++ b/tests/package.json @@ -6,13 +6,14 @@ "type": "module", "scripts": { "postinstall": "cd .. && yarn link && cd tests && yarn link near-sdk-js", - "build": "yarn build:context-api && yarn build:math-api && yarn build:storage-api && yarn build:log-panic-api && yarn build:promise-api && yarn build:promise-batch-api && yarn build:function-params && yarn build:lookup-map && yarn build:lookup-set && yarn build:unordered-map && yarn build:unordered-set && yarn build:vector && yarn build:bytes && yarn build:typescript", + "build": "yarn build:context-api && yarn build:math-api && yarn build:storage-api && yarn build:log-panic-api && yarn build:promise-api && yarn build:promise-batch-api && yarn build:function-params && yarn build:lookup-map && yarn build:lookup-set && yarn build:unordered-map && yarn build:unordered-set && yarn build:vector && yarn build:bytes && yarn build:typescript && yarn build:public-key && yarn build:near-bindgen && yarn build:payable && yarn build:private && yarn build:highlevel-promise", "build:context-api": "near-sdk-js build src/context_api.js build/context_api.wasm", "build:math-api": "near-sdk-js build src/math_api.js build/math_api.wasm", "build:storage-api": "near-sdk-js build src/storage_api.js build/storage_api.wasm", "build:log-panic-api": "near-sdk-js build src/log_panic_api.js build/log_panic_api.wasm", "build:promise-api": "near-sdk-js build src/promise_api.js build/promise_api.wasm", "build:promise-batch-api": "near-sdk-js build src/promise_batch_api.js build/promise_batch_api.wasm", + "build:highlevel-promise": "near-sdk-js build src/highlevel-promise.js build/highlevel-promise.wasm", "build:function-params": "near-sdk-js build src/function-params.js build/function-params.wasm", "build:lookup-map": "near-sdk-js build src/lookup-map.js build/lookup-map.wasm", "build:lookup-set": "near-sdk-js build src/lookup-set.js build/lookup-set.wasm", @@ -21,12 +22,17 @@ "build:vector": "near-sdk-js build src/vector.js build/vector.wasm", "build:bytes": "near-sdk-js build src/bytes.js build/bytes.wasm", "build:typescript": "near-sdk-js build src/typescript.ts build/typescript.wasm", + "build:public-key": "near-sdk-js build src/public-key.js build/public-key.wasm", + "build:near-bindgen": "near-sdk-js build src/decorators/require_init_true.ts build/require_init_true.wasm && near-sdk-js build src/decorators/require_init_false.ts build/require_init_false.wasm", + "build:payable": "near-sdk-js build src/decorators/payable.ts build/payable.wasm", + "build:private": "near-sdk-js build src/decorators/private.ts build/private.wasm", "test": "ava", "test:context-api": "ava __tests__/test_context_api.ava.js", "test:math-api": "ava __tests__/test_math_api.ava.js", "test:storage-api": "ava __tests__/test_storage_api.ava.js", "test:log-panic-api": "ava __tests__/test_log_panic_api.ava.js", "test:promise-api": "ava __tests__/test_promise_api.ava.js", + "test:highlevel-promise": "ava __tests__/test_highlevel_promise.ava.js", "test:function-params": "ava __tests__/function-params.ava.js", "test:lookup-map": "ava __tests__/lookup-map.ava.js", "test:lookup-set": "ava __tests__/lookup-set.ava.js", @@ -34,13 +40,17 @@ "test:unordered-map": "ava __tests__/unordered-map.ava.js", "test:vector": "ava __tests__/vector.ava.js", "test:bytes": "ava __tests__/bytes.ava.js", - "test:typescript": "ava __tests__/typescript.ava.js" + "test:typescript": "ava __tests__/typescript.ava.js", + "test:public-key": "ava __tests__/test-public-key.ava.js", + "test:near-bindgen": "ava __tests__/decorators/near_bindgen.ava.js", + "test:payable": "ava __tests__/decorators/payable.ava.js", + "test:private": "ava __tests__/decorators/private.ava.js" }, "author": "Near Inc ", "license": "Apache-2.0", "devDependencies": { "ava": "^4.2.0", - "near-workspaces": "3.1.0", + "near-workspaces": "3.2.1", "typescript": "^4.7.4" } } diff --git a/tests/src/bytes.js b/tests/src/bytes.js index 6f35221b..56b17180 100644 --- a/tests/src/bytes.js +++ b/tests/src/bytes.js @@ -4,7 +4,7 @@ export function log_expected_input_tests() { // log ascii string near.log('abc') // log string with utf-8 chars - near.log('æ°´') + near.log('æ°´') // Buffer([0xe6, 0xb0, 0xb4]) // log number near.log(333) // log aribrary byte sequence diff --git a/tests/src/decorators/payable.ts b/tests/src/decorators/payable.ts new file mode 100644 index 00000000..d1e6d981 --- /dev/null +++ b/tests/src/decorators/payable.ts @@ -0,0 +1,38 @@ +import { + near, + NearBindgen, + call, + view, +} from 'near-sdk-js' + +@NearBindgen({}) +class PayableTest { + value: string; + + constructor() { + this.value = ''; + } + + @call({ payableFunction: true }) + setValueWithPayableFunction({ value }: { value: string }): void { + near.log(`payableFunction: ${value}`) + this.value = value; + } + + @call({ payableFunction: false }) + setValueWithNotPayableFunction({ value }: { value: string }): void { + near.log(`notPayableFunction: ${value}`) + this.value = value; + } + + @call({}) + setValueWithNotPayableFunctionByDefault({ value }: { value: string }): void { + near.log(`notPayableFunctionDefault: ${value}`) + this.value = value; + } + + @view({}) + getValue(): string { + return this.value; + } +} diff --git a/tests/src/decorators/private.ts b/tests/src/decorators/private.ts new file mode 100644 index 00000000..f3a6a901 --- /dev/null +++ b/tests/src/decorators/private.ts @@ -0,0 +1,38 @@ +import { + near, + NearBindgen, + call, + view, +} from 'near-sdk-js' + +@NearBindgen({}) +class PrivateTest { + value: string; + + constructor() { + this.value = ''; + } + + @call({ privateFunction: true }) + setValueWithPrivateFunction({ value }: { value: string }): void { + near.log(`setValueWithPrivateFunction: ${value}`) + this.value = value; + } + + @call({ privateFunction: false }) + setValueWithNotPrivateFunction({ value }: { value: string }): void { + near.log(`setValueWithNotPrivateFunction: ${value}`) + this.value = value; + } + + @call({}) + setValueWithNotPrivateFunctionByDefault({ value }: { value: string }): void { + near.log(`setValueWithNotPrivateFunctionByDefault: ${value}`) + this.value = value; + } + + @view({}) + getValue(): string { + return this.value; + } +} diff --git a/tests/src/decorators/require_init_false.ts b/tests/src/decorators/require_init_false.ts new file mode 100644 index 00000000..a8ab954c --- /dev/null +++ b/tests/src/decorators/require_init_false.ts @@ -0,0 +1,34 @@ +import { + near, + NearBindgen, + call, + view, + initialize, +} from 'near-sdk-js' + +@NearBindgen({ requireInit: false }) +class NBTest { + status: string; + + constructor() { + this.status = ''; + } + + @initialize({}) + init({ status }: { status: string }): void { + near.log(`init: ${status}`) + this.status = status; + } + + @view({}) + getStatus(): string { + near.log(`getStatus: ${this.status}`) + return this.status; + } + + @call({}) + setStatus({ status }: { status: string }): void { + near.log(`setStatus: ${status}`) + this.status = status; + } +} diff --git a/tests/src/decorators/require_init_true.ts b/tests/src/decorators/require_init_true.ts new file mode 100644 index 00000000..b756f5d8 --- /dev/null +++ b/tests/src/decorators/require_init_true.ts @@ -0,0 +1,36 @@ +import { + near, + NearBindgen, + call, + view, + initialize, +} from 'near-sdk-js' + +@NearBindgen({ requireInit: true }) +class NBTest { + status: string; + + constructor() { + this.status = ''; + } + + @initialize({}) + init({ status }: { status: string }): void { + near.log(`init: ${status}`) + this.status = status; + } + + @view({}) + getStatus(): string { + near.log(`getStatus: ${this.status}`) + return this.status; + } + + @call({}) + setStatus({ status }: { status: string }): void { + near.log(`setStatus: ${status}`) + this.status = status; + } +} + + diff --git a/tests/src/function-params.js b/tests/src/function-params.js index ce2da470..b6dfa8c0 100644 --- a/tests/src/function-params.js +++ b/tests/src/function-params.js @@ -1,5 +1,4 @@ import { - NearContract, NearBindgen, call, view, @@ -9,16 +8,15 @@ import { /** * Simple contract to test function parameters */ -@NearBindgen -class FunctionParamsTestContract extends NearContract { +@NearBindgen({}) +class FunctionParamsTestContract { constructor() { - super() this.val1 = 'default1'; this.val2 = 'default2'; this.val3 = 'default3'; } - @call + @call({}) set_values({ param1, param2, param3 }) { near.log(JSON.stringify({ param1, param2, param3 })); this.val1 = param1; @@ -26,12 +24,8 @@ class FunctionParamsTestContract extends NearContract { this.val3 = param3; } - @view + @view({}) get_values() { return { val3: this.val3, val2: this.val2, val1: this.val1 } } - - default() { - return new FunctionParamsTestContract(); - } } \ No newline at end of file diff --git a/tests/src/highlevel-promise.js b/tests/src/highlevel-promise.js new file mode 100644 index 00000000..702dd154 --- /dev/null +++ b/tests/src/highlevel-promise.js @@ -0,0 +1,87 @@ +import {NearBindgen, call, view, NearPromise, near, bytes} from 'near-sdk-js' +import { PublicKey } from 'near-sdk-js/lib/types'; + +function callingData() { + return { + currentAccountId: near.currentAccountId(), + signerAccountId: near.signerAccountId(), + predecessorAccountId: near.predecessorAccountId(), + input: near.input(), + } +} + +function arrayN(n) { + return [...Array(Number(n)).keys()] +} + +@NearBindgen({}) +class HighlevelPromiseContract { + @call({}) + test_promise_batch_stake() { + let promise = NearPromise.new('highlevel-promise.test.near') + .stake(100000000000000000000000000000n, new PublicKey(near.signerAccountPk())) + + return promise; + } + + @call({}) + test_promise_batch_create_transfer() { + let promise = NearPromise.new('a.highlevel-promise.test.near') + .createAccount() + .transfer(10000000000000000000000000n) + return promise; + } + + @call({}) + test_promise_add_full_access_key() { + let promise = NearPromise.new('c.highlevel-promise.test.near') + .createAccount() + .transfer(10000000000000000000000000n) + .addFullAccessKey(new PublicKey(near.signerAccountPk())) + return promise; + } + + @call({}) + test_promise_add_function_call_access_key() { + let promise = NearPromise.new('d.highlevel-promise.test.near') + .createAccount() + .transfer(10000000000000000000000000n) + .addAccessKey(new PublicKey(near.signerAccountPk()), 250000000000000000000000n, 'highlevel-promise.test.near', 'test_promise_batch_create_transfer') + return promise; + } + + @call({}) + test_delete_account() { + let promise = NearPromise.new('e.highlevel-promise.test.near') + .createAccount() + .transfer(10000000000000000000000000n) + .deleteAccount(near.signerAccountId()) + return promise; + } + + @call({}) + test_promise_then() { + let promise = NearPromise.new('callee-contract.test.near') + .functionCall('cross_contract_callee', bytes('abc'), 0, 2 * Math.pow(10, 13)) + .then(NearPromise.new('highlevel-promise.test.near').functionCall('cross_contract_callback', bytes(JSON.stringify({callbackArg1: 'def'})), 0, 2 * Math.pow(10, 13))) + return promise; + } + + @call({}) + test_promise_and() { + let promise = NearPromise.new('callee-contract.test.near') + .functionCall('cross_contract_callee', bytes('abc'), 0, 2 * Math.pow(10, 13)) + let promise2 = NearPromise.new('callee-contract.test.near') + .functionCall('cross_contract_callee', bytes('def'), 0, 2 * Math.pow(10, 13)) + let retPromise = promise.and(promise2).then( + NearPromise.new('highlevel-promise.test.near') + .functionCall('cross_contract_callback', bytes(JSON.stringify({callbackArg1: 'ghi'})), 0, 3 * Math.pow(10, 13))) + + return retPromise; + } + + @call({}) + cross_contract_callback({callbackArg1}) { + return {...callingData(), promiseResults: arrayN(near.promiseResultsCount()).map(i => near.promiseResult(i)), callbackArg1} + } +} \ No newline at end of file diff --git a/tests/src/lookup-map.js b/tests/src/lookup-map.js index 9c868545..b57b77b7 100644 --- a/tests/src/lookup-map.js +++ b/tests/src/lookup-map.js @@ -1,60 +1,54 @@ import { - NearContract, NearBindgen, call, view, LookupMap } from 'near-sdk-js' -import {House, Room} from './model.js'; +import { House, Room } from './model.js'; -@NearBindgen -class LookupMapTestContract extends NearContract { +@NearBindgen({}) +class LookupMapTestContract { constructor() { - super() this.lookupMap = new LookupMap('a'); } - default() { - return new LookupMapTestContract(); - } - - @view - get({key}) { + @view({}) + get({ key }) { return this.lookupMap.get(key); } - @view - containsKey({key}) { + @view({}) + containsKey({ key }) { return this.lookupMap.containsKey(key); } - @call - set({key, value}) { + @call({}) + set({ key, value }) { this.lookupMap.set(key, value); } - @call - remove_key({key}) { + @call({}) + remove_key({ key }) { this.lookupMap.remove(key); } - @call - extend({kvs}) { + @call({}) + extend({ kvs }) { this.lookupMap.extend(kvs); } - @call + @call({}) add_house() { this.lookupMap.set('house1', new House('house1', [new Room('room1', '200sqft'), new Room('room2', '300sqft')])) } - @view + @view({}) get_house() { const houseObject = this.lookupMap.get('house1') // restore class object from serialized data const house = new House(houseObject.name, houseObject.rooms) const roomObject = house.rooms[0] - const room = new Room(roomObject.name, roomObject.size) + const room = new Room(roomObject.name, roomObject.size) return house.describe() + room.describe() } } diff --git a/tests/src/lookup-set.js b/tests/src/lookup-set.js index 24736bf9..458c3ac8 100644 --- a/tests/src/lookup-set.js +++ b/tests/src/lookup-set.js @@ -1,5 +1,4 @@ import { - NearContract, NearBindgen, call, view, @@ -7,38 +6,33 @@ import { } from 'near-sdk-js' import { House, Room } from './model.js'; -@NearBindgen -class LookupSetTestContract extends NearContract { +@NearBindgen({}) +class LookupSetTestContract { constructor() { - super() this.lookupSet = new LookupSet('a'); } - default() { - return new LookupSetTestContract(); - } - - @view + @view({}) contains({ key }) { return this.lookupSet.contains(key); } - @call + @call({}) set({ key }) { this.lookupSet.set(key); } - @call + @call({}) remove_key({ key }) { this.lookupSet.remove(key); } - @call + @call({}) extend({ keys }) { this.lookupSet.extend(keys); } - @call + @call({}) add_house({ name, rooms }) { let house = new House(name, []) for (let r of rooms) { @@ -47,7 +41,7 @@ class LookupSetTestContract extends NearContract { this.lookupSet.set(house) } - @view + @view({}) house_exist({ name, rooms }) { let house = new House(name, []) for (let r of rooms) { diff --git a/tests/src/promise_api.js b/tests/src/promise_api.js index 01aebf66..cb976942 100644 --- a/tests/src/promise_api.js +++ b/tests/src/promise_api.js @@ -17,6 +17,10 @@ export function cross_contract_callee() { near.valueReturn(bytes(JSON.stringify(callingData()))) } +export function cross_contract_call_gas() { + near.valueReturn(bytes(near.prepaidGas().toString())) +} + export function cross_contract_callback() { near.valueReturn(bytes(JSON.stringify({...callingData(), promiseResults: arrayN(near.promiseResultsCount()).map(i => near.promiseResult(i))}))) } @@ -25,6 +29,10 @@ export function test_promise_create() { near.promiseCreate('callee-contract.test.near', 'cross_contract_callee', bytes('abc'), 0, 2 * Math.pow(10, 13)) } +export function test_promise_create_gas_overflow() { + near.promiseCreate('callee-contract.test.near', 'cross_contract_callee', bytes('abc'), 0, BigInt(2) ** BigInt(64)) +} + export function test_promise_then() { let promiseId = near.promiseCreate('callee-contract.test.near', 'cross_contract_callee', bytes('abc'), 0, 2 * Math.pow(10, 13)) near.promiseThen(promiseId, 'caller-contract.test.near', 'cross_contract_callback', bytes('def'), 0, 2 * Math.pow(10, 13)) diff --git a/tests/src/promise_batch_api.js b/tests/src/promise_batch_api.js index b5957336..e8b25c7e 100644 --- a/tests/src/promise_batch_api.js +++ b/tests/src/promise_batch_api.js @@ -6,6 +6,13 @@ export function test_promise_batch_stake() { near.promiseReturn(promiseId) } +export function test_transfer_overflow() { + let promiseId = near.promiseBatchCreate('c.caller2.test.near') + near.promiseBatchActionCreateAccount(promiseId) + near.promiseBatchActionTransfer(promiseId, BigInt(2) ** BigInt(128)) + near.promiseReturn(promiseId) +} + export function test_promise_add_full_access_key() { let promiseId = near.promiseBatchCreate('c.caller2.test.near') near.promiseBatchActionCreateAccount(promiseId) @@ -37,13 +44,19 @@ export function test_promise_batch_create_transfer() { near.promiseReturn(promiseId) } +export function test_promise_batch_call_weight() { + let promiseId = near.promiseBatchCreate('callee-contract.test.near') + near.promiseBatchActionFunctionCallWeight(promiseId, 'cross_contract_call_gas', bytes('abc'), 0, 0, 1) + near.promiseReturn(promiseId) +} + export function test_promise_batch_deploy_call() { let promiseId = near.promiseBatchCreate('b.caller2.test.near') near.promiseBatchActionCreateAccount(promiseId) near.promiseBatchActionTransfer(promiseId, 10000000000000000000000000n) // deploy content of promise_api.wasm to `b.caller2.test.near` // Note, we do not use `bytes()`, it's too expensive for long bytes and exceed gas limit - near.promiseBatchActionDeployContract(promiseId, '\x00\x61\x73\x6d\x01\x00\x00\x00\x01\xae\x07\x76\x60\x02\x7f\x7f\x00\x60\x03\x7f\x7f\x7f\x01\x7f\x60\x04\x7f\x7e\x7f\x7f\x01\x7e\x60\x02\x7f\x7f\x01\x7f\x60\x01\x7f\x01\x7f\x60\x05\x7f\x7e\x7f\x7f\x7f\x01\x7e\x60\x03\x7f\x7f\x7f\x00\x60\x04\x7f\x7f\x7f\x7f\x01\x7f\x60\x02\x7f\x7e\x01\x7e\x60\x01\x7f\x00\x60\x02\x7f\x7e\x00\x60\x01\x7c\x01\x7c\x60\x05\x7f\x7f\x7f\x7f\x7f\x01\x7f\x60\x02\x7f\x7f\x01\x7e\x60\x03\x7f\x7e\x7f\x01\x7e\x60\x03\x7f\x7f\x7e\x01\x7f\x60\x02\x7f\x7e\x01\x7f\x60\x03\x7f\x7e\x7f\x00\x60\x06\x7f\x7e\x7f\x7f\x7f\x7f\x01\x7e\x60\x03\x7f\x7e\x7f\x01\x7f\x60\x06\x7f\x7f\x7f\x7f\x7f\x7f\x01\x7f\x60\x06\x7f\x7e\x7e\x7f\x7f\x7f\x01\x7e\x60\x01\x7e\x00\x60\x04\x7f\x7f\x7e\x7f\x01\x7f\x60\x03\x7f\x7f\x7f\x01\x7e\x60\x03\x7f\x7e\x7e\x01\x7e\x60\x00\x00\x60\x04\x7f\x7f\x7f\x7f\x00\x60\x03\x7e\x7e\x7e\x00\x60\x02\x7c\x7c\x01\x7c\x60\x05\x7f\x7f\x7f\x7e\x7e\x01\x7f\x60\x00\x01\x7e\x60\x01\x7f\x01\x7e\x60\x04\x7f\x7f\x7e\x7e\x01\x7f\x60\x04\x7f\x7f\x7f\x7e\x01\x7f\x60\x04\x7f\x7f\x7f\x7f\x01\x7e\x60\x03\x7f\x7e\x7e\x01\x7f\x60\x02\x7e\x7e\x00\x60\x05\x7f\x7f\x7f\x7f\x7f\x01\x7e\x60\x01\x7e\x01\x7f\x60\x07\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x01\x7f\x60\x01\x7e\x01\x7e\x60\x05\x7f\x7e\x7e\x7f\x7f\x01\x7e\x60\x05\x7f\x7e\x7f\x7e\x7f\x01\x7f\x60\x07\x7f\x7e\x7f\x7e\x7e\x7e\x7f\x01\x7f\x60\x05\x7f\x7f\x7f\x7f\x7f\x00\x60\x02\x7e\x7e\x01\x7e\x60\x04\x7f\x7e\x7f\x7f\x01\x7f\x60\x06\x7f\x7e\x7f\x7e\x7e\x7f\x01\x7f\x60\x05\x7f\x7e\x7e\x7e\x7f\x01\x7f\x60\x08\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x01\x7f\x60\x03\x7e\x7e\x7e\x01\x7e\x60\x01\x7f\x01\x7c\x60\x04\x7f\x7e\x7f\x7e\x01\x7e\x60\x06\x7f\x7f\x7f\x7f\x7f\x7f\x01\x7e\x60\x03\x7f\x7e\x7e\x00\x60\x05\x7f\x7e\x7e\x7f\x7f\x00\x60\x03\x7f\x7f\x7e\x00\x60\x03\x7e\x7f\x7f\x01\x7f\x60\x04\x7f\x7e\x7e\x7f\x01\x7e\x60\x04\x7f\x7e\x7e\x7f\x01\x7f\x60\x03\x7f\x7f\x7e\x01\x7e\x60\x09\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x01\x7f\x60\x07\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x00\x60\x04\x7e\x7e\x7e\x7e\x00\x60\x00\x01\x7f\x60\x02\x7f\x7f\x01\x7c\x60\x03\x7c\x7c\x7f\x01\x7c\x60\x02\x7c\x7f\x01\x7c\x60\x01\x7c\x01\x7f\x60\x04\x7f\x7e\x7f\x7f\x00\x60\x04\x7f\x7e\x7f\x7e\x00\x60\x07\x7f\x7e\x7f\x7f\x7f\x7f\x7f\x01\x7e\x60\x04\x7f\x7e\x7f\x7e\x01\x7f\x60\x04\x7f\x7e\x7e\x7e\x01\x7f\x60\x05\x7f\x7f\x7e\x7f\x7f\x01\x7f\x60\x04\x7f\x7f\x7e\x7f\x00\x60\x07\x7e\x7e\x7e\x7e\x7e\x7e\x7e\x01\x7e\x60\x08\x7e\x7e\x7e\x7e\x7e\x7e\x7e\x7e\x01\x7e\x60\x09\x7e\x7e\x7e\x7e\x7e\x7e\x7e\x7e\x7e\x01\x7e\x60\x07\x7e\x7e\x7e\x7e\x7e\x7e\x7e\x00\x60\x09\x7e\x7e\x7e\x7e\x7e\x7e\x7e\x7e\x7e\x00\x60\x05\x7e\x7e\x7e\x7e\x7e\x01\x7e\x60\x02\x7e\x7f\x01\x7f\x60\x06\x7e\x7f\x7f\x7f\x7f\x7f\x00\x60\x03\x7f\x7f\x7f\x01\x7c\x60\x02\x7f\x7c\x01\x7c\x60\x02\x7c\x7f\x01\x7f\x60\x05\x7f\x7e\x7f\x7e\x7f\x01\x7e\x60\x07\x7f\x7f\x7f\x7f\x7f\x7f\x7e\x01\x7e\x60\x05\x7f\x7f\x7f\x7f\x7e\x01\x7e\x60\x04\x7f\x7f\x7f\x7e\x01\x7e\x60\x05\x7f\x7e\x7f\x7f\x7f\x00\x60\x05\x7f\x7c\x7f\x7f\x7f\x01\x7e\x60\x06\x7c\x7f\x7f\x7f\x7f\x7f\x00\x60\x07\x7f\x7e\x7e\x7e\x7f\x7f\x7f\x01\x7e\x60\x04\x7f\x7e\x7e\x7e\x01\x7e\x60\x04\x7f\x7f\x7e\x7f\x01\x7e\x60\x06\x7f\x7e\x7f\x7f\x7f\x7f\x01\x7f\x60\x07\x7f\x7f\x7f\x7e\x7e\x7e\x7f\x01\x7f\x60\x05\x7f\x7f\x7e\x7e\x7f\x01\x7f\x60\x07\x7f\x7f\x7e\x7e\x7f\x7f\x7f\x01\x7f\x60\x02\x7f\x7c\x01\x7f\x60\x06\x7f\x7f\x7e\x7e\x7f\x7f\x01\x7f\x60\x06\x7f\x7f\x7e\x7e\x7e\x7e\x01\x7f\x60\x06\x7f\x7e\x7e\x7e\x7e\x7f\x01\x7f\x60\x08\x7f\x7e\x7e\x7e\x7e\x7f\x7e\x7e\x01\x7e\x60\x05\x7f\x7e\x7e\x7e\x7e\x01\x7f\x60\x07\x7f\x7e\x7e\x7f\x7f\x7f\x7f\x01\x7e\x60\x05\x7f\x7e\x7f\x7f\x7f\x01\x7f\x60\x03\x7f\x7e\x7c\x01\x7e\x60\x0a\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x01\x7f\x60\x05\x7f\x7f\x7e\x7e\x7e\x01\x7e\x60\x02\x7c\x7c\x01\x7f\x60\x04\x7f\x7e\x7e\x7f\x00\x60\x08\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x7f\x00\x60\x05\x7f\x7f\x7e\x7f\x7f\x00\x60\x06\x7f\x7f\x7f\x7f\x7f\x7f\x00\x02\xcc\x09\x33\x03\x65\x6e\x76\x0a\x70\x61\x6e\x69\x63\x5f\x75\x74\x66\x38\x00\x25\x03\x65\x6e\x76\x0c\x72\x65\x67\x69\x73\x74\x65\x72\x5f\x6c\x65\x6e\x00\x29\x03\x65\x6e\x76\x0d\x72\x65\x61\x64\x5f\x72\x65\x67\x69\x73\x74\x65\x72\x00\x25\x03\x65\x6e\x76\x0e\x77\x72\x69\x74\x65\x5f\x72\x65\x67\x69\x73\x74\x65\x72\x00\x1c\x03\x65\x6e\x76\x12\x63\x75\x72\x72\x65\x6e\x74\x5f\x61\x63\x63\x6f\x75\x6e\x74\x5f\x69\x64\x00\x16\x03\x65\x6e\x76\x11\x73\x69\x67\x6e\x65\x72\x5f\x61\x63\x63\x6f\x75\x6e\x74\x5f\x69\x64\x00\x16\x03\x65\x6e\x76\x11\x73\x69\x67\x6e\x65\x72\x5f\x61\x63\x63\x6f\x75\x6e\x74\x5f\x70\x6b\x00\x16\x03\x65\x6e\x76\x16\x70\x72\x65\x64\x65\x63\x65\x73\x73\x6f\x72\x5f\x61\x63\x63\x6f\x75\x6e\x74\x5f\x69\x64\x00\x16\x03\x65\x6e\x76\x05\x69\x6e\x70\x75\x74\x00\x16\x03\x65\x6e\x76\x0b\x62\x6c\x6f\x63\x6b\x5f\x69\x6e\x64\x65\x78\x00\x1f\x03\x65\x6e\x76\x0f\x62\x6c\x6f\x63\x6b\x5f\x74\x69\x6d\x65\x73\x74\x61\x6d\x70\x00\x1f\x03\x65\x6e\x76\x0c\x65\x70\x6f\x63\x68\x5f\x68\x65\x69\x67\x68\x74\x00\x1f\x03\x65\x6e\x76\x0d\x73\x74\x6f\x72\x61\x67\x65\x5f\x75\x73\x61\x67\x65\x00\x1f\x03\x65\x6e\x76\x0f\x61\x63\x63\x6f\x75\x6e\x74\x5f\x62\x61\x6c\x61\x6e\x63\x65\x00\x16\x03\x65\x6e\x76\x16\x61\x63\x63\x6f\x75\x6e\x74\x5f\x6c\x6f\x63\x6b\x65\x64\x5f\x62\x61\x6c\x61\x6e\x63\x65\x00\x16\x03\x65\x6e\x76\x10\x61\x74\x74\x61\x63\x68\x65\x64\x5f\x64\x65\x70\x6f\x73\x69\x74\x00\x16\x03\x65\x6e\x76\x0b\x70\x72\x65\x70\x61\x69\x64\x5f\x67\x61\x73\x00\x1f\x03\x65\x6e\x76\x08\x75\x73\x65\x64\x5f\x67\x61\x73\x00\x1f\x03\x65\x6e\x76\x0b\x72\x61\x6e\x64\x6f\x6d\x5f\x73\x65\x65\x64\x00\x16\x03\x65\x6e\x76\x06\x73\x68\x61\x32\x35\x36\x00\x1c\x03\x65\x6e\x76\x09\x6b\x65\x63\x63\x61\x6b\x32\x35\x36\x00\x1c\x03\x65\x6e\x76\x09\x6b\x65\x63\x63\x61\x6b\x35\x31\x32\x00\x1c\x03\x65\x6e\x76\x09\x72\x69\x70\x65\x6d\x64\x31\x36\x30\x00\x1c\x03\x65\x6e\x76\x09\x65\x63\x72\x65\x63\x6f\x76\x65\x72\x00\x4d\x03\x65\x6e\x76\x0c\x76\x61\x6c\x75\x65\x5f\x72\x65\x74\x75\x72\x6e\x00\x25\x03\x65\x6e\x76\x05\x70\x61\x6e\x69\x63\x00\x1a\x03\x65\x6e\x76\x08\x6c\x6f\x67\x5f\x75\x74\x66\x38\x00\x25\x03\x65\x6e\x76\x09\x6c\x6f\x67\x5f\x75\x74\x66\x31\x36\x00\x25\x03\x65\x6e\x76\x0e\x70\x72\x6f\x6d\x69\x73\x65\x5f\x63\x72\x65\x61\x74\x65\x00\x4e\x03\x65\x6e\x76\x0c\x70\x72\x6f\x6d\x69\x73\x65\x5f\x74\x68\x65\x6e\x00\x4f\x03\x65\x6e\x76\x0b\x70\x72\x6f\x6d\x69\x73\x65\x5f\x61\x6e\x64\x00\x2e\x03\x65\x6e\x76\x14\x70\x72\x6f\x6d\x69\x73\x65\x5f\x62\x61\x74\x63\x68\x5f\x63\x72\x65\x61\x74\x65\x00\x2e\x03\x65\x6e\x76\x12\x70\x72\x6f\x6d\x69\x73\x65\x5f\x62\x61\x74\x63\x68\x5f\x74\x68\x65\x6e\x00\x33\x03\x65\x6e\x76\x23\x70\x72\x6f\x6d\x69\x73\x65\x5f\x62\x61\x74\x63\x68\x5f\x61\x63\x74\x69\x6f\x6e\x5f\x63\x72\x65\x61\x74\x65\x5f\x61\x63\x63\x6f\x75\x6e\x74\x00\x16\x03\x65\x6e\x76\x24\x70\x72\x6f\x6d\x69\x73\x65\x5f\x62\x61\x74\x63\x68\x5f\x61\x63\x74\x69\x6f\x6e\x5f\x64\x65\x70\x6c\x6f\x79\x5f\x63\x6f\x6e\x74\x72\x61\x63\x74\x00\x1c\x03\x65\x6e\x76\x22\x70\x72\x6f\x6d\x69\x73\x65\x5f\x62\x61\x74\x63\x68\x5f\x61\x63\x74\x69\x6f\x6e\x5f\x66\x75\x6e\x63\x74\x69\x6f\x6e\x5f\x63\x61\x6c\x6c\x00\x50\x03\x65\x6e\x76\x1d\x70\x72\x6f\x6d\x69\x73\x65\x5f\x62\x61\x74\x63\x68\x5f\x61\x63\x74\x69\x6f\x6e\x5f\x74\x72\x61\x6e\x73\x66\x65\x72\x00\x25\x03\x65\x6e\x76\x1a\x70\x72\x6f\x6d\x69\x73\x65\x5f\x62\x61\x74\x63\x68\x5f\x61\x63\x74\x69\x6f\x6e\x5f\x73\x74\x61\x6b\x65\x00\x40\x03\x65\x6e\x76\x2d\x70\x72\x6f\x6d\x69\x73\x65\x5f\x62\x61\x74\x63\x68\x5f\x61\x63\x74\x69\x6f\x6e\x5f\x61\x64\x64\x5f\x6b\x65\x79\x5f\x77\x69\x74\x68\x5f\x66\x75\x6c\x6c\x5f\x61\x63\x63\x65\x73\x73\x00\x40\x03\x65\x6e\x76\x2f\x70\x72\x6f\x6d\x69\x73\x65\x5f\x62\x61\x74\x63\x68\x5f\x61\x63\x74\x69\x6f\x6e\x5f\x61\x64\x64\x5f\x6b\x65\x79\x5f\x77\x69\x74\x68\x5f\x66\x75\x6e\x63\x74\x69\x6f\x6e\x5f\x63\x61\x6c\x6c\x00\x51\x03\x65\x6e\x76\x1f\x70\x72\x6f\x6d\x69\x73\x65\x5f\x62\x61\x74\x63\x68\x5f\x61\x63\x74\x69\x6f\x6e\x5f\x64\x65\x6c\x65\x74\x65\x5f\x6b\x65\x79\x00\x1c\x03\x65\x6e\x76\x23\x70\x72\x6f\x6d\x69\x73\x65\x5f\x62\x61\x74\x63\x68\x5f\x61\x63\x74\x69\x6f\x6e\x5f\x64\x65\x6c\x65\x74\x65\x5f\x61\x63\x63\x6f\x75\x6e\x74\x00\x1c\x03\x65\x6e\x76\x15\x70\x72\x6f\x6d\x69\x73\x65\x5f\x72\x65\x73\x75\x6c\x74\x73\x5f\x63\x6f\x75\x6e\x74\x00\x1f\x03\x65\x6e\x76\x0e\x70\x72\x6f\x6d\x69\x73\x65\x5f\x72\x65\x73\x75\x6c\x74\x00\x2e\x03\x65\x6e\x76\x0e\x70\x72\x6f\x6d\x69\x73\x65\x5f\x72\x65\x74\x75\x72\x6e\x00\x16\x03\x65\x6e\x76\x0d\x73\x74\x6f\x72\x61\x67\x65\x5f\x77\x72\x69\x74\x65\x00\x52\x03\x65\x6e\x76\x0c\x73\x74\x6f\x72\x61\x67\x65\x5f\x72\x65\x61\x64\x00\x33\x03\x65\x6e\x76\x0e\x73\x74\x6f\x72\x61\x67\x65\x5f\x72\x65\x6d\x6f\x76\x65\x00\x33\x03\x65\x6e\x76\x0f\x73\x74\x6f\x72\x61\x67\x65\x5f\x68\x61\x73\x5f\x6b\x65\x79\x00\x2e\x03\x65\x6e\x76\x0f\x76\x61\x6c\x69\x64\x61\x74\x6f\x72\x5f\x73\x74\x61\x6b\x65\x00\x1c\x03\x65\x6e\x76\x15\x76\x61\x6c\x69\x64\x61\x74\x6f\x72\x5f\x74\x6f\x74\x61\x6c\x5f\x73\x74\x61\x6b\x65\x00\x16\x03\x83\x0a\x81\x0a\x13\x09\x2f\x04\x03\x07\x04\x04\x09\x09\x03\x00\x03\x1a\x0b\x0b\x0b\x0b\x0b\x04\x09\x1a\x09\x1b\x03\x53\x54\x07\x01\x04\x03\x04\x01\x0c\x06\x1a\x0e\x0e\x04\x03\x04\x04\x1a\x01\x07\x01\x04\x01\x01\x07\x01\x01\x01\x41\x1a\x01\x01\x03\x01\x03\x01\x01\x04\x03\x03\x01\x03\x03\x03\x01\x03\x03\x03\x04\x04\x04\x0a\x04\x55\x0d\x42\x03\x01\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x34\x0b\x56\x1d\x43\x0b\x44\x1d\x0b\x0b\x0b\x1d\x0b\x0b\x0b\x0b\x34\x0b\x0c\x57\x0b\x44\x0b\x0b\x1d\x34\x43\x0b\x1d\x45\x1d\x1d\x01\x1a\x41\x04\x09\x20\x03\x58\x2a\x0e\x0f\x09\x1a\x1a\x1a\x1a\x08\x02\x59\x29\x20\x46\x0d\x2b\x0d\x0e\x01\x0c\x02\x23\x02\x2c\x0a\x05\x02\x5a\x05\x36\x47\x05\x02\x2b\x37\x02\x02\x02\x02\x01\x0d\x38\x02\x02\x48\x19\x02\x07\x15\x02\x05\x02\x5b\x02\x02\x37\x05\x02\x15\x15\x15\x15\x02\x08\x21\x1e\x22\x26\x02\x02\x23\x47\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x17\x0f\x06\x18\x08\x0f\x0d\x13\x20\x10\x07\x0c\x03\x0c\x03\x01\x03\x09\x06\x1b\x27\x2d\x04\x0d\x5c\x0a\x18\x18\x06\x00\x10\x00\x01\x01\x03\x0a\x0a\x00\x00\x09\x06\x00\x0a\x1b\x00\x09\x00\x09\x00\x00\x00\x00\x00\x18\x08\x01\x03\x0e\x01\x0e\x5d\x0e\x5e\x2a\x10\x06\x0d\x08\x00\x0c\x0e\x03\x00\x5f\x04\x09\x13\x02\x08\x07\x2b\x07\x04\x03\x0d\x20\x15\x05\x10\x0d\x09\x00\x06\x24\x2a\x0f\x06\x60\x08\x0d\x18\x1b\x13\x17\x39\x1b\x10\x08\x08\x0c\x06\x2b\x10\x2f\x08\x10\x24\x06\x01\x01\x01\x03\x03\x01\x08\x01\x19\x03\x31\x05\x3a\x0e\x12\x3a\x0f\x3b\x31\x30\x31\x19\x05\x37\x24\x13\x0d\x61\x3c\x09\x00\x0e\x01\x00\x04\x0d\x46\x62\x01\x03\x00\x17\x03\x01\x03\x0d\x10\x07\x63\x17\x07\x03\x0e\x10\x2a\x03\x18\x06\x3c\x0f\x03\x17\x10\x3d\x01\x03\x08\x0d\x07\x15\x64\x08\x17\x01\x27\x03\x08\x07\x01\x07\x20\x08\x0f\x0f\x0f\x0f\x08\x19\x13\x09\x18\x00\x49\x65\x45\x06\x00\x17\x0e\x03\x08\x24\x24\x01\x01\x03\x07\x0f\x03\x03\x01\x10\x66\x09\x01\x04\x01\x08\x04\x26\x01\x04\x36\x20\x00\x04\x00\x06\x06\x00\x03\x27\x01\x2d\x23\x23\x23\x03\x01\x01\x01\x01\x03\x03\x00\x01\x03\x03\x01\x03\x03\x07\x09\x07\x0c\x01\x1b\x0c\x14\x06\x03\x0c\x31\x0f\x01\x09\x03\x03\x0f\x01\x06\x08\x03\x01\x2a\x03\x03\x0d\x03\x12\x36\x02\x0f\x10\x00\x0f\x18\x04\x01\x08\x09\x26\x22\x1e\x3d\x03\x15\x0e\x15\x15\x15\x67\x0d\x00\x00\x06\x06\x00\x00\x00\x13\x17\x13\x2c\x2c\x0a\x11\x0a\x11\x0a\x11\x0a\x11\x0a\x11\x0a\x11\x0a\x11\x0a\x0a\x0a\x11\x0a\x0a\x11\x0a\x09\x11\x0a\x00\x11\x0a\x11\x0a\x11\x0a\x11\x03\x09\x00\x01\x02\x27\x10\x03\x10\x4a\x49\x10\x12\x00\x02\x02\x02\x08\x02\x08\x02\x02\x05\x2b\x02\x02\x05\x05\x02\x05\x02\x02\x05\x02\x02\x0f\x05\x0b\x1d\x0b\x02\x02\x0b\x02\x02\x12\x03\x02\x0f\x02\x02\x02\x05\x4b\x0c\x05\x10\x05\x10\x05\x02\x01\x23\x02\x02\x02\x02\x0f\x01\x05\x0d\x10\x05\x05\x02\x02\x08\x02\x05\x04\x04\x01\x03\x05\x0f\x01\x19\x10\x0f\x05\x02\x02\x02\x0f\x0f\x68\x02\x08\x02\x02\x02\x02\x02\x02\x02\x02\x08\x02\x02\x05\x10\x02\x02\x02\x05\x01\x04\x06\x05\x00\x02\x02\x01\x02\x02\x10\x02\x02\x08\x02\x19\x3c\x05\x10\x18\x10\x05\x02\x4a\x05\x02\x02\x02\x05\x08\x02\x02\x05\x69\x24\x05\x02\x02\x01\x05\x02\x05\x6a\x13\x19\x02\x0f\x19\x6b\x3b\x06\x6c\x02\x02\x02\x02\x02\x08\x08\x02\x02\x02\x02\x02\x08\x19\x05\x05\x02\x24\x02\x02\x02\x02\x05\x02\x02\x02\x05\x02\x02\x1f\x02\x42\x05\x02\x01\x01\x00\x01\x01\x02\x29\x29\x27\x6d\x0f\x02\x02\x02\x05\x02\x6e\x05\x02\x02\x03\x14\x1b\x04\x04\x04\x04\x01\x04\x00\x00\x00\x00\x0d\x00\x06\x03\x14\x04\x04\x03\x0c\x03\x03\x03\x0c\x01\x28\x0c\x03\x04\x01\x04\x00\x07\x00\x04\x07\x09\x07\x03\x00\x01\x09\x03\x03\x01\x3e\x6f\x3e\x01\x01\x06\x06\x0c\x00\x0c\x00\x07\x07\x07\x03\x14\x06\x03\x3e\x00\x3f\x03\x01\x03\x14\x01\x03\x04\x00\x00\x00\x0c\x01\x07\x03\x03\x09\x09\x03\x07\x09\x01\x01\x14\x04\x01\x00\x01\x04\x00\x0f\x01\x03\x07\x01\x01\x32\x3f\x04\x03\x04\x04\x09\x04\x06\x03\x03\x04\x03\x03\x00\x03\x01\x01\x03\x13\x01\x06\x0a\x04\x04\x07\x02\x1b\x04\x14\x01\x00\x01\x06\x03\x06\x09\x06\x12\x19\x0e\x02\x10\x28\x08\x08\x0e\x02\x02\x02\x02\x09\x02\x02\x02\x02\x02\x04\x20\x35\x02\x70\x21\x08\x03\x02\x12\x17\x22\x01\x13\x2c\x13\x35\x30\x0a\x11\x12\x05\x29\x0f\x27\x05\x05\x06\x05\x05\x0e\x05\x05\x10\x0e\x0e\x0e\x05\x05\x0f\x02\x02\x08\x02\x05\x10\x08\x02\x02\x05\x02\x02\x02\x02\x01\x05\x05\x01\x01\x01\x01\x01\x01\x01\x01\x01\x71\x01\x0d\x0d\x0d\x0d\x0d\x0d\x0d\x0d\x0d\x0d\x0e\x05\x02\x72\x18\x00\x00\x00\x05\x00\x00\x05\x2f\x2f\x39\x4c\x4c\x12\x00\x18\x05\x12\x05\x12\x13\x08\x02\x02\x02\x02\x12\x12\x12\x00\x0a\x11\x0a\x11\x0a\x11\x0a\x11\x0a\x11\x0e\x01\x04\x03\x01\x09\x00\x01\x04\x28\x01\x0c\x0c\x0c\x0e\x0f\x4b\x08\x0c\x07\x0c\x01\x07\x03\x03\x05\x05\x05\x01\x05\x04\x02\x08\x02\x01\x00\x2d\x01\x07\x03\x09\x03\x04\x20\x03\x03\x03\x03\x01\x01\x10\x03\x04\x03\x01\x03\x07\x01\x01\x14\x04\x03\x04\x01\x01\x01\x04\x00\x01\x03\x06\x06\x06\x04\x03\x01\x03\x03\x03\x03\x03\x00\x28\x32\x04\x04\x07\x07\x01\x09\x00\x04\x03\x03\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x09\x39\x0a\x00\x0c\x01\x07\x07\x01\x07\x01\x14\x28\x2d\x07\x73\x14\x00\x3f\x07\x3a\x01\x32\x07\x1b\x28\x2d\x07\x07\x14\x03\x0c\x0c\x14\x0c\x0c\x14\x04\x03\x14\x07\x1b\x74\x01\x0c\x32\x06\x75\x1b\x03\x07\x14\x03\x07\x07\x04\x07\x01\x70\x01\xc4\x03\xc4\x03\x05\x03\x01\x00\x06\x06\x08\x01\x7f\x01\x41\xe0\xde\x15\x0b\x07\x7e\x06\x06\x6d\x65\x6d\x6f\x72\x79\x02\x00\x17\x63\x72\x6f\x73\x73\x5f\x63\x6f\x6e\x74\x72\x61\x63\x74\x5f\x63\x61\x6c\x6c\x62\x61\x63\x6b\x00\xae\x01\x15\x63\x72\x6f\x73\x73\x5f\x63\x6f\x6e\x74\x72\x61\x63\x74\x5f\x63\x61\x6c\x6c\x65\x65\x00\xb9\x01\x10\x74\x65\x73\x74\x5f\x70\x72\x6f\x6d\x69\x73\x65\x5f\x61\x6e\x64\x00\xba\x01\x13\x74\x65\x73\x74\x5f\x70\x72\x6f\x6d\x69\x73\x65\x5f\x63\x72\x65\x61\x74\x65\x00\xbb\x01\x11\x74\x65\x73\x74\x5f\x70\x72\x6f\x6d\x69\x73\x65\x5f\x74\x68\x65\x6e\x00\xbc\x01\x09\x83\x07\x01\x00\x41\x01\x0b\xc3\x03\x4f\x5c\x62\x58\x66\xe1\x04\xe9\x04\xe8\x04\xe7\x04\xe6\x04\xe5\x04\xe3\x04\xe2\x04\xec\x04\xea\x04\xee\x04\xed\x04\xf6\x04\xf5\x04\xf2\x04\xbe\x01\xc9\x01\xcb\x01\xcf\x01\xd1\x01\xd4\x01\xd5\x01\xd8\x01\xd9\x01\xda\x01\xdb\x01\xdf\x01\xe0\x01\xe1\x01\xe2\x01\xe3\x01\xe5\x01\xe6\x01\xe7\x01\xe8\x01\xea\x01\xeb\x01\xed\x01\xee\x01\xef\x01\xf0\x01\xf1\x01\xf2\x01\xf3\x01\xf4\x01\xf5\x01\xf6\x01\xf7\x01\xf8\x01\xf9\x01\xfa\x01\xfd\x01\xfe\x01\xff\x01\x80\x02\x81\x02\x82\x02\x83\x02\x84\x02\x85\x02\x86\x02\x87\x02\x88\x02\x89\x02\x8a\x02\x8b\x02\x8c\x02\x8d\x02\x8e\x02\x8f\x02\x90\x02\x91\x02\x92\x02\x93\x02\x94\x02\x95\x02\x96\x02\x97\x02\x98\x02\x99\x02\x9a\x02\x9b\x02\x9c\x02\x9d\x02\x9e\x02\x9f\x02\xa0\x02\xa1\x02\xa2\x02\xa3\x02\xa4\x02\xa5\x02\xa6\x02\xa7\x02\xa8\x02\xa9\x02\xaa\x02\xab\x02\xac\x02\xad\x02\xae\x02\xaf\x02\x80\x08\xed\x08\xa0\x0a\xbf\x02\x94\x03\xb1\x03\xb4\x03\xaa\x04\xd9\x04\xc1\x04\xb7\x06\xc3\x06\x8b\x08\xa4\x08\xd1\x08\xfc\x08\xfa\x08\xfe\x08\x80\x09\x87\x09\x88\x09\x89\x09\xb7\x09\x9d\x0a\x9f\x0a\xb2\x0a\xb3\x0a\xed\x09\xf3\x09\xf4\x09\xf5\x09\xf6\x09\xf7\x09\xf8\x09\xf9\x09\xfa\x09\xfb\x09\xfc\x09\xaf\x0a\xac\x04\xad\x04\xae\x04\xfd\x04\xfe\x04\xff\x04\x80\x05\x81\x05\x82\x05\x83\x05\x84\x05\x85\x05\x86\x05\x87\x05\x88\x05\x89\x05\x8a\x05\x8b\x05\x8c\x05\x8d\x05\x8e\x05\x8f\x05\x90\x05\x91\x05\x92\x05\x94\x05\x95\x05\x97\x05\x98\x05\x99\x05\x9a\x05\x9b\x05\x9c\x05\x9d\x05\xfc\x04\xf9\x04\xfa\x04\xfb\x04\xf8\x04\x9e\x05\xa0\x05\xa1\x05\xa2\x05\xd5\x06\xb9\x05\xd7\x06\xb4\x05\xd8\x06\xd9\x06\xda\x06\xdb\x06\xbb\x05\xbe\x05\xb8\x05\xdc\x06\xdd\x06\xde\x06\xce\x01\xdf\x06\xe0\x06\xe1\x06\xb0\x06\xcc\x06\xcd\x06\xce\x06\xcf\x06\xd0\x06\xd1\x06\xd2\x06\xd3\x06\xd4\x06\xc6\x06\x87\x03\xc7\x06\xc8\x06\xc9\x06\xca\x06\xcb\x06\xc5\x06\x9f\x06\xa2\x06\xa6\x06\xa7\x06\xa9\x06\xaa\x06\xab\x06\xac\x06\xad\x06\xaf\x06\xb1\x06\xb4\x06\xb5\x06\xb6\x06\xb8\x06\xb9\x06\xba\x06\x9a\x06\x9c\x06\x9d\x06\x9e\x06\x8e\x06\x8f\x06\x82\x06\x84\x06\x90\x06\x94\x06\x96\x06\x97\x06\x99\x06\x87\x06\x89\x06\x8a\x06\x8b\x06\x8d\x06\x81\x06\x83\x06\x85\x06\x86\x06\xfe\x05\x80\x06\xf8\x05\xf9\x05\xfa\x05\xcd\x05\xcf\x05\xd0\x05\xd1\x05\xd2\x05\xd5\x05\xd7\x05\xda\x05\xdd\x05\xde\x05\xdf\x05\xe0\x05\xe3\x05\xe6\x05\xe7\x05\xe8\x05\xe9\x05\xeb\x05\xec\x05\xf1\x05\xcb\x05\xae\x05\xb0\x05\xb1\x05\xac\x05\xad\x05\xaa\x05\xb2\x05\xb3\x05\xb6\x05\xb7\x05\xba\x05\xbc\x05\xbf\x05\xc0\x05\xc2\x05\x41\x44\x43\xc3\x05\x42\x87\x01\x96\x01\x8e\x01\x94\x01\x99\x01\x89\x01\x8b\x01\xc4\x05\x9b\x01\x92\x01\x45\xc5\x05\x9a\x01\xa1\x01\x9c\x01\x8c\x01\x97\x01\x88\x01\x9e\x01\x86\x01\xa4\x01\x95\x01\x8a\x01\xc6\x05\xc7\x05\xc8\x05\xc9\x05\xca\x05\xf2\x06\xe5\x06\xf3\x06\xf4\x06\xf5\x06\xf6\x06\xf8\x06\xf9\x06\xfa\x06\xe6\x06\xe3\x06\xec\x06\xfc\x07\x8e\x08\x8f\x08\x90\x08\x91\x08\x92\x08\x93\x08\x94\x08\x96\x08\x97\x08\x98\x08\x99\x08\x88\x08\x9a\x08\x9e\x08\xad\x08\xae\x08\xa5\x08\xa6\x08\xa8\x08\xa9\x08\xaa\x08\xab\x08\xac\x08\xa3\x08\xb0\x08\xb7\x08\xb4\x08\xb5\x08\xb8\x08\xb9\x08\xba\x08\xbb\x08\xaf\x08\xe9\x08\xea\x08\xeb\x08\xc5\x08\xbd\x08\xbe\x08\xbf\x08\xc6\x08\xc7\x08\xc9\x08\xca\x08\xcb\x08\xcc\x08\xcd\x08\xce\x08\xcf\x08\xd0\x08\xd2\x08\xd3\x08\xc3\x08\xc4\x08\xc0\x08\xc1\x08\xdf\x08\xe0\x08\xe1\x08\xe2\x08\xe3\x08\xe4\x08\xe5\x08\xe6\x08\xe7\x08\xe8\x08\xd4\x08\xd5\x08\xd6\x08\xd7\x08\xd8\x08\xd9\x08\xda\x08\xdb\x08\xdc\x08\xde\x08\x8b\x09\x8c\x09\x8d\x09\x8e\x09\x8f\x09\x90\x09\x91\x09\x92\x09\x93\x09\x94\x09\x84\x09\x85\x09\x86\x09\xf4\x08\xff\x08\x83\x09\xfd\x08\xf1\x08\xb4\x09\xb6\x09\xae\x09\xaf\x09\xb0\x09\xb2\x09\x0a\xac\xea\x18\x81\x0a\x06\x00\x41\xcc\x00\x0f\x0b\x03\x00\x01\x0b\x06\x00\x41\xcc\x00\x0f\x0b\x06\x00\x41\xcc\x00\x0f\x0b\x06\x00\x41\xcc\x00\x0f\x0b\x06\x00\x41\xcc\x00\x0f\x0b\x06\x00\x20\x00\x10\x3a\x0b\xa8\x31\x01\x0b\x7f\x23\x00\x41\x10\x6b\x22\x01\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x41\xec\x01\x4b\x0d\x00\x02\x40\x41\x00\x28\x02\xb0\xd2\x05\x22\x02\x41\x10\x20\x00\x41\x13\x6a\x41\x70\x71\x20\x00\x41\x0b\x49\x1b\x22\x03\x41\x03\x76\x22\x04\x76\x22\x00\x41\x03\x71\x45\x0d\x00\x20\x00\x41\x01\x71\x20\x04\x72\x41\x01\x73\x22\x03\x41\x03\x74\x22\x05\x41\xe0\xd2\x05\x6a\x28\x02\x00\x22\x04\x41\x08\x6a\x21\x00\x02\x40\x02\x40\x20\x04\x28\x02\x08\x22\x06\x20\x05\x41\xd8\xd2\x05\x6a\x22\x05\x47\x0d\x00\x41\x00\x20\x02\x41\x7e\x20\x03\x77\x71\x36\x02\xb0\xd2\x05\x0c\x01\x0b\x41\x00\x28\x02\xc0\xd2\x05\x20\x06\x4b\x1a\x20\x05\x20\x06\x36\x02\x08\x20\x06\x20\x05\x36\x02\x0c\x0b\x20\x04\x20\x03\x41\x03\x74\x22\x06\x41\x03\x72\x36\x02\x04\x20\x04\x20\x06\x6a\x22\x04\x20\x04\x28\x02\x04\x41\x01\x72\x36\x02\x04\x0c\x0c\x0b\x20\x03\x41\x00\x28\x02\xb8\xd2\x05\x22\x07\x4d\x0d\x01\x02\x40\x20\x00\x45\x0d\x00\x02\x40\x02\x40\x20\x00\x20\x04\x74\x41\x02\x20\x04\x74\x22\x00\x41\x00\x20\x00\x6b\x72\x71\x22\x00\x41\x00\x20\x00\x6b\x71\x41\x7f\x6a\x22\x00\x20\x00\x41\x0c\x76\x41\x10\x71\x22\x00\x76\x22\x04\x41\x05\x76\x41\x08\x71\x22\x06\x20\x00\x72\x20\x04\x20\x06\x76\x22\x00\x41\x02\x76\x41\x04\x71\x22\x04\x72\x20\x00\x20\x04\x76\x22\x00\x41\x01\x76\x41\x02\x71\x22\x04\x72\x20\x00\x20\x04\x76\x22\x00\x41\x01\x76\x41\x01\x71\x22\x04\x72\x20\x00\x20\x04\x76\x6a\x22\x06\x41\x03\x74\x22\x05\x41\xe0\xd2\x05\x6a\x28\x02\x00\x22\x04\x28\x02\x08\x22\x00\x20\x05\x41\xd8\xd2\x05\x6a\x22\x05\x47\x0d\x00\x41\x00\x20\x02\x41\x7e\x20\x06\x77\x71\x22\x02\x36\x02\xb0\xd2\x05\x0c\x01\x0b\x41\x00\x28\x02\xc0\xd2\x05\x20\x00\x4b\x1a\x20\x05\x20\x00\x36\x02\x08\x20\x00\x20\x05\x36\x02\x0c\x0b\x20\x04\x41\x08\x6a\x21\x00\x20\x04\x20\x03\x41\x03\x72\x36\x02\x04\x20\x04\x20\x06\x41\x03\x74\x22\x06\x6a\x20\x06\x20\x03\x6b\x22\x06\x36\x02\x00\x20\x04\x20\x03\x6a\x22\x05\x20\x06\x41\x01\x72\x36\x02\x04\x02\x40\x20\x07\x45\x0d\x00\x20\x07\x41\x03\x76\x22\x08\x41\x03\x74\x41\xd8\xd2\x05\x6a\x21\x03\x41\x00\x28\x02\xc4\xd2\x05\x21\x04\x02\x40\x02\x40\x20\x02\x41\x01\x20\x08\x74\x22\x08\x71\x0d\x00\x41\x00\x20\x02\x20\x08\x72\x36\x02\xb0\xd2\x05\x20\x03\x21\x08\x0c\x01\x0b\x20\x03\x28\x02\x08\x21\x08\x0b\x20\x08\x20\x04\x36\x02\x0c\x20\x03\x20\x04\x36\x02\x08\x20\x04\x20\x03\x36\x02\x0c\x20\x04\x20\x08\x36\x02\x08\x0b\x41\x00\x20\x05\x36\x02\xc4\xd2\x05\x41\x00\x20\x06\x36\x02\xb8\xd2\x05\x0c\x0c\x0b\x41\x00\x28\x02\xb4\xd2\x05\x22\x09\x45\x0d\x01\x20\x09\x41\x00\x20\x09\x6b\x71\x41\x7f\x6a\x22\x00\x20\x00\x41\x0c\x76\x41\x10\x71\x22\x00\x76\x22\x04\x41\x05\x76\x41\x08\x71\x22\x06\x20\x00\x72\x20\x04\x20\x06\x76\x22\x00\x41\x02\x76\x41\x04\x71\x22\x04\x72\x20\x00\x20\x04\x76\x22\x00\x41\x01\x76\x41\x02\x71\x22\x04\x72\x20\x00\x20\x04\x76\x22\x00\x41\x01\x76\x41\x01\x71\x22\x04\x72\x20\x00\x20\x04\x76\x6a\x41\x02\x74\x41\xe0\xd4\x05\x6a\x28\x02\x00\x22\x05\x28\x02\x04\x41\x78\x71\x20\x03\x6b\x21\x04\x20\x05\x21\x06\x02\x40\x03\x40\x02\x40\x20\x06\x28\x02\x10\x22\x00\x0d\x00\x20\x06\x41\x14\x6a\x28\x02\x00\x22\x00\x45\x0d\x02\x0b\x20\x00\x28\x02\x04\x41\x78\x71\x20\x03\x6b\x22\x06\x20\x04\x20\x06\x20\x04\x49\x22\x06\x1b\x21\x04\x20\x00\x20\x05\x20\x06\x1b\x21\x05\x20\x00\x21\x06\x0c\x00\x0b\x00\x0b\x20\x05\x28\x02\x18\x21\x0a\x02\x40\x20\x05\x28\x02\x0c\x22\x08\x20\x05\x46\x0d\x00\x02\x40\x41\x00\x28\x02\xc0\xd2\x05\x20\x05\x28\x02\x08\x22\x00\x4b\x0d\x00\x20\x00\x28\x02\x0c\x20\x05\x47\x1a\x0b\x20\x08\x20\x00\x36\x02\x08\x20\x00\x20\x08\x36\x02\x0c\x0c\x0b\x0b\x02\x40\x20\x05\x41\x14\x6a\x22\x06\x28\x02\x00\x22\x00\x0d\x00\x20\x05\x28\x02\x10\x22\x00\x45\x0d\x03\x20\x05\x41\x10\x6a\x21\x06\x0b\x03\x40\x20\x06\x21\x0b\x20\x00\x22\x08\x41\x14\x6a\x22\x06\x28\x02\x00\x22\x00\x0d\x00\x20\x08\x41\x10\x6a\x21\x06\x20\x08\x28\x02\x10\x22\x00\x0d\x00\x0b\x20\x0b\x41\x00\x36\x02\x00\x0c\x0a\x0b\x41\x7f\x21\x03\x20\x00\x41\xbf\x7f\x4b\x0d\x00\x20\x00\x41\x13\x6a\x22\x00\x41\x70\x71\x21\x03\x41\x00\x28\x02\xb4\xd2\x05\x22\x07\x45\x0d\x00\x41\x00\x21\x0b\x02\x40\x20\x00\x41\x08\x76\x22\x00\x45\x0d\x00\x41\x1f\x21\x0b\x20\x03\x41\xff\xff\xff\x07\x4b\x0d\x00\x20\x00\x20\x00\x41\x80\xfe\x3f\x6a\x41\x10\x76\x41\x08\x71\x22\x04\x74\x22\x00\x20\x00\x41\x80\xe0\x1f\x6a\x41\x10\x76\x41\x04\x71\x22\x00\x74\x22\x06\x20\x06\x41\x80\x80\x0f\x6a\x41\x10\x76\x41\x02\x71\x22\x06\x74\x41\x0f\x76\x20\x00\x20\x04\x72\x20\x06\x72\x6b\x22\x00\x41\x01\x74\x20\x03\x20\x00\x41\x15\x6a\x76\x41\x01\x71\x72\x41\x1c\x6a\x21\x0b\x0b\x41\x00\x20\x03\x6b\x21\x06\x02\x40\x02\x40\x02\x40\x02\x40\x20\x0b\x41\x02\x74\x41\xe0\xd4\x05\x6a\x28\x02\x00\x22\x04\x0d\x00\x41\x00\x21\x00\x41\x00\x21\x08\x0c\x01\x0b\x20\x03\x41\x00\x41\x19\x20\x0b\x41\x01\x76\x6b\x20\x0b\x41\x1f\x46\x1b\x74\x21\x05\x41\x00\x21\x00\x41\x00\x21\x08\x03\x40\x02\x40\x20\x04\x28\x02\x04\x41\x78\x71\x20\x03\x6b\x22\x02\x20\x06\x4f\x0d\x00\x20\x02\x21\x06\x20\x04\x21\x08\x20\x02\x0d\x00\x41\x00\x21\x06\x20\x04\x21\x08\x20\x04\x21\x00\x0c\x03\x0b\x20\x00\x20\x04\x41\x14\x6a\x28\x02\x00\x22\x02\x20\x02\x20\x04\x20\x05\x41\x1d\x76\x41\x04\x71\x6a\x41\x10\x6a\x28\x02\x00\x22\x04\x46\x1b\x20\x00\x20\x02\x1b\x21\x00\x20\x05\x20\x04\x41\x00\x47\x74\x21\x05\x20\x04\x0d\x00\x0b\x0b\x02\x40\x20\x00\x20\x08\x72\x0d\x00\x41\x02\x20\x0b\x74\x22\x00\x41\x00\x20\x00\x6b\x72\x20\x07\x71\x22\x00\x45\x0d\x03\x20\x00\x41\x00\x20\x00\x6b\x71\x41\x7f\x6a\x22\x00\x20\x00\x41\x0c\x76\x41\x10\x71\x22\x00\x76\x22\x04\x41\x05\x76\x41\x08\x71\x22\x05\x20\x00\x72\x20\x04\x20\x05\x76\x22\x00\x41\x02\x76\x41\x04\x71\x22\x04\x72\x20\x00\x20\x04\x76\x22\x00\x41\x01\x76\x41\x02\x71\x22\x04\x72\x20\x00\x20\x04\x76\x22\x00\x41\x01\x76\x41\x01\x71\x22\x04\x72\x20\x00\x20\x04\x76\x6a\x41\x02\x74\x41\xe0\xd4\x05\x6a\x28\x02\x00\x21\x00\x0b\x20\x00\x45\x0d\x01\x0b\x03\x40\x20\x00\x28\x02\x04\x41\x78\x71\x20\x03\x6b\x22\x02\x20\x06\x49\x21\x05\x02\x40\x20\x00\x28\x02\x10\x22\x04\x0d\x00\x20\x00\x41\x14\x6a\x28\x02\x00\x21\x04\x0b\x20\x02\x20\x06\x20\x05\x1b\x21\x06\x20\x00\x20\x08\x20\x05\x1b\x21\x08\x20\x04\x21\x00\x20\x04\x0d\x00\x0b\x0b\x20\x08\x45\x0d\x00\x20\x06\x41\x00\x28\x02\xb8\xd2\x05\x20\x03\x6b\x4f\x0d\x00\x20\x08\x28\x02\x18\x21\x0b\x02\x40\x20\x08\x28\x02\x0c\x22\x05\x20\x08\x46\x0d\x00\x02\x40\x41\x00\x28\x02\xc0\xd2\x05\x20\x08\x28\x02\x08\x22\x00\x4b\x0d\x00\x20\x00\x28\x02\x0c\x20\x08\x47\x1a\x0b\x20\x05\x20\x00\x36\x02\x08\x20\x00\x20\x05\x36\x02\x0c\x0c\x09\x0b\x02\x40\x20\x08\x41\x14\x6a\x22\x04\x28\x02\x00\x22\x00\x0d\x00\x20\x08\x28\x02\x10\x22\x00\x45\x0d\x03\x20\x08\x41\x10\x6a\x21\x04\x0b\x03\x40\x20\x04\x21\x02\x20\x00\x22\x05\x41\x14\x6a\x22\x04\x28\x02\x00\x22\x00\x0d\x00\x20\x05\x41\x10\x6a\x21\x04\x20\x05\x28\x02\x10\x22\x00\x0d\x00\x0b\x20\x02\x41\x00\x36\x02\x00\x0c\x08\x0b\x02\x40\x41\x00\x28\x02\xb8\xd2\x05\x22\x00\x20\x03\x49\x0d\x00\x41\x00\x28\x02\xc4\xd2\x05\x21\x04\x02\x40\x02\x40\x20\x00\x20\x03\x6b\x22\x06\x41\x10\x49\x0d\x00\x20\x04\x20\x03\x6a\x22\x05\x20\x06\x41\x01\x72\x36\x02\x04\x41\x00\x20\x06\x36\x02\xb8\xd2\x05\x41\x00\x20\x05\x36\x02\xc4\xd2\x05\x20\x04\x20\x00\x6a\x20\x06\x36\x02\x00\x20\x04\x20\x03\x41\x03\x72\x36\x02\x04\x0c\x01\x0b\x20\x04\x20\x00\x41\x03\x72\x36\x02\x04\x20\x04\x20\x00\x6a\x22\x00\x20\x00\x28\x02\x04\x41\x01\x72\x36\x02\x04\x41\x00\x41\x00\x36\x02\xc4\xd2\x05\x41\x00\x41\x00\x36\x02\xb8\xd2\x05\x0b\x20\x04\x41\x08\x6a\x21\x00\x0c\x0a\x0b\x02\x40\x41\x00\x28\x02\xbc\xd2\x05\x22\x05\x20\x03\x4d\x0d\x00\x41\x00\x28\x02\xc8\xd2\x05\x22\x00\x20\x03\x6a\x22\x04\x20\x05\x20\x03\x6b\x22\x06\x41\x01\x72\x36\x02\x04\x41\x00\x20\x06\x36\x02\xbc\xd2\x05\x41\x00\x20\x04\x36\x02\xc8\xd2\x05\x20\x00\x20\x03\x41\x03\x72\x36\x02\x04\x20\x00\x41\x08\x6a\x21\x00\x0c\x0a\x0b\x02\x40\x02\x40\x41\x00\x28\x02\x88\xd6\x05\x45\x0d\x00\x41\x00\x28\x02\x90\xd6\x05\x21\x04\x0c\x01\x0b\x41\x00\x42\x7f\x37\x02\x94\xd6\x05\x41\x00\x42\x80\x80\x84\x80\x80\x80\xc0\x00\x37\x02\x8c\xd6\x05\x41\x00\x20\x01\x41\x0c\x6a\x41\x70\x71\x41\xd8\xaa\xd5\xaa\x05\x73\x36\x02\x88\xd6\x05\x41\x00\x41\x00\x36\x02\x9c\xd6\x05\x41\x00\x41\x00\x36\x02\xec\xd5\x05\x41\x80\x80\x04\x21\x04\x0b\x41\x00\x21\x00\x02\x40\x20\x04\x20\x03\x41\xc7\x00\x6a\x22\x07\x6a\x22\x02\x41\x00\x20\x04\x6b\x22\x0b\x71\x22\x08\x20\x03\x4b\x0d\x00\x41\x00\x41\x30\x36\x02\xa0\xd6\x05\x0c\x0a\x0b\x02\x40\x41\x00\x28\x02\xe8\xd5\x05\x22\x00\x45\x0d\x00\x02\x40\x41\x00\x28\x02\xe0\xd5\x05\x22\x04\x20\x08\x6a\x22\x06\x20\x04\x4d\x0d\x00\x20\x06\x20\x00\x4d\x0d\x01\x0b\x41\x00\x21\x00\x41\x00\x41\x30\x36\x02\xa0\xd6\x05\x0c\x0a\x0b\x41\x00\x2d\x00\xec\xd5\x05\x41\x04\x71\x0d\x04\x02\x40\x02\x40\x02\x40\x41\x00\x28\x02\xc8\xd2\x05\x22\x04\x45\x0d\x00\x41\xf0\xd5\x05\x21\x00\x03\x40\x02\x40\x20\x00\x28\x02\x00\x22\x06\x20\x04\x4b\x0d\x00\x20\x06\x20\x00\x28\x02\x04\x6a\x20\x04\x4b\x0d\x03\x0b\x20\x00\x28\x02\x08\x22\x00\x0d\x00\x0b\x0b\x41\x00\x10\x46\x22\x05\x41\x7f\x46\x0d\x05\x20\x08\x21\x02\x02\x40\x41\x00\x28\x02\x8c\xd6\x05\x22\x00\x41\x7f\x6a\x22\x04\x20\x05\x71\x45\x0d\x00\x20\x08\x20\x05\x6b\x20\x04\x20\x05\x6a\x41\x00\x20\x00\x6b\x71\x6a\x21\x02\x0b\x20\x02\x20\x03\x4d\x0d\x05\x20\x02\x41\xfe\xff\xff\xff\x07\x4b\x0d\x05\x02\x40\x41\x00\x28\x02\xe8\xd5\x05\x22\x00\x45\x0d\x00\x41\x00\x28\x02\xe0\xd5\x05\x22\x04\x20\x02\x6a\x22\x06\x20\x04\x4d\x0d\x06\x20\x06\x20\x00\x4b\x0d\x06\x0b\x20\x02\x10\x46\x22\x00\x20\x05\x47\x0d\x01\x0c\x07\x0b\x20\x02\x20\x05\x6b\x20\x0b\x71\x22\x02\x41\xfe\xff\xff\xff\x07\x4b\x0d\x04\x20\x02\x10\x46\x22\x05\x20\x00\x28\x02\x00\x20\x00\x28\x02\x04\x6a\x46\x0d\x03\x20\x05\x21\x00\x0b\x20\x00\x21\x05\x02\x40\x20\x03\x41\xc8\x00\x6a\x20\x02\x4d\x0d\x00\x20\x02\x41\xfe\xff\xff\xff\x07\x4b\x0d\x00\x20\x05\x41\x7f\x46\x0d\x00\x20\x07\x20\x02\x6b\x41\x00\x28\x02\x90\xd6\x05\x22\x00\x6a\x41\x00\x20\x00\x6b\x71\x22\x00\x41\xfe\xff\xff\xff\x07\x4b\x0d\x06\x02\x40\x20\x00\x10\x46\x41\x7f\x46\x0d\x00\x20\x00\x20\x02\x6a\x21\x02\x0c\x07\x0b\x41\x00\x20\x02\x6b\x10\x46\x1a\x0c\x04\x0b\x20\x05\x41\x7f\x47\x0d\x05\x0c\x03\x0b\x41\x00\x21\x08\x0c\x07\x0b\x41\x00\x21\x05\x0c\x05\x0b\x20\x05\x41\x7f\x47\x0d\x02\x0b\x41\x00\x41\x00\x28\x02\xec\xd5\x05\x41\x04\x72\x36\x02\xec\xd5\x05\x0b\x20\x08\x41\xfe\xff\xff\xff\x07\x4b\x0d\x01\x20\x08\x10\x46\x22\x05\x41\x00\x10\x46\x22\x00\x4f\x0d\x01\x20\x05\x41\x7f\x46\x0d\x01\x20\x00\x41\x7f\x46\x0d\x01\x20\x00\x20\x05\x6b\x22\x02\x20\x03\x41\x38\x6a\x4d\x0d\x01\x0b\x41\x00\x41\x00\x28\x02\xe0\xd5\x05\x20\x02\x6a\x22\x00\x36\x02\xe0\xd5\x05\x02\x40\x20\x00\x41\x00\x28\x02\xe4\xd5\x05\x4d\x0d\x00\x41\x00\x20\x00\x36\x02\xe4\xd5\x05\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x41\x00\x28\x02\xc8\xd2\x05\x22\x04\x45\x0d\x00\x41\xf0\xd5\x05\x21\x00\x03\x40\x20\x05\x20\x00\x28\x02\x00\x22\x06\x20\x00\x28\x02\x04\x22\x08\x6a\x46\x0d\x02\x20\x00\x28\x02\x08\x22\x00\x0d\x00\x0c\x03\x0b\x00\x0b\x02\x40\x02\x40\x41\x00\x28\x02\xc0\xd2\x05\x22\x00\x45\x0d\x00\x20\x05\x20\x00\x4f\x0d\x01\x0b\x41\x00\x20\x05\x36\x02\xc0\xd2\x05\x0b\x41\x00\x21\x00\x41\x00\x20\x02\x36\x02\xf4\xd5\x05\x41\x00\x20\x05\x36\x02\xf0\xd5\x05\x41\x00\x41\x7f\x36\x02\xd0\xd2\x05\x41\x00\x41\x00\x28\x02\x88\xd6\x05\x36\x02\xd4\xd2\x05\x41\x00\x41\x00\x36\x02\xfc\xd5\x05\x03\x40\x20\x00\x41\xe0\xd2\x05\x6a\x20\x00\x41\xd8\xd2\x05\x6a\x22\x04\x36\x02\x00\x20\x00\x41\xe4\xd2\x05\x6a\x20\x04\x36\x02\x00\x20\x00\x41\x08\x6a\x22\x00\x41\x80\x02\x47\x0d\x00\x0b\x20\x05\x41\x78\x20\x05\x6b\x41\x0f\x71\x41\x00\x20\x05\x41\x08\x6a\x41\x0f\x71\x1b\x22\x00\x6a\x22\x04\x20\x02\x41\x48\x6a\x22\x06\x20\x00\x6b\x22\x00\x41\x01\x72\x36\x02\x04\x41\x00\x41\x00\x28\x02\x98\xd6\x05\x36\x02\xcc\xd2\x05\x41\x00\x20\x00\x36\x02\xbc\xd2\x05\x41\x00\x20\x04\x36\x02\xc8\xd2\x05\x20\x05\x20\x06\x6a\x41\x38\x36\x02\x04\x0c\x02\x0b\x20\x00\x2d\x00\x0c\x41\x08\x71\x0d\x00\x20\x05\x20\x04\x4d\x0d\x00\x20\x06\x20\x04\x4b\x0d\x00\x20\x04\x41\x78\x20\x04\x6b\x41\x0f\x71\x41\x00\x20\x04\x41\x08\x6a\x41\x0f\x71\x1b\x22\x06\x6a\x22\x05\x41\x00\x28\x02\xbc\xd2\x05\x20\x02\x6a\x22\x0b\x20\x06\x6b\x22\x06\x41\x01\x72\x36\x02\x04\x20\x00\x20\x08\x20\x02\x6a\x36\x02\x04\x41\x00\x41\x00\x28\x02\x98\xd6\x05\x36\x02\xcc\xd2\x05\x41\x00\x20\x06\x36\x02\xbc\xd2\x05\x41\x00\x20\x05\x36\x02\xc8\xd2\x05\x20\x04\x20\x0b\x6a\x41\x38\x36\x02\x04\x0c\x01\x0b\x02\x40\x20\x05\x41\x00\x28\x02\xc0\xd2\x05\x22\x08\x4f\x0d\x00\x41\x00\x20\x05\x36\x02\xc0\xd2\x05\x20\x05\x21\x08\x0b\x20\x05\x20\x02\x6a\x21\x06\x41\xf0\xd5\x05\x21\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x03\x40\x20\x00\x28\x02\x00\x20\x06\x46\x0d\x01\x20\x00\x28\x02\x08\x22\x00\x0d\x00\x0c\x02\x0b\x00\x0b\x20\x00\x2d\x00\x0c\x41\x08\x71\x45\x0d\x01\x0b\x41\xf0\xd5\x05\x21\x00\x03\x40\x02\x40\x20\x00\x28\x02\x00\x22\x06\x20\x04\x4b\x0d\x00\x20\x06\x20\x00\x28\x02\x04\x6a\x22\x06\x20\x04\x4b\x0d\x03\x0b\x20\x00\x28\x02\x08\x21\x00\x0c\x00\x0b\x00\x0b\x20\x00\x20\x05\x36\x02\x00\x20\x00\x20\x00\x28\x02\x04\x20\x02\x6a\x36\x02\x04\x20\x05\x41\x78\x20\x05\x6b\x41\x0f\x71\x41\x00\x20\x05\x41\x08\x6a\x41\x0f\x71\x1b\x6a\x22\x0b\x20\x03\x41\x03\x72\x36\x02\x04\x20\x06\x41\x78\x20\x06\x6b\x41\x0f\x71\x41\x00\x20\x06\x41\x08\x6a\x41\x0f\x71\x1b\x6a\x22\x05\x20\x0b\x6b\x20\x03\x6b\x21\x00\x20\x0b\x20\x03\x6a\x21\x06\x02\x40\x20\x04\x20\x05\x47\x0d\x00\x41\x00\x20\x06\x36\x02\xc8\xd2\x05\x41\x00\x41\x00\x28\x02\xbc\xd2\x05\x20\x00\x6a\x22\x00\x36\x02\xbc\xd2\x05\x20\x06\x20\x00\x41\x01\x72\x36\x02\x04\x0c\x03\x0b\x02\x40\x41\x00\x28\x02\xc4\xd2\x05\x20\x05\x47\x0d\x00\x41\x00\x20\x06\x36\x02\xc4\xd2\x05\x41\x00\x41\x00\x28\x02\xb8\xd2\x05\x20\x00\x6a\x22\x00\x36\x02\xb8\xd2\x05\x20\x06\x20\x00\x41\x01\x72\x36\x02\x04\x20\x06\x20\x00\x6a\x20\x00\x36\x02\x00\x0c\x03\x0b\x02\x40\x20\x05\x28\x02\x04\x22\x04\x41\x03\x71\x41\x01\x47\x0d\x00\x20\x04\x41\x78\x71\x21\x07\x02\x40\x02\x40\x20\x04\x41\xff\x01\x4b\x0d\x00\x20\x05\x28\x02\x0c\x21\x03\x02\x40\x20\x05\x28\x02\x08\x22\x02\x20\x04\x41\x03\x76\x22\x09\x41\x03\x74\x41\xd8\xd2\x05\x6a\x22\x04\x46\x0d\x00\x20\x08\x20\x02\x4b\x1a\x0b\x02\x40\x20\x03\x20\x02\x47\x0d\x00\x41\x00\x41\x00\x28\x02\xb0\xd2\x05\x41\x7e\x20\x09\x77\x71\x36\x02\xb0\xd2\x05\x0c\x02\x0b\x02\x40\x20\x03\x20\x04\x46\x0d\x00\x20\x08\x20\x03\x4b\x1a\x0b\x20\x03\x20\x02\x36\x02\x08\x20\x02\x20\x03\x36\x02\x0c\x0c\x01\x0b\x20\x05\x28\x02\x18\x21\x09\x02\x40\x02\x40\x20\x05\x28\x02\x0c\x22\x02\x20\x05\x46\x0d\x00\x02\x40\x20\x08\x20\x05\x28\x02\x08\x22\x04\x4b\x0d\x00\x20\x04\x28\x02\x0c\x20\x05\x47\x1a\x0b\x20\x02\x20\x04\x36\x02\x08\x20\x04\x20\x02\x36\x02\x0c\x0c\x01\x0b\x02\x40\x20\x05\x41\x14\x6a\x22\x04\x28\x02\x00\x22\x03\x0d\x00\x20\x05\x41\x10\x6a\x22\x04\x28\x02\x00\x22\x03\x0d\x00\x41\x00\x21\x02\x0c\x01\x0b\x03\x40\x20\x04\x21\x08\x20\x03\x22\x02\x41\x14\x6a\x22\x04\x28\x02\x00\x22\x03\x0d\x00\x20\x02\x41\x10\x6a\x21\x04\x20\x02\x28\x02\x10\x22\x03\x0d\x00\x0b\x20\x08\x41\x00\x36\x02\x00\x0b\x20\x09\x45\x0d\x00\x02\x40\x02\x40\x20\x05\x28\x02\x1c\x22\x03\x41\x02\x74\x41\xe0\xd4\x05\x6a\x22\x04\x28\x02\x00\x20\x05\x47\x0d\x00\x20\x04\x20\x02\x36\x02\x00\x20\x02\x0d\x01\x41\x00\x41\x00\x28\x02\xb4\xd2\x05\x41\x7e\x20\x03\x77\x71\x36\x02\xb4\xd2\x05\x0c\x02\x0b\x20\x09\x41\x10\x41\x14\x20\x09\x28\x02\x10\x20\x05\x46\x1b\x6a\x20\x02\x36\x02\x00\x20\x02\x45\x0d\x01\x0b\x20\x02\x20\x09\x36\x02\x18\x02\x40\x20\x05\x28\x02\x10\x22\x04\x45\x0d\x00\x20\x02\x20\x04\x36\x02\x10\x20\x04\x20\x02\x36\x02\x18\x0b\x20\x05\x28\x02\x14\x22\x04\x45\x0d\x00\x20\x02\x41\x14\x6a\x20\x04\x36\x02\x00\x20\x04\x20\x02\x36\x02\x18\x0b\x20\x07\x20\x00\x6a\x21\x00\x20\x05\x20\x07\x6a\x21\x05\x0b\x20\x05\x20\x05\x28\x02\x04\x41\x7e\x71\x36\x02\x04\x20\x06\x20\x00\x6a\x20\x00\x36\x02\x00\x20\x06\x20\x00\x41\x01\x72\x36\x02\x04\x02\x40\x20\x00\x41\xff\x01\x4b\x0d\x00\x20\x00\x41\x03\x76\x22\x04\x41\x03\x74\x41\xd8\xd2\x05\x6a\x21\x00\x02\x40\x02\x40\x41\x00\x28\x02\xb0\xd2\x05\x22\x03\x41\x01\x20\x04\x74\x22\x04\x71\x0d\x00\x41\x00\x20\x03\x20\x04\x72\x36\x02\xb0\xd2\x05\x20\x00\x21\x04\x0c\x01\x0b\x20\x00\x28\x02\x08\x21\x04\x0b\x20\x04\x20\x06\x36\x02\x0c\x20\x00\x20\x06\x36\x02\x08\x20\x06\x20\x00\x36\x02\x0c\x20\x06\x20\x04\x36\x02\x08\x0c\x03\x0b\x41\x00\x21\x04\x02\x40\x20\x00\x41\x08\x76\x22\x03\x45\x0d\x00\x41\x1f\x21\x04\x20\x00\x41\xff\xff\xff\x07\x4b\x0d\x00\x20\x03\x20\x03\x41\x80\xfe\x3f\x6a\x41\x10\x76\x41\x08\x71\x22\x04\x74\x22\x03\x20\x03\x41\x80\xe0\x1f\x6a\x41\x10\x76\x41\x04\x71\x22\x03\x74\x22\x05\x20\x05\x41\x80\x80\x0f\x6a\x41\x10\x76\x41\x02\x71\x22\x05\x74\x41\x0f\x76\x20\x03\x20\x04\x72\x20\x05\x72\x6b\x22\x04\x41\x01\x74\x20\x00\x20\x04\x41\x15\x6a\x76\x41\x01\x71\x72\x41\x1c\x6a\x21\x04\x0b\x20\x06\x20\x04\x36\x02\x1c\x20\x06\x42\x00\x37\x02\x10\x20\x04\x41\x02\x74\x41\xe0\xd4\x05\x6a\x21\x03\x02\x40\x41\x00\x28\x02\xb4\xd2\x05\x22\x05\x41\x01\x20\x04\x74\x22\x08\x71\x0d\x00\x20\x03\x20\x06\x36\x02\x00\x41\x00\x20\x05\x20\x08\x72\x36\x02\xb4\xd2\x05\x20\x06\x20\x03\x36\x02\x18\x20\x06\x20\x06\x36\x02\x08\x20\x06\x20\x06\x36\x02\x0c\x0c\x03\x0b\x20\x00\x41\x00\x41\x19\x20\x04\x41\x01\x76\x6b\x20\x04\x41\x1f\x46\x1b\x74\x21\x04\x20\x03\x28\x02\x00\x21\x05\x03\x40\x20\x05\x22\x03\x28\x02\x04\x41\x78\x71\x20\x00\x46\x0d\x02\x20\x04\x41\x1d\x76\x21\x05\x20\x04\x41\x01\x74\x21\x04\x20\x03\x20\x05\x41\x04\x71\x6a\x41\x10\x6a\x22\x08\x28\x02\x00\x22\x05\x0d\x00\x0b\x20\x08\x20\x06\x36\x02\x00\x20\x06\x20\x03\x36\x02\x18\x20\x06\x20\x06\x36\x02\x0c\x20\x06\x20\x06\x36\x02\x08\x0c\x02\x0b\x20\x05\x41\x78\x20\x05\x6b\x41\x0f\x71\x41\x00\x20\x05\x41\x08\x6a\x41\x0f\x71\x1b\x22\x00\x6a\x22\x0b\x20\x02\x41\x48\x6a\x22\x08\x20\x00\x6b\x22\x00\x41\x01\x72\x36\x02\x04\x20\x05\x20\x08\x6a\x41\x38\x36\x02\x04\x20\x04\x20\x06\x41\x37\x20\x06\x6b\x41\x0f\x71\x41\x00\x20\x06\x41\x49\x6a\x41\x0f\x71\x1b\x6a\x41\x41\x6a\x22\x08\x20\x08\x20\x04\x41\x10\x6a\x49\x1b\x22\x08\x41\x23\x36\x02\x04\x41\x00\x41\x00\x28\x02\x98\xd6\x05\x36\x02\xcc\xd2\x05\x41\x00\x20\x00\x36\x02\xbc\xd2\x05\x41\x00\x20\x0b\x36\x02\xc8\xd2\x05\x20\x08\x41\x10\x6a\x41\x00\x29\x02\xf8\xd5\x05\x37\x02\x00\x20\x08\x41\x00\x29\x02\xf0\xd5\x05\x37\x02\x08\x41\x00\x20\x08\x41\x08\x6a\x36\x02\xf8\xd5\x05\x41\x00\x20\x02\x36\x02\xf4\xd5\x05\x41\x00\x20\x05\x36\x02\xf0\xd5\x05\x41\x00\x41\x00\x36\x02\xfc\xd5\x05\x20\x08\x41\x24\x6a\x21\x00\x03\x40\x20\x00\x41\x07\x36\x02\x00\x20\x06\x20\x00\x41\x04\x6a\x22\x00\x4b\x0d\x00\x0b\x20\x08\x20\x04\x46\x0d\x03\x20\x08\x20\x08\x28\x02\x04\x41\x7e\x71\x36\x02\x04\x20\x08\x20\x08\x20\x04\x6b\x22\x02\x36\x02\x00\x20\x04\x20\x02\x41\x01\x72\x36\x02\x04\x02\x40\x20\x02\x41\xff\x01\x4b\x0d\x00\x20\x02\x41\x03\x76\x22\x06\x41\x03\x74\x41\xd8\xd2\x05\x6a\x21\x00\x02\x40\x02\x40\x41\x00\x28\x02\xb0\xd2\x05\x22\x05\x41\x01\x20\x06\x74\x22\x06\x71\x0d\x00\x41\x00\x20\x05\x20\x06\x72\x36\x02\xb0\xd2\x05\x20\x00\x21\x06\x0c\x01\x0b\x20\x00\x28\x02\x08\x21\x06\x0b\x20\x06\x20\x04\x36\x02\x0c\x20\x00\x20\x04\x36\x02\x08\x20\x04\x20\x00\x36\x02\x0c\x20\x04\x20\x06\x36\x02\x08\x0c\x04\x0b\x41\x00\x21\x00\x02\x40\x20\x02\x41\x08\x76\x22\x06\x45\x0d\x00\x41\x1f\x21\x00\x20\x02\x41\xff\xff\xff\x07\x4b\x0d\x00\x20\x06\x20\x06\x41\x80\xfe\x3f\x6a\x41\x10\x76\x41\x08\x71\x22\x00\x74\x22\x06\x20\x06\x41\x80\xe0\x1f\x6a\x41\x10\x76\x41\x04\x71\x22\x06\x74\x22\x05\x20\x05\x41\x80\x80\x0f\x6a\x41\x10\x76\x41\x02\x71\x22\x05\x74\x41\x0f\x76\x20\x06\x20\x00\x72\x20\x05\x72\x6b\x22\x00\x41\x01\x74\x20\x02\x20\x00\x41\x15\x6a\x76\x41\x01\x71\x72\x41\x1c\x6a\x21\x00\x0b\x20\x04\x42\x00\x37\x02\x10\x20\x04\x41\x1c\x6a\x20\x00\x36\x02\x00\x20\x00\x41\x02\x74\x41\xe0\xd4\x05\x6a\x21\x06\x02\x40\x41\x00\x28\x02\xb4\xd2\x05\x22\x05\x41\x01\x20\x00\x74\x22\x08\x71\x0d\x00\x20\x06\x20\x04\x36\x02\x00\x41\x00\x20\x05\x20\x08\x72\x36\x02\xb4\xd2\x05\x20\x04\x41\x18\x6a\x20\x06\x36\x02\x00\x20\x04\x20\x04\x36\x02\x08\x20\x04\x20\x04\x36\x02\x0c\x0c\x04\x0b\x20\x02\x41\x00\x41\x19\x20\x00\x41\x01\x76\x6b\x20\x00\x41\x1f\x46\x1b\x74\x21\x00\x20\x06\x28\x02\x00\x21\x05\x03\x40\x20\x05\x22\x06\x28\x02\x04\x41\x78\x71\x20\x02\x46\x0d\x03\x20\x00\x41\x1d\x76\x21\x05\x20\x00\x41\x01\x74\x21\x00\x20\x06\x20\x05\x41\x04\x71\x6a\x41\x10\x6a\x22\x08\x28\x02\x00\x22\x05\x0d\x00\x0b\x20\x08\x20\x04\x36\x02\x00\x20\x04\x41\x18\x6a\x20\x06\x36\x02\x00\x20\x04\x20\x04\x36\x02\x0c\x20\x04\x20\x04\x36\x02\x08\x0c\x03\x0b\x20\x03\x28\x02\x08\x21\x00\x20\x03\x20\x06\x36\x02\x08\x20\x00\x20\x06\x36\x02\x0c\x20\x06\x41\x00\x36\x02\x18\x20\x06\x20\x00\x36\x02\x08\x20\x06\x20\x03\x36\x02\x0c\x0b\x20\x0b\x41\x08\x6a\x21\x00\x0c\x05\x0b\x20\x06\x28\x02\x08\x21\x00\x20\x06\x20\x04\x36\x02\x08\x20\x00\x20\x04\x36\x02\x0c\x20\x04\x41\x18\x6a\x41\x00\x36\x02\x00\x20\x04\x20\x00\x36\x02\x08\x20\x04\x20\x06\x36\x02\x0c\x0b\x41\x00\x28\x02\xbc\xd2\x05\x22\x00\x20\x03\x4d\x0d\x00\x41\x00\x28\x02\xc8\xd2\x05\x22\x04\x20\x03\x6a\x22\x06\x20\x00\x20\x03\x6b\x22\x00\x41\x01\x72\x36\x02\x04\x41\x00\x20\x00\x36\x02\xbc\xd2\x05\x41\x00\x20\x06\x36\x02\xc8\xd2\x05\x20\x04\x20\x03\x41\x03\x72\x36\x02\x04\x20\x04\x41\x08\x6a\x21\x00\x0c\x03\x0b\x41\x00\x21\x00\x41\x00\x41\x30\x36\x02\xa0\xd6\x05\x0c\x02\x0b\x02\x40\x20\x0b\x45\x0d\x00\x02\x40\x02\x40\x20\x08\x20\x08\x28\x02\x1c\x22\x04\x41\x02\x74\x41\xe0\xd4\x05\x6a\x22\x00\x28\x02\x00\x47\x0d\x00\x20\x00\x20\x05\x36\x02\x00\x20\x05\x0d\x01\x41\x00\x20\x07\x41\x7e\x20\x04\x77\x71\x22\x07\x36\x02\xb4\xd2\x05\x0c\x02\x0b\x20\x0b\x41\x10\x41\x14\x20\x0b\x28\x02\x10\x20\x08\x46\x1b\x6a\x20\x05\x36\x02\x00\x20\x05\x45\x0d\x01\x0b\x20\x05\x20\x0b\x36\x02\x18\x02\x40\x20\x08\x28\x02\x10\x22\x00\x45\x0d\x00\x20\x05\x20\x00\x36\x02\x10\x20\x00\x20\x05\x36\x02\x18\x0b\x20\x08\x41\x14\x6a\x28\x02\x00\x22\x00\x45\x0d\x00\x20\x05\x41\x14\x6a\x20\x00\x36\x02\x00\x20\x00\x20\x05\x36\x02\x18\x0b\x02\x40\x02\x40\x20\x06\x41\x0f\x4b\x0d\x00\x20\x08\x20\x06\x20\x03\x6a\x22\x00\x41\x03\x72\x36\x02\x04\x20\x08\x20\x00\x6a\x22\x00\x20\x00\x28\x02\x04\x41\x01\x72\x36\x02\x04\x0c\x01\x0b\x20\x08\x20\x03\x6a\x22\x05\x20\x06\x41\x01\x72\x36\x02\x04\x20\x08\x20\x03\x41\x03\x72\x36\x02\x04\x20\x05\x20\x06\x6a\x20\x06\x36\x02\x00\x02\x40\x20\x06\x41\xff\x01\x4b\x0d\x00\x20\x06\x41\x03\x76\x22\x04\x41\x03\x74\x41\xd8\xd2\x05\x6a\x21\x00\x02\x40\x02\x40\x41\x00\x28\x02\xb0\xd2\x05\x22\x06\x41\x01\x20\x04\x74\x22\x04\x71\x0d\x00\x41\x00\x20\x06\x20\x04\x72\x36\x02\xb0\xd2\x05\x20\x00\x21\x04\x0c\x01\x0b\x20\x00\x28\x02\x08\x21\x04\x0b\x20\x04\x20\x05\x36\x02\x0c\x20\x00\x20\x05\x36\x02\x08\x20\x05\x20\x00\x36\x02\x0c\x20\x05\x20\x04\x36\x02\x08\x0c\x01\x0b\x02\x40\x02\x40\x20\x06\x41\x08\x76\x22\x04\x0d\x00\x41\x00\x21\x00\x0c\x01\x0b\x41\x1f\x21\x00\x20\x06\x41\xff\xff\xff\x07\x4b\x0d\x00\x20\x04\x20\x04\x41\x80\xfe\x3f\x6a\x41\x10\x76\x41\x08\x71\x22\x00\x74\x22\x04\x20\x04\x41\x80\xe0\x1f\x6a\x41\x10\x76\x41\x04\x71\x22\x04\x74\x22\x03\x20\x03\x41\x80\x80\x0f\x6a\x41\x10\x76\x41\x02\x71\x22\x03\x74\x41\x0f\x76\x20\x04\x20\x00\x72\x20\x03\x72\x6b\x22\x00\x41\x01\x74\x20\x06\x20\x00\x41\x15\x6a\x76\x41\x01\x71\x72\x41\x1c\x6a\x21\x00\x0b\x20\x05\x20\x00\x36\x02\x1c\x20\x05\x42\x00\x37\x02\x10\x20\x00\x41\x02\x74\x41\xe0\xd4\x05\x6a\x21\x04\x02\x40\x20\x07\x41\x01\x20\x00\x74\x22\x03\x71\x0d\x00\x20\x04\x20\x05\x36\x02\x00\x41\x00\x20\x07\x20\x03\x72\x36\x02\xb4\xd2\x05\x20\x05\x20\x04\x36\x02\x18\x20\x05\x20\x05\x36\x02\x08\x20\x05\x20\x05\x36\x02\x0c\x0c\x01\x0b\x20\x06\x41\x00\x41\x19\x20\x00\x41\x01\x76\x6b\x20\x00\x41\x1f\x46\x1b\x74\x21\x00\x20\x04\x28\x02\x00\x21\x03\x02\x40\x03\x40\x20\x03\x22\x04\x28\x02\x04\x41\x78\x71\x20\x06\x46\x0d\x01\x20\x00\x41\x1d\x76\x21\x03\x20\x00\x41\x01\x74\x21\x00\x20\x04\x20\x03\x41\x04\x71\x6a\x41\x10\x6a\x22\x02\x28\x02\x00\x22\x03\x0d\x00\x0b\x20\x02\x20\x05\x36\x02\x00\x20\x05\x20\x04\x36\x02\x18\x20\x05\x20\x05\x36\x02\x0c\x20\x05\x20\x05\x36\x02\x08\x0c\x01\x0b\x20\x04\x28\x02\x08\x21\x00\x20\x04\x20\x05\x36\x02\x08\x20\x00\x20\x05\x36\x02\x0c\x20\x05\x41\x00\x36\x02\x18\x20\x05\x20\x00\x36\x02\x08\x20\x05\x20\x04\x36\x02\x0c\x0b\x20\x08\x41\x08\x6a\x21\x00\x0c\x01\x0b\x02\x40\x20\x0a\x45\x0d\x00\x02\x40\x02\x40\x20\x05\x20\x05\x28\x02\x1c\x22\x06\x41\x02\x74\x41\xe0\xd4\x05\x6a\x22\x00\x28\x02\x00\x47\x0d\x00\x20\x00\x20\x08\x36\x02\x00\x20\x08\x0d\x01\x41\x00\x20\x09\x41\x7e\x20\x06\x77\x71\x36\x02\xb4\xd2\x05\x0c\x02\x0b\x20\x0a\x41\x10\x41\x14\x20\x0a\x28\x02\x10\x20\x05\x46\x1b\x6a\x20\x08\x36\x02\x00\x20\x08\x45\x0d\x01\x0b\x20\x08\x20\x0a\x36\x02\x18\x02\x40\x20\x05\x28\x02\x10\x22\x00\x45\x0d\x00\x20\x08\x20\x00\x36\x02\x10\x20\x00\x20\x08\x36\x02\x18\x0b\x20\x05\x41\x14\x6a\x28\x02\x00\x22\x00\x45\x0d\x00\x20\x08\x41\x14\x6a\x20\x00\x36\x02\x00\x20\x00\x20\x08\x36\x02\x18\x0b\x02\x40\x02\x40\x20\x04\x41\x0f\x4b\x0d\x00\x20\x05\x20\x04\x20\x03\x6a\x22\x00\x41\x03\x72\x36\x02\x04\x20\x05\x20\x00\x6a\x22\x00\x20\x00\x28\x02\x04\x41\x01\x72\x36\x02\x04\x0c\x01\x0b\x20\x05\x20\x03\x6a\x22\x06\x20\x04\x41\x01\x72\x36\x02\x04\x20\x05\x20\x03\x41\x03\x72\x36\x02\x04\x20\x06\x20\x04\x6a\x20\x04\x36\x02\x00\x02\x40\x20\x07\x45\x0d\x00\x20\x07\x41\x03\x76\x22\x08\x41\x03\x74\x41\xd8\xd2\x05\x6a\x21\x03\x41\x00\x28\x02\xc4\xd2\x05\x21\x00\x02\x40\x02\x40\x41\x01\x20\x08\x74\x22\x08\x20\x02\x71\x0d\x00\x41\x00\x20\x08\x20\x02\x72\x36\x02\xb0\xd2\x05\x20\x03\x21\x08\x0c\x01\x0b\x20\x03\x28\x02\x08\x21\x08\x0b\x20\x08\x20\x00\x36\x02\x0c\x20\x03\x20\x00\x36\x02\x08\x20\x00\x20\x03\x36\x02\x0c\x20\x00\x20\x08\x36\x02\x08\x0b\x41\x00\x20\x06\x36\x02\xc4\xd2\x05\x41\x00\x20\x04\x36\x02\xb8\xd2\x05\x0b\x20\x05\x41\x08\x6a\x21\x00\x0b\x20\x01\x41\x10\x6a\x24\x00\x20\x00\x0b\x06\x00\x20\x00\x10\x3c\x0b\xa2\x0e\x01\x07\x7f\x02\x40\x20\x00\x45\x0d\x00\x20\x00\x41\x78\x6a\x22\x01\x20\x00\x41\x7c\x6a\x28\x02\x00\x22\x02\x41\x78\x71\x22\x00\x6a\x21\x03\x02\x40\x20\x02\x41\x01\x71\x0d\x00\x20\x02\x41\x03\x71\x45\x0d\x01\x20\x01\x20\x01\x28\x02\x00\x22\x02\x6b\x22\x01\x41\x00\x28\x02\xc0\xd2\x05\x22\x04\x49\x0d\x01\x20\x02\x20\x00\x6a\x21\x00\x02\x40\x41\x00\x28\x02\xc4\xd2\x05\x20\x01\x46\x0d\x00\x02\x40\x20\x02\x41\xff\x01\x4b\x0d\x00\x20\x01\x28\x02\x0c\x21\x05\x02\x40\x20\x01\x28\x02\x08\x22\x06\x20\x02\x41\x03\x76\x22\x07\x41\x03\x74\x41\xd8\xd2\x05\x6a\x22\x02\x46\x0d\x00\x20\x04\x20\x06\x4b\x1a\x0b\x02\x40\x20\x05\x20\x06\x47\x0d\x00\x41\x00\x41\x00\x28\x02\xb0\xd2\x05\x41\x7e\x20\x07\x77\x71\x36\x02\xb0\xd2\x05\x0c\x03\x0b\x02\x40\x20\x05\x20\x02\x46\x0d\x00\x20\x04\x20\x05\x4b\x1a\x0b\x20\x05\x20\x06\x36\x02\x08\x20\x06\x20\x05\x36\x02\x0c\x0c\x02\x0b\x20\x01\x28\x02\x18\x21\x07\x02\x40\x02\x40\x20\x01\x28\x02\x0c\x22\x05\x20\x01\x46\x0d\x00\x02\x40\x20\x04\x20\x01\x28\x02\x08\x22\x02\x4b\x0d\x00\x20\x02\x28\x02\x0c\x20\x01\x47\x1a\x0b\x20\x05\x20\x02\x36\x02\x08\x20\x02\x20\x05\x36\x02\x0c\x0c\x01\x0b\x02\x40\x20\x01\x41\x14\x6a\x22\x02\x28\x02\x00\x22\x04\x0d\x00\x20\x01\x41\x10\x6a\x22\x02\x28\x02\x00\x22\x04\x0d\x00\x41\x00\x21\x05\x0c\x01\x0b\x03\x40\x20\x02\x21\x06\x20\x04\x22\x05\x41\x14\x6a\x22\x02\x28\x02\x00\x22\x04\x0d\x00\x20\x05\x41\x10\x6a\x21\x02\x20\x05\x28\x02\x10\x22\x04\x0d\x00\x0b\x20\x06\x41\x00\x36\x02\x00\x0b\x20\x07\x45\x0d\x01\x02\x40\x02\x40\x20\x01\x28\x02\x1c\x22\x04\x41\x02\x74\x41\xe0\xd4\x05\x6a\x22\x02\x28\x02\x00\x20\x01\x47\x0d\x00\x20\x02\x20\x05\x36\x02\x00\x20\x05\x0d\x01\x41\x00\x41\x00\x28\x02\xb4\xd2\x05\x41\x7e\x20\x04\x77\x71\x36\x02\xb4\xd2\x05\x0c\x03\x0b\x20\x07\x41\x10\x41\x14\x20\x07\x28\x02\x10\x20\x01\x46\x1b\x6a\x20\x05\x36\x02\x00\x20\x05\x45\x0d\x02\x0b\x20\x05\x20\x07\x36\x02\x18\x02\x40\x20\x01\x28\x02\x10\x22\x02\x45\x0d\x00\x20\x05\x20\x02\x36\x02\x10\x20\x02\x20\x05\x36\x02\x18\x0b\x20\x01\x28\x02\x14\x22\x02\x45\x0d\x01\x20\x05\x41\x14\x6a\x20\x02\x36\x02\x00\x20\x02\x20\x05\x36\x02\x18\x0c\x01\x0b\x20\x03\x28\x02\x04\x22\x02\x41\x03\x71\x41\x03\x47\x0d\x00\x20\x03\x20\x02\x41\x7e\x71\x36\x02\x04\x41\x00\x20\x00\x36\x02\xb8\xd2\x05\x20\x01\x20\x00\x6a\x20\x00\x36\x02\x00\x20\x01\x20\x00\x41\x01\x72\x36\x02\x04\x0f\x0b\x20\x03\x20\x01\x4d\x0d\x00\x20\x03\x28\x02\x04\x22\x02\x41\x01\x71\x45\x0d\x00\x02\x40\x02\x40\x20\x02\x41\x02\x71\x0d\x00\x02\x40\x41\x00\x28\x02\xc8\xd2\x05\x20\x03\x47\x0d\x00\x41\x00\x20\x01\x36\x02\xc8\xd2\x05\x41\x00\x41\x00\x28\x02\xbc\xd2\x05\x20\x00\x6a\x22\x00\x36\x02\xbc\xd2\x05\x20\x01\x20\x00\x41\x01\x72\x36\x02\x04\x20\x01\x41\x00\x28\x02\xc4\xd2\x05\x47\x0d\x03\x41\x00\x41\x00\x36\x02\xb8\xd2\x05\x41\x00\x41\x00\x36\x02\xc4\xd2\x05\x0f\x0b\x02\x40\x41\x00\x28\x02\xc4\xd2\x05\x20\x03\x47\x0d\x00\x41\x00\x20\x01\x36\x02\xc4\xd2\x05\x41\x00\x41\x00\x28\x02\xb8\xd2\x05\x20\x00\x6a\x22\x00\x36\x02\xb8\xd2\x05\x20\x01\x20\x00\x41\x01\x72\x36\x02\x04\x20\x01\x20\x00\x6a\x20\x00\x36\x02\x00\x0f\x0b\x20\x02\x41\x78\x71\x20\x00\x6a\x21\x00\x02\x40\x02\x40\x20\x02\x41\xff\x01\x4b\x0d\x00\x20\x03\x28\x02\x0c\x21\x04\x02\x40\x20\x03\x28\x02\x08\x22\x05\x20\x02\x41\x03\x76\x22\x03\x41\x03\x74\x41\xd8\xd2\x05\x6a\x22\x02\x46\x0d\x00\x41\x00\x28\x02\xc0\xd2\x05\x20\x05\x4b\x1a\x0b\x02\x40\x20\x04\x20\x05\x47\x0d\x00\x41\x00\x41\x00\x28\x02\xb0\xd2\x05\x41\x7e\x20\x03\x77\x71\x36\x02\xb0\xd2\x05\x0c\x02\x0b\x02\x40\x20\x04\x20\x02\x46\x0d\x00\x41\x00\x28\x02\xc0\xd2\x05\x20\x04\x4b\x1a\x0b\x20\x04\x20\x05\x36\x02\x08\x20\x05\x20\x04\x36\x02\x0c\x0c\x01\x0b\x20\x03\x28\x02\x18\x21\x07\x02\x40\x02\x40\x20\x03\x28\x02\x0c\x22\x05\x20\x03\x46\x0d\x00\x02\x40\x41\x00\x28\x02\xc0\xd2\x05\x20\x03\x28\x02\x08\x22\x02\x4b\x0d\x00\x20\x02\x28\x02\x0c\x20\x03\x47\x1a\x0b\x20\x05\x20\x02\x36\x02\x08\x20\x02\x20\x05\x36\x02\x0c\x0c\x01\x0b\x02\x40\x20\x03\x41\x14\x6a\x22\x02\x28\x02\x00\x22\x04\x0d\x00\x20\x03\x41\x10\x6a\x22\x02\x28\x02\x00\x22\x04\x0d\x00\x41\x00\x21\x05\x0c\x01\x0b\x03\x40\x20\x02\x21\x06\x20\x04\x22\x05\x41\x14\x6a\x22\x02\x28\x02\x00\x22\x04\x0d\x00\x20\x05\x41\x10\x6a\x21\x02\x20\x05\x28\x02\x10\x22\x04\x0d\x00\x0b\x20\x06\x41\x00\x36\x02\x00\x0b\x20\x07\x45\x0d\x00\x02\x40\x02\x40\x20\x03\x28\x02\x1c\x22\x04\x41\x02\x74\x41\xe0\xd4\x05\x6a\x22\x02\x28\x02\x00\x20\x03\x47\x0d\x00\x20\x02\x20\x05\x36\x02\x00\x20\x05\x0d\x01\x41\x00\x41\x00\x28\x02\xb4\xd2\x05\x41\x7e\x20\x04\x77\x71\x36\x02\xb4\xd2\x05\x0c\x02\x0b\x20\x07\x41\x10\x41\x14\x20\x07\x28\x02\x10\x20\x03\x46\x1b\x6a\x20\x05\x36\x02\x00\x20\x05\x45\x0d\x01\x0b\x20\x05\x20\x07\x36\x02\x18\x02\x40\x20\x03\x28\x02\x10\x22\x02\x45\x0d\x00\x20\x05\x20\x02\x36\x02\x10\x20\x02\x20\x05\x36\x02\x18\x0b\x20\x03\x28\x02\x14\x22\x02\x45\x0d\x00\x20\x05\x41\x14\x6a\x20\x02\x36\x02\x00\x20\x02\x20\x05\x36\x02\x18\x0b\x20\x01\x20\x00\x6a\x20\x00\x36\x02\x00\x20\x01\x20\x00\x41\x01\x72\x36\x02\x04\x20\x01\x41\x00\x28\x02\xc4\xd2\x05\x47\x0d\x01\x41\x00\x20\x00\x36\x02\xb8\xd2\x05\x0f\x0b\x20\x03\x20\x02\x41\x7e\x71\x36\x02\x04\x20\x01\x20\x00\x6a\x20\x00\x36\x02\x00\x20\x01\x20\x00\x41\x01\x72\x36\x02\x04\x0b\x02\x40\x20\x00\x41\xff\x01\x4b\x0d\x00\x20\x00\x41\x03\x76\x22\x02\x41\x03\x74\x41\xd8\xd2\x05\x6a\x21\x00\x02\x40\x02\x40\x41\x00\x28\x02\xb0\xd2\x05\x22\x04\x41\x01\x20\x02\x74\x22\x02\x71\x0d\x00\x41\x00\x20\x04\x20\x02\x72\x36\x02\xb0\xd2\x05\x20\x00\x21\x02\x0c\x01\x0b\x20\x00\x28\x02\x08\x21\x02\x0b\x20\x02\x20\x01\x36\x02\x0c\x20\x00\x20\x01\x36\x02\x08\x20\x01\x20\x00\x36\x02\x0c\x20\x01\x20\x02\x36\x02\x08\x0f\x0b\x41\x00\x21\x02\x02\x40\x20\x00\x41\x08\x76\x22\x04\x45\x0d\x00\x41\x1f\x21\x02\x20\x00\x41\xff\xff\xff\x07\x4b\x0d\x00\x20\x04\x20\x04\x41\x80\xfe\x3f\x6a\x41\x10\x76\x41\x08\x71\x22\x02\x74\x22\x04\x20\x04\x41\x80\xe0\x1f\x6a\x41\x10\x76\x41\x04\x71\x22\x04\x74\x22\x05\x20\x05\x41\x80\x80\x0f\x6a\x41\x10\x76\x41\x02\x71\x22\x05\x74\x41\x0f\x76\x20\x04\x20\x02\x72\x20\x05\x72\x6b\x22\x02\x41\x01\x74\x20\x00\x20\x02\x41\x15\x6a\x76\x41\x01\x71\x72\x41\x1c\x6a\x21\x02\x0b\x20\x01\x42\x00\x37\x02\x10\x20\x01\x41\x1c\x6a\x20\x02\x36\x02\x00\x20\x02\x41\x02\x74\x41\xe0\xd4\x05\x6a\x21\x04\x02\x40\x02\x40\x41\x00\x28\x02\xb4\xd2\x05\x22\x05\x41\x01\x20\x02\x74\x22\x03\x71\x0d\x00\x20\x04\x20\x01\x36\x02\x00\x41\x00\x20\x05\x20\x03\x72\x36\x02\xb4\xd2\x05\x20\x01\x41\x18\x6a\x20\x04\x36\x02\x00\x20\x01\x20\x01\x36\x02\x08\x20\x01\x20\x01\x36\x02\x0c\x0c\x01\x0b\x20\x00\x41\x00\x41\x19\x20\x02\x41\x01\x76\x6b\x20\x02\x41\x1f\x46\x1b\x74\x21\x02\x20\x04\x28\x02\x00\x21\x05\x02\x40\x03\x40\x20\x05\x22\x04\x28\x02\x04\x41\x78\x71\x20\x00\x46\x0d\x01\x20\x02\x41\x1d\x76\x21\x05\x20\x02\x41\x01\x74\x21\x02\x20\x04\x20\x05\x41\x04\x71\x6a\x41\x10\x6a\x22\x03\x28\x02\x00\x22\x05\x0d\x00\x0b\x20\x03\x20\x01\x36\x02\x00\x20\x01\x41\x18\x6a\x20\x04\x36\x02\x00\x20\x01\x20\x01\x36\x02\x0c\x20\x01\x20\x01\x36\x02\x08\x0c\x01\x0b\x20\x04\x28\x02\x08\x21\x00\x20\x04\x20\x01\x36\x02\x08\x20\x00\x20\x01\x36\x02\x0c\x20\x01\x41\x18\x6a\x41\x00\x36\x02\x00\x20\x01\x20\x00\x36\x02\x08\x20\x01\x20\x04\x36\x02\x0c\x0b\x41\x00\x41\x00\x28\x02\xd0\xd2\x05\x41\x7f\x6a\x22\x01\x36\x02\xd0\xd2\x05\x20\x01\x0d\x00\x41\xf8\xd5\x05\x21\x01\x03\x40\x20\x01\x28\x02\x00\x22\x00\x41\x08\x6a\x21\x01\x20\x00\x0d\x00\x0b\x41\x00\x41\x7f\x36\x02\xd0\xd2\x05\x0b\x0b\xf9\x08\x01\x0b\x7f\x02\x40\x20\x00\x0d\x00\x20\x01\x10\x3a\x0f\x0b\x02\x40\x20\x01\x41\x40\x49\x0d\x00\x41\x00\x41\x30\x36\x02\xa0\xd6\x05\x41\x00\x0f\x0b\x20\x01\x41\x0b\x49\x21\x02\x20\x01\x41\x13\x6a\x41\x70\x71\x21\x03\x20\x00\x41\x78\x6a\x21\x04\x20\x00\x41\x7c\x6a\x22\x05\x28\x02\x00\x22\x06\x41\x03\x71\x21\x07\x41\x00\x28\x02\xc0\xd2\x05\x21\x08\x02\x40\x20\x06\x41\x78\x71\x22\x09\x41\x01\x48\x0d\x00\x20\x07\x41\x01\x46\x0d\x00\x20\x08\x20\x04\x4b\x1a\x0b\x41\x10\x20\x03\x20\x02\x1b\x21\x02\x02\x40\x02\x40\x02\x40\x20\x07\x0d\x00\x20\x02\x41\x80\x02\x49\x0d\x01\x20\x09\x20\x02\x41\x04\x72\x49\x0d\x01\x20\x09\x20\x02\x6b\x41\x00\x28\x02\x90\xd6\x05\x41\x01\x74\x4d\x0d\x02\x0c\x01\x0b\x20\x04\x20\x09\x6a\x21\x07\x02\x40\x20\x09\x20\x02\x49\x0d\x00\x20\x09\x20\x02\x6b\x22\x01\x41\x10\x49\x0d\x02\x20\x05\x20\x02\x20\x06\x41\x01\x71\x72\x41\x02\x72\x36\x02\x00\x20\x04\x20\x02\x6a\x22\x02\x20\x01\x41\x03\x72\x36\x02\x04\x20\x07\x20\x07\x28\x02\x04\x41\x01\x72\x36\x02\x04\x20\x02\x20\x01\x10\x3e\x20\x00\x0f\x0b\x02\x40\x41\x00\x28\x02\xc8\xd2\x05\x20\x07\x47\x0d\x00\x41\x00\x28\x02\xbc\xd2\x05\x20\x09\x6a\x22\x09\x20\x02\x4d\x0d\x01\x20\x05\x20\x02\x20\x06\x41\x01\x71\x72\x41\x02\x72\x36\x02\x00\x41\x00\x20\x04\x20\x02\x6a\x22\x01\x36\x02\xc8\xd2\x05\x41\x00\x20\x09\x20\x02\x6b\x22\x02\x36\x02\xbc\xd2\x05\x20\x01\x20\x02\x41\x01\x72\x36\x02\x04\x20\x00\x0f\x0b\x02\x40\x41\x00\x28\x02\xc4\xd2\x05\x20\x07\x47\x0d\x00\x41\x00\x28\x02\xb8\xd2\x05\x20\x09\x6a\x22\x09\x20\x02\x49\x0d\x01\x02\x40\x02\x40\x20\x09\x20\x02\x6b\x22\x01\x41\x10\x49\x0d\x00\x20\x05\x20\x02\x20\x06\x41\x01\x71\x72\x41\x02\x72\x36\x02\x00\x20\x04\x20\x02\x6a\x22\x02\x20\x01\x41\x01\x72\x36\x02\x04\x20\x04\x20\x09\x6a\x22\x09\x20\x01\x36\x02\x00\x20\x09\x20\x09\x28\x02\x04\x41\x7e\x71\x36\x02\x04\x0c\x01\x0b\x20\x05\x20\x06\x41\x01\x71\x20\x09\x72\x41\x02\x72\x36\x02\x00\x20\x04\x20\x09\x6a\x22\x01\x20\x01\x28\x02\x04\x41\x01\x72\x36\x02\x04\x41\x00\x21\x01\x41\x00\x21\x02\x0b\x41\x00\x20\x02\x36\x02\xc4\xd2\x05\x41\x00\x20\x01\x36\x02\xb8\xd2\x05\x20\x00\x0f\x0b\x20\x07\x28\x02\x04\x22\x03\x41\x02\x71\x0d\x00\x20\x03\x41\x78\x71\x20\x09\x6a\x22\x0a\x20\x02\x49\x0d\x00\x20\x0a\x20\x02\x6b\x21\x0b\x02\x40\x02\x40\x20\x03\x41\xff\x01\x4b\x0d\x00\x20\x07\x28\x02\x0c\x21\x01\x02\x40\x20\x07\x28\x02\x08\x22\x09\x20\x03\x41\x03\x76\x22\x03\x41\x03\x74\x41\xd8\xd2\x05\x6a\x22\x07\x46\x0d\x00\x20\x08\x20\x09\x4b\x1a\x0b\x02\x40\x20\x01\x20\x09\x47\x0d\x00\x41\x00\x41\x00\x28\x02\xb0\xd2\x05\x41\x7e\x20\x03\x77\x71\x36\x02\xb0\xd2\x05\x0c\x02\x0b\x02\x40\x20\x01\x20\x07\x46\x0d\x00\x20\x08\x20\x01\x4b\x1a\x0b\x20\x01\x20\x09\x36\x02\x08\x20\x09\x20\x01\x36\x02\x0c\x0c\x01\x0b\x20\x07\x28\x02\x18\x21\x0c\x02\x40\x02\x40\x20\x07\x28\x02\x0c\x22\x03\x20\x07\x46\x0d\x00\x02\x40\x20\x08\x20\x07\x28\x02\x08\x22\x01\x4b\x0d\x00\x20\x01\x28\x02\x0c\x20\x07\x47\x1a\x0b\x20\x03\x20\x01\x36\x02\x08\x20\x01\x20\x03\x36\x02\x0c\x0c\x01\x0b\x02\x40\x20\x07\x41\x14\x6a\x22\x01\x28\x02\x00\x22\x09\x0d\x00\x20\x07\x41\x10\x6a\x22\x01\x28\x02\x00\x22\x09\x0d\x00\x41\x00\x21\x03\x0c\x01\x0b\x03\x40\x20\x01\x21\x08\x20\x09\x22\x03\x41\x14\x6a\x22\x01\x28\x02\x00\x22\x09\x0d\x00\x20\x03\x41\x10\x6a\x21\x01\x20\x03\x28\x02\x10\x22\x09\x0d\x00\x0b\x20\x08\x41\x00\x36\x02\x00\x0b\x20\x0c\x45\x0d\x00\x02\x40\x02\x40\x20\x07\x28\x02\x1c\x22\x09\x41\x02\x74\x41\xe0\xd4\x05\x6a\x22\x01\x28\x02\x00\x20\x07\x47\x0d\x00\x20\x01\x20\x03\x36\x02\x00\x20\x03\x0d\x01\x41\x00\x41\x00\x28\x02\xb4\xd2\x05\x41\x7e\x20\x09\x77\x71\x36\x02\xb4\xd2\x05\x0c\x02\x0b\x20\x0c\x41\x10\x41\x14\x20\x0c\x28\x02\x10\x20\x07\x46\x1b\x6a\x20\x03\x36\x02\x00\x20\x03\x45\x0d\x01\x0b\x20\x03\x20\x0c\x36\x02\x18\x02\x40\x20\x07\x28\x02\x10\x22\x01\x45\x0d\x00\x20\x03\x20\x01\x36\x02\x10\x20\x01\x20\x03\x36\x02\x18\x0b\x20\x07\x28\x02\x14\x22\x01\x45\x0d\x00\x20\x03\x41\x14\x6a\x20\x01\x36\x02\x00\x20\x01\x20\x03\x36\x02\x18\x0b\x02\x40\x20\x0b\x41\x0f\x4b\x0d\x00\x20\x05\x20\x06\x41\x01\x71\x20\x0a\x72\x41\x02\x72\x36\x02\x00\x20\x04\x20\x0a\x6a\x22\x01\x20\x01\x28\x02\x04\x41\x01\x72\x36\x02\x04\x20\x00\x0f\x0b\x20\x05\x20\x02\x20\x06\x41\x01\x71\x72\x41\x02\x72\x36\x02\x00\x20\x04\x20\x02\x6a\x22\x01\x20\x0b\x41\x03\x72\x36\x02\x04\x20\x04\x20\x0a\x6a\x22\x02\x20\x02\x28\x02\x04\x41\x01\x72\x36\x02\x04\x20\x01\x20\x0b\x10\x3e\x20\x00\x0f\x0b\x02\x40\x20\x01\x10\x3a\x22\x02\x0d\x00\x41\x00\x0f\x0b\x20\x02\x20\x00\x20\x05\x28\x02\x00\x22\x09\x41\x78\x71\x41\x04\x41\x08\x20\x09\x41\x03\x71\x1b\x6b\x22\x09\x20\x01\x20\x09\x20\x01\x49\x1b\x10\x70\x21\x01\x20\x00\x10\x3c\x20\x01\x21\x00\x0b\x20\x00\x0b\xb5\x0d\x01\x06\x7f\x20\x00\x20\x01\x6a\x21\x02\x02\x40\x02\x40\x20\x00\x28\x02\x04\x22\x03\x41\x01\x71\x0d\x00\x20\x03\x41\x03\x71\x45\x0d\x01\x20\x00\x28\x02\x00\x22\x03\x20\x01\x6a\x21\x01\x02\x40\x41\x00\x28\x02\xc4\xd2\x05\x20\x00\x20\x03\x6b\x22\x00\x46\x0d\x00\x41\x00\x28\x02\xc0\xd2\x05\x21\x04\x02\x40\x20\x03\x41\xff\x01\x4b\x0d\x00\x20\x00\x28\x02\x0c\x21\x05\x02\x40\x20\x00\x28\x02\x08\x22\x06\x20\x03\x41\x03\x76\x22\x07\x41\x03\x74\x41\xd8\xd2\x05\x6a\x22\x03\x46\x0d\x00\x20\x04\x20\x06\x4b\x1a\x0b\x02\x40\x20\x05\x20\x06\x47\x0d\x00\x41\x00\x41\x00\x28\x02\xb0\xd2\x05\x41\x7e\x20\x07\x77\x71\x36\x02\xb0\xd2\x05\x0c\x03\x0b\x02\x40\x20\x05\x20\x03\x46\x0d\x00\x20\x04\x20\x05\x4b\x1a\x0b\x20\x05\x20\x06\x36\x02\x08\x20\x06\x20\x05\x36\x02\x0c\x0c\x02\x0b\x20\x00\x28\x02\x18\x21\x07\x02\x40\x02\x40\x20\x00\x28\x02\x0c\x22\x06\x20\x00\x46\x0d\x00\x02\x40\x20\x04\x20\x00\x28\x02\x08\x22\x03\x4b\x0d\x00\x20\x03\x28\x02\x0c\x20\x00\x47\x1a\x0b\x20\x06\x20\x03\x36\x02\x08\x20\x03\x20\x06\x36\x02\x0c\x0c\x01\x0b\x02\x40\x20\x00\x41\x14\x6a\x22\x03\x28\x02\x00\x22\x05\x0d\x00\x20\x00\x41\x10\x6a\x22\x03\x28\x02\x00\x22\x05\x0d\x00\x41\x00\x21\x06\x0c\x01\x0b\x03\x40\x20\x03\x21\x04\x20\x05\x22\x06\x41\x14\x6a\x22\x03\x28\x02\x00\x22\x05\x0d\x00\x20\x06\x41\x10\x6a\x21\x03\x20\x06\x28\x02\x10\x22\x05\x0d\x00\x0b\x20\x04\x41\x00\x36\x02\x00\x0b\x20\x07\x45\x0d\x01\x02\x40\x02\x40\x20\x00\x28\x02\x1c\x22\x05\x41\x02\x74\x41\xe0\xd4\x05\x6a\x22\x03\x28\x02\x00\x20\x00\x47\x0d\x00\x20\x03\x20\x06\x36\x02\x00\x20\x06\x0d\x01\x41\x00\x41\x00\x28\x02\xb4\xd2\x05\x41\x7e\x20\x05\x77\x71\x36\x02\xb4\xd2\x05\x0c\x03\x0b\x20\x07\x41\x10\x41\x14\x20\x07\x28\x02\x10\x20\x00\x46\x1b\x6a\x20\x06\x36\x02\x00\x20\x06\x45\x0d\x02\x0b\x20\x06\x20\x07\x36\x02\x18\x02\x40\x20\x00\x28\x02\x10\x22\x03\x45\x0d\x00\x20\x06\x20\x03\x36\x02\x10\x20\x03\x20\x06\x36\x02\x18\x0b\x20\x00\x28\x02\x14\x22\x03\x45\x0d\x01\x20\x06\x41\x14\x6a\x20\x03\x36\x02\x00\x20\x03\x20\x06\x36\x02\x18\x0c\x01\x0b\x20\x02\x28\x02\x04\x22\x03\x41\x03\x71\x41\x03\x47\x0d\x00\x20\x02\x20\x03\x41\x7e\x71\x36\x02\x04\x41\x00\x20\x01\x36\x02\xb8\xd2\x05\x20\x02\x20\x01\x36\x02\x00\x20\x00\x20\x01\x41\x01\x72\x36\x02\x04\x0f\x0b\x02\x40\x02\x40\x20\x02\x28\x02\x04\x22\x03\x41\x02\x71\x0d\x00\x02\x40\x41\x00\x28\x02\xc8\xd2\x05\x20\x02\x47\x0d\x00\x41\x00\x20\x00\x36\x02\xc8\xd2\x05\x41\x00\x41\x00\x28\x02\xbc\xd2\x05\x20\x01\x6a\x22\x01\x36\x02\xbc\xd2\x05\x20\x00\x20\x01\x41\x01\x72\x36\x02\x04\x20\x00\x41\x00\x28\x02\xc4\xd2\x05\x47\x0d\x03\x41\x00\x41\x00\x36\x02\xb8\xd2\x05\x41\x00\x41\x00\x36\x02\xc4\xd2\x05\x0f\x0b\x02\x40\x41\x00\x28\x02\xc4\xd2\x05\x20\x02\x47\x0d\x00\x41\x00\x20\x00\x36\x02\xc4\xd2\x05\x41\x00\x41\x00\x28\x02\xb8\xd2\x05\x20\x01\x6a\x22\x01\x36\x02\xb8\xd2\x05\x20\x00\x20\x01\x41\x01\x72\x36\x02\x04\x20\x00\x20\x01\x6a\x20\x01\x36\x02\x00\x0f\x0b\x41\x00\x28\x02\xc0\xd2\x05\x21\x04\x20\x03\x41\x78\x71\x20\x01\x6a\x21\x01\x02\x40\x02\x40\x20\x03\x41\xff\x01\x4b\x0d\x00\x20\x02\x28\x02\x0c\x21\x05\x02\x40\x20\x02\x28\x02\x08\x22\x06\x20\x03\x41\x03\x76\x22\x02\x41\x03\x74\x41\xd8\xd2\x05\x6a\x22\x03\x46\x0d\x00\x20\x04\x20\x06\x4b\x1a\x0b\x02\x40\x20\x05\x20\x06\x47\x0d\x00\x41\x00\x41\x00\x28\x02\xb0\xd2\x05\x41\x7e\x20\x02\x77\x71\x36\x02\xb0\xd2\x05\x0c\x02\x0b\x02\x40\x20\x05\x20\x03\x46\x0d\x00\x20\x04\x20\x05\x4b\x1a\x0b\x20\x05\x20\x06\x36\x02\x08\x20\x06\x20\x05\x36\x02\x0c\x0c\x01\x0b\x20\x02\x28\x02\x18\x21\x07\x02\x40\x02\x40\x20\x02\x28\x02\x0c\x22\x06\x20\x02\x46\x0d\x00\x02\x40\x20\x04\x20\x02\x28\x02\x08\x22\x03\x4b\x0d\x00\x20\x03\x28\x02\x0c\x20\x02\x47\x1a\x0b\x20\x06\x20\x03\x36\x02\x08\x20\x03\x20\x06\x36\x02\x0c\x0c\x01\x0b\x02\x40\x20\x02\x41\x14\x6a\x22\x03\x28\x02\x00\x22\x05\x0d\x00\x20\x02\x41\x10\x6a\x22\x03\x28\x02\x00\x22\x05\x0d\x00\x41\x00\x21\x06\x0c\x01\x0b\x03\x40\x20\x03\x21\x04\x20\x05\x22\x06\x41\x14\x6a\x22\x03\x28\x02\x00\x22\x05\x0d\x00\x20\x06\x41\x10\x6a\x21\x03\x20\x06\x28\x02\x10\x22\x05\x0d\x00\x0b\x20\x04\x41\x00\x36\x02\x00\x0b\x20\x07\x45\x0d\x00\x02\x40\x02\x40\x20\x02\x28\x02\x1c\x22\x05\x41\x02\x74\x41\xe0\xd4\x05\x6a\x22\x03\x28\x02\x00\x20\x02\x47\x0d\x00\x20\x03\x20\x06\x36\x02\x00\x20\x06\x0d\x01\x41\x00\x41\x00\x28\x02\xb4\xd2\x05\x41\x7e\x20\x05\x77\x71\x36\x02\xb4\xd2\x05\x0c\x02\x0b\x20\x07\x41\x10\x41\x14\x20\x07\x28\x02\x10\x20\x02\x46\x1b\x6a\x20\x06\x36\x02\x00\x20\x06\x45\x0d\x01\x0b\x20\x06\x20\x07\x36\x02\x18\x02\x40\x20\x02\x28\x02\x10\x22\x03\x45\x0d\x00\x20\x06\x20\x03\x36\x02\x10\x20\x03\x20\x06\x36\x02\x18\x0b\x20\x02\x28\x02\x14\x22\x03\x45\x0d\x00\x20\x06\x41\x14\x6a\x20\x03\x36\x02\x00\x20\x03\x20\x06\x36\x02\x18\x0b\x20\x00\x20\x01\x6a\x20\x01\x36\x02\x00\x20\x00\x20\x01\x41\x01\x72\x36\x02\x04\x20\x00\x41\x00\x28\x02\xc4\xd2\x05\x47\x0d\x01\x41\x00\x20\x01\x36\x02\xb8\xd2\x05\x0f\x0b\x20\x02\x20\x03\x41\x7e\x71\x36\x02\x04\x20\x00\x20\x01\x6a\x20\x01\x36\x02\x00\x20\x00\x20\x01\x41\x01\x72\x36\x02\x04\x0b\x02\x40\x20\x01\x41\xff\x01\x4b\x0d\x00\x20\x01\x41\x03\x76\x22\x03\x41\x03\x74\x41\xd8\xd2\x05\x6a\x21\x01\x02\x40\x02\x40\x41\x00\x28\x02\xb0\xd2\x05\x22\x05\x41\x01\x20\x03\x74\x22\x03\x71\x0d\x00\x41\x00\x20\x05\x20\x03\x72\x36\x02\xb0\xd2\x05\x20\x01\x21\x03\x0c\x01\x0b\x20\x01\x28\x02\x08\x21\x03\x0b\x20\x03\x20\x00\x36\x02\x0c\x20\x01\x20\x00\x36\x02\x08\x20\x00\x20\x01\x36\x02\x0c\x20\x00\x20\x03\x36\x02\x08\x0f\x0b\x41\x00\x21\x03\x02\x40\x20\x01\x41\x08\x76\x22\x05\x45\x0d\x00\x41\x1f\x21\x03\x20\x01\x41\xff\xff\xff\x07\x4b\x0d\x00\x20\x05\x20\x05\x41\x80\xfe\x3f\x6a\x41\x10\x76\x41\x08\x71\x22\x03\x74\x22\x05\x20\x05\x41\x80\xe0\x1f\x6a\x41\x10\x76\x41\x04\x71\x22\x05\x74\x22\x06\x20\x06\x41\x80\x80\x0f\x6a\x41\x10\x76\x41\x02\x71\x22\x06\x74\x41\x0f\x76\x20\x05\x20\x03\x72\x20\x06\x72\x6b\x22\x03\x41\x01\x74\x20\x01\x20\x03\x41\x15\x6a\x76\x41\x01\x71\x72\x41\x1c\x6a\x21\x03\x0b\x20\x00\x42\x00\x37\x02\x10\x20\x00\x41\x1c\x6a\x20\x03\x36\x02\x00\x20\x03\x41\x02\x74\x41\xe0\xd4\x05\x6a\x21\x05\x02\x40\x41\x00\x28\x02\xb4\xd2\x05\x22\x06\x41\x01\x20\x03\x74\x22\x02\x71\x0d\x00\x20\x05\x20\x00\x36\x02\x00\x41\x00\x20\x06\x20\x02\x72\x36\x02\xb4\xd2\x05\x20\x00\x41\x18\x6a\x20\x05\x36\x02\x00\x20\x00\x20\x00\x36\x02\x08\x20\x00\x20\x00\x36\x02\x0c\x0f\x0b\x20\x01\x41\x00\x41\x19\x20\x03\x41\x01\x76\x6b\x20\x03\x41\x1f\x46\x1b\x74\x21\x03\x20\x05\x28\x02\x00\x21\x06\x02\x40\x03\x40\x20\x06\x22\x05\x28\x02\x04\x41\x78\x71\x20\x01\x46\x0d\x01\x20\x03\x41\x1d\x76\x21\x06\x20\x03\x41\x01\x74\x21\x03\x20\x05\x20\x06\x41\x04\x71\x6a\x41\x10\x6a\x22\x02\x28\x02\x00\x22\x06\x0d\x00\x0b\x20\x02\x20\x00\x36\x02\x00\x20\x00\x41\x18\x6a\x20\x05\x36\x02\x00\x20\x00\x20\x00\x36\x02\x0c\x20\x00\x20\x00\x36\x02\x08\x0f\x0b\x20\x05\x28\x02\x08\x21\x01\x20\x05\x20\x00\x36\x02\x08\x20\x01\x20\x00\x36\x02\x0c\x20\x00\x41\x18\x6a\x41\x00\x36\x02\x00\x20\x00\x20\x01\x36\x02\x08\x20\x00\x20\x05\x36\x02\x0c\x0b\x0b\x58\x02\x01\x7f\x02\x7e\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x20\x02\x42\x00\x37\x03\x08\x41\x00\x42\xe8\x07\x20\x02\x41\x08\x6a\x10\x33\x1a\x20\x00\x20\x02\x29\x03\x08\x22\x03\x42\x80\x94\xeb\xdc\x03\x80\x22\x04\x37\x03\x00\x20\x00\x20\x03\x20\x04\x42\x80\x94\xeb\xdc\x03\x7e\x7d\xa7\x41\xe8\x07\x6e\xad\x37\x03\x08\x20\x02\x41\x10\x6a\x24\x00\x41\x00\x0b\x03\x00\x00\x0b\x05\x00\x20\x00\x99\x0b\x05\x00\x20\x00\x9f\x0b\x05\x00\x20\x00\x9b\x0b\x05\x00\x20\x00\x9c\x0b\x05\x00\x20\x00\x9d\x0b\x48\x00\x02\x40\x20\x00\x0d\x00\x3f\x00\x41\x10\x74\x0f\x0b\x02\x40\x20\x00\x41\xff\xff\x03\x71\x0d\x00\x20\x00\x41\x7f\x4c\x0d\x00\x02\x40\x20\x00\x41\x10\x76\x40\x00\x22\x00\x41\x7f\x47\x0d\x00\x41\x00\x41\x30\x36\x02\xa0\xd6\x05\x41\x7f\x0f\x0b\x20\x00\x41\x10\x74\x0f\x0b\x10\x40\x00\x0b\x07\x00\x20\x00\x10\x34\x00\x0b\x02\x00\x0b\x0b\x00\x10\x48\x10\x5d\x20\x00\x10\x47\x00\x0b\x3d\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x04\x20\x02\x36\x02\x0c\x20\x04\x20\x03\x36\x02\x08\x20\x04\x20\x01\x36\x02\x04\x20\x04\x20\x00\x36\x02\x00\x41\xb0\xd1\x05\x41\x80\x08\x20\x04\x10\x60\x1a\x41\x00\x10\x50\x1a\x10\x40\x00\x0b\x60\x01\x01\x7e\x02\x40\x02\x40\x20\x00\x29\x03\x00\x22\x02\x42\x80\x80\x80\x80\x80\xd0\xd0\xf8\x00\x7c\x42\x80\xf6\xf5\xf0\xff\x9f\xa1\xf1\x01\x56\x0d\x00\x20\x02\x41\x00\x20\x01\x41\x20\x6a\x20\x01\x41\x24\x6a\x41\x00\x20\x01\x41\x28\x6a\x10\x4d\x20\x02\x20\x01\x34\x02\x24\x7c\x20\x01\x10\x4c\x41\x7f\x4a\x0d\x01\x0b\x41\x00\x21\x01\x41\x00\x41\x3d\x36\x02\xa0\xd6\x05\x0b\x20\x01\x0b\xf3\x03\x02\x0a\x7f\x01\x7e\x41\x7f\x21\x02\x02\x40\x20\x00\x42\x80\x80\x80\x80\x80\xd0\xd0\xf8\x00\x7c\x42\x80\xf6\xf5\xf0\xff\x9f\xa1\xf1\x01\x56\x0d\x00\x41\x1f\x21\x03\x20\x00\x42\x80\xc5\x8e\xba\x7c\x7c\x22\x00\x42\x80\xa3\x05\x7f\x22\x0c\x20\x00\x20\x0c\x42\x80\xa3\x05\x7e\x7d\xa7\x22\x04\x41\x1f\x75\xac\x7c\x22\x00\x42\xb1\xf5\x08\x7f\x22\x0c\x20\x00\x20\x0c\x42\xb1\xf5\x08\x7e\x7d\xa7\x22\x05\x41\x1f\x75\xac\x7c\x42\x90\x03\x7e\x41\x18\x41\x03\x20\x05\x41\xb1\xf5\x08\x6a\x20\x05\x20\x05\x41\x00\x48\x1b\x22\x05\x41\xac\x9d\x02\x6d\x20\x05\x41\xd0\x8a\x77\x6a\x41\xac\x9d\x02\x49\x1b\x22\x06\x41\xd4\xe2\x7d\x6c\x20\x05\x6a\x22\x05\x41\xb5\x0b\x6d\x20\x05\x41\xd3\xe2\x7d\x6a\x41\xb5\x0b\x49\x1b\x22\x07\x41\x02\x74\x20\x06\x41\xe4\x00\x6c\x6a\x41\x03\x20\x07\x41\xcb\x74\x6c\x20\x05\x6a\x22\x05\x41\xed\x02\x6d\x20\x05\x41\xcc\x74\x6a\x41\xed\x02\x49\x1b\x22\x08\x6a\xac\x7c\x21\x0c\x20\x00\x42\x03\x7c\x42\x07\x81\x21\x00\x20\x08\x41\x93\x7d\x6c\x20\x05\x6a\x22\x09\x21\x0a\x41\x00\x21\x05\x02\x40\x20\x09\x41\x1f\x48\x0d\x00\x41\x00\x21\x05\x20\x09\x21\x0a\x03\x40\x20\x05\x41\xa4\x08\x6a\x21\x0b\x20\x05\x41\x01\x6a\x21\x05\x20\x0a\x20\x03\x6b\x22\x0a\x20\x0b\x2c\x00\x00\x22\x03\x4e\x0d\x00\x0b\x0b\x20\x0c\x20\x05\x41\x09\x4b\x22\x03\xad\x7c\x22\x0c\x42\xe4\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x01\x20\x09\x20\x06\x45\x20\x07\x41\x00\x47\x72\x20\x08\x45\x71\x22\x0b\x6a\x41\x92\x7d\x41\x93\x7d\x20\x0b\x1b\x41\x00\x20\x09\x41\xb1\x02\x4a\x1b\x6a\x41\x3b\x6a\x36\x02\x1c\x20\x01\x20\x00\xa7\x22\x0b\x41\x07\x6a\x20\x0b\x20\x0b\x41\x00\x48\x1b\x36\x02\x18\x20\x01\x20\x0a\x41\x01\x6a\x36\x02\x0c\x20\x01\x20\x04\x41\x80\xa3\x05\x6a\x20\x04\x20\x04\x41\x00\x48\x1b\x22\x0a\x41\x90\x1c\x6d\x36\x02\x08\x20\x01\x20\x0c\xa7\x41\xe4\x00\x6a\x36\x02\x14\x20\x01\x20\x0a\x41\x3c\x6d\x22\x0b\x41\x3c\x6f\x36\x02\x04\x20\x01\x20\x05\x41\x74\x6a\x20\x05\x20\x03\x1b\x41\x02\x6a\x36\x02\x10\x20\x01\x20\x0a\x20\x0b\x41\x3c\x6c\x6b\x36\x02\x00\x41\x00\x21\x02\x0b\x20\x02\x0b\x1f\x00\x20\x02\x41\x00\x36\x02\x00\x20\x04\x41\x00\x36\x02\x00\x20\x05\x41\xaf\x08\x36\x02\x00\x20\x03\x41\x00\x36\x02\x00\x0b\x9a\x01\x01\x03\x7f\x23\x00\x41\x80\x01\x6b\x22\x04\x24\x00\x41\x7f\x21\x05\x20\x04\x20\x01\x41\x7f\x6a\x22\x06\x41\x00\x20\x06\x20\x01\x49\x22\x06\x1b\x36\x02\x74\x20\x04\x20\x00\x20\x04\x41\xfe\x00\x6a\x20\x06\x1b\x22\x00\x36\x02\x70\x20\x04\x41\x00\x41\xf0\x00\x10\x74\x22\x04\x41\x7f\x36\x02\x40\x20\x04\x41\x01\x36\x02\x20\x20\x04\x20\x04\x41\xf0\x00\x6a\x36\x02\x44\x20\x04\x20\x04\x41\xff\x00\x6a\x36\x02\x28\x02\x40\x02\x40\x20\x01\x41\x7f\x4a\x0d\x00\x41\x00\x41\x3d\x36\x02\xa0\xd6\x05\x0c\x01\x0b\x20\x00\x41\x00\x3a\x00\x00\x20\x04\x20\x02\x20\x03\x10\x53\x21\x05\x0b\x20\x04\x41\x80\x01\x6a\x24\x00\x20\x05\x0b\xaf\x01\x01\x04\x7f\x02\x40\x20\x00\x28\x02\x44\x22\x03\x28\x02\x04\x22\x04\x20\x00\x28\x02\x14\x20\x00\x28\x02\x18\x22\x05\x6b\x22\x06\x20\x04\x20\x06\x49\x1b\x22\x06\x45\x0d\x00\x20\x03\x28\x02\x00\x20\x05\x20\x06\x10\x70\x1a\x20\x03\x20\x03\x28\x02\x00\x20\x06\x6a\x36\x02\x00\x20\x03\x20\x03\x28\x02\x04\x20\x06\x6b\x22\x04\x36\x02\x04\x0b\x20\x03\x28\x02\x00\x21\x06\x02\x40\x20\x04\x20\x02\x20\x04\x20\x02\x49\x1b\x22\x04\x45\x0d\x00\x20\x06\x20\x01\x20\x04\x10\x70\x1a\x20\x03\x20\x03\x28\x02\x00\x20\x04\x6a\x22\x06\x36\x02\x00\x20\x03\x20\x03\x28\x02\x04\x20\x04\x6b\x36\x02\x04\x0b\x20\x06\x41\x00\x3a\x00\x00\x20\x00\x20\x00\x28\x02\x28\x22\x03\x36\x02\x18\x20\x00\x20\x03\x36\x02\x14\x20\x02\x0b\xc0\x02\x01\x03\x7f\x02\x40\x20\x00\x0d\x00\x41\x00\x21\x01\x02\x40\x41\x00\x28\x02\xa8\xd1\x05\x45\x0d\x00\x41\x00\x28\x02\xa8\xd1\x05\x10\x50\x21\x01\x0b\x02\x40\x41\x00\x28\x02\xa0\xd2\x05\x45\x0d\x00\x41\x00\x28\x02\xa0\xd2\x05\x10\x50\x20\x01\x72\x21\x01\x0b\x02\x40\x10\x68\x28\x02\x00\x22\x00\x45\x0d\x00\x03\x40\x02\x40\x20\x00\x28\x02\x14\x20\x00\x28\x02\x18\x46\x0d\x00\x20\x00\x41\x00\x41\x00\x20\x00\x28\x02\x20\x11\x01\x00\x1a\x02\x40\x02\x40\x20\x00\x28\x02\x14\x0d\x00\x41\x7f\x21\x02\x0c\x01\x0b\x02\x40\x20\x00\x28\x02\x04\x22\x02\x20\x00\x28\x02\x08\x22\x03\x46\x0d\x00\x20\x00\x20\x02\x20\x03\x6b\xac\x41\x01\x20\x00\x28\x02\x24\x11\x0e\x00\x1a\x0b\x41\x00\x21\x02\x20\x00\x41\x00\x36\x02\x18\x20\x00\x42\x00\x37\x03\x10\x20\x00\x42\x00\x37\x02\x04\x0b\x20\x02\x20\x01\x72\x21\x01\x0b\x20\x00\x28\x02\x34\x22\x00\x0d\x00\x0b\x0b\x10\x69\x20\x01\x0f\x0b\x02\x40\x20\x00\x28\x02\x14\x20\x00\x28\x02\x18\x46\x0d\x00\x20\x00\x41\x00\x41\x00\x20\x00\x28\x02\x20\x11\x01\x00\x1a\x20\x00\x28\x02\x14\x0d\x00\x41\x7f\x0f\x0b\x02\x40\x20\x00\x28\x02\x04\x22\x01\x20\x00\x28\x02\x08\x22\x02\x46\x0d\x00\x20\x00\x20\x01\x20\x02\x6b\xac\x41\x01\x20\x00\x28\x02\x24\x11\x0e\x00\x1a\x0b\x20\x00\x41\x00\x36\x02\x18\x20\x00\x42\x00\x37\x03\x10\x20\x00\x42\x00\x37\x02\x04\x41\x00\x0b\x29\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x20\x02\x20\x01\x36\x02\x0c\x41\xb8\xd0\x05\x20\x00\x20\x01\x10\x53\x21\x01\x20\x02\x41\x10\x6a\x24\x00\x20\x01\x0b\x97\x01\x01\x04\x7f\x41\x00\x21\x01\x02\x40\x41\x00\x28\x02\xbc\xd6\x05\x22\x02\x0d\x00\x41\xa4\xd6\x05\x21\x02\x41\x00\x41\xa4\xd6\x05\x36\x02\xbc\xd6\x05\x0b\x02\x40\x02\x40\x02\x40\x03\x40\x20\x01\x41\xc0\x08\x6a\x2d\x00\x00\x20\x00\x46\x0d\x01\x41\xcd\x00\x21\x03\x20\x01\x41\x01\x6a\x22\x01\x41\xcd\x00\x47\x0d\x00\x0c\x02\x0b\x00\x0b\x20\x01\x21\x03\x20\x01\x0d\x00\x41\x90\x09\x21\x04\x0c\x01\x0b\x41\x90\x09\x21\x01\x03\x40\x20\x01\x2d\x00\x00\x21\x00\x20\x01\x41\x01\x6a\x22\x04\x21\x01\x20\x00\x0d\x00\x20\x04\x21\x01\x20\x03\x41\x7f\x6a\x22\x03\x0d\x00\x0b\x0b\x20\x04\x20\x02\x28\x02\x14\x10\x7b\x0b\xf7\x02\x01\x03\x7f\x23\x00\x41\xd0\x01\x6b\x22\x03\x24\x00\x20\x03\x20\x02\x36\x02\xcc\x01\x20\x03\x41\xa0\x01\x6a\x41\x20\x6a\x42\x00\x37\x03\x00\x20\x03\x41\xb8\x01\x6a\x42\x00\x37\x03\x00\x20\x03\x41\xb0\x01\x6a\x42\x00\x37\x03\x00\x20\x03\x42\x00\x37\x03\xa8\x01\x20\x03\x42\x00\x37\x03\xa0\x01\x20\x03\x20\x02\x36\x02\xc8\x01\x02\x40\x02\x40\x41\x00\x20\x01\x20\x03\x41\xc8\x01\x6a\x20\x03\x41\xd0\x00\x6a\x20\x03\x41\xa0\x01\x6a\x10\x54\x41\x00\x4e\x0d\x00\x41\x7f\x21\x00\x0c\x01\x0b\x20\x00\x28\x02\x00\x21\x04\x02\x40\x20\x00\x28\x02\x3c\x41\x00\x4a\x0d\x00\x20\x00\x20\x04\x41\x5f\x71\x36\x02\x00\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x28\x02\x2c\x0d\x00\x20\x00\x41\xd0\x00\x36\x02\x2c\x20\x00\x41\x00\x36\x02\x18\x20\x00\x42\x00\x37\x03\x10\x20\x00\x28\x02\x28\x21\x05\x20\x00\x20\x03\x36\x02\x28\x0c\x01\x0b\x41\x00\x21\x05\x20\x00\x28\x02\x10\x0d\x01\x0b\x41\x7f\x21\x02\x20\x00\x10\x59\x0d\x01\x0b\x20\x00\x20\x01\x20\x03\x41\xc8\x01\x6a\x20\x03\x41\xd0\x00\x6a\x20\x03\x41\xa0\x01\x6a\x10\x54\x21\x02\x0b\x20\x04\x41\x20\x71\x21\x01\x02\x40\x20\x05\x45\x0d\x00\x20\x00\x41\x00\x41\x00\x20\x00\x28\x02\x20\x11\x01\x00\x1a\x20\x00\x41\x00\x36\x02\x2c\x20\x00\x20\x05\x36\x02\x28\x20\x00\x41\x00\x36\x02\x18\x20\x00\x41\x00\x36\x02\x10\x20\x00\x28\x02\x14\x21\x05\x20\x00\x41\x00\x36\x02\x14\x20\x02\x41\x7f\x20\x05\x1b\x21\x02\x0b\x20\x00\x20\x00\x28\x02\x00\x22\x05\x20\x01\x72\x36\x02\x00\x41\x7f\x20\x02\x20\x05\x41\x20\x71\x1b\x21\x00\x0b\x20\x03\x41\xd0\x01\x6a\x24\x00\x20\x00\x0b\xd5\x49\x03\x1f\x7f\x02\x7e\x02\x7c\x23\x00\x41\xf0\x06\x6b\x22\x05\x24\x00\x20\x05\x41\xd0\x02\x6a\x41\x08\x72\x21\x06\x20\x05\x41\x37\x6a\x21\x07\x41\x7e\x20\x05\x41\xd0\x02\x6a\x6b\x21\x08\x20\x05\x41\xd0\x02\x6a\x41\x09\x72\x21\x09\x20\x05\x41\x90\x05\x6a\x21\x0a\x20\x05\x41\xc4\x02\x6a\x41\x0c\x6a\x21\x0b\x41\x00\x20\x05\x41\xd0\x02\x6a\x6b\x21\x0c\x20\x05\x41\x38\x6a\x21\x0d\x41\x00\x21\x0e\x41\x00\x21\x0f\x41\x00\x21\x10\x02\x40\x02\x40\x02\x40\x03\x40\x20\x01\x21\x11\x20\x10\x41\xff\xff\xff\xff\x07\x20\x0f\x6b\x4a\x0d\x01\x20\x10\x20\x0f\x6a\x21\x0f\x02\x40\x02\x40\x02\x40\x02\x40\x20\x11\x2d\x00\x00\x22\x10\x45\x0d\x00\x20\x11\x21\x01\x03\x40\x02\x40\x02\x40\x02\x40\x20\x10\x41\xff\x01\x71\x22\x10\x45\x0d\x00\x20\x10\x41\x25\x47\x0d\x02\x20\x01\x21\x12\x20\x01\x21\x10\x03\x40\x02\x40\x20\x10\x41\x01\x6a\x2d\x00\x00\x41\x25\x46\x0d\x00\x20\x10\x21\x01\x0c\x03\x0b\x20\x12\x41\x01\x6a\x21\x12\x20\x10\x2d\x00\x02\x21\x13\x20\x10\x41\x02\x6a\x22\x01\x21\x10\x20\x13\x41\x25\x46\x0d\x00\x0c\x02\x0b\x00\x0b\x20\x01\x21\x12\x0b\x20\x12\x20\x11\x6b\x22\x10\x41\xff\xff\xff\xff\x07\x20\x0f\x6b\x22\x13\x4a\x0d\x07\x02\x40\x20\x00\x45\x0d\x00\x20\x00\x2d\x00\x00\x41\x20\x71\x0d\x00\x20\x11\x20\x10\x20\x00\x10\x63\x1a\x0b\x20\x10\x0d\x06\x20\x01\x41\x01\x6a\x21\x10\x02\x40\x02\x40\x20\x01\x2c\x00\x01\x22\x14\x41\x50\x6a\x22\x15\x41\x09\x4d\x0d\x00\x41\x7f\x21\x16\x0c\x01\x0b\x20\x01\x41\x03\x6a\x20\x10\x20\x01\x2d\x00\x02\x41\x24\x46\x22\x12\x1b\x21\x10\x20\x15\x41\x7f\x20\x12\x1b\x21\x16\x41\x01\x20\x0e\x20\x12\x1b\x21\x0e\x20\x01\x41\x03\x41\x01\x20\x12\x1b\x6a\x2c\x00\x00\x21\x14\x0b\x41\x00\x21\x12\x02\x40\x02\x40\x20\x14\x41\x60\x6a\x22\x01\x41\x1f\x4d\x0d\x00\x20\x10\x21\x01\x0c\x01\x0b\x02\x40\x41\x01\x20\x01\x74\x22\x15\x41\x89\xd1\x04\x71\x0d\x00\x20\x10\x21\x01\x0c\x01\x0b\x41\x00\x21\x12\x03\x40\x20\x10\x41\x01\x6a\x21\x01\x20\x15\x20\x12\x72\x21\x12\x20\x10\x2c\x00\x01\x22\x14\x41\x60\x6a\x22\x15\x41\x1f\x4b\x0d\x01\x20\x01\x21\x10\x41\x01\x20\x15\x74\x22\x15\x41\x89\xd1\x04\x71\x0d\x00\x0b\x0b\x02\x40\x02\x40\x20\x14\x41\x2a\x47\x0d\x00\x02\x40\x02\x40\x20\x01\x2c\x00\x01\x41\x50\x6a\x22\x10\x41\x09\x4b\x0d\x00\x20\x01\x2d\x00\x02\x41\x24\x47\x0d\x00\x20\x04\x20\x10\x41\x02\x74\x6a\x41\x0a\x36\x02\x00\x20\x01\x41\x03\x6a\x21\x17\x20\x01\x2c\x00\x01\x41\x03\x74\x20\x03\x6a\x41\x80\x7d\x6a\x28\x02\x00\x21\x18\x41\x01\x21\x0e\x0c\x01\x0b\x20\x0e\x0d\x06\x20\x01\x41\x01\x6a\x21\x17\x02\x40\x20\x00\x0d\x00\x41\x00\x21\x0e\x41\x00\x21\x18\x0c\x03\x0b\x20\x02\x20\x02\x28\x02\x00\x22\x01\x41\x04\x6a\x36\x02\x00\x20\x01\x28\x02\x00\x21\x18\x41\x00\x21\x0e\x0b\x20\x18\x41\x7f\x4a\x0d\x01\x41\x00\x20\x18\x6b\x21\x18\x20\x12\x41\x80\xc0\x00\x72\x21\x12\x0c\x01\x0b\x41\x00\x21\x18\x02\x40\x20\x14\x41\x50\x6a\x22\x15\x41\x09\x4d\x0d\x00\x20\x01\x21\x17\x0c\x01\x0b\x41\x00\x21\x10\x03\x40\x41\x7f\x21\x18\x02\x40\x20\x10\x41\xcc\x99\xb3\xe6\x00\x4b\x0d\x00\x41\x7f\x20\x10\x41\x0a\x6c\x22\x10\x20\x15\x6a\x20\x15\x41\xff\xff\xff\xff\x07\x20\x10\x6b\x4a\x1b\x21\x18\x0b\x20\x01\x2c\x00\x01\x21\x15\x20\x01\x41\x01\x6a\x22\x17\x21\x01\x20\x18\x21\x10\x20\x15\x41\x50\x6a\x22\x15\x41\x0a\x49\x0d\x00\x0b\x20\x18\x41\x00\x48\x0d\x08\x0b\x41\x00\x21\x10\x41\x7f\x21\x14\x02\x40\x02\x40\x20\x17\x2d\x00\x00\x41\x2e\x46\x0d\x00\x20\x17\x21\x01\x41\x00\x21\x19\x0c\x01\x0b\x02\x40\x20\x17\x2c\x00\x01\x22\x15\x41\x2a\x47\x0d\x00\x02\x40\x02\x40\x20\x17\x2c\x00\x02\x41\x50\x6a\x22\x01\x41\x09\x4b\x0d\x00\x20\x17\x2d\x00\x03\x41\x24\x47\x0d\x00\x20\x04\x20\x01\x41\x02\x74\x6a\x41\x0a\x36\x02\x00\x20\x17\x41\x04\x6a\x21\x01\x20\x17\x2c\x00\x02\x41\x03\x74\x20\x03\x6a\x41\x80\x7d\x6a\x28\x02\x00\x21\x14\x0c\x01\x0b\x20\x0e\x0d\x06\x20\x17\x41\x02\x6a\x21\x01\x02\x40\x20\x00\x0d\x00\x41\x00\x21\x14\x0c\x01\x0b\x20\x02\x20\x02\x28\x02\x00\x22\x15\x41\x04\x6a\x36\x02\x00\x20\x15\x28\x02\x00\x21\x14\x0b\x20\x14\x41\x7f\x73\x41\x1f\x76\x21\x19\x0c\x01\x0b\x20\x17\x41\x01\x6a\x21\x01\x02\x40\x20\x15\x41\x50\x6a\x22\x1a\x41\x09\x4d\x0d\x00\x41\x01\x21\x19\x41\x00\x21\x14\x0c\x01\x0b\x41\x00\x21\x17\x20\x01\x21\x15\x03\x40\x41\x7f\x21\x14\x02\x40\x20\x17\x41\xcc\x99\xb3\xe6\x00\x4b\x0d\x00\x41\x7f\x20\x17\x41\x0a\x6c\x22\x01\x20\x1a\x6a\x20\x1a\x41\xff\xff\xff\xff\x07\x20\x01\x6b\x4a\x1b\x21\x14\x0b\x41\x01\x21\x19\x20\x15\x2c\x00\x01\x21\x1a\x20\x15\x41\x01\x6a\x22\x01\x21\x15\x20\x14\x21\x17\x20\x1a\x41\x50\x6a\x22\x1a\x41\x0a\x49\x0d\x00\x0b\x0b\x03\x40\x20\x10\x21\x15\x20\x01\x2c\x00\x00\x41\xbf\x7f\x6a\x22\x10\x41\x39\x4b\x0d\x04\x20\x01\x41\x01\x6a\x21\x01\x20\x15\x41\x3a\x6c\x20\x10\x6a\x41\xd0\x15\x6a\x2d\x00\x00\x22\x10\x41\x7f\x6a\x41\x08\x49\x0d\x00\x0b\x20\x10\x45\x0d\x03\x02\x40\x02\x40\x02\x40\x02\x40\x20\x10\x41\x1b\x47\x0d\x00\x20\x16\x41\x7f\x4c\x0d\x01\x0c\x07\x0b\x20\x16\x41\x00\x48\x0d\x01\x20\x04\x20\x16\x41\x02\x74\x6a\x20\x10\x36\x02\x00\x20\x05\x20\x03\x20\x16\x41\x03\x74\x6a\x29\x03\x00\x37\x03\x38\x0b\x41\x00\x21\x10\x20\x00\x45\x0d\x08\x0c\x01\x0b\x02\x40\x20\x00\x0d\x00\x41\x00\x21\x0f\x0c\x0b\x0b\x20\x05\x41\x38\x6a\x20\x10\x20\x02\x10\x55\x0b\x20\x12\x41\xff\xff\x7b\x71\x22\x17\x20\x12\x20\x12\x41\x80\xc0\x00\x71\x1b\x21\x16\x02\x40\x02\x40\x02\x40\x20\x01\x41\x7f\x6a\x2c\x00\x00\x22\x10\x41\x5f\x71\x20\x10\x20\x10\x41\x0f\x71\x41\x03\x46\x1b\x20\x10\x20\x15\x1b\x22\x1b\x41\xbf\x7f\x6a\x22\x10\x41\x37\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x10\x0e\x38\x10\x11\x0d\x11\x10\x10\x10\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x0c\x11\x11\x11\x11\x03\x11\x11\x11\x11\x11\x11\x11\x11\x10\x11\x08\x05\x10\x10\x10\x11\x05\x11\x11\x11\x09\x01\x04\x02\x11\x11\x0a\x11\x00\x11\x11\x03\x10\x0b\x41\x00\x21\x1c\x41\xb6\x15\x21\x1d\x20\x05\x29\x03\x38\x21\x24\x0c\x05\x0b\x41\x00\x21\x10\x20\x15\x41\xff\x01\x71\x22\x12\x41\x07\x4b\x0d\x18\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x12\x0e\x08\x00\x01\x02\x03\x04\x1f\x05\x06\x00\x0b\x20\x05\x28\x02\x38\x20\x0f\x36\x02\x00\x0c\x1e\x0b\x20\x05\x28\x02\x38\x20\x0f\x36\x02\x00\x0c\x1d\x0b\x20\x05\x28\x02\x38\x20\x0f\xac\x37\x03\x00\x0c\x1c\x0b\x20\x05\x28\x02\x38\x20\x0f\x3b\x01\x00\x0c\x1b\x0b\x20\x05\x28\x02\x38\x20\x0f\x3a\x00\x00\x0c\x1a\x0b\x20\x05\x28\x02\x38\x20\x0f\x36\x02\x00\x0c\x19\x0b\x20\x05\x28\x02\x38\x20\x0f\xac\x37\x03\x00\x0c\x18\x0b\x20\x14\x41\x08\x20\x14\x41\x08\x4b\x1b\x21\x14\x20\x16\x41\x08\x72\x21\x16\x41\xf8\x00\x21\x1b\x0b\x41\x00\x21\x1c\x41\xb6\x15\x21\x1d\x02\x40\x20\x05\x29\x03\x38\x22\x24\x50\x45\x0d\x00\x20\x0d\x21\x11\x0c\x04\x0b\x20\x1b\x41\x20\x71\x21\x10\x20\x0d\x21\x11\x03\x40\x20\x11\x41\x7f\x6a\x22\x11\x20\x24\xa7\x41\x0f\x71\x41\xb0\x1a\x6a\x2d\x00\x00\x20\x10\x72\x3a\x00\x00\x20\x24\x42\x04\x88\x22\x24\x42\x00\x52\x0d\x00\x0b\x20\x16\x41\x08\x71\x45\x0d\x03\x20\x05\x29\x03\x38\x50\x0d\x03\x20\x1b\x41\x04\x75\x41\xb6\x15\x6a\x21\x1d\x41\x02\x21\x1c\x0c\x03\x0b\x20\x0d\x21\x11\x02\x40\x20\x05\x29\x03\x38\x22\x24\x50\x0d\x00\x20\x0d\x21\x11\x03\x40\x20\x11\x41\x7f\x6a\x22\x11\x20\x24\xa7\x41\x07\x71\x41\x30\x72\x3a\x00\x00\x20\x24\x42\x03\x88\x22\x24\x42\x00\x52\x0d\x00\x0b\x0b\x41\x00\x21\x1c\x41\xb6\x15\x21\x1d\x20\x16\x41\x08\x71\x45\x0d\x02\x20\x14\x20\x0d\x20\x11\x6b\x22\x10\x41\x01\x6a\x20\x14\x20\x10\x4a\x1b\x21\x14\x0c\x02\x0b\x02\x40\x20\x05\x29\x03\x38\x22\x24\x42\x7f\x55\x0d\x00\x20\x05\x42\x00\x20\x24\x7d\x22\x24\x37\x03\x38\x41\x01\x21\x1c\x41\xb6\x15\x21\x1d\x0c\x01\x0b\x02\x40\x20\x16\x41\x80\x10\x71\x45\x0d\x00\x41\x01\x21\x1c\x41\xb7\x15\x21\x1d\x0c\x01\x0b\x41\xb8\x15\x41\xb6\x15\x20\x16\x41\x01\x71\x22\x1c\x1b\x21\x1d\x0b\x02\x40\x02\x40\x20\x24\x42\x80\x80\x80\x80\x10\x5a\x0d\x00\x20\x24\x21\x25\x20\x0d\x21\x11\x0c\x01\x0b\x20\x0d\x21\x11\x03\x40\x20\x11\x41\x7f\x6a\x22\x11\x20\x24\x20\x24\x42\x0a\x80\x22\x25\x42\x0a\x7e\x7d\xa7\x41\x30\x72\x3a\x00\x00\x20\x24\x42\xff\xff\xff\xff\x9f\x01\x56\x21\x10\x20\x25\x21\x24\x20\x10\x0d\x00\x0b\x0b\x20\x25\xa7\x22\x10\x45\x0d\x00\x03\x40\x20\x11\x41\x7f\x6a\x22\x11\x20\x10\x20\x10\x41\x0a\x6e\x22\x12\x41\x0a\x6c\x6b\x41\x30\x72\x3a\x00\x00\x20\x10\x41\x09\x4b\x21\x15\x20\x12\x21\x10\x20\x15\x0d\x00\x0b\x0b\x02\x40\x20\x19\x45\x0d\x00\x20\x14\x41\x00\x48\x0d\x14\x0b\x20\x16\x41\xff\xff\x7b\x71\x20\x16\x20\x19\x1b\x21\x16\x20\x05\x29\x03\x38\x21\x24\x02\x40\x20\x14\x0d\x00\x20\x24\x50\x45\x0d\x00\x20\x0d\x21\x11\x20\x0d\x21\x10\x41\x00\x21\x14\x0c\x12\x0b\x20\x14\x20\x0d\x20\x11\x6b\x20\x24\x50\x6a\x22\x10\x20\x14\x20\x10\x4a\x1b\x21\x14\x0c\x0a\x0b\x20\x05\x20\x05\x29\x03\x38\x3c\x00\x37\x41\x00\x21\x1c\x41\xb6\x15\x21\x1d\x41\x01\x21\x14\x20\x07\x21\x11\x20\x0d\x21\x10\x20\x17\x21\x16\x0c\x10\x0b\x41\x00\x28\x02\xa0\xd6\x05\x10\x52\x21\x11\x0c\x01\x0b\x20\x05\x28\x02\x38\x22\x10\x41\xc0\x15\x20\x10\x1b\x21\x11\x0b\x41\x00\x21\x1c\x20\x11\x20\x11\x41\xff\xff\xff\xff\x07\x20\x14\x20\x14\x41\x00\x48\x1b\x10\x6c\x22\x12\x6a\x21\x10\x41\xb6\x15\x21\x1d\x20\x14\x41\x7f\x4c\x0d\x07\x20\x17\x21\x16\x20\x12\x21\x14\x0c\x0d\x0b\x20\x05\x28\x02\x38\x21\x11\x20\x14\x0d\x01\x41\x00\x21\x10\x0c\x02\x0b\x20\x05\x41\x00\x36\x02\x0c\x20\x05\x20\x05\x29\x03\x38\x3e\x02\x08\x20\x05\x20\x05\x41\x08\x6a\x36\x02\x38\x41\x7f\x21\x14\x20\x05\x41\x08\x6a\x21\x11\x0b\x41\x00\x21\x10\x20\x11\x21\x12\x02\x40\x03\x40\x20\x12\x28\x02\x00\x22\x13\x45\x0d\x01\x02\x40\x20\x05\x41\x04\x6a\x20\x13\x10\x84\x01\x22\x13\x41\x00\x48\x22\x15\x0d\x00\x20\x13\x20\x14\x20\x10\x6b\x4b\x0d\x00\x20\x12\x41\x04\x6a\x21\x12\x20\x14\x20\x13\x20\x10\x6a\x22\x10\x4b\x0d\x01\x0c\x02\x0b\x0b\x20\x15\x0d\x0e\x0b\x20\x10\x41\x00\x48\x0d\x0c\x0b\x02\x40\x20\x16\x41\x80\xc0\x04\x71\x22\x17\x0d\x00\x20\x18\x20\x10\x4c\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x20\x20\x18\x20\x10\x6b\x22\x1a\x41\x80\x02\x20\x1a\x41\x80\x02\x49\x22\x12\x1b\x10\x74\x1a\x20\x00\x28\x02\x00\x22\x15\x41\x20\x71\x21\x13\x02\x40\x02\x40\x20\x12\x0d\x00\x20\x13\x45\x21\x12\x20\x1a\x21\x13\x03\x40\x02\x40\x20\x12\x41\x01\x71\x45\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x80\x02\x20\x00\x10\x63\x1a\x20\x00\x28\x02\x00\x21\x15\x0b\x20\x15\x41\x20\x71\x22\x14\x45\x21\x12\x20\x13\x41\x80\x7e\x6a\x22\x13\x41\xff\x01\x4b\x0d\x00\x0b\x20\x14\x0d\x02\x20\x1a\x41\xff\x01\x71\x21\x1a\x0c\x01\x0b\x20\x13\x0d\x01\x0b\x20\x05\x41\xc0\x00\x6a\x20\x1a\x20\x00\x10\x63\x1a\x0b\x02\x40\x20\x10\x45\x0d\x00\x41\x00\x21\x12\x03\x40\x20\x11\x28\x02\x00\x22\x13\x45\x0d\x01\x20\x05\x41\x04\x6a\x20\x13\x10\x84\x01\x22\x13\x20\x12\x6a\x22\x12\x20\x10\x4b\x0d\x01\x02\x40\x20\x00\x2d\x00\x00\x41\x20\x71\x0d\x00\x20\x05\x41\x04\x6a\x20\x13\x20\x00\x10\x63\x1a\x0b\x20\x11\x41\x04\x6a\x21\x11\x20\x12\x20\x10\x49\x0d\x00\x0b\x0b\x02\x40\x20\x17\x41\x80\xc0\x00\x47\x0d\x00\x20\x18\x20\x10\x4c\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x20\x20\x18\x20\x10\x6b\x22\x14\x41\x80\x02\x20\x14\x41\x80\x02\x49\x22\x12\x1b\x10\x74\x1a\x20\x00\x28\x02\x00\x22\x11\x41\x20\x71\x21\x13\x02\x40\x02\x40\x20\x12\x0d\x00\x20\x13\x45\x21\x12\x20\x14\x21\x13\x03\x40\x02\x40\x20\x12\x41\x01\x71\x45\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x80\x02\x20\x00\x10\x63\x1a\x20\x00\x28\x02\x00\x21\x11\x0b\x20\x11\x41\x20\x71\x22\x15\x45\x21\x12\x20\x13\x41\x80\x7e\x6a\x22\x13\x41\xff\x01\x4b\x0d\x00\x0b\x20\x15\x0d\x02\x20\x14\x41\xff\x01\x71\x21\x14\x0c\x01\x0b\x20\x13\x0d\x01\x0b\x20\x05\x41\xc0\x00\x6a\x20\x14\x20\x00\x10\x63\x1a\x0b\x20\x18\x20\x10\x20\x18\x20\x10\x4a\x1b\x21\x10\x0c\x0a\x0b\x02\x40\x20\x14\x41\x7f\x4a\x0d\x00\x20\x19\x0d\x0b\x0b\x20\x05\x2b\x03\x38\x21\x26\x20\x05\x41\x00\x36\x02\xec\x02\x02\x40\x02\x40\x20\x26\xbd\x42\x7f\x55\x0d\x00\x20\x26\x9a\x21\x26\x41\x01\x21\x1e\x41\xc0\x1a\x21\x1f\x0c\x01\x0b\x02\x40\x20\x16\x41\x80\x10\x71\x45\x0d\x00\x41\x01\x21\x1e\x41\xc3\x1a\x21\x1f\x0c\x01\x0b\x41\xc6\x1a\x41\xc1\x1a\x20\x16\x41\x01\x71\x22\x1e\x1b\x21\x1f\x0b\x02\x40\x02\x40\x20\x26\x99\x22\x27\x44\x00\x00\x00\x00\x00\x00\xf0\x7f\x62\x20\x27\x20\x27\x61\x71\x0d\x00\x20\x1e\x41\x03\x6a\x21\x15\x02\x40\x20\x16\x41\x80\xc0\x00\x71\x0d\x00\x20\x18\x20\x15\x4c\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x20\x20\x18\x20\x15\x6b\x22\x14\x41\x80\x02\x20\x14\x41\x80\x02\x49\x22\x10\x1b\x10\x74\x1a\x20\x00\x28\x02\x00\x22\x13\x41\x20\x71\x21\x12\x02\x40\x02\x40\x20\x10\x0d\x00\x20\x12\x45\x21\x10\x20\x14\x21\x12\x03\x40\x02\x40\x20\x10\x41\x01\x71\x45\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x80\x02\x20\x00\x10\x63\x1a\x20\x00\x28\x02\x00\x21\x13\x0b\x20\x13\x41\x20\x71\x22\x11\x45\x21\x10\x20\x12\x41\x80\x7e\x6a\x22\x12\x41\xff\x01\x4b\x0d\x00\x0b\x20\x11\x0d\x02\x20\x14\x41\xff\x01\x71\x21\x14\x0c\x01\x0b\x20\x12\x0d\x01\x0b\x20\x05\x41\xc0\x00\x6a\x20\x14\x20\x00\x10\x63\x1a\x0b\x02\x40\x20\x00\x28\x02\x00\x22\x10\x41\x20\x71\x0d\x00\x20\x1f\x20\x1e\x20\x00\x10\x63\x1a\x20\x00\x28\x02\x00\x21\x10\x0b\x02\x40\x20\x10\x41\x20\x71\x0d\x00\x41\xdb\x1a\x41\xdf\x1a\x20\x1b\x41\x20\x71\x41\x05\x76\x22\x10\x1b\x41\xd3\x1a\x41\xd7\x1a\x20\x10\x1b\x20\x26\x20\x26\x62\x1b\x41\x03\x20\x00\x10\x63\x1a\x0b\x02\x40\x20\x16\x41\x80\xc0\x04\x71\x41\x80\xc0\x00\x47\x0d\x00\x20\x18\x20\x15\x4c\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x20\x20\x18\x20\x15\x6b\x22\x14\x41\x80\x02\x20\x14\x41\x80\x02\x49\x22\x10\x1b\x10\x74\x1a\x20\x00\x28\x02\x00\x22\x13\x41\x20\x71\x21\x12\x02\x40\x02\x40\x20\x10\x0d\x00\x20\x12\x45\x21\x10\x20\x14\x21\x12\x03\x40\x02\x40\x20\x10\x41\x01\x71\x45\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x80\x02\x20\x00\x10\x63\x1a\x20\x00\x28\x02\x00\x21\x13\x0b\x20\x13\x41\x20\x71\x22\x11\x45\x21\x10\x20\x12\x41\x80\x7e\x6a\x22\x12\x41\xff\x01\x4b\x0d\x00\x0b\x20\x11\x0d\x02\x20\x14\x41\xff\x01\x71\x21\x14\x0c\x01\x0b\x20\x12\x0d\x01\x0b\x20\x05\x41\xc0\x00\x6a\x20\x14\x20\x00\x10\x63\x1a\x0b\x20\x18\x20\x15\x20\x18\x20\x15\x4a\x1b\x21\x10\x0c\x01\x0b\x02\x40\x20\x26\x20\x05\x41\xec\x02\x6a\x10\x93\x01\x22\x26\x20\x26\xa0\x22\x26\x44\x00\x00\x00\x00\x00\x00\x00\x00\x61\x0d\x00\x20\x05\x20\x05\x28\x02\xec\x02\x41\x7f\x6a\x36\x02\xec\x02\x0b\x02\x40\x20\x1b\x41\x20\x72\x22\x1d\x41\xe1\x00\x47\x0d\x00\x20\x1f\x41\x09\x6a\x20\x1f\x20\x1b\x41\x20\x71\x22\x15\x1b\x21\x1c\x02\x40\x20\x14\x41\x0b\x4b\x0d\x00\x41\x0c\x20\x14\x6b\x45\x0d\x00\x20\x14\x41\x74\x6a\x21\x10\x44\x00\x00\x00\x00\x00\x00\x30\x40\x21\x27\x03\x40\x20\x27\x44\x00\x00\x00\x00\x00\x00\x30\x40\xa2\x21\x27\x20\x10\x41\x01\x6a\x22\x12\x20\x10\x4f\x21\x13\x20\x12\x21\x10\x20\x13\x0d\x00\x0b\x02\x40\x20\x1c\x2d\x00\x00\x41\x2d\x47\x0d\x00\x20\x27\x20\x26\x9a\x20\x27\xa1\xa0\x9a\x21\x26\x0c\x01\x0b\x20\x26\x20\x27\xa0\x20\x27\xa1\x21\x26\x0b\x20\x0b\x21\x13\x02\x40\x02\x40\x20\x05\x28\x02\xec\x02\x22\x17\x20\x17\x41\x1f\x75\x22\x10\x6a\x20\x10\x73\x22\x10\x45\x0d\x00\x41\x00\x21\x12\x03\x40\x20\x05\x41\xc4\x02\x6a\x20\x12\x6a\x41\x0b\x6a\x20\x10\x20\x10\x41\x0a\x6e\x22\x13\x41\x0a\x6c\x6b\x41\x30\x72\x3a\x00\x00\x20\x12\x41\x7f\x6a\x21\x12\x20\x10\x41\x09\x4b\x21\x11\x20\x13\x21\x10\x20\x11\x0d\x00\x0b\x20\x05\x41\xc4\x02\x6a\x20\x12\x6a\x41\x0c\x6a\x21\x13\x20\x12\x0d\x01\x0b\x20\x13\x41\x7f\x6a\x22\x13\x41\x30\x3a\x00\x00\x0b\x20\x1e\x41\x02\x72\x21\x1a\x20\x13\x41\x7e\x6a\x22\x19\x20\x1b\x41\x0f\x6a\x3a\x00\x00\x20\x13\x41\x7f\x6a\x41\x2d\x41\x2b\x20\x17\x41\x00\x48\x1b\x3a\x00\x00\x20\x16\x41\x08\x71\x21\x13\x20\x05\x41\xd0\x02\x6a\x21\x12\x03\x40\x20\x12\x21\x10\x02\x40\x02\x40\x20\x26\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x26\xaa\x21\x12\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x12\x0b\x20\x10\x20\x12\x41\xb0\x1a\x6a\x2d\x00\x00\x20\x15\x72\x3a\x00\x00\x20\x26\x20\x12\xb7\xa1\x44\x00\x00\x00\x00\x00\x00\x30\x40\xa2\x21\x26\x02\x40\x20\x10\x41\x01\x6a\x22\x12\x20\x05\x41\xd0\x02\x6a\x6b\x41\x01\x47\x0d\x00\x02\x40\x20\x13\x0d\x00\x20\x14\x41\x00\x4a\x0d\x00\x20\x26\x44\x00\x00\x00\x00\x00\x00\x00\x00\x61\x0d\x01\x0b\x20\x10\x41\x2e\x3a\x00\x01\x20\x10\x41\x02\x6a\x21\x12\x0b\x20\x26\x44\x00\x00\x00\x00\x00\x00\x00\x00\x62\x0d\x00\x0b\x41\x7f\x21\x10\x41\xfd\xff\xff\xff\x07\x20\x1a\x20\x0b\x20\x19\x6b\x22\x20\x6a\x22\x13\x6b\x20\x14\x48\x0d\x01\x20\x13\x20\x14\x41\x02\x6a\x20\x12\x20\x05\x41\xd0\x02\x6a\x6b\x22\x17\x20\x08\x20\x12\x6a\x20\x14\x48\x1b\x20\x17\x20\x14\x1b\x22\x14\x6a\x21\x15\x02\x40\x20\x16\x41\x80\xc0\x04\x71\x22\x16\x0d\x00\x20\x18\x20\x15\x4c\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x20\x20\x18\x20\x15\x6b\x22\x1b\x41\x80\x02\x20\x1b\x41\x80\x02\x49\x22\x10\x1b\x10\x74\x1a\x20\x00\x28\x02\x00\x22\x13\x41\x20\x71\x21\x12\x02\x40\x02\x40\x20\x10\x0d\x00\x20\x12\x45\x21\x10\x20\x1b\x21\x12\x03\x40\x02\x40\x20\x10\x41\x01\x71\x45\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x80\x02\x20\x00\x10\x63\x1a\x20\x00\x28\x02\x00\x21\x13\x0b\x20\x13\x41\x20\x71\x22\x11\x45\x21\x10\x20\x12\x41\x80\x7e\x6a\x22\x12\x41\xff\x01\x4b\x0d\x00\x0b\x20\x11\x0d\x02\x20\x1b\x41\xff\x01\x71\x21\x1b\x0c\x01\x0b\x20\x12\x0d\x01\x0b\x20\x05\x41\xc0\x00\x6a\x20\x1b\x20\x00\x10\x63\x1a\x0b\x02\x40\x20\x00\x2d\x00\x00\x41\x20\x71\x0d\x00\x20\x1c\x20\x1a\x20\x00\x10\x63\x1a\x0b\x02\x40\x20\x16\x41\x80\x80\x04\x47\x0d\x00\x20\x18\x20\x15\x4c\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x30\x20\x18\x20\x15\x6b\x22\x1a\x41\x80\x02\x20\x1a\x41\x80\x02\x49\x22\x10\x1b\x10\x74\x1a\x20\x00\x28\x02\x00\x22\x13\x41\x20\x71\x21\x12\x02\x40\x02\x40\x20\x10\x0d\x00\x20\x12\x45\x21\x10\x20\x1a\x21\x12\x03\x40\x02\x40\x20\x10\x41\x01\x71\x45\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x80\x02\x20\x00\x10\x63\x1a\x20\x00\x28\x02\x00\x21\x13\x0b\x20\x13\x41\x20\x71\x22\x11\x45\x21\x10\x20\x12\x41\x80\x7e\x6a\x22\x12\x41\xff\x01\x4b\x0d\x00\x0b\x20\x11\x0d\x02\x20\x1a\x41\xff\x01\x71\x21\x1a\x0c\x01\x0b\x20\x12\x0d\x01\x0b\x20\x05\x41\xc0\x00\x6a\x20\x1a\x20\x00\x10\x63\x1a\x0b\x02\x40\x20\x00\x2d\x00\x00\x41\x20\x71\x0d\x00\x20\x05\x41\xd0\x02\x6a\x20\x17\x20\x00\x10\x63\x1a\x0b\x02\x40\x20\x14\x20\x17\x6b\x22\x14\x41\x01\x48\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x30\x20\x14\x41\x80\x02\x20\x14\x41\x80\x02\x49\x22\x10\x1b\x10\x74\x1a\x20\x00\x28\x02\x00\x22\x13\x41\x20\x71\x21\x12\x02\x40\x02\x40\x20\x10\x0d\x00\x20\x12\x45\x21\x10\x20\x14\x21\x12\x03\x40\x02\x40\x20\x10\x41\x01\x71\x45\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x80\x02\x20\x00\x10\x63\x1a\x20\x00\x28\x02\x00\x21\x13\x0b\x20\x13\x41\x20\x71\x22\x11\x45\x21\x10\x20\x12\x41\x80\x7e\x6a\x22\x12\x41\xff\x01\x4b\x0d\x00\x0b\x20\x11\x0d\x02\x20\x14\x41\xff\x01\x71\x21\x14\x0c\x01\x0b\x20\x12\x0d\x01\x0b\x20\x05\x41\xc0\x00\x6a\x20\x14\x20\x00\x10\x63\x1a\x0b\x02\x40\x20\x00\x2d\x00\x00\x41\x20\x71\x0d\x00\x20\x19\x20\x20\x20\x00\x10\x63\x1a\x0b\x02\x40\x20\x16\x41\x80\xc0\x00\x47\x0d\x00\x20\x18\x20\x15\x4c\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x20\x20\x18\x20\x15\x6b\x22\x14\x41\x80\x02\x20\x14\x41\x80\x02\x49\x22\x10\x1b\x10\x74\x1a\x20\x00\x28\x02\x00\x22\x13\x41\x20\x71\x21\x12\x02\x40\x02\x40\x20\x10\x0d\x00\x20\x12\x45\x21\x10\x20\x14\x21\x12\x03\x40\x02\x40\x20\x10\x41\x01\x71\x45\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x80\x02\x20\x00\x10\x63\x1a\x20\x00\x28\x02\x00\x21\x13\x0b\x20\x13\x41\x20\x71\x22\x11\x45\x21\x10\x20\x12\x41\x80\x7e\x6a\x22\x12\x41\xff\x01\x4b\x0d\x00\x0b\x20\x11\x0d\x02\x20\x14\x41\xff\x01\x71\x21\x14\x0c\x01\x0b\x20\x12\x0d\x01\x0b\x20\x05\x41\xc0\x00\x6a\x20\x14\x20\x00\x10\x63\x1a\x0b\x20\x18\x20\x15\x20\x18\x20\x15\x4a\x1b\x21\x10\x0c\x01\x0b\x20\x14\x41\x00\x48\x21\x10\x02\x40\x02\x40\x20\x26\x44\x00\x00\x00\x00\x00\x00\x00\x00\x62\x0d\x00\x20\x05\x28\x02\xec\x02\x21\x11\x0c\x01\x0b\x20\x05\x20\x05\x28\x02\xec\x02\x41\x64\x6a\x22\x11\x36\x02\xec\x02\x20\x26\x44\x00\x00\x00\x00\x00\x00\xb0\x41\xa2\x21\x26\x0b\x41\x06\x20\x14\x20\x10\x1b\x21\x20\x20\x05\x41\xf0\x02\x6a\x20\x0a\x20\x11\x41\x00\x48\x1b\x22\x1c\x21\x13\x03\x40\x02\x40\x02\x40\x20\x26\x44\x00\x00\x00\x00\x00\x00\xf0\x41\x63\x20\x26\x44\x00\x00\x00\x00\x00\x00\x00\x00\x66\x71\x45\x0d\x00\x20\x26\xab\x21\x10\x0c\x01\x0b\x41\x00\x21\x10\x0b\x20\x13\x20\x10\x36\x02\x00\x20\x13\x41\x04\x6a\x21\x13\x20\x26\x20\x10\xb8\xa1\x44\x00\x00\x00\x00\x65\xcd\xcd\x41\xa2\x22\x26\x44\x00\x00\x00\x00\x00\x00\x00\x00\x62\x0d\x00\x0b\x02\x40\x02\x40\x20\x11\x41\x01\x4e\x0d\x00\x20\x13\x21\x10\x20\x1c\x21\x12\x0c\x01\x0b\x20\x1c\x21\x12\x03\x40\x20\x11\x41\x1d\x20\x11\x41\x1d\x48\x1b\x21\x11\x02\x40\x20\x13\x41\x7c\x6a\x22\x10\x20\x12\x49\x0d\x00\x20\x11\xad\x21\x25\x42\x00\x21\x24\x03\x40\x20\x10\x20\x10\x35\x02\x00\x20\x25\x86\x20\x24\x42\xff\xff\xff\xff\x0f\x83\x7c\x22\x24\x20\x24\x42\x80\x94\xeb\xdc\x03\x80\x22\x24\x42\x80\x94\xeb\xdc\x03\x7e\x7d\x3e\x02\x00\x20\x10\x41\x7c\x6a\x22\x10\x20\x12\x4f\x0d\x00\x0b\x20\x24\xa7\x22\x10\x45\x0d\x00\x20\x12\x41\x7c\x6a\x22\x12\x20\x10\x36\x02\x00\x0b\x02\x40\x03\x40\x20\x13\x22\x10\x20\x12\x4d\x0d\x01\x20\x10\x41\x7c\x6a\x22\x13\x28\x02\x00\x45\x0d\x00\x0b\x0b\x20\x05\x20\x05\x28\x02\xec\x02\x20\x11\x6b\x22\x11\x36\x02\xec\x02\x20\x10\x21\x13\x20\x11\x41\x00\x4a\x0d\x00\x0b\x0b\x02\x40\x20\x11\x41\x7f\x4a\x0d\x00\x20\x20\x41\x19\x6a\x41\x09\x6e\x41\x01\x6a\x21\x19\x03\x40\x41\x09\x41\x00\x20\x11\x6b\x20\x11\x41\x77\x48\x1b\x21\x14\x02\x40\x02\x40\x20\x12\x20\x10\x49\x0d\x00\x20\x12\x20\x12\x41\x04\x6a\x20\x12\x28\x02\x00\x1b\x21\x12\x0c\x01\x0b\x41\x80\x94\xeb\xdc\x03\x20\x14\x76\x21\x17\x41\x7f\x20\x14\x74\x41\x7f\x73\x21\x1a\x41\x00\x21\x11\x20\x12\x21\x13\x03\x40\x20\x13\x20\x13\x28\x02\x00\x22\x15\x20\x14\x76\x20\x11\x6a\x36\x02\x00\x20\x15\x20\x1a\x71\x20\x17\x6c\x21\x11\x20\x13\x41\x04\x6a\x22\x13\x20\x10\x49\x0d\x00\x0b\x20\x12\x20\x12\x41\x04\x6a\x20\x12\x28\x02\x00\x1b\x21\x12\x20\x11\x45\x0d\x00\x20\x10\x20\x11\x36\x02\x00\x20\x10\x41\x04\x6a\x21\x10\x0b\x20\x05\x20\x05\x28\x02\xec\x02\x20\x14\x6a\x22\x11\x36\x02\xec\x02\x20\x1c\x20\x12\x20\x1d\x41\xe6\x00\x46\x1b\x22\x13\x20\x19\x41\x02\x74\x6a\x20\x10\x20\x10\x20\x13\x6b\x41\x02\x75\x20\x19\x4a\x1b\x21\x10\x20\x11\x41\x00\x48\x0d\x00\x0b\x0b\x41\x00\x21\x13\x02\x40\x20\x12\x20\x10\x4f\x0d\x00\x20\x1c\x20\x12\x6b\x41\x02\x75\x41\x09\x6c\x21\x13\x20\x12\x28\x02\x00\x22\x15\x41\x0a\x49\x0d\x00\x41\x0a\x21\x11\x03\x40\x20\x13\x41\x01\x6a\x21\x13\x20\x15\x20\x11\x41\x0a\x6c\x22\x11\x4f\x0d\x00\x0b\x0b\x02\x40\x20\x20\x41\x00\x20\x13\x20\x1d\x41\xe6\x00\x46\x1b\x22\x15\x6b\x20\x20\x41\x00\x47\x20\x1d\x41\xe7\x00\x46\x22\x17\x71\x22\x1a\x6b\x22\x11\x20\x10\x20\x1c\x6b\x41\x02\x75\x41\x09\x6c\x41\x77\x6a\x4e\x0d\x00\x20\x11\x41\x80\xc8\x00\x6a\x22\x19\x41\x09\x6d\x22\x1d\x41\x02\x74\x20\x1c\x6a\x22\x21\x41\x84\x60\x6a\x21\x14\x41\x0a\x21\x11\x02\x40\x20\x19\x20\x1d\x41\x09\x6c\x22\x1d\x6b\x41\x07\x4a\x0d\x00\x20\x20\x41\x00\x20\x1a\x6b\x6a\x20\x15\x6b\x20\x1d\x6b\x41\xff\xc7\x00\x6a\x21\x15\x41\x0a\x21\x11\x03\x40\x20\x11\x41\x0a\x6c\x21\x11\x20\x15\x41\x01\x6a\x22\x15\x41\x07\x48\x0d\x00\x0b\x0b\x20\x14\x28\x02\x00\x22\x1a\x20\x1a\x20\x11\x6e\x22\x19\x20\x11\x6c\x6b\x21\x15\x02\x40\x02\x40\x20\x14\x41\x04\x6a\x22\x1d\x20\x10\x47\x0d\x00\x20\x15\x45\x0d\x01\x0b\x02\x40\x02\x40\x20\x19\x41\x01\x71\x0d\x00\x44\x00\x00\x00\x00\x00\x00\x40\x43\x21\x26\x20\x14\x20\x12\x4d\x0d\x01\x20\x11\x41\x80\x94\xeb\xdc\x03\x47\x0d\x01\x20\x14\x41\x7c\x6a\x2d\x00\x00\x41\x01\x71\x45\x0d\x01\x0b\x44\x01\x00\x00\x00\x00\x00\x40\x43\x21\x26\x0b\x44\x00\x00\x00\x00\x00\x00\xe0\x3f\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x44\x00\x00\x00\x00\x00\x00\xf8\x3f\x20\x15\x20\x11\x41\x01\x76\x22\x19\x46\x1b\x44\x00\x00\x00\x00\x00\x00\xf8\x3f\x20\x1d\x20\x10\x46\x1b\x20\x15\x20\x19\x49\x1b\x21\x27\x02\x40\x20\x1e\x45\x0d\x00\x20\x1f\x2d\x00\x00\x41\x2d\x47\x0d\x00\x20\x27\x9a\x21\x27\x20\x26\x9a\x21\x26\x0b\x20\x14\x20\x1a\x20\x15\x6b\x22\x15\x36\x02\x00\x20\x26\x20\x27\xa0\x20\x26\x61\x0d\x00\x20\x14\x20\x15\x20\x11\x6a\x22\x13\x36\x02\x00\x02\x40\x20\x13\x41\x80\x94\xeb\xdc\x03\x49\x0d\x00\x20\x21\x41\x80\x60\x6a\x21\x13\x03\x40\x20\x13\x41\x04\x6a\x41\x00\x36\x02\x00\x02\x40\x20\x13\x20\x12\x4f\x0d\x00\x20\x12\x41\x7c\x6a\x22\x12\x41\x00\x36\x02\x00\x0b\x20\x13\x20\x13\x28\x02\x00\x41\x01\x6a\x22\x11\x36\x02\x00\x20\x13\x41\x7c\x6a\x21\x13\x20\x11\x41\xff\x93\xeb\xdc\x03\x4b\x0d\x00\x0b\x20\x13\x41\x04\x6a\x21\x14\x0b\x20\x1c\x20\x12\x6b\x41\x02\x75\x41\x09\x6c\x21\x13\x20\x12\x28\x02\x00\x22\x15\x41\x0a\x49\x0d\x00\x41\x0a\x21\x11\x03\x40\x20\x13\x41\x01\x6a\x21\x13\x20\x15\x20\x11\x41\x0a\x6c\x22\x11\x4f\x0d\x00\x0b\x0b\x20\x14\x41\x04\x6a\x22\x11\x20\x10\x20\x10\x20\x11\x4b\x1b\x21\x10\x0b\x02\x40\x03\x40\x02\x40\x20\x10\x22\x15\x20\x12\x4b\x0d\x00\x41\x00\x21\x1d\x0c\x02\x0b\x20\x15\x41\x7c\x6a\x22\x10\x28\x02\x00\x45\x0d\x00\x0b\x41\x01\x21\x1d\x0b\x02\x40\x02\x40\x20\x17\x0d\x00\x20\x16\x41\x08\x71\x21\x1a\x0c\x01\x0b\x20\x13\x41\x7f\x73\x41\x7f\x20\x20\x41\x01\x20\x20\x1b\x22\x10\x20\x13\x4a\x20\x13\x41\x7b\x4a\x71\x22\x11\x1b\x20\x10\x6a\x21\x20\x41\x7f\x41\x7e\x20\x11\x1b\x20\x1b\x6a\x21\x1b\x20\x16\x41\x08\x71\x22\x1a\x0d\x00\x41\x09\x21\x10\x02\x40\x20\x1d\x45\x0d\x00\x20\x15\x41\x7c\x6a\x28\x02\x00\x22\x14\x45\x0d\x00\x41\x00\x21\x10\x20\x14\x41\x0a\x70\x0d\x00\x41\x0a\x21\x11\x41\x00\x21\x10\x03\x40\x20\x10\x41\x01\x6a\x21\x10\x20\x14\x20\x11\x41\x0a\x6c\x22\x11\x70\x45\x0d\x00\x0b\x0b\x20\x15\x20\x1c\x6b\x41\x02\x75\x41\x09\x6c\x41\x77\x6a\x21\x11\x02\x40\x20\x1b\x41\x20\x72\x41\xe6\x00\x47\x0d\x00\x41\x00\x21\x1a\x20\x20\x20\x11\x20\x10\x6b\x22\x10\x41\x00\x20\x10\x41\x00\x4a\x1b\x22\x10\x20\x20\x20\x10\x48\x1b\x21\x20\x0c\x01\x0b\x41\x00\x21\x1a\x20\x20\x20\x11\x20\x13\x6a\x20\x10\x6b\x22\x10\x41\x00\x20\x10\x41\x00\x4a\x1b\x22\x10\x20\x20\x20\x10\x48\x1b\x21\x20\x0b\x41\x7f\x21\x10\x20\x20\x41\xfd\xff\xff\xff\x07\x41\xfe\xff\xff\xff\x07\x20\x20\x20\x1a\x72\x22\x19\x1b\x4a\x0d\x00\x20\x20\x20\x19\x41\x00\x47\x6a\x41\x01\x6a\x21\x21\x02\x40\x02\x40\x20\x1b\x41\x20\x72\x41\xe6\x00\x47\x22\x22\x0d\x00\x20\x13\x41\xff\xff\xff\xff\x07\x20\x21\x6b\x4a\x0d\x02\x20\x13\x41\x00\x20\x13\x41\x00\x4a\x1b\x21\x13\x0c\x01\x0b\x20\x0b\x21\x11\x02\x40\x20\x13\x20\x13\x41\x1f\x75\x22\x10\x6a\x20\x10\x73\x22\x10\x45\x0d\x00\x03\x40\x20\x11\x41\x7f\x6a\x22\x11\x20\x10\x20\x10\x41\x0a\x6e\x22\x14\x41\x0a\x6c\x6b\x41\x30\x72\x3a\x00\x00\x20\x10\x41\x09\x4b\x21\x17\x20\x14\x21\x10\x20\x17\x0d\x00\x0b\x0b\x02\x40\x20\x0b\x20\x11\x6b\x41\x01\x4a\x0d\x00\x20\x11\x41\x7f\x6a\x21\x10\x03\x40\x20\x10\x41\x30\x3a\x00\x00\x20\x0b\x20\x10\x6b\x21\x11\x20\x10\x41\x7f\x6a\x22\x14\x21\x10\x20\x11\x41\x02\x48\x0d\x00\x0b\x20\x14\x41\x01\x6a\x21\x11\x0b\x20\x11\x41\x7e\x6a\x22\x23\x20\x1b\x3a\x00\x00\x41\x7f\x21\x10\x20\x11\x41\x7f\x6a\x41\x2d\x41\x2b\x20\x13\x41\x00\x48\x1b\x3a\x00\x00\x20\x0b\x20\x23\x6b\x22\x13\x41\xff\xff\xff\xff\x07\x20\x21\x6b\x4a\x0d\x01\x0b\x41\x7f\x21\x10\x20\x13\x20\x21\x6a\x22\x13\x20\x1e\x41\xff\xff\xff\xff\x07\x73\x4a\x0d\x00\x20\x13\x20\x1e\x6a\x21\x1b\x02\x40\x20\x16\x41\x80\xc0\x04\x71\x22\x16\x0d\x00\x20\x18\x20\x1b\x4c\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x20\x20\x18\x20\x1b\x6b\x22\x17\x41\x80\x02\x20\x17\x41\x80\x02\x49\x22\x10\x1b\x10\x74\x1a\x20\x00\x28\x02\x00\x22\x11\x41\x20\x71\x21\x13\x02\x40\x02\x40\x20\x10\x0d\x00\x20\x13\x45\x21\x10\x20\x17\x21\x13\x03\x40\x02\x40\x20\x10\x41\x01\x71\x45\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x80\x02\x20\x00\x10\x63\x1a\x20\x00\x28\x02\x00\x21\x11\x0b\x20\x11\x41\x20\x71\x22\x14\x45\x21\x10\x20\x13\x41\x80\x7e\x6a\x22\x13\x41\xff\x01\x4b\x0d\x00\x0b\x20\x14\x0d\x02\x20\x17\x41\xff\x01\x71\x21\x17\x0c\x01\x0b\x20\x13\x0d\x01\x0b\x20\x05\x41\xc0\x00\x6a\x20\x17\x20\x00\x10\x63\x1a\x0b\x02\x40\x20\x00\x2d\x00\x00\x41\x20\x71\x0d\x00\x20\x1f\x20\x1e\x20\x00\x10\x63\x1a\x0b\x02\x40\x20\x16\x41\x80\x80\x04\x47\x0d\x00\x20\x18\x20\x1b\x4c\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x30\x20\x18\x20\x1b\x6b\x22\x17\x41\x80\x02\x20\x17\x41\x80\x02\x49\x22\x10\x1b\x10\x74\x1a\x20\x00\x28\x02\x00\x22\x11\x41\x20\x71\x21\x13\x02\x40\x02\x40\x20\x10\x0d\x00\x20\x13\x45\x21\x10\x20\x17\x21\x13\x03\x40\x02\x40\x20\x10\x41\x01\x71\x45\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x80\x02\x20\x00\x10\x63\x1a\x20\x00\x28\x02\x00\x21\x11\x0b\x20\x11\x41\x20\x71\x22\x14\x45\x21\x10\x20\x13\x41\x80\x7e\x6a\x22\x13\x41\xff\x01\x4b\x0d\x00\x0b\x20\x14\x0d\x02\x20\x17\x41\xff\x01\x71\x21\x17\x0c\x01\x0b\x20\x13\x0d\x01\x0b\x20\x05\x41\xc0\x00\x6a\x20\x17\x20\x00\x10\x63\x1a\x0b\x02\x40\x02\x40\x20\x22\x0d\x00\x20\x1c\x20\x12\x20\x12\x20\x1c\x4b\x1b\x22\x17\x21\x14\x03\x40\x02\x40\x02\x40\x20\x14\x28\x02\x00\x22\x10\x0d\x00\x41\x00\x21\x12\x0c\x01\x0b\x41\x00\x21\x12\x03\x40\x20\x06\x20\x12\x6a\x20\x10\x20\x10\x41\x0a\x6e\x22\x13\x41\x0a\x6c\x6b\x41\x30\x72\x3a\x00\x00\x20\x12\x41\x7f\x6a\x21\x12\x20\x10\x41\x09\x4b\x21\x11\x20\x13\x21\x10\x20\x11\x0d\x00\x0b\x0b\x20\x09\x20\x12\x6a\x21\x10\x02\x40\x02\x40\x20\x14\x20\x17\x46\x0d\x00\x20\x10\x20\x05\x41\xd0\x02\x6a\x4d\x0d\x01\x20\x05\x41\xd0\x02\x6a\x41\x30\x20\x12\x41\x09\x6a\x10\x74\x1a\x20\x05\x41\xd0\x02\x6a\x21\x10\x0c\x01\x0b\x20\x12\x0d\x00\x20\x10\x41\x7f\x6a\x22\x10\x41\x30\x3a\x00\x00\x0b\x02\x40\x20\x00\x2d\x00\x00\x41\x20\x71\x0d\x00\x20\x10\x20\x09\x20\x10\x6b\x20\x00\x10\x63\x1a\x0b\x20\x14\x41\x04\x6a\x22\x14\x20\x1c\x4d\x0d\x00\x0b\x02\x40\x20\x19\x45\x0d\x00\x20\x00\x2d\x00\x00\x41\x20\x71\x0d\x00\x41\xe3\x1a\x41\x01\x20\x00\x10\x63\x1a\x0b\x02\x40\x02\x40\x20\x20\x41\x01\x4e\x0d\x00\x20\x20\x21\x10\x0c\x01\x0b\x02\x40\x20\x14\x20\x15\x49\x0d\x00\x20\x20\x21\x10\x0c\x01\x0b\x03\x40\x20\x09\x21\x10\x02\x40\x02\x40\x20\x14\x28\x02\x00\x22\x12\x45\x0d\x00\x20\x09\x21\x10\x03\x40\x20\x10\x41\x7f\x6a\x22\x10\x20\x12\x20\x12\x41\x0a\x6e\x22\x13\x41\x0a\x6c\x6b\x41\x30\x72\x3a\x00\x00\x20\x12\x41\x09\x4b\x21\x11\x20\x13\x21\x12\x20\x11\x0d\x00\x0b\x20\x10\x20\x05\x41\xd0\x02\x6a\x4d\x0d\x01\x0b\x20\x05\x41\xd0\x02\x6a\x41\x30\x20\x10\x20\x0c\x6a\x10\x74\x1a\x03\x40\x20\x10\x41\x7f\x6a\x22\x10\x20\x05\x41\xd0\x02\x6a\x4b\x0d\x00\x0b\x0b\x02\x40\x20\x00\x2d\x00\x00\x41\x20\x71\x0d\x00\x20\x10\x20\x20\x41\x09\x20\x20\x41\x09\x48\x1b\x20\x00\x10\x63\x1a\x0b\x20\x20\x41\x77\x6a\x21\x10\x20\x20\x41\x0a\x48\x0d\x01\x20\x10\x21\x20\x20\x14\x41\x04\x6a\x22\x14\x20\x15\x49\x0d\x00\x0b\x0b\x20\x10\x41\x01\x48\x0d\x01\x20\x05\x41\xc0\x00\x6a\x41\x30\x20\x10\x41\x80\x02\x20\x10\x41\x80\x02\x49\x22\x12\x1b\x10\x74\x1a\x20\x00\x28\x02\x00\x22\x11\x41\x20\x71\x21\x13\x02\x40\x02\x40\x20\x12\x0d\x00\x20\x13\x45\x21\x12\x20\x10\x21\x13\x03\x40\x02\x40\x20\x12\x41\x01\x71\x45\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x80\x02\x20\x00\x10\x63\x1a\x20\x00\x28\x02\x00\x21\x11\x0b\x20\x11\x41\x20\x71\x22\x15\x45\x21\x12\x20\x13\x41\x80\x7e\x6a\x22\x13\x41\xff\x01\x4b\x0d\x00\x0b\x20\x15\x0d\x03\x20\x10\x41\xff\x01\x71\x21\x10\x0c\x01\x0b\x20\x13\x0d\x02\x0b\x20\x05\x41\xc0\x00\x6a\x20\x10\x20\x00\x10\x63\x1a\x0c\x01\x0b\x02\x40\x20\x20\x41\x00\x48\x0d\x00\x20\x15\x20\x12\x41\x04\x6a\x20\x1d\x1b\x21\x17\x20\x12\x21\x14\x03\x40\x20\x09\x21\x11\x02\x40\x02\x40\x20\x14\x28\x02\x00\x22\x10\x45\x0d\x00\x41\x00\x21\x13\x03\x40\x20\x05\x41\xd0\x02\x6a\x20\x13\x6a\x41\x08\x6a\x20\x10\x20\x10\x41\x0a\x6e\x22\x11\x41\x0a\x6c\x6b\x41\x30\x72\x3a\x00\x00\x20\x13\x41\x7f\x6a\x21\x13\x20\x10\x41\x09\x4b\x21\x15\x20\x11\x21\x10\x20\x15\x0d\x00\x0b\x20\x05\x41\xd0\x02\x6a\x20\x13\x6a\x41\x09\x6a\x21\x11\x20\x13\x0d\x01\x0b\x20\x11\x41\x7f\x6a\x22\x11\x41\x30\x3a\x00\x00\x0b\x02\x40\x02\x40\x20\x14\x20\x12\x46\x0d\x00\x20\x11\x20\x05\x41\xd0\x02\x6a\x4d\x0d\x01\x20\x05\x41\xd0\x02\x6a\x41\x30\x20\x11\x20\x0c\x6a\x10\x74\x1a\x03\x40\x20\x11\x41\x7f\x6a\x22\x11\x20\x05\x41\xd0\x02\x6a\x4b\x0d\x00\x0c\x02\x0b\x00\x0b\x02\x40\x20\x00\x2d\x00\x00\x41\x20\x71\x0d\x00\x20\x11\x41\x01\x20\x00\x10\x63\x1a\x0b\x20\x11\x41\x01\x6a\x21\x11\x02\x40\x20\x1a\x0d\x00\x20\x20\x41\x01\x48\x0d\x01\x0b\x20\x00\x2d\x00\x00\x41\x20\x71\x0d\x00\x41\xe3\x1a\x41\x01\x20\x00\x10\x63\x1a\x0b\x20\x09\x20\x11\x6b\x21\x10\x02\x40\x20\x00\x2d\x00\x00\x41\x20\x71\x0d\x00\x20\x11\x20\x10\x20\x20\x20\x20\x20\x10\x4a\x1b\x20\x00\x10\x63\x1a\x0b\x20\x20\x20\x10\x6b\x21\x20\x02\x40\x20\x14\x41\x04\x6a\x22\x14\x20\x17\x4f\x0d\x00\x20\x20\x41\x7f\x4a\x0d\x01\x0b\x0b\x20\x20\x41\x01\x48\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x30\x20\x20\x41\x80\x02\x20\x20\x41\x80\x02\x49\x22\x10\x1b\x10\x74\x1a\x20\x00\x28\x02\x00\x22\x13\x41\x20\x71\x21\x12\x02\x40\x02\x40\x20\x10\x0d\x00\x20\x12\x45\x21\x10\x20\x20\x21\x12\x03\x40\x02\x40\x20\x10\x41\x01\x71\x45\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x80\x02\x20\x00\x10\x63\x1a\x20\x00\x28\x02\x00\x21\x13\x0b\x20\x13\x41\x20\x71\x22\x11\x45\x21\x10\x20\x12\x41\x80\x7e\x6a\x22\x12\x41\xff\x01\x4b\x0d\x00\x0b\x20\x11\x0d\x02\x20\x20\x41\xff\x01\x71\x21\x20\x0c\x01\x0b\x20\x12\x0d\x01\x0b\x20\x05\x41\xc0\x00\x6a\x20\x20\x20\x00\x10\x63\x1a\x0b\x20\x00\x2d\x00\x00\x41\x20\x71\x0d\x00\x20\x23\x20\x0b\x20\x23\x6b\x20\x00\x10\x63\x1a\x0b\x02\x40\x20\x16\x41\x80\xc0\x00\x47\x0d\x00\x20\x18\x20\x1b\x4c\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x20\x20\x18\x20\x1b\x6b\x22\x15\x41\x80\x02\x20\x15\x41\x80\x02\x49\x22\x10\x1b\x10\x74\x1a\x20\x00\x28\x02\x00\x22\x13\x41\x20\x71\x21\x12\x02\x40\x02\x40\x20\x10\x0d\x00\x20\x12\x45\x21\x10\x20\x15\x21\x12\x03\x40\x02\x40\x20\x10\x41\x01\x71\x45\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x80\x02\x20\x00\x10\x63\x1a\x20\x00\x28\x02\x00\x21\x13\x0b\x20\x13\x41\x20\x71\x22\x11\x45\x21\x10\x20\x12\x41\x80\x7e\x6a\x22\x12\x41\xff\x01\x4b\x0d\x00\x0b\x20\x11\x0d\x02\x20\x15\x41\xff\x01\x71\x21\x15\x0c\x01\x0b\x20\x12\x0d\x01\x0b\x20\x05\x41\xc0\x00\x6a\x20\x15\x20\x00\x10\x63\x1a\x0b\x20\x18\x20\x1b\x20\x18\x20\x1b\x4a\x1b\x21\x10\x0b\x20\x10\x41\x00\x4e\x0d\x09\x0c\x0a\x0b\x41\x00\x21\x1c\x41\xb6\x15\x21\x1d\x0b\x20\x0d\x21\x10\x0c\x06\x0b\x20\x17\x21\x16\x20\x12\x21\x14\x20\x10\x2d\x00\x00\x45\x0d\x05\x0c\x07\x0b\x20\x01\x2d\x00\x01\x21\x10\x20\x01\x41\x01\x6a\x21\x01\x0c\x00\x0b\x00\x0b\x20\x00\x0d\x06\x02\x40\x20\x0e\x0d\x00\x41\x00\x21\x0f\x0c\x07\x0b\x02\x40\x02\x40\x20\x04\x28\x02\x04\x22\x01\x0d\x00\x41\x01\x21\x01\x0c\x01\x0b\x20\x03\x41\x08\x6a\x20\x01\x20\x02\x10\x55\x02\x40\x20\x04\x28\x02\x08\x22\x01\x0d\x00\x41\x02\x21\x01\x0c\x01\x0b\x20\x03\x41\x10\x6a\x20\x01\x20\x02\x10\x55\x02\x40\x20\x04\x28\x02\x0c\x22\x01\x0d\x00\x41\x03\x21\x01\x0c\x01\x0b\x20\x03\x41\x18\x6a\x20\x01\x20\x02\x10\x55\x02\x40\x20\x04\x28\x02\x10\x22\x01\x0d\x00\x41\x04\x21\x01\x0c\x01\x0b\x20\x03\x41\x20\x6a\x20\x01\x20\x02\x10\x55\x02\x40\x20\x04\x28\x02\x14\x22\x01\x0d\x00\x41\x05\x21\x01\x0c\x01\x0b\x20\x03\x41\x28\x6a\x20\x01\x20\x02\x10\x55\x02\x40\x20\x04\x28\x02\x18\x22\x01\x0d\x00\x41\x06\x21\x01\x0c\x01\x0b\x20\x03\x41\x30\x6a\x20\x01\x20\x02\x10\x55\x02\x40\x20\x04\x28\x02\x1c\x22\x01\x0d\x00\x41\x07\x21\x01\x0c\x01\x0b\x20\x03\x41\x38\x6a\x20\x01\x20\x02\x10\x55\x02\x40\x20\x04\x28\x02\x20\x22\x01\x0d\x00\x41\x08\x21\x01\x0c\x01\x0b\x20\x03\x41\xc0\x00\x6a\x20\x01\x20\x02\x10\x55\x20\x04\x28\x02\x24\x22\x01\x0d\x02\x41\x09\x21\x01\x0b\x20\x01\x41\x7f\x6a\x21\x10\x20\x04\x20\x01\x41\x02\x74\x6a\x21\x01\x03\x40\x20\x01\x28\x02\x00\x0d\x01\x20\x01\x41\x04\x6a\x21\x01\x41\x01\x21\x0f\x20\x10\x41\x01\x6a\x22\x10\x41\x08\x4b\x0d\x07\x0c\x00\x0b\x00\x0b\x41\x00\x41\x1c\x36\x02\xa0\xd6\x05\x0c\x04\x0b\x20\x03\x41\xc8\x00\x6a\x20\x01\x20\x02\x10\x55\x41\x01\x21\x0f\x0c\x04\x0b\x20\x10\x20\x11\x6b\x22\x19\x20\x14\x20\x14\x20\x19\x48\x1b\x22\x20\x41\xff\xff\xff\xff\x07\x20\x1c\x6b\x4a\x0d\x01\x20\x1c\x20\x20\x6a\x22\x1a\x20\x18\x20\x18\x20\x1a\x48\x1b\x22\x10\x20\x13\x4a\x0d\x01\x02\x40\x20\x16\x41\x80\xc0\x04\x71\x22\x16\x0d\x00\x20\x1a\x20\x18\x4e\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x20\x20\x10\x20\x1a\x6b\x22\x1b\x41\x80\x02\x20\x1b\x41\x80\x02\x49\x22\x12\x1b\x10\x74\x1a\x20\x00\x28\x02\x00\x22\x15\x41\x20\x71\x21\x13\x02\x40\x02\x40\x20\x12\x0d\x00\x20\x13\x45\x21\x12\x20\x1b\x21\x13\x03\x40\x02\x40\x20\x12\x41\x01\x71\x45\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x80\x02\x20\x00\x10\x63\x1a\x20\x00\x28\x02\x00\x21\x15\x0b\x20\x15\x41\x20\x71\x22\x17\x45\x21\x12\x20\x13\x41\x80\x7e\x6a\x22\x13\x41\xff\x01\x4b\x0d\x00\x0b\x20\x17\x0d\x02\x20\x1b\x41\xff\x01\x71\x21\x1b\x0c\x01\x0b\x20\x13\x0d\x01\x0b\x20\x05\x41\xc0\x00\x6a\x20\x1b\x20\x00\x10\x63\x1a\x0b\x02\x40\x20\x00\x2d\x00\x00\x41\x20\x71\x0d\x00\x20\x1d\x20\x1c\x20\x00\x10\x63\x1a\x0b\x02\x40\x20\x16\x41\x80\x80\x04\x47\x0d\x00\x20\x1a\x20\x18\x4e\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x30\x20\x10\x20\x1a\x6b\x22\x1c\x41\x80\x02\x20\x1c\x41\x80\x02\x49\x22\x12\x1b\x10\x74\x1a\x20\x00\x28\x02\x00\x22\x15\x41\x20\x71\x21\x13\x02\x40\x02\x40\x20\x12\x0d\x00\x20\x13\x45\x21\x12\x20\x1c\x21\x13\x03\x40\x02\x40\x20\x12\x41\x01\x71\x45\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x80\x02\x20\x00\x10\x63\x1a\x20\x00\x28\x02\x00\x21\x15\x0b\x20\x15\x41\x20\x71\x22\x17\x45\x21\x12\x20\x13\x41\x80\x7e\x6a\x22\x13\x41\xff\x01\x4b\x0d\x00\x0b\x20\x17\x0d\x02\x20\x1c\x41\xff\x01\x71\x21\x1c\x0c\x01\x0b\x20\x13\x0d\x01\x0b\x20\x05\x41\xc0\x00\x6a\x20\x1c\x20\x00\x10\x63\x1a\x0b\x02\x40\x20\x19\x20\x14\x4e\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x30\x20\x20\x20\x19\x6b\x22\x17\x41\x80\x02\x20\x17\x41\x80\x02\x49\x22\x12\x1b\x10\x74\x1a\x20\x00\x28\x02\x00\x22\x15\x41\x20\x71\x21\x13\x02\x40\x02\x40\x20\x12\x0d\x00\x20\x13\x45\x21\x12\x20\x17\x21\x13\x03\x40\x02\x40\x20\x12\x41\x01\x71\x45\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x80\x02\x20\x00\x10\x63\x1a\x20\x00\x28\x02\x00\x21\x15\x0b\x20\x15\x41\x20\x71\x22\x14\x45\x21\x12\x20\x13\x41\x80\x7e\x6a\x22\x13\x41\xff\x01\x4b\x0d\x00\x0b\x20\x14\x0d\x02\x20\x17\x41\xff\x01\x71\x21\x17\x0c\x01\x0b\x20\x13\x0d\x01\x0b\x20\x05\x41\xc0\x00\x6a\x20\x17\x20\x00\x10\x63\x1a\x0b\x02\x40\x20\x00\x2d\x00\x00\x41\x20\x71\x0d\x00\x20\x11\x20\x19\x20\x00\x10\x63\x1a\x0b\x20\x16\x41\x80\xc0\x00\x47\x0d\x00\x20\x1a\x20\x18\x4e\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x20\x20\x10\x20\x1a\x6b\x22\x18\x41\x80\x02\x20\x18\x41\x80\x02\x49\x22\x12\x1b\x10\x74\x1a\x20\x00\x28\x02\x00\x22\x11\x41\x20\x71\x21\x13\x02\x40\x02\x40\x20\x12\x0d\x00\x20\x13\x45\x21\x12\x20\x18\x21\x13\x03\x40\x02\x40\x20\x12\x41\x01\x71\x45\x0d\x00\x20\x05\x41\xc0\x00\x6a\x41\x80\x02\x20\x00\x10\x63\x1a\x20\x00\x28\x02\x00\x21\x11\x0b\x20\x11\x41\x20\x71\x22\x15\x45\x21\x12\x20\x13\x41\x80\x7e\x6a\x22\x13\x41\xff\x01\x4b\x0d\x00\x0b\x20\x15\x0d\x02\x20\x18\x41\xff\x01\x71\x21\x18\x0c\x01\x0b\x20\x13\x0d\x01\x0b\x20\x05\x41\xc0\x00\x6a\x20\x18\x20\x00\x10\x63\x1a\x0c\x00\x0b\x00\x0b\x41\x00\x41\x3d\x36\x02\xa0\xd6\x05\x0b\x41\x7f\x21\x0f\x0b\x20\x05\x41\xf0\x06\x6a\x24\x00\x20\x0f\x0b\xb8\x04\x00\x02\x40\x20\x01\x41\x77\x6a\x22\x01\x41\x11\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x0e\x12\x11\x00\x01\x04\x02\x03\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x0b\x20\x02\x20\x02\x28\x02\x00\x22\x01\x41\x04\x6a\x36\x02\x00\x20\x00\x20\x01\x34\x02\x00\x37\x03\x00\x0f\x0b\x20\x02\x20\x02\x28\x02\x00\x22\x01\x41\x04\x6a\x36\x02\x00\x20\x00\x20\x01\x35\x02\x00\x37\x03\x00\x0f\x0b\x20\x02\x20\x02\x28\x02\x00\x22\x01\x41\x04\x6a\x36\x02\x00\x20\x00\x20\x01\x34\x02\x00\x37\x03\x00\x0f\x0b\x20\x02\x20\x02\x28\x02\x00\x22\x01\x41\x04\x6a\x36\x02\x00\x20\x00\x20\x01\x35\x02\x00\x37\x03\x00\x0f\x0b\x20\x02\x20\x02\x28\x02\x00\x41\x07\x6a\x41\x78\x71\x22\x01\x41\x08\x6a\x36\x02\x00\x20\x00\x20\x01\x29\x03\x00\x37\x03\x00\x0f\x0b\x20\x02\x20\x02\x28\x02\x00\x22\x01\x41\x04\x6a\x36\x02\x00\x20\x00\x20\x01\x32\x01\x00\x37\x03\x00\x0f\x0b\x20\x02\x20\x02\x28\x02\x00\x22\x01\x41\x04\x6a\x36\x02\x00\x20\x00\x20\x01\x33\x01\x00\x37\x03\x00\x0f\x0b\x20\x02\x20\x02\x28\x02\x00\x22\x01\x41\x04\x6a\x36\x02\x00\x20\x00\x20\x01\x30\x00\x00\x37\x03\x00\x0f\x0b\x20\x02\x20\x02\x28\x02\x00\x22\x01\x41\x04\x6a\x36\x02\x00\x20\x00\x20\x01\x31\x00\x00\x37\x03\x00\x0f\x0b\x20\x02\x20\x02\x28\x02\x00\x41\x07\x6a\x41\x78\x71\x22\x01\x41\x08\x6a\x36\x02\x00\x20\x00\x20\x01\x29\x03\x00\x37\x03\x00\x0f\x0b\x20\x02\x20\x02\x28\x02\x00\x22\x01\x41\x04\x6a\x36\x02\x00\x20\x00\x20\x01\x35\x02\x00\x37\x03\x00\x0f\x0b\x20\x02\x20\x02\x28\x02\x00\x41\x07\x6a\x41\x78\x71\x22\x01\x41\x08\x6a\x36\x02\x00\x20\x00\x20\x01\x29\x03\x00\x37\x03\x00\x0f\x0b\x20\x02\x20\x02\x28\x02\x00\x41\x07\x6a\x41\x78\x71\x22\x01\x41\x08\x6a\x36\x02\x00\x20\x00\x20\x01\x29\x03\x00\x37\x03\x00\x0f\x0b\x20\x02\x20\x02\x28\x02\x00\x22\x01\x41\x04\x6a\x36\x02\x00\x20\x00\x20\x01\x34\x02\x00\x37\x03\x00\x0f\x0b\x20\x02\x20\x02\x28\x02\x00\x22\x01\x41\x04\x6a\x36\x02\x00\x20\x00\x20\x01\x35\x02\x00\x37\x03\x00\x0f\x0b\x20\x02\x20\x02\x28\x02\x00\x41\x07\x6a\x41\x78\x71\x22\x01\x41\x08\x6a\x36\x02\x00\x20\x00\x20\x01\x29\x03\x00\x37\x03\x00\x0f\x0b\x10\x56\x00\x0b\x20\x02\x20\x02\x28\x02\x00\x22\x01\x41\x04\x6a\x36\x02\x00\x20\x00\x20\x01\x28\x02\x00\x36\x02\x00\x0b\x0b\x0f\x00\x41\xa0\x19\x41\xb0\xd1\x05\x10\x5a\x1a\x10\x40\x00\x0b\x52\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x02\x40\x02\x40\x20\x00\x20\x01\x20\x02\x41\xff\x01\x71\x20\x03\x41\x08\x6a\x10\x35\x22\x00\x45\x0d\x00\x41\x00\x41\xc6\x00\x20\x00\x20\x00\x41\xcc\x00\x46\x1b\x36\x02\xa0\xd6\x05\x42\x7f\x21\x01\x0c\x01\x0b\x20\x03\x29\x03\x08\x21\x01\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x01\x0b\x0d\x00\x20\x00\x28\x02\x38\x20\x01\x20\x02\x10\x57\x0b\x5c\x01\x01\x7f\x20\x00\x20\x00\x28\x02\x3c\x22\x01\x41\x7f\x6a\x20\x01\x72\x36\x02\x3c\x02\x40\x20\x00\x28\x02\x00\x22\x01\x41\x08\x71\x45\x0d\x00\x20\x00\x20\x01\x41\x20\x72\x36\x02\x00\x41\x7f\x0f\x0b\x20\x00\x42\x00\x37\x02\x04\x20\x00\x20\x00\x28\x02\x28\x22\x01\x36\x02\x18\x20\x00\x20\x01\x36\x02\x14\x20\x00\x20\x01\x20\x00\x28\x02\x2c\x6a\x36\x02\x10\x41\x00\x0b\x1a\x01\x01\x7f\x41\x7f\x41\x00\x20\x00\x10\x71\x22\x02\x20\x00\x41\x01\x20\x02\x20\x01\x10\x64\x47\x1b\x0b\x1b\x00\x02\x40\x20\x00\x10\x36\x22\x00\x0d\x00\x41\x00\x0f\x0b\x41\x00\x20\x00\x36\x02\xa0\xd6\x05\x41\x7f\x0b\x09\x00\x20\x00\x28\x02\x38\x10\x5b\x0b\xd9\x02\x01\x03\x7f\x02\x40\x10\x68\x28\x02\x00\x22\x00\x45\x0d\x00\x03\x40\x02\x40\x20\x00\x28\x02\x14\x20\x00\x28\x02\x18\x46\x0d\x00\x20\x00\x41\x00\x41\x00\x20\x00\x28\x02\x20\x11\x01\x00\x1a\x0b\x02\x40\x20\x00\x28\x02\x04\x22\x01\x20\x00\x28\x02\x08\x22\x02\x46\x0d\x00\x20\x00\x20\x01\x20\x02\x6b\xac\x41\x01\x20\x00\x28\x02\x24\x11\x0e\x00\x1a\x0b\x20\x00\x28\x02\x34\x22\x00\x0d\x00\x0b\x0b\x02\x40\x41\x00\x28\x02\xc8\xde\x05\x22\x00\x45\x0d\x00\x02\x40\x20\x00\x28\x02\x14\x20\x00\x28\x02\x18\x46\x0d\x00\x20\x00\x41\x00\x41\x00\x20\x00\x28\x02\x20\x11\x01\x00\x1a\x0b\x20\x00\x28\x02\x04\x22\x01\x20\x00\x28\x02\x08\x22\x02\x46\x0d\x00\x20\x00\x20\x01\x20\x02\x6b\xac\x41\x01\x20\x00\x28\x02\x24\x11\x0e\x00\x1a\x0b\x02\x40\x41\x00\x28\x02\xa8\xd1\x05\x22\x00\x45\x0d\x00\x02\x40\x20\x00\x28\x02\x14\x20\x00\x28\x02\x18\x46\x0d\x00\x20\x00\x41\x00\x41\x00\x20\x00\x28\x02\x20\x11\x01\x00\x1a\x0b\x20\x00\x28\x02\x04\x22\x01\x20\x00\x28\x02\x08\x22\x02\x46\x0d\x00\x20\x00\x20\x01\x20\x02\x6b\xac\x41\x01\x20\x00\x28\x02\x24\x11\x0e\x00\x1a\x0b\x02\x40\x41\x00\x28\x02\xa0\xd2\x05\x22\x00\x45\x0d\x00\x02\x40\x20\x00\x28\x02\x14\x20\x00\x28\x02\x18\x46\x0d\x00\x20\x00\x41\x00\x41\x00\x20\x00\x28\x02\x20\x11\x01\x00\x1a\x0b\x20\x00\x28\x02\x04\x22\x01\x20\x00\x28\x02\x08\x22\x02\x46\x0d\x00\x20\x00\x20\x01\x20\x02\x6b\xac\x41\x01\x20\x00\x28\x02\x24\x11\x0e\x00\x1a\x0b\x0b\x27\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x20\x03\x20\x02\x36\x02\x0c\x20\x00\x20\x01\x20\x02\x10\x67\x21\x02\x20\x03\x41\x10\x6a\x24\x00\x20\x02\x0b\x29\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x04\x20\x03\x36\x02\x0c\x20\x00\x20\x01\x20\x02\x20\x03\x10\x4e\x21\x03\x20\x04\x41\x10\x6a\x24\x00\x20\x03\x0b\x27\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x20\x03\x20\x02\x36\x02\x0c\x20\x00\x20\x01\x20\x02\x10\x53\x21\x02\x20\x03\x41\x10\x6a\x24\x00\x20\x02\x0b\x54\x01\x02\x7f\x23\x00\x41\x20\x6b\x22\x01\x24\x00\x02\x40\x02\x40\x20\x00\x20\x01\x41\x08\x6a\x10\x37\x22\x00\x0d\x00\x41\x3b\x21\x00\x20\x01\x2d\x00\x08\x41\x02\x47\x0d\x00\x20\x01\x2d\x00\x10\x41\x24\x71\x0d\x00\x41\x01\x21\x02\x0c\x01\x0b\x41\x00\x21\x02\x41\x00\x20\x00\x36\x02\xa0\xd6\x05\x0b\x20\x01\x41\x20\x6a\x24\x00\x20\x02\x0b\x2f\x00\x20\x00\x41\x05\x36\x02\x20\x02\x40\x20\x00\x2d\x00\x00\x41\xc0\x00\x71\x0d\x00\x20\x00\x28\x02\x38\x10\x61\x0d\x00\x20\x00\x41\x7f\x36\x02\x40\x0b\x20\x00\x20\x01\x20\x02\x10\x66\x0b\xe4\x01\x01\x06\x7f\x02\x40\x02\x40\x20\x02\x28\x02\x10\x22\x03\x0d\x00\x41\x00\x21\x04\x20\x02\x10\x59\x0d\x01\x20\x02\x28\x02\x10\x21\x03\x0b\x02\x40\x20\x03\x20\x02\x28\x02\x14\x22\x05\x6b\x20\x01\x4f\x0d\x00\x20\x02\x20\x00\x20\x01\x20\x02\x28\x02\x20\x11\x01\x00\x0f\x0b\x41\x00\x21\x06\x02\x40\x20\x02\x28\x02\x40\x41\x00\x48\x0d\x00\x41\x00\x21\x06\x20\x00\x21\x04\x41\x00\x21\x03\x03\x40\x20\x01\x20\x03\x46\x0d\x01\x20\x03\x41\x01\x6a\x21\x03\x20\x04\x20\x01\x6a\x21\x07\x20\x04\x41\x7f\x6a\x22\x08\x21\x04\x20\x07\x41\x7f\x6a\x2d\x00\x00\x41\x0a\x47\x0d\x00\x0b\x20\x02\x20\x00\x20\x01\x20\x03\x6b\x41\x01\x6a\x22\x06\x20\x02\x28\x02\x20\x11\x01\x00\x22\x04\x20\x06\x49\x0d\x01\x20\x08\x20\x01\x6a\x41\x01\x6a\x21\x00\x20\x02\x28\x02\x14\x21\x05\x20\x03\x41\x7f\x6a\x21\x01\x0b\x20\x05\x20\x00\x20\x01\x10\x70\x1a\x20\x02\x20\x02\x28\x02\x14\x20\x01\x6a\x36\x02\x14\x20\x06\x20\x01\x6a\x21\x04\x0b\x20\x04\x0b\x91\x02\x01\x07\x7f\x20\x02\x20\x01\x6c\x21\x04\x02\x40\x02\x40\x20\x03\x28\x02\x10\x22\x05\x0d\x00\x41\x00\x21\x05\x20\x03\x10\x59\x0d\x01\x20\x03\x28\x02\x10\x21\x05\x0b\x02\x40\x20\x05\x20\x03\x28\x02\x14\x22\x06\x6b\x20\x04\x4f\x0d\x00\x20\x03\x20\x00\x20\x04\x20\x03\x28\x02\x20\x11\x01\x00\x21\x05\x0c\x01\x0b\x41\x00\x21\x07\x02\x40\x02\x40\x20\x03\x28\x02\x40\x41\x00\x4e\x0d\x00\x20\x04\x21\x05\x0c\x01\x0b\x20\x00\x20\x04\x6a\x21\x08\x41\x00\x21\x07\x41\x00\x21\x05\x03\x40\x02\x40\x20\x04\x20\x05\x6a\x0d\x00\x20\x04\x21\x05\x0c\x02\x0b\x20\x08\x20\x05\x6a\x21\x09\x20\x05\x41\x7f\x6a\x22\x0a\x21\x05\x20\x09\x41\x7f\x6a\x2d\x00\x00\x41\x0a\x47\x0d\x00\x0b\x20\x03\x20\x00\x20\x04\x20\x0a\x6a\x41\x01\x6a\x22\x07\x20\x03\x28\x02\x20\x11\x01\x00\x22\x05\x20\x07\x49\x0d\x01\x20\x0a\x41\x7f\x73\x21\x05\x20\x08\x20\x0a\x6a\x41\x01\x6a\x21\x00\x20\x03\x28\x02\x14\x21\x06\x0b\x20\x06\x20\x00\x20\x05\x10\x70\x1a\x20\x03\x20\x03\x28\x02\x14\x20\x05\x6a\x36\x02\x14\x20\x07\x20\x05\x6a\x21\x05\x0b\x02\x40\x20\x05\x20\x04\x47\x0d\x00\x20\x02\x41\x00\x20\x01\x1b\x0f\x0b\x20\x05\x20\x01\x6e\x0b\x5d\x01\x02\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x41\x7f\x21\x04\x02\x40\x02\x40\x20\x02\x41\x7f\x4a\x0d\x00\x41\x00\x41\x1c\x36\x02\xa0\xd6\x05\x0c\x01\x0b\x02\x40\x20\x00\x20\x01\x20\x02\x20\x03\x41\x0c\x6a\x10\x38\x22\x02\x45\x0d\x00\x41\x00\x20\x02\x36\x02\xa0\xd6\x05\x41\x7f\x21\x04\x0c\x01\x0b\x20\x03\x28\x02\x0c\x21\x04\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x04\x0b\xa1\x02\x01\x06\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x20\x03\x20\x02\x36\x02\x0c\x20\x03\x20\x01\x36\x02\x08\x20\x03\x20\x00\x28\x02\x18\x22\x01\x36\x02\x00\x20\x03\x20\x00\x28\x02\x14\x20\x01\x6b\x22\x01\x36\x02\x04\x41\x02\x21\x04\x02\x40\x02\x40\x20\x01\x20\x02\x6a\x22\x05\x20\x00\x28\x02\x38\x20\x03\x41\x02\x10\x65\x22\x06\x46\x0d\x00\x20\x03\x21\x01\x03\x40\x02\x40\x20\x06\x41\x7f\x4a\x0d\x00\x41\x00\x21\x06\x20\x00\x41\x00\x36\x02\x18\x20\x00\x42\x00\x37\x03\x10\x20\x00\x20\x00\x28\x02\x00\x41\x20\x72\x36\x02\x00\x20\x04\x41\x02\x46\x0d\x03\x20\x02\x20\x01\x28\x02\x04\x6b\x21\x06\x0c\x03\x0b\x20\x01\x41\x08\x6a\x20\x01\x20\x06\x20\x01\x28\x02\x04\x22\x07\x4b\x22\x08\x1b\x22\x01\x20\x01\x28\x02\x00\x20\x06\x20\x07\x41\x00\x20\x08\x1b\x6b\x22\x07\x6a\x36\x02\x00\x20\x01\x20\x01\x28\x02\x04\x20\x07\x6b\x36\x02\x04\x20\x05\x20\x06\x6b\x21\x05\x20\x00\x28\x02\x38\x20\x01\x20\x04\x20\x08\x6b\x22\x04\x10\x65\x22\x08\x21\x06\x20\x05\x20\x08\x47\x0d\x00\x0b\x0b\x20\x00\x20\x00\x28\x02\x28\x22\x01\x36\x02\x18\x20\x00\x20\x01\x36\x02\x14\x20\x00\x20\x01\x20\x00\x28\x02\x2c\x6a\x36\x02\x10\x20\x02\x21\x06\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x06\x0b\x10\x00\x20\x00\x41\xff\xff\xff\xff\x07\x20\x01\x20\x02\x10\x4e\x0b\x06\x00\x41\xd4\xde\x05\x0b\x02\x00\x0b\x0d\x00\x20\x00\x20\x01\x20\x02\x10\x6f\x1a\x20\x00\x0b\x4a\x01\x03\x7f\x41\x00\x21\x03\x02\x40\x20\x02\x45\x0d\x00\x02\x40\x03\x40\x20\x00\x2d\x00\x00\x22\x04\x20\x01\x2d\x00\x00\x22\x05\x47\x0d\x01\x20\x01\x41\x01\x6a\x21\x01\x20\x00\x41\x01\x6a\x21\x00\x20\x02\x41\x7f\x6a\x22\x02\x0d\x00\x0c\x02\x0b\x00\x0b\x20\x04\x20\x05\x6b\x21\x03\x0b\x20\x03\x0b\x16\x01\x01\x7f\x20\x00\x41\x00\x20\x01\x10\x78\x22\x02\x20\x00\x6b\x20\x01\x20\x02\x1b\x0b\x3b\x01\x02\x7f\x20\x01\x41\xff\x01\x71\x21\x03\x03\x40\x02\x40\x20\x02\x0d\x00\x41\x00\x0f\x0b\x20\x00\x20\x02\x6a\x21\x01\x20\x02\x41\x7f\x6a\x22\x04\x21\x02\x20\x01\x41\x7f\x6a\x2d\x00\x00\x20\x03\x47\x0d\x00\x0b\x20\x00\x20\x04\x6a\x0b\x0f\x00\x20\x00\x20\x01\x20\x00\x10\x71\x41\x01\x6a\x10\x6d\x0b\xba\x02\x01\x02\x7f\x02\x40\x02\x40\x02\x40\x20\x01\x20\x00\x73\x41\x03\x71\x45\x0d\x00\x20\x02\x21\x03\x0c\x01\x0b\x20\x02\x41\x00\x47\x21\x04\x02\x40\x02\x40\x20\x02\x0d\x00\x20\x02\x21\x03\x0c\x01\x0b\x02\x40\x20\x01\x41\x03\x71\x0d\x00\x20\x02\x21\x03\x0c\x01\x0b\x03\x40\x20\x00\x20\x01\x2d\x00\x00\x22\x03\x3a\x00\x00\x20\x03\x45\x0d\x03\x20\x02\x41\x01\x47\x21\x04\x20\x00\x41\x01\x6a\x21\x00\x20\x02\x41\x7f\x6a\x21\x03\x20\x01\x41\x01\x6a\x21\x01\x20\x02\x41\x01\x46\x0d\x01\x20\x03\x21\x02\x20\x01\x41\x03\x71\x0d\x00\x0b\x0b\x02\x40\x20\x04\x0d\x00\x41\x00\x21\x02\x0c\x02\x0b\x02\x40\x20\x01\x2d\x00\x00\x0d\x00\x20\x03\x21\x02\x0c\x02\x0b\x20\x03\x41\x04\x49\x0d\x00\x20\x03\x41\x03\x71\x21\x04\x03\x40\x20\x01\x28\x02\x00\x22\x02\x41\x7f\x73\x20\x02\x41\xff\xfd\xfb\x77\x6a\x71\x41\x80\x81\x82\x84\x78\x71\x0d\x01\x20\x00\x20\x02\x36\x02\x00\x20\x00\x41\x04\x6a\x21\x00\x20\x01\x41\x04\x6a\x21\x01\x20\x03\x41\x7c\x6a\x22\x03\x41\x03\x4b\x0d\x00\x0b\x20\x04\x21\x03\x0b\x41\x00\x21\x02\x20\x03\x45\x0d\x00\x03\x40\x20\x00\x20\x01\x2d\x00\x00\x22\x04\x3a\x00\x00\x02\x40\x20\x04\x0d\x00\x20\x03\x21\x02\x0c\x02\x0b\x20\x00\x41\x01\x6a\x21\x00\x20\x01\x41\x01\x6a\x21\x01\x20\x03\x41\x7f\x6a\x22\x03\x0d\x00\x0b\x0b\x20\x00\x41\x00\x20\x02\x10\x74\x0b\xa9\x0b\x01\x08\x7f\x02\x40\x02\x40\x20\x02\x45\x0d\x00\x20\x01\x41\x03\x71\x45\x0d\x00\x20\x00\x21\x03\x03\x40\x20\x03\x20\x01\x2d\x00\x00\x3a\x00\x00\x20\x02\x41\x7f\x6a\x21\x04\x20\x03\x41\x01\x6a\x21\x03\x20\x01\x41\x01\x6a\x21\x01\x20\x02\x41\x01\x46\x0d\x02\x20\x04\x21\x02\x20\x01\x41\x03\x71\x0d\x00\x0c\x02\x0b\x00\x0b\x20\x02\x21\x04\x20\x00\x21\x03\x0b\x02\x40\x02\x40\x20\x03\x41\x03\x71\x22\x02\x0d\x00\x02\x40\x02\x40\x20\x04\x41\x10\x4f\x0d\x00\x20\x04\x21\x02\x0c\x01\x0b\x20\x04\x41\x70\x6a\x21\x02\x03\x40\x20\x03\x20\x01\x28\x02\x00\x36\x02\x00\x20\x03\x41\x04\x6a\x20\x01\x41\x04\x6a\x28\x02\x00\x36\x02\x00\x20\x03\x41\x08\x6a\x20\x01\x41\x08\x6a\x28\x02\x00\x36\x02\x00\x20\x03\x41\x0c\x6a\x20\x01\x41\x0c\x6a\x28\x02\x00\x36\x02\x00\x20\x03\x41\x10\x6a\x21\x03\x20\x01\x41\x10\x6a\x21\x01\x20\x04\x41\x70\x6a\x22\x04\x41\x0f\x4b\x0d\x00\x0b\x0b\x02\x40\x20\x02\x41\x08\x71\x45\x0d\x00\x20\x03\x20\x01\x29\x02\x00\x37\x02\x00\x20\x01\x41\x08\x6a\x21\x01\x20\x03\x41\x08\x6a\x21\x03\x0b\x02\x40\x20\x02\x41\x04\x71\x45\x0d\x00\x20\x03\x20\x01\x28\x02\x00\x36\x02\x00\x20\x01\x41\x04\x6a\x21\x01\x20\x03\x41\x04\x6a\x21\x03\x0b\x02\x40\x20\x02\x41\x02\x71\x45\x0d\x00\x20\x03\x20\x01\x2d\x00\x00\x3a\x00\x00\x20\x03\x20\x01\x2d\x00\x01\x3a\x00\x01\x20\x03\x41\x02\x6a\x21\x03\x20\x01\x41\x02\x6a\x21\x01\x0b\x20\x02\x41\x01\x71\x45\x0d\x01\x20\x03\x20\x01\x2d\x00\x00\x3a\x00\x00\x20\x00\x0f\x0b\x02\x40\x20\x04\x41\x20\x49\x0d\x00\x20\x02\x41\x7f\x6a\x22\x02\x41\x02\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x02\x0e\x03\x00\x01\x02\x00\x0b\x20\x03\x20\x01\x2d\x00\x01\x3a\x00\x01\x20\x03\x20\x01\x28\x02\x00\x22\x05\x3a\x00\x00\x20\x03\x20\x01\x2d\x00\x02\x3a\x00\x02\x20\x04\x41\x7d\x6a\x21\x06\x20\x03\x41\x03\x6a\x21\x07\x20\x04\x41\x6c\x6a\x41\x70\x71\x21\x08\x41\x00\x21\x02\x03\x40\x20\x07\x20\x02\x6a\x22\x03\x20\x01\x20\x02\x6a\x22\x09\x41\x04\x6a\x28\x02\x00\x22\x0a\x41\x08\x74\x20\x05\x41\x18\x76\x72\x36\x02\x00\x20\x03\x41\x04\x6a\x20\x09\x41\x08\x6a\x28\x02\x00\x22\x05\x41\x08\x74\x20\x0a\x41\x18\x76\x72\x36\x02\x00\x20\x03\x41\x08\x6a\x20\x09\x41\x0c\x6a\x28\x02\x00\x22\x0a\x41\x08\x74\x20\x05\x41\x18\x76\x72\x36\x02\x00\x20\x03\x41\x0c\x6a\x20\x09\x41\x10\x6a\x28\x02\x00\x22\x05\x41\x08\x74\x20\x0a\x41\x18\x76\x72\x36\x02\x00\x20\x02\x41\x10\x6a\x21\x02\x20\x06\x41\x70\x6a\x22\x06\x41\x10\x4b\x0d\x00\x0b\x20\x07\x20\x02\x6a\x21\x03\x20\x01\x20\x02\x6a\x41\x03\x6a\x21\x01\x20\x04\x20\x08\x6b\x41\x6d\x6a\x21\x04\x0c\x02\x0b\x20\x03\x20\x01\x28\x02\x00\x22\x05\x3a\x00\x00\x20\x03\x20\x01\x2d\x00\x01\x3a\x00\x01\x20\x04\x41\x7e\x6a\x21\x06\x20\x03\x41\x02\x6a\x21\x07\x20\x04\x41\x6c\x6a\x41\x70\x71\x21\x08\x41\x00\x21\x02\x03\x40\x20\x07\x20\x02\x6a\x22\x03\x20\x01\x20\x02\x6a\x22\x09\x41\x04\x6a\x28\x02\x00\x22\x0a\x41\x10\x74\x20\x05\x41\x10\x76\x72\x36\x02\x00\x20\x03\x41\x04\x6a\x20\x09\x41\x08\x6a\x28\x02\x00\x22\x05\x41\x10\x74\x20\x0a\x41\x10\x76\x72\x36\x02\x00\x20\x03\x41\x08\x6a\x20\x09\x41\x0c\x6a\x28\x02\x00\x22\x0a\x41\x10\x74\x20\x05\x41\x10\x76\x72\x36\x02\x00\x20\x03\x41\x0c\x6a\x20\x09\x41\x10\x6a\x28\x02\x00\x22\x05\x41\x10\x74\x20\x0a\x41\x10\x76\x72\x36\x02\x00\x20\x02\x41\x10\x6a\x21\x02\x20\x06\x41\x70\x6a\x22\x06\x41\x11\x4b\x0d\x00\x0b\x20\x07\x20\x02\x6a\x21\x03\x20\x01\x20\x02\x6a\x41\x02\x6a\x21\x01\x20\x04\x20\x08\x6b\x41\x6e\x6a\x21\x04\x0c\x01\x0b\x20\x03\x20\x01\x28\x02\x00\x22\x05\x3a\x00\x00\x20\x04\x41\x7f\x6a\x21\x06\x20\x03\x41\x01\x6a\x21\x07\x20\x04\x41\x6c\x6a\x41\x70\x71\x21\x08\x41\x00\x21\x02\x03\x40\x20\x07\x20\x02\x6a\x22\x03\x20\x01\x20\x02\x6a\x22\x09\x41\x04\x6a\x28\x02\x00\x22\x0a\x41\x18\x74\x20\x05\x41\x08\x76\x72\x36\x02\x00\x20\x03\x41\x04\x6a\x20\x09\x41\x08\x6a\x28\x02\x00\x22\x05\x41\x18\x74\x20\x0a\x41\x08\x76\x72\x36\x02\x00\x20\x03\x41\x08\x6a\x20\x09\x41\x0c\x6a\x28\x02\x00\x22\x0a\x41\x18\x74\x20\x05\x41\x08\x76\x72\x36\x02\x00\x20\x03\x41\x0c\x6a\x20\x09\x41\x10\x6a\x28\x02\x00\x22\x05\x41\x18\x74\x20\x0a\x41\x08\x76\x72\x36\x02\x00\x20\x02\x41\x10\x6a\x21\x02\x20\x06\x41\x70\x6a\x22\x06\x41\x12\x4b\x0d\x00\x0b\x20\x07\x20\x02\x6a\x21\x03\x20\x01\x20\x02\x6a\x41\x01\x6a\x21\x01\x20\x04\x20\x08\x6b\x41\x6f\x6a\x21\x04\x0b\x02\x40\x20\x04\x41\x10\x71\x45\x0d\x00\x20\x03\x20\x01\x2f\x00\x00\x3b\x00\x00\x20\x03\x20\x01\x2d\x00\x02\x3a\x00\x02\x20\x03\x20\x01\x2d\x00\x03\x3a\x00\x03\x20\x03\x20\x01\x2d\x00\x04\x3a\x00\x04\x20\x03\x20\x01\x2d\x00\x05\x3a\x00\x05\x20\x03\x20\x01\x2d\x00\x06\x3a\x00\x06\x20\x03\x20\x01\x2d\x00\x07\x3a\x00\x07\x20\x03\x20\x01\x2d\x00\x08\x3a\x00\x08\x20\x03\x20\x01\x2d\x00\x09\x3a\x00\x09\x20\x03\x20\x01\x2d\x00\x0a\x3a\x00\x0a\x20\x03\x20\x01\x2d\x00\x0b\x3a\x00\x0b\x20\x03\x20\x01\x2d\x00\x0c\x3a\x00\x0c\x20\x03\x20\x01\x2d\x00\x0d\x3a\x00\x0d\x20\x03\x20\x01\x2d\x00\x0e\x3a\x00\x0e\x20\x03\x20\x01\x2d\x00\x0f\x3a\x00\x0f\x20\x03\x41\x10\x6a\x21\x03\x20\x01\x41\x10\x6a\x21\x01\x0b\x02\x40\x20\x04\x41\x08\x71\x45\x0d\x00\x20\x03\x20\x01\x2d\x00\x00\x3a\x00\x00\x20\x03\x20\x01\x2d\x00\x01\x3a\x00\x01\x20\x03\x20\x01\x2d\x00\x02\x3a\x00\x02\x20\x03\x20\x01\x2d\x00\x03\x3a\x00\x03\x20\x03\x20\x01\x2d\x00\x04\x3a\x00\x04\x20\x03\x20\x01\x2d\x00\x05\x3a\x00\x05\x20\x03\x20\x01\x2d\x00\x06\x3a\x00\x06\x20\x03\x20\x01\x2d\x00\x07\x3a\x00\x07\x20\x03\x41\x08\x6a\x21\x03\x20\x01\x41\x08\x6a\x21\x01\x0b\x02\x40\x20\x04\x41\x04\x71\x45\x0d\x00\x20\x03\x20\x01\x2d\x00\x00\x3a\x00\x00\x20\x03\x20\x01\x2d\x00\x01\x3a\x00\x01\x20\x03\x20\x01\x2d\x00\x02\x3a\x00\x02\x20\x03\x20\x01\x2d\x00\x03\x3a\x00\x03\x20\x03\x41\x04\x6a\x21\x03\x20\x01\x41\x04\x6a\x21\x01\x0b\x02\x40\x20\x04\x41\x02\x71\x45\x0d\x00\x20\x03\x20\x01\x2d\x00\x00\x3a\x00\x00\x20\x03\x20\x01\x2d\x00\x01\x3a\x00\x01\x20\x03\x41\x02\x6a\x21\x03\x20\x01\x41\x02\x6a\x21\x01\x0b\x20\x04\x41\x01\x71\x45\x0d\x00\x20\x03\x20\x01\x2d\x00\x00\x3a\x00\x00\x0b\x20\x00\x0b\xb6\x01\x01\x03\x7f\x20\x00\x21\x01\x02\x40\x02\x40\x02\x40\x20\x00\x41\x03\x71\x45\x0d\x00\x02\x40\x20\x00\x2d\x00\x00\x0d\x00\x20\x00\x20\x00\x6b\x0f\x0b\x20\x00\x41\x01\x6a\x21\x01\x03\x40\x20\x01\x41\x03\x71\x45\x0d\x01\x20\x01\x2d\x00\x00\x21\x02\x20\x01\x41\x01\x6a\x22\x03\x21\x01\x20\x02\x45\x0d\x02\x0c\x00\x0b\x00\x0b\x20\x01\x41\x7c\x6a\x21\x01\x03\x40\x20\x01\x41\x04\x6a\x22\x01\x28\x02\x00\x22\x02\x41\x7f\x73\x20\x02\x41\xff\xfd\xfb\x77\x6a\x71\x41\x80\x81\x82\x84\x78\x71\x45\x0d\x00\x0b\x02\x40\x20\x02\x41\xff\x01\x71\x0d\x00\x20\x01\x20\x00\x6b\x0f\x0b\x03\x40\x20\x01\x2d\x00\x01\x21\x02\x20\x01\x41\x01\x6a\x22\x03\x21\x01\x20\x02\x0d\x00\x0c\x02\x0b\x00\x0b\x20\x03\x41\x7f\x6a\x21\x03\x0b\x20\x03\x20\x00\x6b\x0b\xd4\x01\x01\x01\x7f\x02\x40\x02\x40\x20\x01\x20\x00\x73\x41\x03\x71\x0d\x00\x02\x40\x20\x01\x41\x03\x71\x45\x0d\x00\x03\x40\x20\x00\x20\x01\x2d\x00\x00\x22\x02\x3a\x00\x00\x20\x02\x45\x0d\x03\x20\x00\x41\x01\x6a\x21\x00\x20\x01\x41\x01\x6a\x22\x01\x41\x03\x71\x0d\x00\x0b\x0b\x20\x01\x28\x02\x00\x22\x02\x41\x7f\x73\x20\x02\x41\xff\xfd\xfb\x77\x6a\x71\x41\x80\x81\x82\x84\x78\x71\x0d\x00\x03\x40\x20\x00\x20\x02\x36\x02\x00\x20\x01\x28\x02\x04\x21\x02\x20\x00\x41\x04\x6a\x21\x00\x20\x01\x41\x04\x6a\x21\x01\x20\x02\x41\x7f\x73\x20\x02\x41\xff\xfd\xfb\x77\x6a\x71\x41\x80\x81\x82\x84\x78\x71\x45\x0d\x00\x0b\x0b\x20\x00\x20\x01\x2d\x00\x00\x22\x02\x3a\x00\x00\x20\x02\x45\x0d\x00\x20\x01\x41\x01\x6a\x21\x01\x03\x40\x20\x00\x20\x01\x2d\x00\x00\x22\x02\x3a\x00\x01\x20\x01\x41\x01\x6a\x21\x01\x20\x00\x41\x01\x6a\x21\x00\x20\x02\x0d\x00\x0b\x0b\x20\x00\x0b\x0b\x00\x20\x00\x20\x01\x10\x72\x1a\x20\x00\x0b\xfc\x02\x02\x03\x7f\x01\x7e\x02\x40\x20\x02\x45\x0d\x00\x20\x00\x20\x01\x3a\x00\x00\x20\x02\x20\x00\x6a\x22\x03\x41\x7f\x6a\x20\x01\x3a\x00\x00\x20\x02\x41\x03\x49\x0d\x00\x20\x00\x20\x01\x3a\x00\x02\x20\x00\x20\x01\x3a\x00\x01\x20\x03\x41\x7d\x6a\x20\x01\x3a\x00\x00\x20\x03\x41\x7e\x6a\x20\x01\x3a\x00\x00\x20\x02\x41\x07\x49\x0d\x00\x20\x00\x20\x01\x3a\x00\x03\x20\x03\x41\x7c\x6a\x20\x01\x3a\x00\x00\x20\x02\x41\x09\x49\x0d\x00\x20\x00\x41\x00\x20\x00\x6b\x41\x03\x71\x22\x04\x6a\x22\x03\x20\x01\x41\xff\x01\x71\x41\x81\x82\x84\x08\x6c\x22\x01\x36\x02\x00\x20\x03\x20\x02\x20\x04\x6b\x41\x7c\x71\x22\x04\x6a\x22\x02\x41\x7c\x6a\x20\x01\x36\x02\x00\x20\x04\x41\x09\x49\x0d\x00\x20\x03\x20\x01\x36\x02\x08\x20\x03\x20\x01\x36\x02\x04\x20\x02\x41\x78\x6a\x20\x01\x36\x02\x00\x20\x02\x41\x74\x6a\x20\x01\x36\x02\x00\x20\x04\x41\x19\x49\x0d\x00\x20\x03\x20\x01\x36\x02\x18\x20\x03\x20\x01\x36\x02\x14\x20\x03\x20\x01\x36\x02\x10\x20\x03\x20\x01\x36\x02\x0c\x20\x02\x41\x70\x6a\x20\x01\x36\x02\x00\x20\x02\x41\x6c\x6a\x20\x01\x36\x02\x00\x20\x02\x41\x68\x6a\x20\x01\x36\x02\x00\x20\x02\x41\x64\x6a\x20\x01\x36\x02\x00\x20\x04\x20\x03\x41\x04\x71\x41\x18\x72\x22\x05\x6b\x22\x02\x41\x20\x49\x0d\x00\x20\x01\xad\x22\x06\x42\x20\x86\x20\x06\x84\x21\x06\x20\x03\x20\x05\x6a\x21\x01\x03\x40\x20\x01\x20\x06\x37\x03\x00\x20\x01\x41\x18\x6a\x20\x06\x37\x03\x00\x20\x01\x41\x10\x6a\x20\x06\x37\x03\x00\x20\x01\x41\x08\x6a\x20\x06\x37\x03\x00\x20\x01\x41\x20\x6a\x21\x01\x20\x02\x41\x60\x6a\x22\x02\x41\x1f\x4b\x0d\x00\x0b\x0b\x20\x00\x0b\xe0\x01\x01\x02\x7f\x02\x40\x20\x01\x41\xff\x01\x71\x22\x02\x45\x0d\x00\x02\x40\x02\x40\x20\x00\x41\x03\x71\x45\x0d\x00\x03\x40\x20\x00\x2d\x00\x00\x22\x03\x45\x0d\x02\x20\x03\x20\x01\x41\xff\x01\x71\x46\x0d\x02\x20\x00\x41\x01\x6a\x22\x00\x41\x03\x71\x0d\x00\x0b\x0b\x02\x40\x20\x00\x28\x02\x00\x22\x03\x41\x7f\x73\x20\x03\x41\xff\xfd\xfb\x77\x6a\x71\x41\x80\x81\x82\x84\x78\x71\x0d\x00\x20\x02\x41\x81\x82\x84\x08\x6c\x21\x02\x03\x40\x20\x03\x20\x02\x73\x22\x03\x41\x7f\x73\x20\x03\x41\xff\xfd\xfb\x77\x6a\x71\x41\x80\x81\x82\x84\x78\x71\x0d\x01\x20\x00\x28\x02\x04\x21\x03\x20\x00\x41\x04\x6a\x21\x00\x20\x03\x41\x7f\x73\x20\x03\x41\xff\xfd\xfb\x77\x6a\x71\x41\x80\x81\x82\x84\x78\x71\x45\x0d\x00\x0b\x0b\x20\x00\x41\x7f\x6a\x21\x00\x03\x40\x20\x00\x41\x01\x6a\x22\x00\x2d\x00\x00\x22\x03\x45\x0d\x01\x20\x03\x20\x01\x41\xff\x01\x71\x47\x0d\x00\x0b\x0b\x20\x00\x0f\x0b\x20\x00\x20\x00\x10\x71\x6a\x0b\x19\x00\x20\x00\x20\x01\x10\x75\x22\x00\x41\x00\x20\x00\x2d\x00\x00\x20\x01\x41\xff\x01\x71\x46\x1b\x0b\x67\x01\x02\x7f\x20\x01\x2d\x00\x00\x21\x02\x02\x40\x20\x00\x2d\x00\x00\x22\x03\x45\x0d\x00\x20\x03\x20\x02\x41\xff\x01\x71\x47\x0d\x00\x20\x00\x41\x01\x6a\x21\x00\x20\x01\x41\x01\x6a\x21\x01\x03\x40\x20\x01\x2d\x00\x00\x21\x02\x20\x00\x2d\x00\x00\x22\x03\x45\x0d\x01\x20\x00\x41\x01\x6a\x21\x00\x20\x01\x41\x01\x6a\x21\x01\x20\x03\x20\x02\x41\xff\x01\x71\x46\x0d\x00\x0b\x0b\x20\x03\x20\x02\x41\xff\x01\x71\x6b\x0b\xa9\x02\x01\x04\x7f\x20\x02\x41\x00\x47\x21\x03\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x0d\x00\x20\x02\x21\x04\x0c\x01\x0b\x02\x40\x20\x00\x41\x03\x71\x0d\x00\x20\x02\x21\x04\x0c\x01\x0b\x20\x01\x41\xff\x01\x71\x21\x05\x03\x40\x02\x40\x20\x00\x2d\x00\x00\x20\x05\x47\x0d\x00\x20\x02\x21\x04\x0c\x03\x0b\x20\x02\x41\x01\x47\x21\x03\x20\x02\x41\x7f\x6a\x21\x04\x20\x00\x41\x01\x6a\x21\x00\x20\x02\x41\x01\x46\x0d\x01\x20\x04\x21\x02\x20\x00\x41\x03\x71\x0d\x00\x0b\x0b\x20\x03\x45\x0d\x01\x0b\x02\x40\x20\x00\x2d\x00\x00\x20\x01\x41\xff\x01\x71\x46\x0d\x00\x20\x04\x41\x04\x49\x0d\x00\x20\x01\x41\xff\x01\x71\x41\x81\x82\x84\x08\x6c\x21\x03\x20\x04\x41\x7c\x6a\x22\x02\x41\x03\x71\x21\x05\x20\x02\x41\x7c\x71\x20\x00\x6a\x41\x04\x6a\x21\x06\x03\x40\x20\x00\x28\x02\x00\x20\x03\x73\x22\x02\x41\x7f\x73\x20\x02\x41\xff\xfd\xfb\x77\x6a\x71\x41\x80\x81\x82\x84\x78\x71\x0d\x01\x20\x00\x41\x04\x6a\x21\x00\x20\x04\x41\x7c\x6a\x22\x04\x41\x03\x4b\x0d\x00\x0b\x20\x05\x21\x04\x20\x06\x21\x00\x0b\x20\x04\x45\x0d\x00\x20\x01\x41\xff\x01\x71\x21\x02\x03\x40\x02\x40\x20\x00\x2d\x00\x00\x20\x02\x47\x0d\x00\x20\x00\x0f\x0b\x20\x00\x41\x01\x6a\x21\x00\x20\x04\x41\x7f\x6a\x22\x04\x0d\x00\x0b\x0b\x41\x00\x0b\x10\x00\x20\x00\x20\x00\x10\x71\x6a\x20\x01\x10\x73\x1a\x20\x00\x0b\x04\x00\x20\x00\x0b\x08\x00\x20\x00\x20\x01\x10\x7a\x0b\xb9\x01\x01\x04\x7f\x03\x40\x20\x00\x2c\x00\x00\x22\x01\x41\x77\x6a\x21\x02\x20\x00\x41\x01\x6a\x22\x03\x21\x00\x20\x01\x41\x20\x46\x0d\x00\x20\x03\x21\x00\x20\x02\x41\x05\x49\x0d\x00\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x41\x55\x6a\x22\x00\x41\x02\x4b\x0d\x00\x41\x00\x21\x04\x20\x00\x0e\x03\x02\x00\x01\x02\x0b\x20\x03\x41\x7f\x6a\x21\x03\x41\x00\x21\x04\x0c\x02\x0b\x41\x01\x21\x04\x0b\x20\x03\x2c\x00\x00\x21\x01\x0b\x41\x00\x21\x02\x02\x40\x20\x01\x41\x50\x6a\x22\x01\x41\x09\x4b\x0d\x00\x20\x03\x41\x01\x6a\x21\x00\x41\x00\x21\x02\x03\x40\x20\x02\x41\x0a\x6c\x20\x01\x6b\x21\x02\x20\x00\x2c\x00\x00\x21\x01\x20\x00\x41\x01\x6a\x21\x00\x20\x01\x41\x50\x6a\x22\x01\x41\x0a\x49\x0d\x00\x0b\x0b\x20\x02\x41\x00\x20\x02\x6b\x20\x04\x1b\x0b\x81\x01\x01\x02\x7f\x20\x00\x20\x00\x28\x02\x3c\x22\x01\x41\x7f\x6a\x20\x01\x72\x36\x02\x3c\x02\x40\x20\x00\x28\x02\x14\x20\x00\x28\x02\x18\x46\x0d\x00\x20\x00\x41\x00\x41\x00\x20\x00\x28\x02\x20\x11\x01\x00\x1a\x0b\x20\x00\x41\x00\x36\x02\x18\x20\x00\x42\x00\x37\x03\x10\x02\x40\x20\x00\x28\x02\x00\x22\x01\x41\x04\x71\x45\x0d\x00\x20\x00\x20\x01\x41\x20\x72\x36\x02\x00\x41\x7f\x0f\x0b\x20\x00\x20\x00\x28\x02\x28\x20\x00\x28\x02\x2c\x6a\x22\x02\x36\x02\x08\x20\x00\x20\x02\x36\x02\x04\x20\x01\x41\x1b\x74\x41\x1f\x75\x0b\x40\x01\x02\x7f\x23\x00\x41\x10\x6b\x22\x01\x24\x00\x41\x7f\x21\x02\x02\x40\x20\x00\x10\x7d\x0d\x00\x20\x00\x20\x01\x41\x0f\x6a\x41\x01\x20\x00\x28\x02\x1c\x11\x01\x00\x41\x01\x47\x0d\x00\x20\x01\x2d\x00\x0f\x21\x02\x0b\x20\x01\x41\x10\x6a\x24\x00\x20\x02\x0b\x4b\x01\x02\x7f\x20\x00\x20\x01\x37\x03\x58\x20\x00\x20\x00\x28\x02\x28\x20\x00\x28\x02\x04\x22\x02\x6b\xac\x37\x03\x60\x20\x00\x28\x02\x08\x21\x03\x02\x40\x20\x01\x50\x0d\x00\x20\x03\x20\x02\x6b\xac\x20\x01\x57\x0d\x00\x20\x00\x20\x02\x20\x01\xa7\x6a\x36\x02\x54\x0f\x0b\x20\x00\x20\x03\x36\x02\x54\x0b\xf1\x01\x02\x03\x7f\x02\x7e\x20\x00\x29\x03\x60\x20\x00\x28\x02\x04\x22\x01\x20\x00\x28\x02\x28\x22\x02\x6b\xac\x7c\x21\x04\x02\x40\x02\x40\x02\x40\x20\x00\x29\x03\x58\x22\x05\x50\x0d\x00\x20\x04\x20\x05\x59\x0d\x01\x0b\x20\x00\x10\x7e\x22\x01\x41\x7f\x4a\x0d\x01\x20\x00\x28\x02\x04\x21\x01\x20\x00\x28\x02\x28\x21\x02\x0b\x20\x00\x42\x7f\x37\x03\x58\x20\x00\x20\x01\x36\x02\x54\x20\x00\x20\x04\x20\x02\x20\x01\x6b\xac\x7c\x37\x03\x60\x41\x7f\x0f\x0b\x20\x04\x42\x01\x7c\x21\x04\x20\x00\x28\x02\x08\x21\x03\x02\x40\x02\x40\x02\x40\x20\x00\x29\x03\x58\x22\x05\x42\x00\x52\x0d\x00\x20\x00\x28\x02\x04\x21\x02\x0c\x01\x0b\x20\x05\x20\x04\x7d\x22\x05\x20\x03\x20\x00\x28\x02\x04\x22\x02\x6b\xac\x59\x0d\x00\x20\x00\x20\x02\x20\x05\xa7\x6a\x36\x02\x54\x0c\x01\x0b\x20\x00\x20\x03\x36\x02\x54\x0b\x20\x00\x20\x04\x20\x00\x28\x02\x28\x20\x02\x6b\xac\x7c\x37\x03\x60\x02\x40\x20\x01\x20\x02\x41\x7f\x6a\x22\x00\x2d\x00\x00\x46\x0d\x00\x20\x00\x20\x01\x3a\x00\x00\x0b\x20\x01\x0b\xc6\x2a\x03\x11\x7f\x04\x7c\x03\x7e\x23\x00\x41\x80\x04\x6b\x22\x03\x24\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x14\x02\x40\x20\x01\x41\x02\x4b\x0d\x00\x20\x00\x41\xd4\x00\x6a\x21\x04\x20\x00\x41\x04\x6a\x21\x05\x20\x01\x41\x02\x74\x22\x06\x41\x9c\x1b\x6a\x28\x02\x00\x21\x07\x20\x06\x41\x90\x1b\x6a\x28\x02\x00\x21\x08\x02\x40\x02\x40\x03\x40\x02\x40\x02\x40\x20\x05\x28\x02\x00\x22\x06\x20\x04\x28\x02\x00\x46\x0d\x00\x20\x05\x20\x06\x41\x01\x6a\x36\x02\x00\x20\x06\x2d\x00\x00\x21\x06\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x06\x0b\x20\x06\x41\x77\x6a\x41\x05\x49\x0d\x00\x20\x06\x41\x60\x6a\x22\x09\x41\x0d\x4b\x0d\x01\x02\x40\x20\x09\x0e\x0e\x01\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x00\x02\x00\x01\x0b\x0b\x41\x7f\x41\x01\x20\x06\x41\x2d\x46\x1b\x21\x0a\x02\x40\x20\x05\x28\x02\x00\x22\x06\x20\x04\x28\x02\x00\x46\x0d\x00\x20\x05\x20\x06\x41\x01\x6a\x36\x02\x00\x20\x06\x2d\x00\x00\x21\x06\x0c\x02\x0b\x20\x00\x10\x80\x01\x21\x06\x0c\x01\x0b\x41\x01\x21\x0a\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x06\x41\x20\x72\x22\x09\x41\xe9\x00\x47\x0d\x00\x02\x40\x02\x40\x20\x05\x28\x02\x00\x22\x06\x20\x04\x28\x02\x00\x46\x0d\x00\x20\x05\x20\x06\x41\x01\x6a\x36\x02\x00\x20\x06\x2d\x00\x00\x21\x06\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x06\x0b\x41\x01\x21\x09\x20\x06\x41\x20\x72\x41\xee\x00\x46\x0d\x01\x0c\x02\x0b\x20\x09\x41\xee\x00\x47\x0d\x05\x02\x40\x02\x40\x20\x05\x28\x02\x00\x22\x06\x20\x04\x28\x02\x00\x46\x0d\x00\x20\x05\x20\x06\x41\x01\x6a\x36\x02\x00\x20\x06\x2d\x00\x00\x21\x06\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x06\x0b\x20\x06\x41\x20\x72\x41\xe1\x00\x47\x0d\x03\x02\x40\x02\x40\x20\x05\x28\x02\x00\x22\x06\x20\x04\x28\x02\x00\x46\x0d\x00\x20\x05\x20\x06\x41\x01\x6a\x36\x02\x00\x20\x06\x2d\x00\x00\x21\x06\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x06\x0b\x20\x06\x41\x20\x72\x41\xee\x00\x47\x0d\x03\x20\x02\x41\x00\x47\x21\x0b\x0c\x04\x0b\x02\x40\x02\x40\x20\x05\x28\x02\x00\x22\x06\x20\x04\x28\x02\x00\x46\x0d\x00\x20\x05\x20\x06\x41\x01\x6a\x36\x02\x00\x20\x06\x2d\x00\x00\x21\x06\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x06\x0b\x41\x02\x21\x09\x20\x06\x41\x20\x72\x41\xe6\x00\x47\x0d\x00\x02\x40\x02\x40\x20\x05\x28\x02\x00\x22\x06\x20\x04\x28\x02\x00\x46\x0d\x00\x20\x05\x20\x06\x41\x01\x6a\x36\x02\x00\x20\x06\x2d\x00\x00\x21\x06\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x06\x0b\x41\x03\x21\x09\x02\x40\x02\x40\x20\x06\x41\x20\x72\x41\xe9\x00\x47\x0d\x00\x02\x40\x02\x40\x20\x05\x28\x02\x00\x22\x06\x20\x04\x28\x02\x00\x46\x0d\x00\x20\x05\x20\x06\x41\x01\x6a\x36\x02\x00\x20\x06\x2d\x00\x00\x21\x06\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x06\x0b\x41\x04\x21\x09\x02\x40\x20\x06\x41\x20\x72\x41\xee\x00\x47\x0d\x00\x02\x40\x02\x40\x20\x05\x28\x02\x00\x22\x06\x20\x04\x28\x02\x00\x46\x0d\x00\x20\x05\x20\x06\x41\x01\x6a\x36\x02\x00\x20\x06\x2d\x00\x00\x21\x06\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x06\x0b\x41\x05\x21\x09\x20\x06\x41\x20\x72\x41\xe9\x00\x47\x0d\x00\x02\x40\x02\x40\x20\x05\x28\x02\x00\x22\x06\x20\x04\x28\x02\x00\x46\x0d\x00\x20\x05\x20\x06\x41\x01\x6a\x36\x02\x00\x20\x06\x2d\x00\x00\x21\x06\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x06\x0b\x41\x06\x21\x09\x20\x06\x41\x20\x72\x41\xf4\x00\x47\x0d\x00\x02\x40\x02\x40\x20\x05\x28\x02\x00\x22\x06\x20\x04\x28\x02\x00\x46\x0d\x00\x20\x05\x20\x06\x41\x01\x6a\x36\x02\x00\x20\x06\x2d\x00\x00\x21\x06\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x06\x0b\x41\x07\x21\x09\x20\x06\x41\x20\x72\x41\xf9\x00\x46\x0d\x02\x0b\x20\x02\x0d\x00\x20\x02\x41\x00\x47\x21\x0b\x0c\x03\x0b\x02\x40\x20\x00\x29\x03\x58\x22\x18\x42\x00\x53\x0d\x00\x20\x05\x20\x05\x28\x02\x00\x41\x7f\x6a\x36\x02\x00\x0b\x20\x02\x45\x0d\x00\x20\x09\x41\x04\x49\x0d\x00\x20\x18\x42\x00\x53\x21\x06\x03\x40\x02\x40\x20\x06\x0d\x00\x20\x05\x20\x05\x28\x02\x00\x41\x7f\x6a\x36\x02\x00\x0b\x20\x09\x41\x7f\x6a\x22\x09\x41\x03\x4b\x0d\x00\x0b\x0b\x20\x0a\xb2\x43\x00\x00\x80\x7f\x94\xbb\x21\x14\x0c\x05\x0b\x20\x02\x41\x00\x47\x21\x0b\x0b\x20\x09\x41\x03\x4b\x0d\x00\x20\x09\x0e\x04\x02\x00\x00\x01\x02\x0b\x02\x40\x20\x00\x29\x03\x58\x42\x00\x53\x0d\x00\x20\x05\x20\x05\x28\x02\x00\x41\x7f\x6a\x36\x02\x00\x0b\x41\x00\x41\x1c\x36\x02\xa0\xd6\x05\x20\x00\x42\x00\x10\x7f\x0c\x02\x0b\x02\x40\x02\x40\x20\x05\x28\x02\x00\x22\x06\x20\x04\x28\x02\x00\x46\x0d\x00\x20\x05\x20\x06\x41\x01\x6a\x36\x02\x00\x20\x06\x2d\x00\x00\x21\x06\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x06\x0b\x02\x40\x02\x40\x20\x06\x41\x28\x47\x0d\x00\x41\x7f\x21\x09\x0c\x01\x0b\x44\x00\x00\x00\x00\x00\x00\xf8\x7f\x21\x14\x20\x00\x29\x03\x58\x42\x00\x53\x0d\x02\x20\x05\x20\x05\x28\x02\x00\x41\x7f\x6a\x36\x02\x00\x0c\x02\x0b\x03\x40\x02\x40\x02\x40\x20\x05\x28\x02\x00\x22\x06\x20\x04\x28\x02\x00\x46\x0d\x00\x20\x05\x20\x06\x41\x01\x6a\x36\x02\x00\x20\x06\x2d\x00\x00\x21\x06\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x06\x0b\x20\x06\x41\xbf\x7f\x6a\x21\x0c\x02\x40\x02\x40\x20\x06\x41\x50\x6a\x41\x0a\x49\x0d\x00\x20\x0c\x41\x1a\x49\x0d\x00\x20\x06\x41\x9f\x7f\x6a\x21\x0c\x20\x06\x41\xdf\x00\x46\x0d\x00\x20\x0c\x41\x1a\x4f\x0d\x01\x0b\x20\x09\x41\x7f\x6a\x21\x09\x0c\x01\x0b\x0b\x02\x40\x20\x06\x41\x29\x47\x0d\x00\x44\x00\x00\x00\x00\x00\x00\xf8\x7f\x21\x14\x0c\x02\x0b\x02\x40\x20\x00\x29\x03\x58\x22\x18\x42\x00\x53\x0d\x00\x20\x05\x20\x05\x28\x02\x00\x41\x7f\x6a\x36\x02\x00\x0b\x02\x40\x02\x40\x20\x0b\x45\x0d\x00\x20\x09\x0d\x01\x44\x00\x00\x00\x00\x00\x00\xf8\x7f\x21\x14\x0c\x03\x0b\x41\x00\x41\x1c\x36\x02\xa0\xd6\x05\x20\x00\x42\x00\x10\x7f\x0c\x02\x0b\x20\x18\x42\x00\x53\x21\x00\x03\x40\x02\x40\x20\x00\x0d\x00\x20\x05\x20\x05\x28\x02\x00\x41\x7f\x6a\x36\x02\x00\x0b\x20\x09\x41\x01\x6a\x22\x06\x20\x09\x49\x21\x04\x20\x06\x21\x09\x20\x04\x45\x0d\x00\x0b\x44\x00\x00\x00\x00\x00\x00\xf8\x7f\x21\x14\x0c\x01\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x20\x06\x41\x30\x47\x0d\x00\x02\x40\x02\x40\x20\x05\x28\x02\x00\x22\x09\x20\x04\x28\x02\x00\x46\x0d\x00\x20\x05\x20\x09\x41\x01\x6a\x36\x02\x00\x20\x09\x2d\x00\x00\x21\x09\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x09\x0b\x02\x40\x20\x09\x41\x20\x72\x41\xf8\x00\x47\x0d\x00\x02\x40\x02\x40\x20\x05\x28\x02\x00\x22\x06\x20\x04\x28\x02\x00\x46\x0d\x00\x20\x05\x20\x06\x41\x01\x6a\x36\x02\x00\x20\x06\x2d\x00\x00\x21\x06\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x06\x0b\x41\x00\x21\x0b\x02\x40\x02\x40\x03\x40\x02\x40\x20\x06\x41\x30\x46\x0d\x00\x20\x06\x41\x2e\x46\x0d\x02\x42\x00\x21\x19\x41\x00\x21\x0d\x0c\x03\x0b\x02\x40\x20\x05\x28\x02\x00\x22\x06\x20\x04\x28\x02\x00\x46\x0d\x00\x41\x01\x21\x0b\x20\x05\x20\x06\x41\x01\x6a\x36\x02\x00\x20\x06\x2d\x00\x00\x21\x06\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x06\x41\x01\x21\x0b\x0c\x00\x0b\x00\x0b\x02\x40\x02\x40\x20\x05\x28\x02\x00\x22\x06\x20\x04\x28\x02\x00\x46\x0d\x00\x20\x05\x20\x06\x41\x01\x6a\x36\x02\x00\x20\x06\x2d\x00\x00\x21\x06\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x06\x0b\x42\x00\x21\x19\x02\x40\x20\x06\x41\x30\x46\x0d\x00\x41\x01\x21\x0d\x0c\x01\x0b\x03\x40\x02\x40\x02\x40\x20\x05\x28\x02\x00\x22\x06\x20\x04\x28\x02\x00\x46\x0d\x00\x20\x05\x20\x06\x41\x01\x6a\x36\x02\x00\x20\x06\x2d\x00\x00\x21\x06\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x06\x0b\x20\x19\x42\x7f\x7c\x21\x19\x20\x06\x41\x30\x46\x0d\x00\x0b\x41\x01\x21\x0d\x41\x01\x21\x0b\x0b\x42\x00\x21\x18\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x21\x15\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x14\x41\x00\x21\x01\x41\x00\x21\x0e\x02\x40\x03\x40\x20\x06\x41\x20\x72\x21\x09\x02\x40\x02\x40\x20\x06\x41\x50\x6a\x22\x0c\x41\x0a\x49\x0d\x00\x02\x40\x20\x06\x41\x2e\x46\x0d\x00\x20\x09\x41\x9f\x7f\x6a\x41\x05\x4b\x0d\x04\x0b\x20\x06\x41\x2e\x47\x0d\x00\x20\x0d\x0d\x03\x41\x01\x21\x0d\x20\x18\x21\x19\x0c\x01\x0b\x20\x09\x41\xa9\x7f\x6a\x20\x0c\x20\x06\x41\x39\x4a\x1b\x21\x06\x02\x40\x02\x40\x20\x18\x42\x07\x55\x0d\x00\x20\x06\x20\x01\x41\x04\x74\x6a\x21\x01\x0c\x01\x0b\x02\x40\x20\x18\x42\x0d\x55\x0d\x00\x20\x14\x20\x15\x44\x00\x00\x00\x00\x00\x00\xb0\x3f\xa2\x22\x15\x20\x06\xb7\xa2\xa0\x21\x14\x0c\x01\x0b\x20\x0e\x0d\x00\x20\x06\x45\x0d\x00\x20\x14\x20\x15\x44\x00\x00\x00\x00\x00\x00\xe0\x3f\xa2\xa0\x21\x14\x41\x01\x21\x0e\x0b\x20\x18\x42\x01\x7c\x21\x18\x41\x01\x21\x0b\x0b\x02\x40\x20\x05\x28\x02\x00\x22\x06\x20\x04\x28\x02\x00\x46\x0d\x00\x20\x05\x20\x06\x41\x01\x6a\x36\x02\x00\x20\x06\x2d\x00\x00\x21\x06\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x06\x0c\x00\x0b\x00\x0b\x02\x40\x20\x0b\x0d\x00\x02\x40\x20\x00\x29\x03\x58\x22\x18\x42\x00\x53\x0d\x00\x20\x05\x20\x05\x28\x02\x00\x41\x7f\x6a\x36\x02\x00\x0b\x02\x40\x02\x40\x20\x02\x45\x0d\x00\x20\x18\x42\x00\x53\x0d\x01\x20\x05\x20\x05\x28\x02\x00\x22\x06\x41\x7f\x6a\x36\x02\x00\x20\x0d\x45\x0d\x01\x20\x05\x20\x06\x41\x7e\x6a\x36\x02\x00\x0c\x01\x0b\x20\x00\x42\x00\x10\x7f\x0b\x20\x0a\xb7\x44\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x21\x14\x0c\x06\x0b\x02\x40\x20\x18\x42\x07\x55\x0d\x00\x20\x18\x42\x7f\x7c\x21\x1a\x03\x40\x20\x01\x41\x04\x74\x21\x01\x20\x1a\x42\x01\x7c\x22\x1a\x42\x07\x53\x0d\x00\x0b\x0b\x02\x40\x02\x40\x20\x09\x41\xf0\x00\x47\x0d\x00\x20\x00\x20\x02\x10\x82\x01\x22\x1a\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x52\x0d\x01\x02\x40\x20\x02\x45\x0d\x00\x42\x00\x21\x1a\x20\x00\x29\x03\x58\x42\x00\x53\x0d\x02\x20\x05\x20\x05\x28\x02\x00\x41\x7f\x6a\x36\x02\x00\x0c\x02\x0b\x20\x00\x42\x00\x10\x7f\x0c\x04\x0b\x42\x00\x21\x1a\x20\x00\x29\x03\x58\x42\x00\x53\x0d\x00\x20\x05\x20\x05\x28\x02\x00\x41\x7f\x6a\x36\x02\x00\x0b\x02\x40\x20\x01\x0d\x00\x20\x0a\xb7\x44\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x21\x14\x0c\x06\x0b\x02\x40\x20\x19\x20\x18\x20\x0d\x1b\x42\x02\x86\x20\x1a\x7c\x42\x60\x7c\x22\x18\x41\x00\x20\x07\x6b\xad\x57\x0d\x00\x41\x00\x41\xc4\x00\x36\x02\xa0\xd6\x05\x20\x0a\xb7\x44\xff\xff\xff\xff\xff\xff\xef\x7f\xa2\x44\xff\xff\xff\xff\xff\xff\xef\x7f\xa2\x21\x14\x0c\x06\x0b\x20\x18\x20\x07\x41\x96\x7f\x6a\xac\x53\x0d\x03\x02\x40\x20\x01\x41\x00\x48\x0d\x00\x03\x40\x20\x14\x20\x14\x44\x00\x00\x00\x00\x00\x00\xf0\xbf\xa0\x20\x14\x20\x14\x44\x00\x00\x00\x00\x00\x00\xe0\x3f\x66\x22\x06\x1b\xa0\x21\x14\x20\x18\x42\x7f\x7c\x21\x18\x20\x06\x20\x01\x41\x01\x74\x72\x22\x01\x41\x7f\x4a\x0d\x00\x0b\x0b\x02\x40\x02\x40\x20\x18\x41\x20\x20\x07\x6b\xad\x7c\x22\x19\xa7\x22\x06\x41\x00\x20\x06\x41\x00\x4a\x1b\x20\x08\x20\x19\x20\x08\xad\x53\x1b\x22\x06\x41\x35\x48\x0d\x00\x20\x0a\xb7\x21\x15\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x16\x0c\x01\x0b\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x41\xd4\x00\x20\x06\x6b\x10\xa2\x01\x20\x0a\xb7\x22\x15\xa6\x21\x16\x0b\x02\x40\x44\x00\x00\x00\x00\x00\x00\x00\x00\x20\x14\x20\x01\x41\x01\x71\x45\x20\x14\x44\x00\x00\x00\x00\x00\x00\x00\x00\x62\x20\x06\x41\x20\x48\x71\x71\x22\x06\x1b\x20\x15\xa2\x20\x15\x20\x01\x20\x06\x6a\xb8\xa2\x20\x16\xa0\xa0\x20\x16\xa1\x22\x14\x44\x00\x00\x00\x00\x00\x00\x00\x00\x62\x0d\x00\x41\x00\x41\xc4\x00\x36\x02\xa0\xd6\x05\x0b\x20\x14\x20\x18\xa7\x10\xa2\x01\x21\x14\x0c\x05\x0b\x20\x00\x29\x03\x58\x42\x00\x53\x0d\x00\x20\x05\x20\x05\x28\x02\x00\x41\x7f\x6a\x36\x02\x00\x0b\x41\x00\x21\x09\x41\x00\x20\x07\x20\x08\x6a\x22\x0f\x6b\x21\x10\x02\x40\x02\x40\x03\x40\x02\x40\x20\x06\x41\x30\x46\x0d\x00\x20\x06\x41\x2e\x46\x0d\x02\x41\x00\x21\x0e\x42\x00\x21\x18\x0c\x03\x0b\x02\x40\x20\x05\x28\x02\x00\x22\x06\x20\x04\x28\x02\x00\x46\x0d\x00\x41\x01\x21\x09\x20\x05\x20\x06\x41\x01\x6a\x36\x02\x00\x20\x06\x2d\x00\x00\x21\x06\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x06\x41\x01\x21\x09\x0c\x00\x0b\x00\x0b\x02\x40\x02\x40\x20\x05\x28\x02\x00\x22\x06\x20\x04\x28\x02\x00\x46\x0d\x00\x20\x05\x20\x06\x41\x01\x6a\x36\x02\x00\x20\x06\x2d\x00\x00\x21\x06\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x06\x0b\x02\x40\x20\x06\x41\x30\x46\x0d\x00\x41\x01\x21\x0e\x42\x00\x21\x18\x0c\x01\x0b\x42\x00\x21\x18\x03\x40\x02\x40\x02\x40\x20\x05\x28\x02\x00\x22\x06\x20\x04\x28\x02\x00\x46\x0d\x00\x20\x05\x20\x06\x41\x01\x6a\x36\x02\x00\x20\x06\x2d\x00\x00\x21\x06\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x06\x0b\x20\x18\x42\x7f\x7c\x21\x18\x20\x06\x41\x30\x46\x0d\x00\x0b\x41\x01\x21\x09\x41\x01\x21\x0e\x0b\x41\x00\x21\x11\x20\x03\x41\x00\x36\x02\x00\x20\x06\x41\x50\x6a\x21\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x06\x41\x2e\x46\x22\x0c\x0d\x00\x42\x00\x21\x19\x20\x0b\x41\x09\x4d\x0d\x00\x41\x00\x21\x0d\x41\x00\x21\x12\x0c\x01\x0b\x42\x00\x21\x19\x41\x00\x21\x12\x41\x00\x21\x0d\x41\x00\x21\x11\x03\x40\x02\x40\x02\x40\x20\x0c\x41\x01\x71\x45\x0d\x00\x02\x40\x20\x0e\x0d\x00\x20\x19\x21\x18\x41\x01\x21\x0e\x0c\x02\x0b\x20\x09\x41\x00\x47\x21\x04\x0c\x04\x0b\x20\x19\x42\x01\x7c\x21\x19\x02\x40\x20\x0d\x41\xfc\x00\x4a\x0d\x00\x20\x06\x41\x30\x47\x21\x0c\x20\x19\xa7\x21\x13\x20\x03\x20\x0d\x41\x02\x74\x6a\x21\x09\x02\x40\x20\x12\x45\x0d\x00\x20\x06\x20\x09\x28\x02\x00\x41\x0a\x6c\x6a\x41\x50\x6a\x21\x0b\x0b\x20\x13\x20\x11\x20\x0c\x1b\x21\x11\x20\x09\x20\x0b\x36\x02\x00\x41\x01\x21\x09\x41\x00\x20\x12\x41\x01\x6a\x22\x06\x20\x06\x41\x09\x46\x22\x06\x1b\x21\x12\x20\x0d\x20\x06\x6a\x21\x0d\x0c\x01\x0b\x20\x06\x41\x30\x46\x0d\x00\x20\x03\x20\x03\x28\x02\xf0\x03\x41\x01\x72\x36\x02\xf0\x03\x41\xdc\x08\x21\x11\x0b\x02\x40\x02\x40\x20\x05\x28\x02\x00\x22\x06\x20\x04\x28\x02\x00\x46\x0d\x00\x20\x05\x20\x06\x41\x01\x6a\x36\x02\x00\x20\x06\x2d\x00\x00\x21\x06\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x06\x0b\x20\x06\x41\x50\x6a\x21\x0b\x20\x06\x41\x2e\x46\x22\x0c\x0d\x00\x20\x0b\x41\x0a\x49\x0d\x00\x0b\x0b\x20\x18\x20\x19\x20\x0e\x1b\x21\x18\x02\x40\x20\x09\x45\x0d\x00\x20\x06\x41\x20\x72\x41\xe5\x00\x47\x0d\x00\x02\x40\x20\x00\x20\x02\x10\x82\x01\x22\x1a\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x52\x0d\x00\x20\x02\x45\x0d\x04\x42\x00\x21\x1a\x20\x00\x29\x03\x58\x42\x00\x53\x0d\x00\x20\x05\x20\x05\x28\x02\x00\x41\x7f\x6a\x36\x02\x00\x0b\x20\x1a\x20\x18\x7c\x21\x18\x0c\x06\x0b\x20\x09\x41\x00\x47\x21\x04\x20\x06\x41\x00\x48\x0d\x01\x0b\x20\x00\x29\x03\x58\x42\x00\x53\x0d\x00\x20\x05\x20\x05\x28\x02\x00\x41\x7f\x6a\x36\x02\x00\x0b\x20\x04\x0d\x03\x41\x00\x41\x1c\x36\x02\xa0\xd6\x05\x20\x00\x42\x00\x10\x7f\x0c\x01\x0b\x20\x00\x42\x00\x10\x7f\x0b\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x14\x0c\x02\x0b\x41\x00\x41\xc4\x00\x36\x02\xa0\xd6\x05\x20\x0a\xb7\x44\x00\x00\x00\x00\x00\x00\x10\x00\xa2\x44\x00\x00\x00\x00\x00\x00\x10\x00\xa2\x21\x14\x0c\x01\x0b\x02\x40\x20\x03\x28\x02\x00\x22\x06\x0d\x00\x20\x0a\xb7\x44\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x21\x14\x0c\x01\x0b\x02\x40\x20\x19\x42\x09\x55\x0d\x00\x20\x18\x20\x19\x52\x0d\x00\x02\x40\x20\x01\x41\x7f\x6a\x41\x02\x49\x0d\x00\x20\x06\x20\x08\x76\x0d\x01\x0b\x20\x0a\xb7\x20\x06\xb8\xa2\x21\x14\x0c\x01\x0b\x02\x40\x20\x18\x20\x07\x41\x7e\x6d\xac\x57\x0d\x00\x41\x00\x41\xc4\x00\x36\x02\xa0\xd6\x05\x20\x0a\xb7\x44\xff\xff\xff\xff\xff\xff\xef\x7f\xa2\x44\xff\xff\xff\xff\xff\xff\xef\x7f\xa2\x21\x14\x0c\x01\x0b\x02\x40\x20\x18\x20\x07\x41\x96\x7f\x6a\xac\x59\x0d\x00\x41\x00\x41\xc4\x00\x36\x02\xa0\xd6\x05\x20\x0a\xb7\x44\x00\x00\x00\x00\x00\x00\x10\x00\xa2\x44\x00\x00\x00\x00\x00\x00\x10\x00\xa2\x21\x14\x0c\x01\x0b\x02\x40\x20\x12\x45\x0d\x00\x02\x40\x20\x12\x41\x08\x4a\x0d\x00\x20\x12\x41\x7f\x6a\x21\x05\x20\x03\x20\x0d\x41\x02\x74\x6a\x22\x04\x28\x02\x00\x21\x06\x03\x40\x20\x06\x41\x0a\x6c\x21\x06\x20\x05\x41\x01\x6a\x22\x05\x41\x08\x48\x0d\x00\x0b\x20\x04\x20\x06\x36\x02\x00\x0b\x20\x0d\x41\x01\x6a\x21\x0d\x0b\x20\x18\xa7\x21\x0b\x02\x40\x20\x11\x41\x09\x4e\x0d\x00\x20\x11\x20\x0b\x4a\x0d\x00\x20\x0b\x41\x11\x4a\x0d\x00\x02\x40\x20\x0b\x41\x09\x47\x0d\x00\x20\x0a\xb7\x20\x03\x28\x02\x00\xb8\xa2\x21\x14\x0c\x02\x0b\x02\x40\x20\x0b\x41\x08\x4a\x0d\x00\x20\x0a\xb7\x20\x03\x28\x02\x00\xb8\xa2\x41\x08\x20\x0b\x6b\x41\x02\x74\x41\xf0\x1a\x6a\x28\x02\x00\xb7\xa3\x21\x14\x0c\x02\x0b\x20\x03\x28\x02\x00\x21\x06\x02\x40\x20\x08\x20\x0b\x41\x7d\x6c\x6a\x41\x1b\x6a\x22\x05\x41\x1e\x4a\x0d\x00\x20\x06\x20\x05\x76\x0d\x01\x0b\x20\x0a\xb7\x20\x06\xb8\xa2\x20\x0b\x41\x02\x74\x41\xc8\x1a\x6a\x28\x02\x00\xb7\xa2\x21\x14\x0c\x01\x0b\x20\x03\x20\x0d\x41\x01\x6a\x22\x05\x41\x02\x74\x6a\x21\x06\x03\x40\x20\x05\x41\x7f\x6a\x21\x05\x20\x06\x41\x78\x6a\x21\x04\x20\x06\x41\x7c\x6a\x22\x09\x21\x06\x20\x04\x28\x02\x00\x45\x0d\x00\x0b\x41\x00\x21\x01\x02\x40\x02\x40\x20\x0b\x41\x09\x6f\x22\x06\x0d\x00\x41\x00\x21\x04\x0c\x01\x0b\x20\x06\x20\x06\x41\x09\x6a\x20\x0b\x41\x7f\x4a\x1b\x21\x11\x02\x40\x02\x40\x20\x05\x0d\x00\x41\x00\x21\x04\x41\x00\x21\x05\x0c\x01\x0b\x41\x80\x94\xeb\xdc\x03\x41\x08\x20\x11\x6b\x41\x02\x74\x41\xf0\x1a\x6a\x28\x02\x00\x22\x0d\x6d\x21\x12\x41\x00\x21\x0c\x20\x03\x21\x06\x41\x00\x21\x00\x41\x00\x21\x04\x03\x40\x20\x06\x20\x06\x28\x02\x00\x22\x0e\x20\x0d\x6e\x22\x02\x20\x0c\x6a\x22\x0c\x36\x02\x00\x20\x04\x41\x01\x6a\x41\xff\x00\x71\x20\x04\x20\x00\x20\x04\x46\x20\x0c\x45\x71\x22\x0c\x1b\x21\x04\x20\x0b\x41\x77\x6a\x20\x0b\x20\x0c\x1b\x21\x0b\x20\x06\x41\x04\x6a\x21\x06\x20\x0e\x20\x02\x20\x0d\x6c\x6b\x20\x12\x6c\x21\x0c\x20\x05\x20\x00\x41\x01\x6a\x22\x00\x47\x0d\x00\x0b\x20\x0c\x45\x0d\x00\x20\x09\x20\x0c\x36\x02\x00\x20\x05\x41\x01\x6a\x21\x05\x0b\x20\x0b\x20\x11\x6b\x41\x09\x6a\x21\x0b\x0b\x03\x40\x20\x03\x20\x04\x41\x02\x74\x6a\x21\x0d\x02\x40\x03\x40\x02\x40\x20\x0b\x41\x12\x48\x0d\x00\x20\x0b\x41\x12\x47\x0d\x02\x20\x0d\x28\x02\x00\x41\xde\xe0\xa5\x04\x4b\x0d\x02\x0b\x20\x05\x41\xff\x00\x6a\x21\x0c\x41\x00\x21\x00\x20\x05\x21\x09\x03\x40\x20\x09\x21\x05\x02\x40\x02\x40\x20\x03\x20\x0c\x41\xff\x00\x71\x22\x06\x41\x02\x74\x6a\x22\x09\x35\x02\x00\x42\x1d\x86\x20\x00\xad\x7c\x22\x18\x42\x81\x94\xeb\xdc\x03\x5a\x0d\x00\x41\x00\x21\x00\x0c\x01\x0b\x20\x18\x20\x18\x42\x80\x94\xeb\xdc\x03\x80\x22\x19\x42\x80\x94\xeb\xdc\x03\x7e\x7d\x21\x18\x20\x19\xa7\x21\x00\x0b\x20\x09\x20\x18\xa7\x22\x0c\x36\x02\x00\x20\x05\x20\x05\x20\x05\x20\x06\x20\x0c\x1b\x20\x06\x20\x04\x46\x1b\x20\x06\x20\x05\x41\x7f\x6a\x41\xff\x00\x71\x47\x1b\x21\x09\x20\x06\x41\x7f\x6a\x21\x0c\x20\x06\x20\x04\x47\x0d\x00\x0b\x20\x01\x41\x63\x6a\x21\x01\x20\x00\x45\x0d\x00\x0b\x02\x40\x20\x04\x41\x7f\x6a\x41\xff\x00\x71\x22\x04\x20\x09\x47\x0d\x00\x20\x03\x20\x09\x41\xfe\x00\x6a\x41\xff\x00\x71\x41\x02\x74\x6a\x22\x06\x20\x06\x28\x02\x00\x20\x03\x20\x09\x41\x7f\x6a\x41\xff\x00\x71\x22\x05\x41\x02\x74\x6a\x28\x02\x00\x72\x36\x02\x00\x0b\x20\x0b\x41\x09\x6a\x21\x0b\x20\x03\x20\x04\x41\x02\x74\x6a\x20\x00\x36\x02\x00\x0c\x01\x0b\x0b\x02\x40\x03\x40\x20\x05\x41\x01\x6a\x41\xff\x00\x71\x21\x02\x20\x03\x20\x05\x41\x7f\x6a\x41\xff\x00\x71\x41\x02\x74\x6a\x21\x12\x03\x40\x41\x09\x41\x01\x20\x0b\x41\x1b\x4a\x1b\x21\x00\x02\x40\x03\x40\x02\x40\x02\x40\x20\x04\x22\x06\x41\xff\x00\x71\x22\x04\x20\x05\x46\x0d\x00\x20\x03\x20\x04\x41\x02\x74\x6a\x28\x02\x00\x22\x09\x41\xdf\xe0\xa5\x04\x49\x0d\x00\x20\x09\x41\xdf\xe0\xa5\x04\x47\x0d\x01\x20\x06\x41\x01\x6a\x41\xff\x00\x71\x22\x09\x20\x05\x46\x0d\x00\x20\x03\x20\x09\x41\x02\x74\x6a\x28\x02\x00\x22\x09\x41\xff\x93\xbc\xf9\x00\x49\x0d\x00\x20\x0b\x41\x12\x47\x0d\x01\x20\x09\x41\xff\x93\xbc\xf9\x00\x47\x0d\x01\x20\x05\x21\x02\x0c\x06\x0b\x20\x0b\x41\x12\x46\x0d\x02\x0b\x20\x01\x20\x00\x6a\x21\x01\x20\x05\x21\x04\x20\x06\x20\x05\x46\x0d\x00\x0b\x41\x80\x94\xeb\xdc\x03\x20\x00\x76\x21\x0d\x41\x7f\x20\x00\x74\x41\x7f\x73\x21\x0e\x41\x00\x21\x09\x20\x06\x21\x04\x03\x40\x20\x03\x20\x06\x41\x02\x74\x6a\x22\x0c\x20\x0c\x28\x02\x00\x22\x0c\x20\x00\x76\x20\x09\x6a\x22\x09\x36\x02\x00\x20\x04\x41\x01\x6a\x41\xff\x00\x71\x20\x04\x20\x06\x20\x04\x46\x20\x09\x45\x71\x22\x09\x1b\x21\x04\x20\x0b\x41\x77\x6a\x20\x0b\x20\x09\x1b\x21\x0b\x20\x0c\x20\x0e\x71\x20\x0d\x6c\x21\x09\x20\x06\x41\x01\x6a\x41\xff\x00\x71\x22\x06\x20\x05\x47\x0d\x00\x0b\x20\x09\x45\x0d\x01\x02\x40\x20\x02\x20\x04\x46\x0d\x00\x20\x03\x20\x05\x41\x02\x74\x6a\x20\x09\x36\x02\x00\x20\x02\x21\x05\x0c\x03\x0b\x20\x12\x20\x12\x28\x02\x00\x41\x01\x72\x36\x02\x00\x20\x02\x21\x04\x0c\x01\x0b\x0b\x0b\x02\x40\x20\x04\x20\x05\x46\x0d\x00\x20\x05\x21\x02\x0c\x01\x0b\x20\x02\x41\x02\x74\x20\x03\x6a\x41\x7c\x6a\x41\x00\x36\x02\x00\x20\x05\x21\x04\x0b\x20\x03\x20\x04\x41\x02\x74\x6a\x28\x02\x00\xb8\x21\x14\x02\x40\x20\x06\x41\x01\x6a\x41\xff\x00\x71\x22\x05\x20\x02\x47\x0d\x00\x20\x06\x41\x02\x6a\x41\xff\x00\x71\x22\x02\x41\x02\x74\x20\x03\x6a\x41\x7c\x6a\x41\x00\x36\x02\x00\x0b\x20\x14\x44\x00\x00\x00\x00\x65\xcd\xcd\x41\xa2\x20\x03\x20\x05\x41\x02\x74\x6a\x28\x02\x00\xb8\xa0\x20\x0a\xb7\x22\x17\xa2\x21\x15\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x14\x02\x40\x02\x40\x20\x01\x20\x07\x6b\x41\x35\x6a\x22\x05\x41\x00\x20\x05\x41\x00\x4a\x1b\x20\x08\x20\x05\x20\x08\x48\x22\x00\x1b\x22\x05\x41\x35\x4e\x0d\x00\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x41\xe9\x00\x20\x05\x6b\x10\xa2\x01\x20\x15\xa6\x22\x16\x20\x15\x20\x15\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x41\x35\x20\x05\x6b\x10\xa2\x01\x10\xa5\x01\x22\x14\xa1\xa0\x21\x15\x0c\x01\x0b\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x16\x0b\x20\x01\x41\x35\x6a\x21\x04\x02\x40\x20\x06\x41\x02\x6a\x41\xff\x00\x71\x22\x09\x20\x02\x46\x0d\x00\x02\x40\x02\x40\x20\x03\x20\x09\x41\x02\x74\x6a\x28\x02\x00\x22\x09\x41\xff\xc9\xb5\xee\x01\x4b\x0d\x00\x02\x40\x20\x09\x0d\x00\x20\x06\x41\x03\x6a\x41\xff\x00\x71\x20\x02\x46\x0d\x02\x0b\x20\x17\x44\x00\x00\x00\x00\x00\x00\xd0\x3f\xa2\x20\x14\xa0\x21\x14\x0c\x01\x0b\x02\x40\x20\x09\x41\x80\xca\xb5\xee\x01\x46\x0d\x00\x20\x17\x44\x00\x00\x00\x00\x00\x00\xe8\x3f\xa2\x20\x14\xa0\x21\x14\x0c\x01\x0b\x02\x40\x20\x06\x41\x03\x6a\x41\xff\x00\x71\x20\x02\x47\x0d\x00\x20\x17\x44\x00\x00\x00\x00\x00\x00\xe0\x3f\xa2\x20\x14\xa0\x21\x14\x0c\x01\x0b\x20\x17\x44\x00\x00\x00\x00\x00\x00\xe8\x3f\xa2\x20\x14\xa0\x21\x14\x0b\x20\x14\x20\x14\x20\x14\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\xa0\x20\x14\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x10\xa5\x01\x44\x00\x00\x00\x00\x00\x00\x00\x00\x62\x1b\x20\x05\x41\x33\x4a\x1b\x21\x14\x0b\x20\x15\x20\x14\xa0\x20\x16\xa1\x21\x15\x02\x40\x20\x04\x41\xff\xff\xff\xff\x07\x71\x41\x7e\x20\x0f\x6b\x4c\x0d\x00\x20\x15\x44\x00\x00\x00\x00\x00\x00\xe0\x3f\xa2\x20\x15\x20\x15\x99\x44\x00\x00\x00\x00\x00\x00\x40\x43\x66\x22\x06\x1b\x21\x15\x20\x07\x20\x05\x6a\x41\x4b\x6a\x20\x01\x47\x21\x05\x20\x06\x20\x01\x6a\x21\x01\x02\x40\x20\x14\x44\x00\x00\x00\x00\x00\x00\x00\x00\x62\x20\x00\x20\x05\x20\x06\x41\x01\x73\x72\x71\x71\x0d\x00\x20\x01\x41\x32\x6a\x20\x10\x4c\x0d\x01\x0b\x41\x00\x41\xc4\x00\x36\x02\xa0\xd6\x05\x0b\x20\x15\x20\x01\x10\xa2\x01\x21\x14\x0b\x20\x03\x41\x80\x04\x6a\x24\x00\x20\x14\x0b\xc2\x04\x02\x04\x7f\x01\x7e\x02\x40\x02\x40\x20\x00\x28\x02\x04\x22\x02\x20\x00\x28\x02\x54\x46\x0d\x00\x20\x00\x20\x02\x41\x01\x6a\x36\x02\x04\x20\x02\x2d\x00\x00\x21\x02\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x02\x0b\x02\x40\x02\x40\x02\x40\x20\x02\x41\x55\x6a\x22\x03\x41\x02\x4b\x0d\x00\x20\x03\x0e\x03\x01\x00\x01\x01\x0b\x20\x02\x41\x50\x6a\x21\x03\x41\x00\x21\x04\x0c\x01\x0b\x02\x40\x02\x40\x20\x00\x28\x02\x04\x22\x03\x20\x00\x28\x02\x54\x46\x0d\x00\x20\x00\x20\x03\x41\x01\x6a\x36\x02\x04\x20\x03\x2d\x00\x00\x21\x05\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x05\x0b\x20\x02\x41\x2d\x46\x21\x04\x20\x05\x41\x50\x6a\x21\x03\x02\x40\x20\x01\x45\x0d\x00\x20\x03\x41\x0a\x49\x0d\x00\x20\x00\x29\x03\x58\x42\x00\x53\x0d\x00\x20\x00\x20\x00\x28\x02\x04\x41\x7f\x6a\x36\x02\x04\x0b\x20\x05\x21\x02\x0b\x02\x40\x02\x40\x20\x03\x41\x09\x4b\x0d\x00\x41\x00\x21\x03\x03\x40\x20\x02\x20\x03\x41\x0a\x6c\x6a\x21\x03\x02\x40\x02\x40\x20\x00\x28\x02\x04\x22\x02\x20\x00\x28\x02\x54\x46\x0d\x00\x20\x00\x20\x02\x41\x01\x6a\x36\x02\x04\x20\x02\x2d\x00\x00\x21\x02\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x02\x0b\x20\x03\x41\x50\x6a\x21\x03\x02\x40\x20\x02\x41\x50\x6a\x22\x05\x41\x09\x4b\x0d\x00\x20\x03\x41\xcc\x99\xb3\xe6\x00\x48\x0d\x01\x0b\x0b\x20\x03\xac\x21\x06\x02\x40\x20\x05\x41\x09\x4b\x0d\x00\x03\x40\x20\x02\xad\x20\x06\x42\x0a\x7e\x7c\x21\x06\x02\x40\x02\x40\x20\x00\x28\x02\x04\x22\x02\x20\x00\x28\x02\x54\x46\x0d\x00\x20\x00\x20\x02\x41\x01\x6a\x36\x02\x04\x20\x02\x2d\x00\x00\x21\x02\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x02\x0b\x20\x06\x42\x50\x7c\x21\x06\x20\x02\x41\x50\x6a\x22\x05\x41\x09\x4b\x0d\x01\x20\x06\x42\xae\x8f\x85\xd7\xc7\xc2\xeb\xa3\x01\x53\x0d\x00\x0b\x0b\x02\x40\x20\x05\x41\x09\x4b\x0d\x00\x03\x40\x02\x40\x02\x40\x20\x00\x28\x02\x04\x22\x02\x20\x00\x28\x02\x54\x46\x0d\x00\x20\x00\x20\x02\x41\x01\x6a\x36\x02\x04\x20\x02\x2d\x00\x00\x21\x02\x0c\x01\x0b\x20\x00\x10\x80\x01\x21\x02\x0b\x20\x02\x41\x50\x6a\x41\x0a\x49\x0d\x00\x0b\x0b\x02\x40\x20\x00\x29\x03\x58\x42\x00\x53\x0d\x00\x20\x00\x20\x00\x28\x02\x04\x41\x7f\x6a\x36\x02\x04\x0b\x42\x00\x20\x06\x7d\x20\x06\x20\x04\x1b\x21\x06\x0c\x01\x0b\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x21\x06\x20\x00\x29\x03\x58\x42\x00\x53\x0d\x00\x20\x00\x20\x00\x28\x02\x04\x41\x7f\x6a\x36\x02\x04\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x0f\x0b\x20\x06\x0b\x6d\x03\x01\x7f\x01\x7c\x01\x7e\x23\x00\x41\xf0\x00\x6b\x22\x02\x24\x00\x20\x02\x20\x00\x36\x02\x28\x20\x02\x20\x00\x36\x02\x04\x20\x02\x41\x7f\x36\x02\x08\x20\x02\x42\x00\x10\x7f\x20\x02\x41\x01\x41\x01\x10\x81\x01\x21\x03\x02\x40\x20\x01\x45\x0d\x00\x20\x01\x20\x00\x20\x00\x20\x02\x29\x03\x60\x20\x02\x28\x02\x04\x20\x02\x28\x02\x28\x6b\xac\x7c\x22\x04\xa7\x6a\x20\x04\x50\x1b\x36\x02\x00\x0b\x20\x02\x41\xf0\x00\x6a\x24\x00\x20\x03\x0b\x15\x00\x02\x40\x20\x00\x0d\x00\x41\x00\x0f\x0b\x20\x00\x20\x01\x41\x00\x10\x85\x01\x0b\xb0\x02\x01\x01\x7f\x41\x01\x21\x03\x02\x40\x20\x00\x45\x0d\x00\x02\x40\x20\x01\x41\xff\x00\x4b\x0d\x00\x20\x00\x20\x01\x3a\x00\x00\x41\x01\x0f\x0b\x02\x40\x02\x40\x41\x00\x28\x02\xa4\xd6\x05\x0d\x00\x02\x40\x20\x01\x41\x80\x7f\x71\x41\x80\xbf\x03\x46\x0d\x00\x41\x00\x41\x19\x36\x02\xa0\xd6\x05\x0c\x02\x0b\x20\x00\x20\x01\x3a\x00\x00\x41\x01\x0f\x0b\x02\x40\x20\x01\x41\xff\x0f\x4b\x0d\x00\x20\x00\x20\x01\x41\x3f\x71\x41\x80\x01\x72\x3a\x00\x01\x20\x00\x20\x01\x41\x06\x76\x41\xc0\x01\x72\x3a\x00\x00\x41\x02\x0f\x0b\x02\x40\x02\x40\x20\x01\x41\x80\xb0\x03\x49\x0d\x00\x20\x01\x41\x80\x40\x71\x41\x80\xc0\x03\x47\x0d\x01\x0b\x20\x00\x20\x01\x41\x3f\x71\x41\x80\x01\x72\x3a\x00\x02\x20\x00\x20\x01\x41\x0c\x76\x41\xe0\x01\x72\x3a\x00\x00\x20\x00\x20\x01\x41\x06\x76\x41\x3f\x71\x41\x80\x01\x72\x3a\x00\x01\x41\x03\x0f\x0b\x02\x40\x20\x01\x41\x80\x80\x7c\x6a\x41\xff\xff\x3f\x4b\x0d\x00\x20\x00\x20\x01\x41\x3f\x71\x41\x80\x01\x72\x3a\x00\x03\x20\x00\x20\x01\x41\x12\x76\x41\xf0\x01\x72\x3a\x00\x00\x20\x00\x20\x01\x41\x06\x76\x41\x3f\x71\x41\x80\x01\x72\x3a\x00\x02\x20\x00\x20\x01\x41\x0c\x76\x41\x3f\x71\x41\x80\x01\x72\x3a\x00\x01\x41\x04\x0f\x0b\x41\x00\x41\x19\x36\x02\xa0\xd6\x05\x0b\x41\x7f\x21\x03\x0b\x20\x03\x0b\xf8\x03\x03\x01\x7e\x02\x7f\x03\x7c\x20\x00\xbd\x22\x01\x42\x20\x88\xa7\x21\x02\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x42\x00\x53\x0d\x00\x20\x02\x41\xf9\x84\xea\xfe\x03\x4b\x0d\x01\x0b\x02\x40\x20\x02\x41\x80\x80\xc0\xff\x7b\x49\x0d\x00\x44\x00\x00\x00\x00\x00\x00\xf0\xff\x21\x04\x20\x00\x44\x00\x00\x00\x00\x00\x00\xf0\xbf\x61\x0d\x04\x20\x00\x20\x00\xa1\x44\x00\x00\x00\x00\x00\x00\x00\x00\xa3\x0f\x0b\x02\x40\x20\x02\x41\x01\x74\x41\x80\x80\x80\xca\x07\x4f\x0d\x00\x20\x00\x0f\x0b\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x05\x20\x02\x41\xc5\xfd\xca\xfe\x7b\x4f\x0d\x01\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x04\x0c\x02\x0b\x20\x02\x41\xff\xff\xbf\xff\x07\x4d\x0d\x00\x20\x00\x0f\x0b\x20\x00\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\xa0\x22\x04\xbd\x22\x01\x42\x20\x88\xa7\x41\xe2\xbe\x25\x6a\x22\x02\x41\x14\x76\x41\x81\x78\x6a\x21\x03\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x05\x02\x40\x20\x02\x41\xff\xff\xbf\x9a\x04\x4b\x0d\x00\x20\x00\x20\x04\xa1\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\xa0\x20\x00\x20\x04\x44\x00\x00\x00\x00\x00\x00\xf0\xbf\xa0\xa1\x20\x02\x41\xff\xff\xbf\x80\x04\x4b\x1b\x20\x04\xa3\x21\x05\x0b\x20\x02\x41\xff\xff\x3f\x71\x41\x9e\xc1\x9a\xff\x03\x6a\xad\x42\x20\x86\x20\x01\x42\xff\xff\xff\xff\x0f\x83\x84\xbf\x44\x00\x00\x00\x00\x00\x00\xf0\xbf\xa0\x21\x00\x20\x03\xb7\x21\x04\x0b\x20\x04\x44\x00\x00\xe0\xfe\x42\x2e\xe6\x3f\xa2\x20\x00\x20\x05\x20\x04\x44\x76\x3c\x79\x35\xef\x39\xea\x3d\xa2\xa0\x20\x00\x20\x00\x44\x00\x00\x00\x00\x00\x00\x00\x40\xa0\xa3\x22\x04\x20\x00\x20\x00\x44\x00\x00\x00\x00\x00\x00\xe0\x3f\xa2\xa2\x22\x06\x20\x04\x20\x04\xa2\x22\x05\x20\x05\xa2\x22\x04\x20\x04\x20\x04\x44\x9f\xc6\x78\xd0\x09\x9a\xc3\x3f\xa2\x44\xaf\x78\x8e\x1d\xc5\x71\xcc\x3f\xa0\xa2\x44\x04\xfa\x97\x99\x99\x99\xd9\x3f\xa0\xa2\x20\x05\x20\x04\x20\x04\x20\x04\x44\x44\x52\x3e\xdf\x12\xf1\xc2\x3f\xa2\x44\xde\x03\xcb\x96\x64\x46\xc7\x3f\xa0\xa2\x44\x59\x93\x22\x94\x24\x49\xd2\x3f\xa0\xa2\x44\x93\x55\x55\x55\x55\x55\xe5\x3f\xa0\xa2\xa0\xa0\xa2\xa0\x20\x06\xa1\xa0\xa0\x21\x04\x0b\x20\x04\x0b\xce\x05\x03\x01\x7e\x01\x7f\x02\x7c\x02\x40\x20\x00\xbd\x22\x01\x42\x20\x88\xa7\x41\xff\xff\xff\xff\x07\x71\x22\x02\x41\x80\x80\xc0\xff\x03\x49\x0d\x00\x02\x40\x20\x02\x41\x80\x80\xc0\x80\x7c\x6a\x20\x01\xa7\x72\x0d\x00\x44\x18\x2d\x44\x54\xfb\x21\x09\x40\x44\x00\x00\x00\x00\x00\x00\x00\x00\x20\x01\x42\x00\x53\x1b\x0f\x0b\x44\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x20\x00\xa1\xa3\x0f\x0b\x02\x40\x02\x40\x20\x02\x41\xff\xff\xff\xfe\x03\x4b\x0d\x00\x44\x18\x2d\x44\x54\xfb\x21\xf9\x3f\x21\x03\x20\x02\x41\x81\x80\x80\xe3\x03\x49\x0d\x01\x44\x07\x5c\x14\x33\x26\xa6\x91\x3c\x20\x00\x20\x00\xa2\x22\x03\x20\x03\x20\x03\x20\x03\x20\x03\x20\x03\x44\x09\xf7\xfd\x0d\xe1\x3d\x02\x3f\xa2\x44\x88\xb2\x01\x75\xe0\xef\x49\x3f\xa0\xa2\x44\x3b\x8f\x68\xb5\x28\x82\xa4\xbf\xa0\xa2\x44\x55\x44\x88\x0e\x55\xc1\xc9\x3f\xa0\xa2\x44\x7d\x6f\xeb\x03\x12\xd6\xd4\xbf\xa0\xa2\x44\x55\x55\x55\x55\x55\x55\xc5\x3f\xa0\xa2\x20\x03\x20\x03\x20\x03\x20\x03\x44\x82\x92\x2e\xb1\xc5\xb8\xb3\x3f\xa2\x44\x59\x01\x8d\x1b\x6c\x06\xe6\xbf\xa0\xa2\x44\xc8\x8a\x59\x9c\xe5\x2a\x00\x40\xa0\xa2\x44\x4b\x2d\x8a\x1c\x27\x3a\x03\xc0\xa0\xa2\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\xa0\xa3\x20\x00\xa2\xa1\x20\x00\xa1\x44\x18\x2d\x44\x54\xfb\x21\xf9\x3f\xa0\x0f\x0b\x02\x40\x20\x01\x42\x7f\x55\x0d\x00\x44\x18\x2d\x44\x54\xfb\x21\xf9\x3f\x20\x00\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\xa0\x44\x00\x00\x00\x00\x00\x00\xe0\x3f\xa2\x22\x00\x9f\x22\x03\x20\x03\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x44\x09\xf7\xfd\x0d\xe1\x3d\x02\x3f\xa2\x44\x88\xb2\x01\x75\xe0\xef\x49\x3f\xa0\xa2\x44\x3b\x8f\x68\xb5\x28\x82\xa4\xbf\xa0\xa2\x44\x55\x44\x88\x0e\x55\xc1\xc9\x3f\xa0\xa2\x44\x7d\x6f\xeb\x03\x12\xd6\xd4\xbf\xa0\xa2\x44\x55\x55\x55\x55\x55\x55\xc5\x3f\xa0\xa2\x20\x00\x20\x00\x20\x00\x20\x00\x44\x82\x92\x2e\xb1\xc5\xb8\xb3\x3f\xa2\x44\x59\x01\x8d\x1b\x6c\x06\xe6\xbf\xa0\xa2\x44\xc8\x8a\x59\x9c\xe5\x2a\x00\x40\xa0\xa2\x44\x4b\x2d\x8a\x1c\x27\x3a\x03\xc0\xa0\xa2\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\xa0\xa3\xa2\x44\x07\x5c\x14\x33\x26\xa6\x91\xbc\xa0\xa0\xa1\x22\x00\x20\x00\xa0\x0f\x0b\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x20\x00\xa1\x44\x00\x00\x00\x00\x00\x00\xe0\x3f\xa2\x22\x00\x20\x00\x9f\x22\x04\xbd\x42\x80\x80\x80\x80\x70\x83\xbf\x22\x03\x20\x03\xa2\xa1\x20\x04\x20\x03\xa0\xa3\x20\x04\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x44\x09\xf7\xfd\x0d\xe1\x3d\x02\x3f\xa2\x44\x88\xb2\x01\x75\xe0\xef\x49\x3f\xa0\xa2\x44\x3b\x8f\x68\xb5\x28\x82\xa4\xbf\xa0\xa2\x44\x55\x44\x88\x0e\x55\xc1\xc9\x3f\xa0\xa2\x44\x7d\x6f\xeb\x03\x12\xd6\xd4\xbf\xa0\xa2\x44\x55\x55\x55\x55\x55\x55\xc5\x3f\xa0\xa2\x20\x00\x20\x00\x20\x00\x20\x00\x44\x82\x92\x2e\xb1\xc5\xb8\xb3\x3f\xa2\x44\x59\x01\x8d\x1b\x6c\x06\xe6\xbf\xa0\xa2\x44\xc8\x8a\x59\x9c\xe5\x2a\x00\x40\xa0\xa2\x44\x4b\x2d\x8a\x1c\x27\x3a\x03\xc0\xa0\xa2\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\xa0\xa3\xa2\xa0\x20\x03\xa0\x22\x00\x20\x00\xa0\x21\x03\x0b\x20\x03\x0b\x8f\x01\x03\x01\x7e\x01\x7f\x01\x7c\x20\x00\xbd\x22\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\xbf\x21\x00\x02\x40\x02\x40\x02\x40\x20\x01\x42\x34\x88\xa7\x41\xff\x0f\x71\x22\x02\x41\xfd\x07\x4b\x0d\x00\x20\x02\x41\xdf\x07\x49\x0d\x02\x20\x00\x20\x00\xa0\x22\x03\x20\x03\x20\x00\xa2\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x20\x00\xa1\xa3\xa0\x21\x00\x0c\x01\x0b\x20\x00\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x20\x00\xa1\xa3\x22\x00\x20\x00\xa0\x21\x00\x0b\x20\x00\x10\x86\x01\x44\x00\x00\x00\x00\x00\x00\xe0\x3f\xa2\x21\x00\x0b\x20\x00\x9a\x20\x00\x20\x01\x42\x00\x53\x1b\x0b\xd0\x03\x03\x01\x7e\x03\x7f\x03\x7c\x02\x40\x02\x40\x02\x40\x20\x00\xbd\x22\x01\x42\x34\x88\xa7\x41\xff\x0f\x71\x22\x02\x41\xb7\x78\x6a\x41\x3f\x4f\x0d\x00\x20\x02\x21\x03\x0c\x01\x0b\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x21\x05\x20\x02\x41\xc9\x07\x49\x0d\x01\x41\x00\x21\x03\x20\x02\x41\x89\x08\x49\x0d\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x05\x20\x01\x42\x80\x80\x80\x80\x80\x80\x80\x78\x51\x0d\x01\x02\x40\x20\x02\x41\xff\x0f\x47\x0d\x00\x20\x00\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\xa0\x0f\x0b\x02\x40\x20\x01\x42\x7f\x55\x0d\x00\x41\x00\x10\x8d\x01\x0f\x0b\x41\x00\x10\x9d\x01\x0f\x0b\x41\x00\x2b\x03\xc0\x3d\x20\x00\xa2\x41\x00\x2b\x03\xc8\x3d\x22\x05\xa0\x22\x06\xbd\x22\x01\xa7\x22\x04\x41\x04\x74\x41\xf0\x0f\x71\x22\x02\x41\xb0\x3e\x6a\x2b\x03\x00\x20\x06\x20\x05\xa1\x22\x05\x41\x00\x2b\x03\xd8\x3d\xa2\x41\x00\x2b\x03\xd0\x3d\x20\x05\xa2\x20\x00\xa0\xa0\x22\x00\xa0\x20\x00\x20\x00\xa2\x22\x05\x41\x00\x2b\x03\xe0\x3d\x20\x00\x41\x00\x2b\x03\xe8\x3d\xa2\xa0\xa2\xa0\x20\x05\x20\x05\xa2\x41\x00\x2b\x03\xf0\x3d\x20\x00\x41\x00\x2b\x03\xf8\x3d\xa2\xa0\xa2\xa0\x21\x00\x20\x02\x41\x08\x72\x41\xb0\x3e\x6a\x29\x03\x00\x20\x01\x42\x2d\x86\x7c\x21\x01\x02\x40\x20\x03\x0d\x00\x02\x40\x20\x04\x41\x00\x48\x0d\x00\x20\x00\x20\x01\x42\x80\x80\x80\x80\x80\x80\x80\xf8\x40\x7c\xbf\x22\x05\xa2\x20\x05\xa0\x44\x00\x00\x00\x00\x00\x00\x00\x7f\xa2\x0f\x0b\x02\x40\x20\x00\x20\x01\x42\x80\x80\x80\x80\x80\x80\x80\xf0\x3f\x7c\xbf\x22\x05\xa2\x22\x06\x20\x05\xa0\x22\x00\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x63\x41\x01\x73\x0d\x00\x20\x00\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\xa0\x22\x07\x20\x06\x20\x05\x20\x00\xa1\xa0\x20\x00\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x20\x07\xa1\xa0\xa0\xa0\x44\x00\x00\x00\x00\x00\x00\xf0\xbf\xa0\x21\x00\x0b\x20\x00\x44\x00\x00\x00\x00\x00\x00\x10\x00\xa2\x0f\x0b\x20\x00\x20\x01\xbf\x22\x05\xa2\x20\x05\xa0\x21\x05\x0b\x20\x05\x0b\x87\x02\x03\x01\x7e\x02\x7f\x02\x7c\x02\x40\x20\x00\xbd\x22\x01\x42\x20\x88\xa7\x41\xff\xff\xff\xff\x07\x71\x22\x02\x41\x80\x80\xc0\xff\x07\x49\x0d\x00\x20\x00\x20\x00\xa0\x0f\x0b\x41\x93\xf1\xfd\xd4\x02\x21\x03\x02\x40\x02\x40\x20\x02\x41\xff\xff\x3f\x4b\x0d\x00\x41\x93\xf1\xfd\xcb\x02\x21\x03\x20\x00\x44\x00\x00\x00\x00\x00\x00\x50\x43\xa2\xbd\x22\x01\x42\x20\x88\xa7\x41\xff\xff\xff\xff\x07\x71\x22\x02\x45\x0d\x01\x0b\x20\x00\x20\x02\x41\x03\x6e\x20\x03\x6a\xad\x42\x20\x86\x20\x01\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x83\x84\xbf\x22\x04\x20\x04\xa2\x20\x04\x20\x00\xa3\xa2\x22\x05\x20\x05\x20\x05\xa2\xa2\x20\x05\x44\xd7\xed\xe4\xd4\x00\xb0\xc2\x3f\xa2\x44\xd9\x51\xe7\xbe\xcb\x44\xe8\xbf\xa0\xa2\x20\x05\x20\x05\x44\xc2\xd6\x49\x4a\x60\xf1\xf9\x3f\xa2\x44\x20\x24\xf0\x92\xe0\x28\xfe\xbf\xa0\xa2\x44\x92\xe6\x61\x0f\xe6\x03\xfe\x3f\xa0\xa0\x20\x04\xa2\xbd\x42\x80\x80\x80\x80\x08\x7c\x42\x80\x80\x80\x80\x7c\x83\xbf\x22\x05\x20\x05\xa2\xa3\x22\x00\x20\x05\xa1\x20\x05\x20\x05\xa0\x20\x00\xa0\xa3\x20\x05\xa2\x20\x05\xa0\x21\x00\x0b\x20\x00\x0b\x9e\x04\x03\x02\x7e\x04\x7c\x01\x7f\x02\x40\x20\x00\xbd\x22\x01\x42\x80\x80\x80\x80\x80\x80\x80\x89\x40\x7c\x42\xff\xff\xff\xff\xff\x9f\xc2\x01\x56\x0d\x00\x20\x00\x44\x00\x00\x00\x00\x00\x00\xf0\xbf\xa0\x22\x00\x20\x00\x20\x00\x44\x00\x00\x00\x00\x00\x00\xa0\x41\xa2\x22\x03\xa0\x20\x03\xa1\x22\x03\x20\x03\xa2\x41\x00\x2b\x03\xe0\x1b\x22\x04\xa2\x22\x05\xa0\x22\x06\x20\x00\x20\x03\xa0\x20\x00\x20\x03\xa1\x20\x04\xa2\xa2\x20\x05\x20\x00\x20\x06\xa1\xa0\xa0\x20\x00\x20\x00\x20\x00\xa2\x22\x03\xa2\x22\x04\x41\x00\x2b\x03\xe8\x1b\x20\x00\x41\x00\x2b\x03\xf0\x1b\xa2\xa0\x20\x03\x41\x00\x2b\x03\xf8\x1b\xa2\xa0\x20\x04\x41\x00\x2b\x03\x80\x1c\x20\x00\x41\x00\x2b\x03\x88\x1c\xa2\xa0\x20\x03\x41\x00\x2b\x03\x90\x1c\xa2\xa0\x20\x04\x41\x00\x2b\x03\x98\x1c\x20\x00\x41\x00\x2b\x03\xa0\x1c\xa2\xa0\x20\x03\x41\x00\x2b\x03\xa8\x1c\xa2\xa0\x20\x04\x41\x00\x2b\x03\xb0\x1c\xa2\xa0\xa2\xa0\xa2\xa0\xa2\xa0\xa0\x0f\x0b\x02\x40\x02\x40\x20\x01\x42\x30\x88\xa7\x22\x07\x41\x70\x6a\x41\xe0\xff\x01\x49\x0d\x00\x02\x40\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x00\x52\x0d\x00\x41\x01\x10\xa6\x01\x0f\x0b\x20\x01\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x51\x0d\x01\x02\x40\x02\x40\x20\x07\x41\x80\x80\x02\x71\x0d\x00\x20\x07\x41\xf0\xff\x01\x71\x41\xf0\xff\x01\x47\x0d\x01\x0b\x20\x00\x10\xa8\x01\x0f\x0b\x20\x00\x44\x00\x00\x00\x00\x00\x00\x30\x43\xa2\xbd\x42\x80\x80\x80\x80\x80\x80\x80\xe0\x7c\x7c\x21\x01\x0b\x20\x01\x42\x80\x80\x80\x80\x80\x80\x80\x8d\x40\x7c\x22\x02\x42\x2d\x88\xa7\x41\xff\x00\x71\x41\x04\x74\x22\x07\x41\xc0\x1c\x6a\x2b\x03\x00\x41\x00\x2b\x03\xa8\x1b\x20\x02\x42\x34\x87\xa7\xb7\x22\x04\xa2\xa0\x22\x05\x20\x07\x41\xb8\x1c\x6a\x2b\x03\x00\x20\x01\x20\x02\x42\x80\x80\x80\x80\x80\x80\x80\x78\x83\x7d\xbf\x20\x07\x41\xb8\x2c\x6a\x2b\x03\x00\xa1\x20\x07\x41\xc0\x2c\x6a\x2b\x03\x00\xa1\xa2\x22\x00\xa0\x22\x06\x41\x00\x2b\x03\xb8\x1b\x20\x00\x20\x00\xa2\x22\x03\xa2\x41\x00\x2b\x03\xb0\x1b\x20\x04\xa2\x20\x00\x20\x05\x20\x06\xa1\xa0\xa0\xa0\x20\x00\x20\x03\xa2\x41\x00\x2b\x03\xc0\x1b\x20\x00\x41\x00\x2b\x03\xc8\x1b\xa2\xa0\x20\x03\x41\x00\x2b\x03\xd0\x1b\x20\x00\x41\x00\x2b\x03\xd8\x1b\xa2\xa0\xa2\xa0\xa2\xa0\xa0\x21\x00\x0b\x20\x00\x0b\x7a\x01\x01\x7f\x02\x40\x20\x00\xbd\x42\x34\x88\xa7\x41\xff\x0f\x71\x22\x01\x41\xff\x07\x4b\x0d\x00\x20\x00\x44\x00\x00\x00\x00\x00\x00\xf0\xbf\xa0\x22\x00\x20\x00\x20\x00\xa2\x20\x00\x20\x00\xa0\xa0\x9f\xa0\x10\x86\x01\x0f\x0b\x02\x40\x20\x01\x41\x98\x08\x4b\x0d\x00\x20\x00\x20\x00\xa0\x44\x00\x00\x00\x00\x00\x00\xf0\xbf\x20\x00\x20\x00\xa2\x44\x00\x00\x00\x00\x00\x00\xf0\xbf\xa0\x9f\x20\x00\xa0\xa3\xa0\x10\x8b\x01\x0f\x0b\x20\x00\x10\x8b\x01\x44\xef\x39\xfa\xfe\x42\x2e\xe6\x3f\xa0\x0b\x10\x00\x20\x00\x44\x00\x00\x00\x00\x00\x00\x00\x10\x10\x8f\x01\x0b\x80\x04\x03\x01\x7e\x02\x7f\x03\x7c\x02\x40\x02\x40\x20\x00\xbd\x22\x01\x42\x20\x88\xa7\x41\xff\xff\xff\xff\x07\x71\x22\x02\x41\x80\x80\xc0\xa0\x04\x49\x0d\x00\x20\x00\x20\x00\x62\x0d\x01\x44\x18\x2d\x44\x54\xfb\x21\xf9\xbf\x44\x18\x2d\x44\x54\xfb\x21\xf9\x3f\x20\x01\x42\x00\x53\x1b\x0f\x0b\x02\x40\x02\x40\x20\x02\x41\xff\xff\xef\xfe\x03\x4b\x0d\x00\x41\x7f\x21\x03\x20\x02\x41\x80\x80\x80\xf2\x03\x4f\x0d\x01\x0c\x02\x0b\x20\x00\x99\x21\x00\x02\x40\x20\x02\x41\xff\xff\xcb\xff\x03\x4b\x0d\x00\x02\x40\x20\x02\x41\xff\xff\x97\xff\x03\x4b\x0d\x00\x20\x00\x20\x00\xa0\x44\x00\x00\x00\x00\x00\x00\xf0\xbf\xa0\x20\x00\x44\x00\x00\x00\x00\x00\x00\x00\x40\xa0\xa3\x21\x00\x41\x00\x21\x03\x0c\x02\x0b\x20\x00\x44\x00\x00\x00\x00\x00\x00\xf0\xbf\xa0\x20\x00\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\xa0\xa3\x21\x00\x41\x01\x21\x03\x0c\x01\x0b\x02\x40\x20\x02\x41\xff\xff\x8d\x80\x04\x4b\x0d\x00\x20\x00\x44\x00\x00\x00\x00\x00\x00\xf8\xbf\xa0\x20\x00\x44\x00\x00\x00\x00\x00\x00\xf8\x3f\xa2\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\xa0\xa3\x21\x00\x41\x02\x21\x03\x0c\x01\x0b\x44\x00\x00\x00\x00\x00\x00\xf0\xbf\x20\x00\xa3\x21\x00\x41\x03\x21\x03\x0b\x20\x00\x20\x00\xa2\x22\x04\x20\x04\xa2\x22\x05\x20\x05\x20\x05\x20\x05\x20\x05\x44\x2f\x6c\x6a\x2c\x44\xb4\xa2\xbf\xa2\x44\x9a\xfd\xde\x52\x2d\xde\xad\xbf\xa0\xa2\x44\x6d\x9a\x74\xaf\xf2\xb0\xb3\xbf\xa0\xa2\x44\x71\x16\x23\xfe\xc6\x71\xbc\xbf\xa0\xa2\x44\xc4\xeb\x98\x99\x99\x99\xc9\xbf\xa0\xa2\x21\x06\x20\x04\x20\x05\x20\x05\x20\x05\x20\x05\x20\x05\x44\x11\xda\x22\xe3\x3a\xad\x90\x3f\xa2\x44\xeb\x0d\x76\x24\x4b\x7b\xa9\x3f\xa0\xa2\x44\x51\x3d\xd0\xa0\x66\x0d\xb1\x3f\xa0\xa2\x44\x6e\x20\x4c\xc5\xcd\x45\xb7\x3f\xa0\xa2\x44\xff\x83\x00\x92\x24\x49\xc2\x3f\xa0\xa2\x44\x0d\x55\x55\x55\x55\x55\xd5\x3f\xa0\xa2\x21\x05\x02\x40\x20\x03\x41\x7f\x4a\x0d\x00\x20\x00\x20\x00\x20\x06\x20\x05\xa0\xa2\xa1\x0f\x0b\x20\x03\x41\x03\x74\x22\x02\x41\xc0\x3c\x6a\x2b\x03\x00\x20\x00\x20\x06\x20\x05\xa0\xa2\x20\x02\x41\xe0\x3c\x6a\x2b\x03\x00\xa1\x20\x00\xa1\xa1\x22\x00\x9a\x20\x00\x20\x01\x42\x00\x53\x1b\x21\x00\x0b\x20\x00\x0b\x0d\x00\x20\x01\x9a\x20\x01\x20\x00\x1b\x20\x01\xa2\x0b\xf2\x02\x03\x03\x7e\x02\x7f\x04\x7c\x20\x00\xbd\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x22\x02\x20\x01\xbd\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x22\x03\x20\x02\x20\x03\x54\x22\x05\x1b\x22\x04\xbf\x21\x00\x02\x40\x20\x04\x42\x34\x88\xa7\x22\x06\x41\xff\x0f\x46\x0d\x00\x20\x03\x20\x02\x20\x05\x1b\x22\x02\xbf\x21\x01\x02\x40\x20\x04\x50\x45\x0d\x00\x20\x01\x0f\x0b\x02\x40\x20\x02\x42\x34\x88\xa7\x22\x05\x41\xff\x0f\x47\x0d\x00\x20\x01\x0f\x0b\x02\x40\x20\x05\x20\x06\x6b\x41\xc1\x00\x48\x0d\x00\x20\x01\x20\x00\xa0\x0f\x0b\x02\x40\x02\x40\x20\x05\x41\xfe\x0b\x49\x0d\x00\x20\x00\x44\x00\x00\x00\x00\x00\x00\x30\x14\xa2\x21\x00\x20\x01\x44\x00\x00\x00\x00\x00\x00\x30\x14\xa2\x21\x01\x44\x00\x00\x00\x00\x00\x00\xb0\x6b\x21\x07\x0c\x01\x0b\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x21\x07\x20\x06\x41\xbc\x04\x4b\x0d\x00\x20\x00\x44\x00\x00\x00\x00\x00\x00\xb0\x6b\xa2\x21\x00\x20\x01\x44\x00\x00\x00\x00\x00\x00\xb0\x6b\xa2\x21\x01\x44\x00\x00\x00\x00\x00\x00\x30\x14\x21\x07\x0b\x20\x07\x20\x01\x20\x01\xa2\x22\x08\x20\x00\x20\x00\xa2\x22\x09\x20\x00\x20\x00\x44\x00\x00\x00\x02\x00\x00\xa0\x41\xa2\x22\x0a\x20\x00\x20\x0a\xa1\xa0\x22\x0a\xa1\x22\x00\x20\x00\xa2\x20\x0a\x20\x0a\xa2\x20\x09\xa1\x20\x0a\x20\x0a\xa0\x20\x00\xa2\xa0\xa0\x20\x01\x20\x01\x44\x00\x00\x00\x02\x00\x00\xa0\x41\xa2\x22\x00\x20\x01\x20\x00\xa1\xa0\x22\x00\xa1\x22\x01\x20\x01\xa2\x20\x00\x20\x00\xa2\x20\x08\xa1\x20\x00\x20\x00\xa0\x20\x01\xa2\xa0\xa0\xa0\xa0\xa0\x9f\xa2\x21\x00\x0b\x20\x00\x0b\xb8\x03\x03\x01\x7e\x02\x7f\x03\x7c\x02\x40\x02\x40\x20\x00\xbd\x22\x03\x42\x80\x80\x80\x80\x80\xff\xff\xff\xff\x00\x83\x42\x81\x80\x80\x80\xf0\x84\xe5\xf2\x3f\x54\x22\x04\x45\x0d\x00\x0c\x01\x0b\x44\x18\x2d\x44\x54\xfb\x21\xe9\x3f\x20\x00\x9a\x20\x00\x20\x03\x42\x00\x53\x22\x05\x1b\xa1\x44\x07\x5c\x14\x33\x26\xa6\x81\x3c\x20\x01\x9a\x20\x01\x20\x05\x1b\xa1\xa0\x21\x00\x20\x03\x42\x3f\x88\xa7\x21\x05\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x01\x0b\x20\x00\x20\x00\x20\x00\x20\x00\xa2\x22\x06\xa2\x22\x07\x44\x63\x55\x55\x55\x55\x55\xd5\x3f\xa2\x20\x01\x20\x06\x20\x01\x20\x07\x20\x06\x20\x06\xa2\x22\x08\x20\x08\x20\x08\x20\x08\x20\x08\x44\x73\x53\x60\xdb\xcb\x75\xf3\xbe\xa2\x44\xa6\x92\x37\xa0\x88\x7e\x14\x3f\xa0\xa2\x44\x01\x65\xf2\xf2\xd8\x44\x43\x3f\xa0\xa2\x44\x28\x03\x56\xc9\x22\x6d\x6d\x3f\xa0\xa2\x44\x37\xd6\x06\x84\xf4\x64\x96\x3f\xa0\xa2\x44\x7a\xfe\x10\x11\x11\x11\xc1\x3f\xa0\x20\x06\x20\x08\x20\x08\x20\x08\x20\x08\x20\x08\x44\xd4\x7a\xbf\x74\x70\x2a\xfb\x3e\xa2\x44\xe9\xa7\xf0\x32\x0f\xb8\x12\x3f\xa0\xa2\x44\x68\x10\x8d\x1a\xf7\x26\x30\x3f\xa0\xa2\x44\x15\x83\xe0\xfe\xc8\xdb\x57\x3f\xa0\xa2\x44\x93\x84\x6e\xe9\xe3\x26\x82\x3f\xa0\xa2\x44\xfe\x41\xb3\x1b\xba\xa1\xab\x3f\xa0\xa2\xa0\xa2\xa0\xa2\xa0\xa0\x22\x06\xa0\x21\x08\x02\x40\x20\x04\x0d\x00\x41\x01\x20\x02\x41\x01\x74\x6b\xb7\x22\x01\x20\x00\x20\x06\x20\x08\x20\x08\xa2\x20\x08\x20\x01\xa0\xa3\xa1\xa0\x22\x08\x20\x08\xa0\xa1\x22\x08\x9a\x20\x08\x20\x05\x1b\x0f\x0b\x02\x40\x20\x02\x45\x0d\x00\x44\x00\x00\x00\x00\x00\x00\xf0\xbf\x20\x08\xa3\x22\x01\x20\x08\xbd\x42\x80\x80\x80\x80\x70\x83\xbf\x22\x07\x20\x01\xbd\x42\x80\x80\x80\x80\x70\x83\xbf\x22\x08\xa2\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\xa0\x20\x06\x20\x07\x20\x00\xa1\xa1\x20\x08\xa2\xa0\xa2\x20\x08\xa0\x21\x08\x0b\x20\x08\x0b\x88\x01\x01\x02\x7f\x23\x00\x41\x10\x6b\x22\x01\x24\x00\x02\x40\x02\x40\x20\x00\xbd\x42\x20\x88\xa7\x41\xff\xff\xff\xff\x07\x71\x22\x02\x41\xfb\xc3\xa4\xff\x03\x4b\x0d\x00\x20\x02\x41\x80\x80\x80\xf2\x03\x49\x0d\x01\x20\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x10\x91\x01\x21\x00\x0c\x01\x0b\x02\x40\x20\x02\x41\x80\x80\xc0\xff\x07\x49\x0d\x00\x20\x00\x20\x00\xa1\x21\x00\x0c\x01\x0b\x20\x00\x20\x01\x10\xa0\x01\x21\x02\x20\x01\x2b\x03\x00\x20\x01\x2b\x03\x08\x20\x02\x41\x01\x71\x10\x91\x01\x21\x00\x0b\x20\x01\x41\x10\x6a\x24\x00\x20\x00\x0b\x8c\x01\x02\x01\x7e\x01\x7f\x02\x40\x20\x00\xbd\x22\x02\x42\x34\x88\xa7\x41\xff\x0f\x71\x22\x03\x41\xff\x0f\x46\x0d\x00\x02\x40\x20\x03\x0d\x00\x02\x40\x20\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x62\x0d\x00\x20\x01\x41\x00\x36\x02\x00\x20\x00\x0f\x0b\x20\x00\x44\x00\x00\x00\x00\x00\x00\xf0\x43\xa2\x20\x01\x10\x93\x01\x21\x00\x20\x01\x20\x01\x28\x02\x00\x41\x40\x6a\x36\x02\x00\x20\x00\x0f\x0b\x20\x01\x20\x03\x41\x82\x78\x6a\x36\x02\x00\x20\x02\x42\xff\xff\xff\xff\xff\xff\xff\x87\x80\x7f\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf0\x3f\x84\xbf\x21\x00\x0b\x20\x00\x0b\xae\x03\x03\x01\x7e\x05\x7f\x01\x7c\x02\x40\x20\x01\x20\x01\x61\x20\x00\x20\x00\x61\x71\x0d\x00\x20\x00\x20\x01\xa0\x0f\x0b\x02\x40\x20\x01\xbd\x22\x02\x42\x20\x88\xa7\x22\x03\x41\x80\x80\xc0\x80\x7c\x6a\x20\x02\xa7\x22\x04\x72\x0d\x00\x20\x00\x10\x8e\x01\x0f\x0b\x20\x02\x42\x3e\x88\xa7\x41\x02\x71\x22\x05\x20\x00\xbd\x22\x02\x42\x3f\x88\xa7\x72\x21\x06\x02\x40\x02\x40\x02\x40\x20\x02\x42\x20\x88\xa7\x41\xff\xff\xff\xff\x07\x71\x22\x07\x20\x02\xa7\x72\x0d\x00\x02\x40\x20\x06\x0e\x04\x03\x03\x02\x00\x03\x0b\x44\x18\x2d\x44\x54\xfb\x21\x09\xc0\x0f\x0b\x02\x40\x20\x03\x41\xff\xff\xff\xff\x07\x71\x22\x03\x20\x04\x72\x0d\x00\x44\x18\x2d\x44\x54\xfb\x21\xf9\xbf\x44\x18\x2d\x44\x54\xfb\x21\xf9\x3f\x20\x02\x42\x00\x53\x1b\x0f\x0b\x02\x40\x02\x40\x20\x03\x41\x80\x80\xc0\xff\x07\x47\x0d\x00\x20\x07\x41\x80\x80\xc0\xff\x07\x47\x0d\x01\x20\x06\x41\x03\x74\x41\x80\x3d\x6a\x2b\x03\x00\x0f\x0b\x02\x40\x02\x40\x20\x07\x41\x80\x80\xc0\xff\x07\x46\x0d\x00\x20\x03\x41\x80\x80\x80\x20\x6a\x20\x07\x4f\x0d\x01\x0b\x44\x18\x2d\x44\x54\xfb\x21\xf9\xbf\x44\x18\x2d\x44\x54\xfb\x21\xf9\x3f\x20\x02\x42\x00\x53\x1b\x0f\x0b\x02\x40\x02\x40\x20\x05\x45\x0d\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x08\x20\x07\x41\x80\x80\x80\x20\x6a\x20\x03\x49\x0d\x01\x0b\x20\x00\x20\x01\xa3\x99\x10\x8e\x01\x21\x08\x0b\x02\x40\x20\x06\x41\x02\x4b\x0d\x00\x20\x08\x21\x00\x02\x40\x02\x40\x20\x06\x0e\x03\x05\x00\x01\x05\x0b\x20\x08\x9a\x0f\x0b\x44\x18\x2d\x44\x54\xfb\x21\x09\x40\x20\x08\x44\x07\x5c\x14\x33\x26\xa6\xa1\xbc\xa0\xa1\x0f\x0b\x20\x08\x44\x07\x5c\x14\x33\x26\xa6\xa1\xbc\xa0\x44\x18\x2d\x44\x54\xfb\x21\x09\xc0\xa0\x0f\x0b\x20\x06\x41\x03\x74\x41\xa0\x3d\x6a\x2b\x03\x00\x0f\x0b\x44\x18\x2d\x44\x54\xfb\x21\x09\x40\x21\x00\x0b\x20\x00\x0b\xee\x03\x03\x01\x7e\x03\x7f\x06\x7c\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\xbd\x22\x01\x42\x00\x53\x0d\x00\x20\x01\x42\x20\x88\xa7\x22\x02\x41\xff\xff\x3f\x4b\x0d\x01\x0b\x02\x40\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x00\x52\x0d\x00\x44\x00\x00\x00\x00\x00\x00\xf0\xbf\x20\x00\x20\x00\xa2\xa3\x0f\x0b\x20\x01\x42\x7f\x55\x0d\x01\x20\x00\x20\x00\xa1\x44\x00\x00\x00\x00\x00\x00\x00\x00\xa3\x0f\x0b\x20\x02\x41\xff\xff\xbf\xff\x07\x4b\x0d\x02\x41\x80\x80\xc0\xff\x03\x21\x03\x41\x81\x78\x21\x04\x02\x40\x20\x02\x41\x80\x80\xc0\xff\x03\x46\x0d\x00\x20\x02\x21\x03\x0c\x02\x0b\x20\x01\xa7\x0d\x01\x44\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x0b\x20\x00\x44\x00\x00\x00\x00\x00\x00\x50\x43\xa2\xbd\x22\x01\x42\x20\x88\xa7\x21\x03\x41\xcb\x77\x21\x04\x0b\x20\x04\x20\x03\x41\xe2\xbe\x25\x6a\x22\x02\x41\x14\x76\x6a\xb7\x22\x05\x44\x00\x60\x9f\x50\x13\x44\xd3\x3f\xa2\x22\x06\x20\x02\x41\xff\xff\x3f\x71\x41\x9e\xc1\x9a\xff\x03\x6a\xad\x42\x20\x86\x20\x01\x42\xff\xff\xff\xff\x0f\x83\x84\xbf\x44\x00\x00\x00\x00\x00\x00\xf0\xbf\xa0\x22\x00\x20\x00\x20\x00\x44\x00\x00\x00\x00\x00\x00\xe0\x3f\xa2\xa2\x22\x07\xa1\xbd\x42\x80\x80\x80\x80\x70\x83\xbf\x22\x08\x44\x00\x00\x20\x15\x7b\xcb\xdb\x3f\xa2\x22\x09\xa0\x22\x0a\x20\x09\x20\x06\x20\x0a\xa1\xa0\x20\x00\x20\x08\xa1\x20\x07\xa1\x20\x00\x20\x00\x44\x00\x00\x00\x00\x00\x00\x00\x40\xa0\xa3\x22\x00\x20\x07\x20\x00\x20\x00\xa2\x22\x06\x20\x06\xa2\x22\x00\x20\x00\x20\x00\x44\x9f\xc6\x78\xd0\x09\x9a\xc3\x3f\xa2\x44\xaf\x78\x8e\x1d\xc5\x71\xcc\x3f\xa0\xa2\x44\x04\xfa\x97\x99\x99\x99\xd9\x3f\xa0\xa2\x20\x06\x20\x00\x20\x00\x20\x00\x44\x44\x52\x3e\xdf\x12\xf1\xc2\x3f\xa2\x44\xde\x03\xcb\x96\x64\x46\xc7\x3f\xa0\xa2\x44\x59\x93\x22\x94\x24\x49\xd2\x3f\xa0\xa2\x44\x93\x55\x55\x55\x55\x55\xe5\x3f\xa0\xa2\xa0\xa0\xa2\xa0\x22\x00\x44\x00\x00\x20\x15\x7b\xcb\xdb\x3f\xa2\x20\x05\x44\x36\x2b\xf1\x11\xf3\xfe\x59\x3d\xa2\x20\x00\x20\x08\xa0\x44\xd5\xad\x9a\xca\x38\x94\xbb\x3d\xa2\xa0\xa0\xa0\xa0\x21\x00\x0b\x20\x00\x0b\xd2\x04\x03\x01\x7e\x01\x7f\x03\x7c\x02\x40\x02\x40\x02\x40\x20\x00\xbd\x22\x01\x42\x20\x88\xa7\x41\xff\xff\xff\xff\x07\x71\x22\x02\x41\x80\x80\xc0\xff\x03\x49\x0d\x00\x20\x02\x41\x80\x80\xc0\x80\x7c\x6a\x20\x01\xa7\x72\x0d\x01\x20\x00\x44\x18\x2d\x44\x54\xfb\x21\xf9\x3f\xa2\x44\x00\x00\x00\x00\x00\x00\x70\x38\xa0\x0f\x0b\x02\x40\x20\x02\x41\xff\xff\xff\xfe\x03\x4b\x0d\x00\x20\x02\x41\x80\x80\x40\x6a\x41\x80\x80\x80\xf2\x03\x49\x0d\x02\x20\x00\x20\x00\xa2\x22\x03\x20\x03\x20\x03\x20\x03\x20\x03\x20\x03\x44\x09\xf7\xfd\x0d\xe1\x3d\x02\x3f\xa2\x44\x88\xb2\x01\x75\xe0\xef\x49\x3f\xa0\xa2\x44\x3b\x8f\x68\xb5\x28\x82\xa4\xbf\xa0\xa2\x44\x55\x44\x88\x0e\x55\xc1\xc9\x3f\xa0\xa2\x44\x7d\x6f\xeb\x03\x12\xd6\xd4\xbf\xa0\xa2\x44\x55\x55\x55\x55\x55\x55\xc5\x3f\xa0\xa2\x20\x03\x20\x03\x20\x03\x20\x03\x44\x82\x92\x2e\xb1\xc5\xb8\xb3\x3f\xa2\x44\x59\x01\x8d\x1b\x6c\x06\xe6\xbf\xa0\xa2\x44\xc8\x8a\x59\x9c\xe5\x2a\x00\x40\xa0\xa2\x44\x4b\x2d\x8a\x1c\x27\x3a\x03\xc0\xa0\xa2\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\xa0\xa3\x20\x00\xa2\x20\x00\xa0\x0f\x0b\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x20\x00\x99\xa1\x44\x00\x00\x00\x00\x00\x00\xe0\x3f\xa2\x22\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x44\x09\xf7\xfd\x0d\xe1\x3d\x02\x3f\xa2\x44\x88\xb2\x01\x75\xe0\xef\x49\x3f\xa0\xa2\x44\x3b\x8f\x68\xb5\x28\x82\xa4\xbf\xa0\xa2\x44\x55\x44\x88\x0e\x55\xc1\xc9\x3f\xa0\xa2\x44\x7d\x6f\xeb\x03\x12\xd6\xd4\xbf\xa0\xa2\x44\x55\x55\x55\x55\x55\x55\xc5\x3f\xa0\xa2\x20\x00\x20\x00\x20\x00\x20\x00\x44\x82\x92\x2e\xb1\xc5\xb8\xb3\x3f\xa2\x44\x59\x01\x8d\x1b\x6c\x06\xe6\xbf\xa0\xa2\x44\xc8\x8a\x59\x9c\xe5\x2a\x00\x40\xa0\xa2\x44\x4b\x2d\x8a\x1c\x27\x3a\x03\xc0\xa0\xa2\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\xa0\xa3\x21\x04\x20\x00\x9f\x21\x03\x02\x40\x02\x40\x20\x02\x41\xb3\xe6\xbc\xff\x03\x49\x0d\x00\x44\x18\x2d\x44\x54\xfb\x21\xf9\x3f\x20\x03\x20\x03\x20\x04\xa2\xa0\x22\x00\x20\x00\xa0\x44\x07\x5c\x14\x33\x26\xa6\x91\xbc\xa0\xa1\x21\x00\x0c\x01\x0b\x44\x18\x2d\x44\x54\xfb\x21\xe9\x3f\x20\x03\xbd\x42\x80\x80\x80\x80\x70\x83\xbf\x22\x05\x20\x05\xa0\xa1\x20\x03\x20\x03\xa0\x20\x04\xa2\x44\x07\x5c\x14\x33\x26\xa6\x91\x3c\x20\x00\x20\x05\x20\x05\xa2\xa1\x20\x03\x20\x05\xa0\xa3\x22\x00\x20\x00\xa0\xa1\xa1\xa1\x44\x18\x2d\x44\x54\xfb\x21\xe9\x3f\xa0\x21\x00\x0b\x20\x00\x9a\x20\x00\x20\x01\x42\x00\x53\x1b\x0f\x0b\x44\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x20\x00\xa1\xa3\x21\x00\x0b\x20\x00\x0b\xb6\x01\x03\x01\x7e\x01\x7f\x01\x7c\x20\x00\xbd\x22\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\xbf\x21\x00\x02\x40\x02\x40\x20\x01\x42\x34\x88\xa7\x41\xff\x0f\x71\x22\x02\x41\x99\x08\x49\x0d\x00\x20\x00\x10\x8b\x01\x44\xef\x39\xfa\xfe\x42\x2e\xe6\x3f\xa0\x21\x00\x0c\x01\x0b\x02\x40\x20\x02\x41\x80\x08\x49\x0d\x00\x20\x00\x20\x00\xa0\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x20\x00\x20\x00\xa2\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\xa0\x9f\x20\x00\xa0\xa3\xa0\x10\x8b\x01\x21\x00\x0c\x01\x0b\x20\x02\x41\xe5\x07\x49\x0d\x00\x20\x00\x20\x00\xa2\x22\x03\x20\x03\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\xa0\x9f\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\xa0\xa3\x20\x00\xa0\x10\x86\x01\x21\x00\x0b\x20\x00\x9a\x20\x00\x20\x01\x42\x00\x53\x1b\x0b\x92\x01\x01\x03\x7c\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x20\x00\x20\x00\xa2\x22\x02\x44\x00\x00\x00\x00\x00\x00\xe0\x3f\xa2\x22\x03\xa1\x22\x04\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x20\x04\xa1\x20\x03\xa1\x20\x02\x20\x02\x20\x02\x20\x02\x44\x90\x15\xcb\x19\xa0\x01\xfa\x3e\xa2\x44\x77\x51\xc1\x16\x6c\xc1\x56\xbf\xa0\xa2\x44\x4c\x55\x55\x55\x55\x55\xa5\x3f\xa0\xa2\x20\x02\x20\x02\xa2\x22\x03\x20\x03\xa2\x20\x02\x20\x02\x44\xd4\x38\x88\xbe\xe9\xfa\xa8\xbd\xa2\x44\xc4\xb1\xb4\xbd\x9e\xee\x21\x3e\xa0\xa2\x44\xad\x52\x9c\x80\x4f\x7e\x92\xbe\xa0\xa2\xa0\xa2\x20\x00\x20\x01\xa2\xa1\xa0\xa0\x0b\xe3\x01\x02\x02\x7f\x01\x7c\x23\x00\x41\x10\x6b\x22\x01\x24\x00\x02\x40\x02\x40\x20\x00\xbd\x42\x20\x88\xa7\x41\xff\xff\xff\xff\x07\x71\x22\x02\x41\xfb\xc3\xa4\xff\x03\x4b\x0d\x00\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x21\x03\x20\x02\x41\x9e\xc1\x9a\xf2\x03\x49\x0d\x01\x20\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x10\x98\x01\x21\x03\x0c\x01\x0b\x02\x40\x20\x02\x41\x80\x80\xc0\xff\x07\x49\x0d\x00\x20\x00\x20\x00\xa1\x21\x03\x0c\x01\x0b\x02\x40\x20\x00\x20\x01\x10\xa0\x01\x41\x03\x71\x22\x02\x41\x02\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x02\x0e\x03\x00\x01\x02\x00\x0b\x20\x01\x2b\x03\x00\x20\x01\x2b\x03\x08\x10\x98\x01\x21\x03\x0c\x03\x0b\x20\x01\x2b\x03\x00\x20\x01\x2b\x03\x08\x41\x01\x10\xa7\x01\x9a\x21\x03\x0c\x02\x0b\x20\x01\x2b\x03\x00\x20\x01\x2b\x03\x08\x10\x98\x01\x9a\x21\x03\x0c\x01\x0b\x20\x01\x2b\x03\x00\x20\x01\x2b\x03\x08\x41\x01\x10\xa7\x01\x21\x03\x0b\x20\x01\x41\x10\x6a\x24\x00\x20\x03\x0b\xa6\x01\x03\x01\x7e\x01\x7f\x01\x7c\x20\x00\xbd\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x22\x01\xbf\x21\x00\x02\x40\x02\x40\x20\x01\x42\x20\x88\xa7\x22\x02\x41\xc1\xdc\x98\xff\x03\x4b\x0d\x00\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x21\x03\x20\x02\x41\x80\x80\xc0\xf2\x03\x49\x0d\x01\x20\x00\x10\x9e\x01\x22\x00\x20\x00\xa2\x20\x00\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\xa0\x22\x00\x20\x00\xa0\xa3\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\xa0\x0f\x0b\x02\x40\x20\x02\x41\xc1\xdc\x98\x84\x04\x4b\x0d\x00\x20\x00\x10\x89\x01\x22\x00\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x20\x00\xa3\xa0\x44\x00\x00\x00\x00\x00\x00\xe0\x3f\xa2\x0f\x0b\x20\x00\x10\xa3\x01\x21\x03\x0b\x20\x03\x0b\xd8\x01\x01\x02\x7f\x23\x00\x41\x10\x6b\x22\x01\x24\x00\x02\x40\x02\x40\x20\x00\xbd\x42\x20\x88\xa7\x41\xff\xff\xff\xff\x07\x71\x22\x02\x41\xfb\xc3\xa4\xff\x03\x4b\x0d\x00\x20\x02\x41\x80\x80\xc0\xf2\x03\x49\x0d\x01\x20\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x41\x00\x10\xa7\x01\x21\x00\x0c\x01\x0b\x02\x40\x20\x02\x41\x80\x80\xc0\xff\x07\x49\x0d\x00\x20\x00\x20\x00\xa1\x21\x00\x0c\x01\x0b\x02\x40\x20\x00\x20\x01\x10\xa0\x01\x41\x03\x71\x22\x02\x41\x02\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x02\x0e\x03\x00\x01\x02\x00\x0b\x20\x01\x2b\x03\x00\x20\x01\x2b\x03\x08\x41\x01\x10\xa7\x01\x21\x00\x0c\x03\x0b\x20\x01\x2b\x03\x00\x20\x01\x2b\x03\x08\x10\x98\x01\x21\x00\x0c\x02\x0b\x20\x01\x2b\x03\x00\x20\x01\x2b\x03\x08\x41\x01\x10\xa7\x01\x9a\x21\x00\x0c\x01\x0b\x20\x01\x2b\x03\x00\x20\x01\x2b\x03\x08\x10\x98\x01\x9a\x21\x00\x0b\x20\x01\x41\x10\x6a\x24\x00\x20\x00\x0b\xe4\x01\x02\x02\x7e\x01\x7f\x20\x00\xbd\x22\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x22\x02\xbf\x21\x00\x02\x40\x02\x40\x20\x02\x42\x20\x88\xa7\x22\x03\x41\xeb\xa7\x86\xff\x03\x49\x0d\x00\x02\x40\x20\x03\x41\x81\x80\xd0\x81\x04\x49\x0d\x00\x44\x00\x00\x00\x00\x00\x00\x00\x80\x20\x00\xa3\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\xa0\x21\x00\x0c\x02\x0b\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x44\x00\x00\x00\x00\x00\x00\x00\x40\x20\x00\x20\x00\xa0\x10\x9e\x01\x44\x00\x00\x00\x00\x00\x00\x00\x40\xa0\xa3\xa1\x21\x00\x0c\x01\x0b\x02\x40\x20\x03\x41\xaf\xb1\xc1\xfe\x03\x49\x0d\x00\x20\x00\x20\x00\xa0\x10\x9e\x01\x22\x00\x20\x00\x44\x00\x00\x00\x00\x00\x00\x00\x40\xa0\xa3\x21\x00\x0c\x01\x0b\x20\x03\x41\x80\x80\xc0\x00\x49\x0d\x00\x20\x00\x44\x00\x00\x00\x00\x00\x00\x00\xc0\xa2\x10\x9e\x01\x22\x00\x9a\x20\x00\x44\x00\x00\x00\x00\x00\x00\x00\x40\xa0\xa3\x21\x00\x0b\x20\x00\x9a\x20\x00\x20\x01\x42\x00\x53\x1b\x0b\x10\x00\x20\x00\x44\x00\x00\x00\x00\x00\x00\x00\x70\x10\x8f\x01\x0b\x98\x06\x03\x01\x7e\x02\x7f\x04\x7c\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\xbd\x22\x01\x42\x20\x88\xa7\x41\xff\xff\xff\xff\x07\x71\x22\x02\x41\xfa\xd0\x8d\x82\x04\x49\x0d\x00\x20\x00\x20\x00\x62\x0d\x05\x02\x40\x20\x01\x42\x00\x59\x0d\x00\x44\x00\x00\x00\x00\x00\x00\xf0\xbf\x0f\x0b\x20\x00\x44\xef\x39\xfa\xfe\x42\x2e\x86\x40\x64\x41\x01\x73\x0d\x01\x20\x00\x44\x00\x00\x00\x00\x00\x00\xe0\x7f\xa2\x0f\x0b\x20\x02\x41\xc3\xdc\xd8\xfe\x03\x49\x0d\x02\x20\x02\x41\xb1\xc5\xc2\xff\x03\x4b\x0d\x00\x02\x40\x20\x01\x42\x00\x53\x0d\x00\x20\x00\x44\x00\x00\xe0\xfe\x42\x2e\xe6\xbf\xa0\x21\x04\x41\x01\x21\x02\x44\x76\x3c\x79\x35\xef\x39\xea\x3d\x21\x05\x0c\x02\x0b\x20\x00\x44\x00\x00\xe0\xfe\x42\x2e\xe6\x3f\xa0\x21\x04\x41\x7f\x21\x02\x44\x76\x3c\x79\x35\xef\x39\xea\xbd\x21\x05\x0c\x01\x0b\x02\x40\x02\x40\x20\x00\x44\xfe\x82\x2b\x65\x47\x15\xf7\x3f\xa2\x44\x00\x00\x00\x00\x00\x00\xe0\xbf\x44\x00\x00\x00\x00\x00\x00\xe0\x3f\x20\x01\x42\x00\x53\x1b\xa0\x22\x04\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x04\xaa\x21\x02\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x02\x0b\x20\x02\xb7\x22\x04\x44\x76\x3c\x79\x35\xef\x39\xea\x3d\xa2\x21\x05\x20\x00\x20\x04\x44\x00\x00\xe0\xfe\x42\x2e\xe6\xbf\xa2\xa0\x21\x04\x0b\x20\x04\x20\x04\x20\x05\xa1\x22\x00\xa1\x20\x05\xa1\x21\x05\x0c\x01\x0b\x20\x02\x41\x80\x80\xc0\xe4\x03\x49\x0d\x01\x41\x00\x21\x02\x0b\x20\x00\x20\x00\x44\x00\x00\x00\x00\x00\x00\xe0\x3f\xa2\x22\x06\xa2\x22\x04\x20\x04\x20\x04\x20\x04\x20\x04\x20\x04\x44\x2d\xc3\x09\x6e\xb7\xfd\x8a\xbe\xa2\x44\x39\x52\xe6\x86\xca\xcf\xd0\x3e\xa0\xa2\x44\xb7\xdb\xaa\x9e\x19\xce\x14\xbf\xa0\xa2\x44\x85\x55\xfe\x19\xa0\x01\x5a\x3f\xa0\xa2\x44\xf4\x10\x11\x11\x11\x11\xa1\xbf\xa0\xa2\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\xa0\x22\x07\x44\x00\x00\x00\x00\x00\x00\x08\x40\x20\x06\x20\x07\xa2\xa1\x22\x06\xa1\x44\x00\x00\x00\x00\x00\x00\x18\x40\x20\x00\x20\x06\xa2\xa1\xa3\xa2\x21\x06\x02\x40\x20\x02\x0d\x00\x20\x00\x20\x00\x20\x06\xa2\x20\x04\xa1\xa1\x0f\x0b\x20\x00\x20\x06\x20\x05\xa1\xa2\x20\x05\xa1\x20\x04\xa1\x21\x04\x02\x40\x20\x02\x41\x01\x6a\x22\x03\x41\x02\x4b\x0d\x00\x02\x40\x02\x40\x20\x03\x0e\x03\x00\x02\x01\x00\x0b\x20\x00\x20\x04\xa1\x44\x00\x00\x00\x00\x00\x00\xe0\x3f\xa2\x44\x00\x00\x00\x00\x00\x00\xe0\xbf\xa0\x0f\x0b\x02\x40\x20\x00\x44\x00\x00\x00\x00\x00\x00\xd0\xbf\x63\x41\x01\x73\x0d\x00\x20\x04\x20\x00\x44\x00\x00\x00\x00\x00\x00\xe0\x3f\xa0\xa1\x44\x00\x00\x00\x00\x00\x00\x00\xc0\xa2\x0f\x0b\x20\x00\x20\x04\xa1\x22\x00\x20\x00\xa0\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\xa0\x0f\x0b\x20\x02\x41\xff\x07\x6a\xad\x42\x34\x86\xbf\x21\x05\x02\x40\x20\x02\x41\x39\x49\x0d\x00\x20\x00\x20\x04\xa1\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\xa0\x22\x00\x20\x00\xa0\x44\x00\x00\x00\x00\x00\x00\xe0\x7f\xa2\x20\x00\x20\x05\xa2\x20\x02\x41\x80\x08\x46\x1b\x44\x00\x00\x00\x00\x00\x00\xf0\xbf\xa0\x0f\x0b\x41\xff\x07\x20\x02\x6b\xad\x42\x34\x86\x21\x01\x02\x40\x02\x40\x20\x02\x41\x13\x4a\x0d\x00\x20\x00\x20\x04\xa1\x21\x00\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x20\x01\xbf\xa1\x21\x04\x0c\x01\x0b\x20\x00\x20\x04\x20\x01\xbf\xa0\xa1\x21\x04\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x21\x00\x0b\x20\x04\x20\x00\xa0\x20\x05\xa2\x21\x00\x0b\x20\x00\x0b\xa3\x14\x02\x12\x7f\x04\x7c\x23\x00\x41\xb0\x04\x6b\x22\x05\x24\x00\x41\x00\x21\x06\x20\x02\x20\x02\x41\x7d\x6a\x41\x18\x6d\x22\x07\x41\x00\x20\x07\x41\x00\x4a\x1b\x22\x08\x41\x68\x6c\x6a\x21\x09\x02\x40\x20\x04\x41\x02\x74\x41\xb0\xce\x00\x6a\x28\x02\x00\x22\x0a\x20\x03\x41\x7f\x6a\x22\x02\x6a\x41\x00\x48\x0d\x00\x20\x0a\x20\x03\x6a\x21\x0b\x20\x08\x20\x02\x6b\x21\x02\x20\x08\x20\x03\x6b\x41\x02\x74\x41\xc4\xce\x00\x6a\x21\x0c\x20\x05\x41\xc0\x02\x6a\x21\x07\x03\x40\x02\x40\x02\x40\x20\x02\x41\x00\x4e\x0d\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x17\x0c\x01\x0b\x20\x0c\x28\x02\x00\xb7\x21\x17\x0b\x20\x07\x20\x17\x39\x03\x00\x20\x07\x41\x08\x6a\x21\x07\x20\x0c\x41\x04\x6a\x21\x0c\x20\x02\x41\x01\x6a\x21\x02\x20\x0b\x41\x7f\x6a\x22\x0b\x0d\x00\x0b\x0b\x20\x09\x41\x68\x6a\x21\x0d\x20\x03\x41\x03\x74\x20\x05\x41\xc0\x02\x6a\x6a\x41\x78\x6a\x21\x0b\x20\x03\x41\x01\x48\x21\x0e\x03\x40\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x17\x02\x40\x20\x0e\x0d\x00\x20\x00\x21\x02\x20\x03\x21\x0c\x20\x0b\x21\x07\x03\x40\x20\x17\x20\x02\x2b\x03\x00\x20\x07\x2b\x03\x00\xa2\xa0\x21\x17\x20\x02\x41\x08\x6a\x21\x02\x20\x07\x41\x78\x6a\x21\x07\x20\x0c\x41\x7f\x6a\x22\x0c\x0d\x00\x0b\x0b\x20\x05\x20\x06\x41\x03\x74\x6a\x20\x17\x39\x03\x00\x20\x0b\x41\x08\x6a\x21\x0b\x20\x06\x20\x0a\x48\x21\x02\x20\x06\x41\x01\x6a\x21\x06\x20\x02\x0d\x00\x0b\x41\x17\x20\x0d\x6b\x21\x0f\x41\x18\x20\x0d\x6b\x21\x10\x20\x0a\x41\x02\x74\x20\x05\x41\xe0\x03\x6a\x6a\x41\x7c\x6a\x21\x11\x20\x05\x41\xe0\x03\x6a\x41\x7c\x6a\x21\x12\x20\x05\x41\x78\x6a\x21\x13\x20\x0a\x21\x06\x02\x40\x03\x40\x20\x05\x20\x06\x41\x03\x74\x22\x02\x6a\x2b\x03\x00\x21\x17\x02\x40\x20\x06\x41\x01\x48\x22\x0e\x0d\x00\x20\x06\x41\x01\x6a\x21\x0c\x20\x13\x20\x02\x6a\x21\x02\x20\x05\x41\xe0\x03\x6a\x21\x07\x03\x40\x02\x40\x02\x40\x20\x17\x44\x00\x00\x00\x00\x00\x00\x70\x3e\xa2\x22\x18\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x18\xaa\x21\x0b\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x0b\x0b\x02\x40\x02\x40\x20\x17\x20\x0b\xb7\x22\x18\x44\x00\x00\x00\x00\x00\x00\x70\xc1\xa2\xa0\x22\x17\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x17\xaa\x21\x0b\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x0b\x0b\x20\x07\x20\x0b\x36\x02\x00\x20\x07\x41\x04\x6a\x21\x07\x20\x02\x2b\x03\x00\x20\x18\xa0\x21\x17\x20\x02\x41\x78\x6a\x21\x02\x20\x0c\x41\x7f\x6a\x22\x0c\x41\x01\x4a\x0d\x00\x0b\x0b\x02\x40\x02\x40\x20\x17\x20\x0d\x10\xa2\x01\x22\x17\x20\x17\x44\x00\x00\x00\x00\x00\x00\xc0\x3f\xa2\x9c\x44\x00\x00\x00\x00\x00\x00\x20\xc0\xa2\xa0\x22\x17\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x17\xaa\x21\x14\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x14\x0b\x20\x17\x20\x14\xb7\xa1\x21\x17\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x0d\x41\x01\x48\x22\x15\x0d\x00\x20\x06\x41\x02\x74\x20\x05\x41\xe0\x03\x6a\x6a\x41\x7c\x6a\x22\x02\x20\x02\x28\x02\x00\x22\x02\x20\x02\x20\x10\x75\x22\x02\x20\x10\x74\x6b\x22\x07\x36\x02\x00\x20\x07\x20\x0f\x75\x21\x16\x20\x02\x20\x14\x6a\x21\x14\x0c\x01\x0b\x20\x0d\x0d\x01\x20\x06\x41\x02\x74\x20\x05\x41\xe0\x03\x6a\x6a\x41\x7c\x6a\x28\x02\x00\x41\x17\x75\x21\x16\x0b\x20\x16\x41\x01\x48\x0d\x02\x0c\x01\x0b\x41\x02\x21\x16\x20\x17\x44\x00\x00\x00\x00\x00\x00\xe0\x3f\x66\x41\x01\x73\x45\x0d\x00\x41\x00\x21\x16\x0c\x01\x0b\x02\x40\x02\x40\x20\x0e\x45\x0d\x00\x41\x00\x21\x0e\x0c\x01\x0b\x41\x00\x21\x0e\x20\x05\x41\xe0\x03\x6a\x21\x02\x20\x06\x21\x0b\x03\x40\x20\x02\x28\x02\x00\x21\x07\x41\xff\xff\xff\x07\x21\x0c\x02\x40\x02\x40\x02\x40\x20\x0e\x0d\x00\x20\x07\x45\x0d\x01\x41\x01\x21\x0e\x41\x80\x80\x80\x08\x21\x0c\x0b\x20\x02\x20\x0c\x20\x07\x6b\x36\x02\x00\x0c\x01\x0b\x41\x00\x21\x0e\x0b\x20\x02\x41\x04\x6a\x21\x02\x20\x0b\x41\x7f\x6a\x22\x0b\x0d\x00\x0b\x0b\x02\x40\x20\x15\x0d\x00\x20\x0d\x41\x7f\x6a\x22\x02\x41\x01\x4b\x0d\x00\x02\x40\x02\x40\x20\x02\x0e\x02\x00\x01\x00\x0b\x20\x06\x41\x02\x74\x20\x05\x41\xe0\x03\x6a\x6a\x41\x7c\x6a\x22\x02\x20\x02\x28\x02\x00\x41\xff\xff\xff\x03\x71\x36\x02\x00\x0c\x01\x0b\x20\x06\x41\x02\x74\x20\x05\x41\xe0\x03\x6a\x6a\x41\x7c\x6a\x22\x02\x20\x02\x28\x02\x00\x41\xff\xff\xff\x01\x71\x36\x02\x00\x0b\x20\x14\x41\x01\x6a\x21\x14\x20\x16\x41\x02\x47\x0d\x00\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x20\x17\xa1\x21\x17\x41\x02\x21\x16\x20\x0e\x45\x0d\x00\x20\x17\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x20\x0d\x10\xa2\x01\xa1\x21\x17\x0b\x02\x40\x20\x17\x44\x00\x00\x00\x00\x00\x00\x00\x00\x62\x0d\x00\x02\x40\x20\x06\x20\x0a\x4c\x0d\x00\x20\x12\x20\x06\x41\x02\x74\x6a\x21\x02\x41\x00\x21\x07\x20\x06\x21\x0c\x03\x40\x20\x02\x28\x02\x00\x20\x07\x72\x21\x07\x20\x02\x41\x7c\x6a\x21\x02\x20\x0c\x41\x7f\x6a\x22\x0c\x20\x0a\x4a\x0d\x00\x0b\x20\x07\x45\x0d\x00\x20\x05\x41\xe0\x03\x6a\x20\x06\x41\x02\x74\x6a\x41\x7c\x6a\x21\x02\x20\x0d\x21\x09\x03\x40\x20\x06\x41\x7f\x6a\x21\x06\x20\x09\x41\x68\x6a\x21\x09\x20\x02\x28\x02\x00\x21\x07\x20\x02\x41\x7c\x6a\x21\x02\x20\x07\x45\x0d\x00\x0c\x04\x0b\x00\x0b\x20\x11\x21\x02\x20\x06\x21\x0b\x03\x40\x20\x0b\x41\x01\x6a\x21\x0b\x20\x02\x28\x02\x00\x21\x07\x20\x02\x41\x7c\x6a\x21\x02\x20\x07\x45\x0d\x00\x0b\x20\x05\x41\xc0\x02\x6a\x20\x03\x20\x06\x6a\x41\x03\x74\x6a\x21\x0e\x03\x40\x20\x05\x41\xc0\x02\x6a\x20\x06\x20\x03\x6a\x41\x03\x74\x6a\x20\x06\x41\x01\x6a\x22\x06\x20\x08\x6a\x41\x02\x74\x41\xc0\xce\x00\x6a\x28\x02\x00\xb7\x39\x03\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x17\x02\x40\x20\x03\x41\x01\x48\x0d\x00\x20\x00\x21\x02\x20\x0e\x21\x07\x20\x03\x21\x0c\x03\x40\x20\x17\x20\x02\x2b\x03\x00\x20\x07\x2b\x03\x00\xa2\xa0\x21\x17\x20\x02\x41\x08\x6a\x21\x02\x20\x07\x41\x78\x6a\x21\x07\x20\x0c\x41\x7f\x6a\x22\x0c\x0d\x00\x0b\x0b\x20\x05\x20\x06\x41\x03\x74\x6a\x20\x17\x39\x03\x00\x20\x0e\x41\x08\x6a\x21\x0e\x20\x06\x20\x0b\x48\x0d\x00\x0b\x20\x0b\x21\x06\x0c\x01\x0b\x0b\x02\x40\x02\x40\x20\x17\x41\x00\x20\x0d\x6b\x10\xa2\x01\x22\x17\x44\x00\x00\x00\x00\x00\x00\x70\x41\x66\x41\x01\x73\x0d\x00\x20\x06\x41\x02\x74\x21\x07\x02\x40\x02\x40\x20\x17\x44\x00\x00\x00\x00\x00\x00\x70\x3e\xa2\x22\x18\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x18\xaa\x21\x02\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x02\x0b\x20\x05\x41\xe0\x03\x6a\x20\x07\x6a\x21\x07\x02\x40\x02\x40\x20\x17\x20\x02\xb7\x44\x00\x00\x00\x00\x00\x00\x70\xc1\xa2\xa0\x22\x17\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x17\xaa\x21\x0c\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x0c\x0b\x20\x07\x20\x0c\x36\x02\x00\x20\x06\x41\x01\x6a\x21\x06\x0c\x01\x0b\x02\x40\x02\x40\x20\x17\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x17\xaa\x21\x02\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x02\x0b\x20\x0d\x21\x09\x0b\x20\x05\x41\xe0\x03\x6a\x20\x06\x41\x02\x74\x6a\x20\x02\x36\x02\x00\x0b\x02\x40\x20\x06\x41\x00\x48\x0d\x00\x20\x06\x41\x01\x6a\x21\x0c\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x20\x09\x10\xa2\x01\x21\x17\x20\x05\x41\xe0\x03\x6a\x20\x06\x41\x02\x74\x6a\x21\x02\x20\x05\x20\x06\x41\x03\x74\x6a\x21\x07\x03\x40\x20\x07\x20\x17\x20\x02\x28\x02\x00\xb7\xa2\x39\x03\x00\x20\x02\x41\x7c\x6a\x21\x02\x20\x07\x41\x78\x6a\x21\x07\x20\x17\x44\x00\x00\x00\x00\x00\x00\x70\x3e\xa2\x21\x17\x20\x0c\x41\x7f\x6a\x22\x0c\x41\x00\x4a\x0d\x00\x0b\x20\x06\x41\x00\x48\x0d\x00\x20\x05\x20\x06\x41\x03\x74\x6a\x21\x0b\x20\x06\x21\x02\x03\x40\x20\x06\x20\x02\x22\x0e\x6b\x21\x03\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x17\x41\x00\x21\x02\x41\x00\x21\x07\x02\x40\x03\x40\x20\x17\x20\x02\x41\x90\xe4\x00\x6a\x2b\x03\x00\x20\x0b\x20\x02\x6a\x2b\x03\x00\xa2\xa0\x21\x17\x20\x07\x20\x0a\x4e\x0d\x01\x20\x02\x41\x08\x6a\x21\x02\x20\x07\x20\x03\x49\x21\x0c\x20\x07\x41\x01\x6a\x21\x07\x20\x0c\x0d\x00\x0b\x0b\x20\x05\x41\xa0\x01\x6a\x20\x03\x41\x03\x74\x6a\x20\x17\x39\x03\x00\x20\x0b\x41\x78\x6a\x21\x0b\x20\x0e\x41\x7f\x6a\x21\x02\x20\x0e\x41\x00\x4a\x0d\x00\x0b\x0b\x02\x40\x20\x04\x41\x03\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x04\x0e\x04\x01\x02\x02\x00\x01\x0b\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x19\x02\x40\x20\x06\x41\x01\x48\x0d\x00\x20\x06\x41\x01\x6a\x21\x07\x20\x05\x41\xa0\x01\x6a\x20\x06\x41\x03\x74\x6a\x22\x0c\x41\x78\x6a\x21\x02\x20\x0c\x2b\x03\x00\x21\x17\x03\x40\x20\x02\x20\x02\x2b\x03\x00\x22\x1a\x20\x17\xa0\x22\x18\x39\x03\x00\x20\x02\x41\x08\x6a\x20\x17\x20\x1a\x20\x18\xa1\xa0\x39\x03\x00\x20\x02\x41\x78\x6a\x21\x02\x20\x18\x21\x17\x20\x07\x41\x7f\x6a\x22\x07\x41\x01\x4a\x0d\x00\x0b\x20\x06\x41\x02\x48\x0d\x00\x20\x06\x41\x01\x6a\x21\x07\x20\x05\x41\xa0\x01\x6a\x20\x06\x41\x03\x74\x6a\x22\x0c\x41\x78\x6a\x21\x02\x20\x0c\x2b\x03\x00\x21\x17\x03\x40\x20\x02\x20\x02\x2b\x03\x00\x22\x1a\x20\x17\xa0\x22\x18\x39\x03\x00\x20\x02\x41\x08\x6a\x20\x17\x20\x1a\x20\x18\xa1\xa0\x39\x03\x00\x20\x02\x41\x78\x6a\x21\x02\x20\x18\x21\x17\x20\x07\x41\x7f\x6a\x22\x07\x41\x02\x4a\x0d\x00\x0b\x20\x06\x41\x02\x48\x0d\x00\x20\x06\x41\x01\x6a\x21\x07\x20\x05\x41\xa0\x01\x6a\x20\x06\x41\x03\x74\x6a\x21\x02\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x19\x03\x40\x20\x19\x20\x02\x2b\x03\x00\xa0\x21\x19\x20\x02\x41\x78\x6a\x21\x02\x20\x07\x41\x7f\x6a\x22\x07\x41\x02\x4a\x0d\x00\x0b\x0b\x20\x05\x2b\x03\xa0\x01\x21\x17\x20\x16\x0d\x02\x20\x01\x20\x17\x39\x03\x00\x20\x01\x20\x19\x39\x03\x10\x20\x01\x20\x05\x29\x03\xa8\x01\x37\x03\x08\x0c\x03\x0b\x02\x40\x02\x40\x20\x06\x41\x00\x4e\x0d\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x17\x0c\x01\x0b\x20\x06\x41\x01\x6a\x21\x07\x20\x05\x41\xa0\x01\x6a\x20\x06\x41\x03\x74\x6a\x21\x02\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x17\x03\x40\x20\x17\x20\x02\x2b\x03\x00\xa0\x21\x17\x20\x02\x41\x78\x6a\x21\x02\x20\x07\x41\x7f\x6a\x22\x07\x41\x00\x4a\x0d\x00\x0b\x0b\x20\x01\x20\x17\x9a\x20\x17\x20\x16\x1b\x39\x03\x00\x0c\x02\x0b\x02\x40\x02\x40\x20\x06\x41\x00\x4e\x0d\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x17\x0c\x01\x0b\x20\x06\x41\x01\x6a\x21\x07\x20\x05\x41\xa0\x01\x6a\x20\x06\x41\x03\x74\x6a\x21\x02\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x17\x03\x40\x20\x17\x20\x02\x2b\x03\x00\xa0\x21\x17\x20\x02\x41\x78\x6a\x21\x02\x20\x07\x41\x7f\x6a\x22\x07\x41\x00\x4a\x0d\x00\x0b\x0b\x20\x01\x20\x17\x9a\x20\x17\x20\x16\x1b\x39\x03\x00\x20\x05\x2b\x03\xa0\x01\x20\x17\xa1\x21\x17\x02\x40\x20\x06\x41\x01\x48\x0d\x00\x20\x05\x41\xa0\x01\x6a\x41\x08\x72\x21\x02\x03\x40\x20\x17\x20\x02\x2b\x03\x00\xa0\x21\x17\x20\x02\x41\x08\x6a\x21\x02\x20\x06\x41\x7f\x6a\x22\x06\x0d\x00\x0b\x0b\x20\x01\x20\x17\x9a\x20\x17\x20\x16\x1b\x39\x03\x08\x0c\x01\x0b\x20\x01\x20\x17\x9a\x39\x03\x00\x20\x01\x20\x19\x9a\x39\x03\x10\x20\x01\x20\x05\x2b\x03\xa8\x01\x9a\x39\x03\x08\x0b\x20\x05\x41\xb0\x04\x6a\x24\x00\x20\x14\x41\x07\x71\x0b\x91\x0a\x03\x04\x7f\x01\x7e\x04\x7c\x23\x00\x41\x30\x6b\x22\x02\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\xbd\x22\x06\x42\x20\x88\xa7\x22\x03\x41\xff\xff\xff\xff\x07\x71\x22\x04\x41\xfa\xd4\xbd\x80\x04\x4b\x0d\x00\x20\x03\x41\xff\xff\x3f\x71\x41\xfb\xc3\x24\x46\x0d\x01\x02\x40\x20\x04\x41\xfc\xb2\x8b\x80\x04\x4b\x0d\x00\x02\x40\x20\x06\x42\x00\x53\x0d\x00\x20\x01\x20\x00\x44\x00\x00\x40\x54\xfb\x21\xf9\xbf\xa0\x22\x00\x44\x31\x63\x62\x1a\x61\xb4\xd0\xbd\xa0\x22\x07\x39\x03\x00\x20\x01\x20\x00\x20\x07\xa1\x44\x31\x63\x62\x1a\x61\xb4\xd0\xbd\xa0\x39\x03\x08\x41\x01\x21\x03\x0c\x05\x0b\x20\x01\x20\x00\x44\x00\x00\x40\x54\xfb\x21\xf9\x3f\xa0\x22\x00\x44\x31\x63\x62\x1a\x61\xb4\xd0\x3d\xa0\x22\x07\x39\x03\x00\x20\x01\x20\x00\x20\x07\xa1\x44\x31\x63\x62\x1a\x61\xb4\xd0\x3d\xa0\x39\x03\x08\x41\x7f\x21\x03\x0c\x04\x0b\x02\x40\x20\x06\x42\x00\x53\x0d\x00\x20\x01\x20\x00\x44\x00\x00\x40\x54\xfb\x21\x09\xc0\xa0\x22\x00\x44\x31\x63\x62\x1a\x61\xb4\xe0\xbd\xa0\x22\x07\x39\x03\x00\x20\x01\x20\x00\x20\x07\xa1\x44\x31\x63\x62\x1a\x61\xb4\xe0\xbd\xa0\x39\x03\x08\x41\x02\x21\x03\x0c\x04\x0b\x20\x01\x20\x00\x44\x00\x00\x40\x54\xfb\x21\x09\x40\xa0\x22\x00\x44\x31\x63\x62\x1a\x61\xb4\xe0\x3d\xa0\x22\x07\x39\x03\x00\x20\x01\x20\x00\x20\x07\xa1\x44\x31\x63\x62\x1a\x61\xb4\xe0\x3d\xa0\x39\x03\x08\x41\x7e\x21\x03\x0c\x03\x0b\x02\x40\x20\x04\x41\xbb\x8c\xf1\x80\x04\x4b\x0d\x00\x02\x40\x20\x04\x41\xbc\xfb\xd7\x80\x04\x4b\x0d\x00\x20\x04\x41\xfc\xb2\xcb\x80\x04\x46\x0d\x02\x02\x40\x20\x06\x42\x00\x53\x0d\x00\x20\x01\x20\x00\x44\x00\x00\x30\x7f\x7c\xd9\x12\xc0\xa0\x22\x00\x44\xca\x94\x93\xa7\x91\x0e\xe9\xbd\xa0\x22\x07\x39\x03\x00\x20\x01\x20\x00\x20\x07\xa1\x44\xca\x94\x93\xa7\x91\x0e\xe9\xbd\xa0\x39\x03\x08\x41\x03\x21\x03\x0c\x05\x0b\x20\x01\x20\x00\x44\x00\x00\x30\x7f\x7c\xd9\x12\x40\xa0\x22\x00\x44\xca\x94\x93\xa7\x91\x0e\xe9\x3d\xa0\x22\x07\x39\x03\x00\x20\x01\x20\x00\x20\x07\xa1\x44\xca\x94\x93\xa7\x91\x0e\xe9\x3d\xa0\x39\x03\x08\x41\x7d\x21\x03\x0c\x04\x0b\x20\x04\x41\xfb\xc3\xe4\x80\x04\x46\x0d\x01\x02\x40\x20\x06\x42\x00\x53\x0d\x00\x20\x01\x20\x00\x44\x00\x00\x40\x54\xfb\x21\x19\xc0\xa0\x22\x00\x44\x31\x63\x62\x1a\x61\xb4\xf0\xbd\xa0\x22\x07\x39\x03\x00\x20\x01\x20\x00\x20\x07\xa1\x44\x31\x63\x62\x1a\x61\xb4\xf0\xbd\xa0\x39\x03\x08\x41\x04\x21\x03\x0c\x04\x0b\x20\x01\x20\x00\x44\x00\x00\x40\x54\xfb\x21\x19\x40\xa0\x22\x00\x44\x31\x63\x62\x1a\x61\xb4\xf0\x3d\xa0\x22\x07\x39\x03\x00\x20\x01\x20\x00\x20\x07\xa1\x44\x31\x63\x62\x1a\x61\xb4\xf0\x3d\xa0\x39\x03\x08\x41\x7c\x21\x03\x0c\x03\x0b\x20\x04\x41\xfa\xc3\xe4\x89\x04\x4b\x0d\x01\x0b\x20\x01\x20\x00\x20\x00\x44\x83\xc8\xc9\x6d\x30\x5f\xe4\x3f\xa2\x44\x00\x00\x00\x00\x00\x00\x38\x43\xa0\x44\x00\x00\x00\x00\x00\x00\x38\xc3\xa0\x22\x07\x44\x00\x00\x40\x54\xfb\x21\xf9\xbf\xa2\xa0\x22\x08\x20\x07\x44\x31\x63\x62\x1a\x61\xb4\xd0\x3d\xa2\x22\x09\xa1\x22\x00\x39\x03\x00\x20\x04\x41\x14\x76\x22\x05\x20\x00\xbd\x42\x34\x88\xa7\x41\xff\x0f\x71\x6b\x41\x11\x48\x21\x04\x02\x40\x02\x40\x20\x07\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x07\xaa\x21\x03\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x03\x0b\x02\x40\x20\x04\x0d\x00\x20\x01\x20\x08\x20\x07\x44\x00\x00\x60\x1a\x61\xb4\xd0\x3d\xa2\x22\x00\xa1\x22\x0a\x20\x07\x44\x73\x70\x03\x2e\x8a\x19\xa3\x3b\xa2\x20\x08\x20\x0a\xa1\x20\x00\xa1\xa1\x22\x09\xa1\x22\x00\x39\x03\x00\x02\x40\x20\x05\x20\x00\xbd\x42\x34\x88\xa7\x41\xff\x0f\x71\x6b\x41\x32\x4e\x0d\x00\x20\x0a\x21\x08\x0c\x01\x0b\x20\x01\x20\x0a\x20\x07\x44\x00\x00\x00\x2e\x8a\x19\xa3\x3b\xa2\x22\x00\xa1\x22\x08\x20\x07\x44\xc1\x49\x20\x25\x9a\x83\x7b\x39\xa2\x20\x0a\x20\x08\xa1\x20\x00\xa1\xa1\x22\x09\xa1\x22\x00\x39\x03\x00\x0b\x20\x01\x20\x08\x20\x00\xa1\x20\x09\xa1\x39\x03\x08\x0c\x01\x0b\x02\x40\x20\x04\x41\x80\x80\xc0\xff\x07\x49\x0d\x00\x20\x01\x20\x00\x20\x00\xa1\x22\x00\x39\x03\x00\x20\x01\x20\x00\x39\x03\x08\x41\x00\x21\x03\x0c\x01\x0b\x02\x40\x02\x40\x20\x06\x42\xff\xff\xff\xff\xff\xff\xff\x07\x83\x42\x80\x80\x80\x80\x80\x80\x80\xb0\xc1\x00\x84\xbf\x22\x00\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x00\xaa\x21\x03\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x03\x0b\x20\x02\x20\x03\xb7\x22\x07\x39\x03\x10\x02\x40\x02\x40\x20\x00\x20\x07\xa1\x44\x00\x00\x00\x00\x00\x00\x70\x41\xa2\x22\x00\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x00\xaa\x21\x03\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x03\x0b\x20\x02\x20\x03\xb7\x22\x07\x39\x03\x18\x20\x02\x20\x00\x20\x07\xa1\x44\x00\x00\x00\x00\x00\x00\x70\x41\xa2\x22\x00\x39\x03\x20\x02\x40\x02\x40\x20\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x61\x0d\x00\x41\x02\x21\x05\x0c\x01\x0b\x20\x02\x41\x10\x6a\x41\x08\x72\x21\x03\x41\x02\x21\x05\x03\x40\x20\x05\x41\x7f\x6a\x21\x05\x20\x03\x2b\x03\x00\x21\x00\x20\x03\x41\x78\x6a\x21\x03\x20\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x61\x0d\x00\x0b\x0b\x20\x02\x41\x10\x6a\x20\x02\x20\x04\x41\x14\x76\x41\xea\x77\x6a\x20\x05\x41\x01\x6a\x41\x01\x10\x9f\x01\x21\x03\x20\x02\x2b\x03\x00\x21\x00\x02\x40\x20\x06\x42\x7f\x55\x0d\x00\x20\x01\x20\x00\x9a\x39\x03\x00\x20\x01\x20\x02\x2b\x03\x08\x9a\x39\x03\x08\x41\x00\x20\x03\x6b\x21\x03\x0c\x01\x0b\x20\x01\x20\x00\x39\x03\x00\x20\x01\x20\x02\x29\x03\x08\x37\x03\x08\x0b\x20\x02\x41\x30\x6a\x24\x00\x20\x03\x0b\xb0\x01\x03\x01\x7e\x02\x7c\x01\x7f\x44\x00\x00\x00\x00\x00\x00\xe0\xbf\x44\x00\x00\x00\x00\x00\x00\xe0\x3f\x20\x00\xbd\x22\x01\x42\x00\x53\x1b\x21\x02\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x22\x01\xbf\x21\x03\x02\x40\x02\x40\x20\x01\x42\x20\x88\xa7\x22\x04\x41\xc1\xdc\x98\x84\x04\x4b\x0d\x00\x20\x03\x10\x9e\x01\x21\x03\x02\x40\x20\x04\x41\xff\xff\xbf\xff\x03\x4b\x0d\x00\x20\x04\x41\x80\x80\xc0\xf2\x03\x49\x0d\x02\x20\x02\x20\x03\x20\x03\xa0\x20\x03\x20\x03\xa2\x20\x03\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\xa0\xa3\xa1\xa2\x0f\x0b\x20\x02\x20\x03\x20\x03\x20\x03\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\xa0\xa3\xa0\xa2\x0f\x0b\x20\x02\x20\x02\xa0\x20\x03\x10\xa3\x01\xa2\x21\x00\x0b\x20\x00\x0b\xae\x01\x00\x02\x40\x02\x40\x20\x01\x41\x80\x08\x48\x0d\x00\x20\x00\x44\x00\x00\x00\x00\x00\x00\xe0\x7f\xa2\x21\x00\x02\x40\x20\x01\x41\xff\x0f\x4e\x0d\x00\x20\x01\x41\x81\x78\x6a\x21\x01\x0c\x02\x0b\x20\x00\x44\x00\x00\x00\x00\x00\x00\xe0\x7f\xa2\x21\x00\x20\x01\x41\xfd\x17\x20\x01\x41\xfd\x17\x48\x1b\x41\x82\x70\x6a\x21\x01\x0c\x01\x0b\x20\x01\x41\x81\x78\x4a\x0d\x00\x20\x00\x44\x00\x00\x00\x00\x00\x00\x60\x03\xa2\x21\x00\x02\x40\x20\x01\x41\xb8\x70\x4c\x0d\x00\x20\x01\x41\xc9\x07\x6a\x21\x01\x0c\x01\x0b\x20\x00\x44\x00\x00\x00\x00\x00\x00\x60\x03\xa2\x21\x00\x20\x01\x41\xf0\x68\x20\x01\x41\xf0\x68\x4a\x1b\x41\x92\x0f\x6a\x21\x01\x0b\x20\x00\x20\x01\x41\xff\x07\x6a\xad\x42\x34\x86\xbf\xa2\x0b\x25\x00\x20\x00\x44\x8b\xdd\x1a\x15\x66\x20\x96\xc0\xa0\x10\x89\x01\x44\x00\x00\x00\x00\x00\x00\xc0\x7f\xa2\x44\x00\x00\x00\x00\x00\x00\xc0\x7f\xa2\x0b\xb8\x04\x03\x02\x7e\x06\x7c\x01\x7f\x02\x40\x20\x00\xbd\x22\x01\x42\x80\x80\x80\x80\x90\xea\xd6\x88\x40\x7c\x42\xff\xff\xff\xff\x9f\x95\x84\x01\x56\x0d\x00\x41\x00\x2b\x03\xd0\x64\x22\x03\x20\x00\x44\x00\x00\x00\x00\x00\x00\xf0\xbf\xa0\x22\x00\xbd\x42\x80\x80\x80\x80\x70\x83\xbf\x22\x04\xa2\x22\x05\x20\x00\x20\x00\xa2\x22\x06\x41\x00\x2b\x03\x90\x65\x20\x00\x41\x00\x2b\x03\x98\x65\xa2\xa0\xa2\x22\x07\xa0\x22\x08\x20\x00\x20\x04\xa1\x20\x03\xa2\x20\x00\x41\x00\x2b\x03\xd8\x64\xa2\xa0\x20\x07\x20\x05\x20\x08\xa1\xa0\xa0\x20\x06\x20\x06\xa2\x22\x03\x41\x00\x2b\x03\xa0\x65\x20\x00\x41\x00\x2b\x03\xa8\x65\xa2\xa0\x20\x06\x41\x00\x2b\x03\xb0\x65\x20\x00\x41\x00\x2b\x03\xb8\x65\xa2\xa0\xa2\xa0\x20\x03\x41\x00\x2b\x03\xc0\x65\x20\x00\x41\x00\x2b\x03\xc8\x65\xa2\xa0\x20\x06\x41\x00\x2b\x03\xd0\x65\x20\x00\x41\x00\x2b\x03\xd8\x65\xa2\xa0\xa2\xa0\xa2\xa0\xa2\xa0\xa0\x0f\x0b\x02\x40\x02\x40\x20\x01\x42\x30\x88\xa7\x22\x09\x41\x70\x6a\x41\xe0\xff\x01\x49\x0d\x00\x02\x40\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x00\x52\x0d\x00\x41\x01\x10\xa6\x01\x0f\x0b\x20\x01\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x51\x0d\x01\x02\x40\x02\x40\x20\x09\x41\x80\x80\x02\x71\x0d\x00\x20\x09\x41\xf0\xff\x01\x71\x41\xf0\xff\x01\x47\x0d\x01\x0b\x20\x00\x10\xa8\x01\x0f\x0b\x20\x00\x44\x00\x00\x00\x00\x00\x00\x30\x43\xa2\xbd\x42\x80\x80\x80\x80\x80\x80\x80\xe0\x7c\x7c\x21\x01\x0b\x20\x01\x42\x80\x80\x80\x80\x80\x80\x80\x8d\x40\x7c\x22\x02\x42\x2e\x88\xa7\x41\x3f\x71\x41\x04\x74\x22\x09\x41\xe8\xe5\x00\x6a\x2b\x03\x00\x20\x02\x42\x34\x87\xa7\xb7\xa0\x22\x06\x41\x00\x2b\x03\xd0\x64\x22\x03\x20\x09\x41\xe0\xe5\x00\x6a\x2b\x03\x00\x20\x01\x20\x02\x42\x80\x80\x80\x80\x80\x80\x80\x78\x83\x7d\xbf\x20\x09\x41\xe0\xed\x00\x6a\x2b\x03\x00\xa1\x20\x09\x41\xe8\xed\x00\x6a\x2b\x03\x00\xa1\xa2\x22\x00\xbd\x42\x80\x80\x80\x80\x70\x83\xbf\x22\x04\xa2\x22\x05\xa0\x22\x07\x41\x00\x2b\x03\xd8\x64\x20\x00\xa2\x20\x03\x20\x00\x20\x04\xa1\xa2\xa0\x20\x05\x20\x06\x20\x07\xa1\xa0\xa0\x20\x00\x20\x00\xa2\x22\x06\x41\x00\x2b\x03\xe0\x64\x20\x00\x41\x00\x2b\x03\xe8\x64\xa2\xa0\x20\x06\x41\x00\x2b\x03\xf0\x64\x20\x00\x41\x00\x2b\x03\xf8\x64\xa2\xa0\xa2\xa0\x20\x06\x20\x06\xa2\x41\x00\x2b\x03\x80\x65\x20\x00\x41\x00\x2b\x03\x88\x65\xa2\xa0\xa2\xa0\xa2\xa0\xa0\x21\x00\x0b\x20\x00\x0b\xa1\x04\x02\x04\x7e\x03\x7f\x02\x40\x02\x40\x20\x01\xbd\x22\x02\x42\x01\x86\x22\x03\x50\x0d\x00\x20\x01\x20\x01\x62\x0d\x00\x20\x00\xbd\x22\x04\x42\x34\x88\xa7\x41\xff\x0f\x71\x22\x06\x41\xff\x0f\x47\x0d\x01\x0b\x20\x00\x20\x01\xa2\x22\x01\x20\x01\xa3\x0f\x0b\x02\x40\x20\x04\x42\x01\x86\x22\x05\x20\x03\x58\x0d\x00\x20\x02\x42\x34\x88\xa7\x41\xff\x0f\x71\x21\x07\x02\x40\x02\x40\x20\x06\x0d\x00\x41\x00\x21\x06\x02\x40\x20\x04\x42\x0c\x86\x22\x03\x42\x00\x53\x0d\x00\x03\x40\x20\x06\x41\x7f\x6a\x21\x06\x20\x03\x42\x01\x86\x22\x03\x42\x7f\x55\x0d\x00\x0b\x0b\x20\x04\x41\x01\x20\x06\x6b\xad\x86\x21\x03\x0c\x01\x0b\x20\x04\x42\xff\xff\xff\xff\xff\xff\xff\x07\x83\x42\x80\x80\x80\x80\x80\x80\x80\x08\x84\x21\x03\x0b\x02\x40\x02\x40\x20\x07\x0d\x00\x41\x00\x21\x07\x02\x40\x20\x02\x42\x0c\x86\x22\x05\x42\x00\x53\x0d\x00\x03\x40\x20\x07\x41\x7f\x6a\x21\x07\x20\x05\x42\x01\x86\x22\x05\x42\x7f\x55\x0d\x00\x0b\x0b\x20\x02\x41\x01\x20\x07\x6b\xad\x86\x21\x02\x0c\x01\x0b\x20\x02\x42\xff\xff\xff\xff\xff\xff\xff\x07\x83\x42\x80\x80\x80\x80\x80\x80\x80\x08\x84\x21\x02\x0b\x20\x03\x20\x02\x7d\x22\x05\x42\x7f\x55\x21\x08\x02\x40\x20\x06\x20\x07\x4c\x0d\x00\x03\x40\x02\x40\x20\x08\x41\x01\x71\x45\x0d\x00\x20\x05\x21\x03\x20\x05\x42\x00\x52\x0d\x00\x20\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x0f\x0b\x20\x03\x42\x01\x86\x22\x03\x20\x02\x7d\x22\x05\x42\x7f\x55\x21\x08\x20\x06\x41\x7f\x6a\x22\x06\x20\x07\x4a\x0d\x00\x0b\x20\x07\x21\x06\x0b\x02\x40\x20\x08\x45\x0d\x00\x20\x05\x21\x03\x20\x05\x42\x00\x52\x0d\x00\x20\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x0f\x0b\x02\x40\x02\x40\x20\x03\x42\xff\xff\xff\xff\xff\xff\xff\x07\x58\x0d\x00\x20\x03\x21\x05\x0c\x01\x0b\x03\x40\x20\x06\x41\x7f\x6a\x21\x06\x20\x03\x42\x80\x80\x80\x80\x80\x80\x80\x04\x54\x21\x07\x20\x03\x42\x01\x86\x22\x05\x21\x03\x20\x07\x0d\x00\x0b\x0b\x20\x04\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x83\x21\x03\x02\x40\x02\x40\x20\x06\x41\x01\x48\x0d\x00\x20\x05\x42\x80\x80\x80\x80\x80\x80\x80\x78\x7c\x20\x06\xad\x42\x34\x86\x84\x21\x05\x0c\x01\x0b\x20\x05\x41\x01\x20\x06\x6b\xad\x88\x21\x05\x0b\x20\x05\x20\x03\x84\xbf\x0f\x0b\x20\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\xa2\x20\x00\x20\x05\x20\x03\x51\x1b\x0b\x17\x00\x44\x00\x00\x00\x00\x00\x00\xf0\xff\x44\x00\x00\x00\x00\x00\x00\xf0\x7f\x20\x00\x1b\x0b\x9a\x01\x01\x03\x7c\x20\x00\x20\x00\xa2\x22\x03\x20\x03\x20\x03\xa2\xa2\x20\x03\x44\x7c\xd5\xcf\x5a\x3a\xd9\xe5\x3d\xa2\x44\xeb\x9c\x2b\x8a\xe6\xe5\x5a\xbe\xa0\xa2\x20\x03\x20\x03\x44\x7d\xfe\xb1\x57\xe3\x1d\xc7\x3e\xa2\x44\xd5\x61\xc1\x19\xa0\x01\x2a\xbf\xa0\xa2\x44\xa6\xf8\x10\x11\x11\x11\x81\x3f\xa0\xa0\x21\x04\x20\x03\x20\x00\xa2\x21\x05\x02\x40\x20\x02\x0d\x00\x20\x05\x20\x03\x20\x04\xa2\x44\x49\x55\x55\x55\x55\x55\xc5\xbf\xa0\xa2\x20\x00\xa0\x0f\x0b\x20\x00\x20\x03\x20\x01\x44\x00\x00\x00\x00\x00\x00\xe0\x3f\xa2\x20\x05\x20\x04\xa2\xa1\xa2\x20\x01\xa1\x20\x05\x44\x49\x55\x55\x55\x55\x55\xc5\x3f\xa2\xa0\xa1\x0b\x0c\x00\x20\x00\x20\x00\xa1\x22\x00\x20\x00\xa3\x0b\xd0\x0a\x03\x03\x7e\x05\x7f\x09\x7c\x20\x01\xbd\x22\x02\x42\x34\x88\xa7\x22\x05\x41\xff\x0f\x71\x22\x06\x41\xc2\x78\x6a\x21\x07\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\xbd\x22\x03\x42\x34\x88\xa7\x22\x08\x41\x7f\x6a\x41\xfd\x0f\x4b\x0d\x00\x41\x00\x21\x09\x20\x07\x41\x80\x01\x49\x0d\x01\x0b\x02\x40\x20\x02\x42\x01\x86\x22\x04\x42\x7f\x7c\x42\xff\xff\xff\xff\xff\xff\xff\x6f\x54\x0d\x00\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x21\x0a\x20\x03\x42\x80\x80\x80\x80\x80\x80\x80\xf8\x3f\x51\x0d\x02\x20\x04\x50\x0d\x02\x02\x40\x02\x40\x20\x03\x42\x01\x86\x22\x03\x42\x80\x80\x80\x80\x80\x80\x80\x70\x56\x0d\x00\x20\x04\x42\x81\x80\x80\x80\x80\x80\x80\x70\x54\x0d\x01\x0b\x20\x00\x20\x01\xa0\x0f\x0b\x20\x03\x42\x80\x80\x80\x80\x80\x80\x80\xf0\xff\x00\x51\x0d\x02\x44\x00\x00\x00\x00\x00\x00\x00\x00\x20\x01\x20\x01\xa2\x20\x02\x42\x3f\x88\xa7\x41\x01\x73\x20\x03\x42\x80\x80\x80\x80\x80\x80\x80\xf0\xff\x00\x54\x46\x1b\x0f\x0b\x02\x40\x20\x03\x42\x01\x86\x42\x7f\x7c\x42\xff\xff\xff\xff\xff\xff\xff\x6f\x54\x0d\x00\x20\x00\x20\x00\xa2\x21\x0a\x02\x40\x20\x03\x42\x7f\x55\x0d\x00\x20\x06\x41\x81\x78\x6a\x41\x34\x4b\x0d\x00\x20\x0a\x20\x0a\x20\x0a\x9a\x42\x01\x41\xb3\x08\x20\x06\x6b\xad\x86\x22\x03\x42\x7f\x7c\x20\x02\x83\x42\x00\x52\x1b\x20\x03\x20\x02\x83\x50\x1b\x21\x0a\x0b\x20\x02\x42\x7f\x55\x0d\x02\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x20\x0a\xa3\x0f\x0b\x41\x00\x21\x09\x02\x40\x20\x03\x42\x7f\x55\x0d\x00\x20\x06\x41\xff\x07\x49\x0d\x03\x02\x40\x02\x40\x20\x06\x41\xb3\x08\x4b\x0d\x00\x42\x01\x41\xb3\x08\x20\x06\x6b\xad\x86\x22\x04\x42\x7f\x7c\x20\x02\x83\x42\x00\x52\x0d\x05\x41\x80\x80\x10\x21\x09\x20\x04\x20\x02\x83\x42\x00\x52\x0d\x01\x0b\x41\x00\x21\x09\x0b\x20\x08\x41\xff\x0f\x71\x21\x08\x20\x03\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x21\x03\x0b\x02\x40\x20\x07\x41\x80\x01\x49\x0d\x00\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x21\x0a\x20\x06\x41\xbe\x07\x49\x0d\x02\x20\x03\x42\x80\x80\x80\x80\x80\x80\x80\xf8\x3f\x51\x0d\x02\x02\x40\x20\x05\x41\x80\x10\x49\x20\x03\x42\x81\x80\x80\x80\x80\x80\x80\xf8\x3f\x54\x46\x0d\x00\x41\x00\x10\x9d\x01\x0f\x0b\x41\x00\x10\x8d\x01\x0f\x0b\x20\x08\x0d\x00\x20\x00\x44\x00\x00\x00\x00\x00\x00\x30\x43\xa2\xbd\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xe0\x7c\x7c\x21\x03\x0b\x02\x40\x20\x02\x42\x80\x80\x80\x40\x83\xbf\x22\x0b\x20\x03\x42\x80\x80\x80\x80\xb0\xd5\xda\x8c\x40\x7c\x22\x02\x42\x2d\x88\xa7\x41\xff\x00\x71\x41\x05\x74\x22\x07\x41\xb8\xf6\x00\x6a\x2b\x03\x00\x41\x00\x2b\x03\xe0\x75\x20\x02\x42\x34\x87\xa7\xb7\x22\x0c\xa2\xa0\x22\x0d\x20\x07\x41\xa8\xf6\x00\x6a\x2b\x03\x00\x22\x00\x20\x03\x20\x02\x42\x80\x80\x80\x80\x80\x80\x80\x78\x83\x7d\x22\x03\xbf\x20\x03\x42\x80\x80\x80\x80\x08\x7c\x42\x80\x80\x80\x80\x70\x83\xbf\x22\x0a\xa1\xa2\x22\x0e\x20\x00\x20\x0a\xa2\x44\x00\x00\x00\x00\x00\x00\xf0\xbf\xa0\x22\x0a\xa0\x22\x00\xa0\x22\x0f\x20\x0a\x20\x0a\x41\x00\x2b\x03\xf0\x75\x22\x10\xa2\x22\x11\xa2\x22\x0a\xa0\x22\x12\x20\x0a\x20\x0f\x20\x12\xa1\xa0\x20\x0e\x20\x11\x20\x10\x20\x00\xa2\x22\x0a\xa0\xa2\x20\x07\x41\xc0\xf6\x00\x6a\x2b\x03\x00\x41\x00\x2b\x03\xe8\x75\x20\x0c\xa2\xa0\x20\x00\x20\x0d\x20\x0f\xa1\xa0\xa0\xa0\xa0\x20\x00\x20\x00\x20\x0a\xa2\x22\x0a\xa2\x41\x00\x2b\x03\xf8\x75\x20\x00\x41\x00\x2b\x03\x80\x76\xa2\xa0\x20\x0a\x41\x00\x2b\x03\x88\x76\x20\x00\x41\x00\x2b\x03\x90\x76\xa2\xa0\x20\x0a\x41\x00\x2b\x03\x98\x76\x20\x00\x41\x00\x2b\x03\xa0\x76\xa2\xa0\xa2\xa0\xa2\xa0\xa2\xa0\x22\x0c\xa0\x22\x00\xbd\x42\x80\x80\x80\x40\x83\xbf\x22\x0a\xa2\x22\x0f\xbd\x22\x03\x42\x34\x88\xa7\x41\xff\x0f\x71\x22\x07\x41\xb7\x78\x6a\x41\x3f\x49\x0d\x00\x02\x40\x20\x07\x41\xc8\x07\x4b\x0d\x00\x44\x00\x00\x00\x00\x00\x00\xf0\xbf\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x20\x09\x1b\x0f\x0b\x20\x07\x41\x89\x08\x49\x21\x06\x41\x00\x21\x07\x20\x06\x0d\x00\x02\x40\x20\x03\x42\x7f\x55\x0d\x00\x20\x09\x10\x8d\x01\x0f\x0b\x20\x09\x10\x9d\x01\x0f\x0b\x20\x0f\x41\x00\x2b\x03\xc0\x3d\xa2\x41\x00\x2b\x03\xc8\x3d\x22\x0d\xa0\x22\x0e\xbd\x22\x03\xa7\x22\x08\x41\x04\x74\x41\xf0\x0f\x71\x22\x06\x41\xb0\x3e\x6a\x2b\x03\x00\x20\x01\x20\x0b\xa1\x20\x0a\xa2\x20\x0c\x20\x12\x20\x00\xa1\xa0\x20\x00\x20\x0a\xa1\xa0\x20\x01\xa2\xa0\x20\x0e\x20\x0d\xa1\x22\x00\x41\x00\x2b\x03\xd8\x3d\xa2\x20\x0f\x41\x00\x2b\x03\xd0\x3d\x20\x00\xa2\xa0\xa0\xa0\x22\x00\xa0\x20\x00\x20\x00\xa2\x22\x01\x41\x00\x2b\x03\xe0\x3d\x20\x00\x41\x00\x2b\x03\xe8\x3d\xa2\xa0\xa2\xa0\x20\x01\x20\x01\xa2\x41\x00\x2b\x03\xf0\x3d\x20\x00\x41\x00\x2b\x03\xf8\x3d\xa2\xa0\xa2\xa0\x21\x00\x20\x06\x41\x08\x72\x41\xb0\x3e\x6a\x29\x03\x00\x20\x03\x20\x09\xad\x7c\x42\x2d\x86\x7c\x21\x03\x02\x40\x20\x07\x0d\x00\x02\x40\x20\x08\x41\x00\x48\x0d\x00\x20\x00\x20\x03\x42\x80\x80\x80\x80\x80\x80\x80\xf8\x40\x7c\xbf\x22\x01\xa2\x20\x01\xa0\x44\x00\x00\x00\x00\x00\x00\x00\x7f\xa2\x0f\x0b\x02\x40\x20\x00\x20\x03\x42\x80\x80\x80\x80\x80\x80\x80\xf0\x3f\x7c\x22\x03\xbf\x22\x01\xa2\x22\x0a\x20\x01\xa0\x22\x00\x99\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x63\x41\x01\x73\x0d\x00\x20\x03\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x83\xbf\x20\x00\x44\x00\x00\x00\x00\x00\x00\xf0\xbf\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x20\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x63\x1b\x22\x0f\xa0\x22\x12\x20\x0a\x20\x01\x20\x00\xa1\xa0\x20\x00\x20\x0f\x20\x12\xa1\xa0\xa0\xa0\x20\x0f\xa1\x22\x00\x20\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x61\x1b\x21\x00\x0b\x20\x00\x44\x00\x00\x00\x00\x00\x00\x10\x00\xa2\x0f\x0b\x20\x00\x20\x03\xbf\x22\x01\xa2\x20\x01\xa0\x21\x0a\x0b\x20\x0a\x0f\x0b\x20\x00\x10\xa8\x01\x0b\x22\x00\x02\x40\x20\x00\x9e\x22\x00\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x00\xaa\x0f\x0b\x41\x80\x80\x80\x80\x78\x0b\x22\x00\x02\x40\x20\x00\x20\x00\x62\x0d\x00\x02\x40\x20\x01\x20\x01\x61\x0d\x00\x20\x00\x0f\x0b\x20\x00\x20\x01\xa4\x21\x01\x0b\x20\x01\x0b\x22\x00\x02\x40\x20\x00\x20\x00\x62\x0d\x00\x02\x40\x20\x01\x20\x01\x61\x0d\x00\x20\x00\x0f\x0b\x20\x00\x20\x01\xa5\x21\x01\x0b\x20\x01\x0b\xc4\x03\x01\x04\x7f\x02\x40\x20\x00\x20\x01\x46\x0d\x00\x02\x40\x20\x01\x20\x00\x6b\x20\x02\x6b\x41\x00\x20\x02\x41\x01\x74\x6b\x4b\x0d\x00\x20\x00\x20\x01\x20\x02\x10\x70\x1a\x0c\x01\x0b\x20\x01\x20\x00\x73\x41\x03\x71\x21\x03\x02\x40\x02\x40\x02\x40\x20\x00\x20\x01\x4f\x0d\x00\x02\x40\x20\x03\x45\x0d\x00\x20\x00\x21\x03\x0c\x03\x0b\x02\x40\x20\x00\x41\x03\x71\x0d\x00\x20\x00\x21\x03\x0c\x02\x0b\x20\x00\x21\x03\x03\x40\x20\x02\x45\x0d\x04\x20\x03\x20\x01\x2d\x00\x00\x3a\x00\x00\x20\x01\x41\x01\x6a\x21\x01\x20\x02\x41\x7f\x6a\x21\x02\x20\x03\x41\x01\x6a\x22\x03\x41\x03\x71\x45\x0d\x02\x0c\x00\x0b\x00\x0b\x02\x40\x02\x40\x20\x03\x45\x0d\x00\x20\x02\x21\x03\x0c\x01\x0b\x02\x40\x02\x40\x20\x00\x20\x02\x6a\x41\x03\x71\x0d\x00\x20\x02\x21\x03\x0c\x01\x0b\x20\x01\x41\x7f\x6a\x21\x04\x20\x00\x41\x7f\x6a\x21\x05\x03\x40\x20\x02\x45\x0d\x05\x20\x05\x20\x02\x6a\x22\x06\x20\x04\x20\x02\x6a\x2d\x00\x00\x3a\x00\x00\x20\x02\x41\x7f\x6a\x22\x03\x21\x02\x20\x06\x41\x03\x71\x0d\x00\x0b\x0b\x20\x03\x41\x04\x49\x0d\x00\x20\x00\x41\x7c\x6a\x21\x02\x20\x01\x41\x7c\x6a\x21\x06\x03\x40\x20\x02\x20\x03\x6a\x20\x06\x20\x03\x6a\x28\x02\x00\x36\x02\x00\x20\x03\x41\x7c\x6a\x22\x03\x41\x03\x4b\x0d\x00\x0b\x0b\x20\x03\x45\x0d\x02\x20\x01\x41\x7f\x6a\x21\x01\x20\x00\x41\x7f\x6a\x21\x02\x03\x40\x20\x02\x20\x03\x6a\x20\x01\x20\x03\x6a\x2d\x00\x00\x3a\x00\x00\x20\x03\x41\x7f\x6a\x22\x03\x0d\x00\x0c\x03\x0b\x00\x0b\x20\x02\x41\x04\x49\x0d\x00\x20\x02\x21\x06\x03\x40\x20\x03\x20\x01\x28\x02\x00\x36\x02\x00\x20\x01\x41\x04\x6a\x21\x01\x20\x03\x41\x04\x6a\x21\x03\x20\x06\x41\x7c\x6a\x22\x06\x41\x03\x4b\x0d\x00\x0b\x20\x02\x41\x03\x71\x21\x02\x0b\x20\x02\x45\x0d\x00\x03\x40\x20\x03\x20\x01\x2d\x00\x00\x3a\x00\x00\x20\x03\x41\x01\x6a\x21\x03\x20\x01\x41\x01\x6a\x21\x01\x20\x02\x41\x7f\x6a\x22\x02\x0d\x00\x0b\x0b\x20\x00\x0b\xf7\x01\x02\x05\x7f\x02\x7e\x23\x00\x41\x10\x6b\x22\x00\x24\x00\x10\xaf\x01\x10\xb0\x01\x22\x01\x10\xb1\x01\x02\x40\x20\x01\x20\x01\x20\x01\x10\xb2\x01\x22\x05\x20\x01\x41\x84\xb7\x01\x10\xb3\x01\x20\x05\x41\x00\x10\xb4\x01\x20\x05\x41\x00\x41\x00\x10\xb5\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x28\x02\x10\x22\x02\x29\x03\x80\x01\x21\x05\x20\x02\x42\x80\x80\x80\x80\x20\x37\x03\x80\x01\x20\x01\x20\x05\x41\x84\x83\x02\x10\xb6\x01\x21\x06\x20\x01\x20\x05\x41\x94\xc4\x05\x10\xb6\x01\x21\x05\x20\x01\x20\x00\x41\x0c\x6a\x20\x06\x10\xb7\x01\x21\x02\x20\x01\x20\x00\x41\x08\x6a\x20\x05\x10\xb7\x01\x21\x03\x20\x00\x28\x02\x0c\x22\x04\x20\x00\x28\x02\x08\x6a\x41\x01\x6a\x10\x39\x20\x02\x20\x04\x10\x6a\x22\x02\x20\x00\x28\x02\x0c\x6a\x22\x04\x41\x0a\x3a\x00\x00\x20\x04\x41\x01\x6a\x20\x03\x20\x00\x28\x02\x08\x10\x6a\x1a\x20\x00\x28\x02\x0c\x20\x00\x28\x02\x08\x6a\x41\x01\x6a\xad\x20\x02\xad\x10\x00\x0b\x20\x01\x10\xb8\x01\x20\x00\x41\x10\x6a\x24\x00\x0b\xbb\x0f\x01\x0d\x7f\x23\x00\x41\x20\x6b\x22\x00\x24\x00\x20\x00\x22\x01\x42\x00\x37\x03\x00\x20\x01\x42\xff\xff\xff\xff\x0f\x37\x03\x08\x02\x40\x02\x40\x20\x01\x41\xf0\x02\x10\x9e\x05\x22\x02\x45\x0d\x00\x20\x02\x41\x10\x6a\x41\x00\x41\xe0\x02\x10\x74\x21\x03\x20\x02\x41\x08\x6a\x41\x00\x29\x02\x98\x81\x02\x37\x02\x00\x20\x02\x41\x00\x29\x02\x90\x81\x02\x37\x02\x00\x02\x40\x20\x02\x28\x02\x0c\x0d\x00\x20\x02\x41\x06\x36\x02\x0c\x0b\x20\x03\x20\x01\x29\x03\x00\x37\x03\x00\x20\x02\x41\x80\x80\x10\x36\x02\x6c\x20\x03\x41\x08\x6a\x20\x01\x41\x08\x6a\x29\x03\x00\x37\x03\x00\x20\x02\x41\xe0\x01\x6a\x41\x00\x41\x34\x10\x74\x21\x04\x20\x02\x41\x07\x36\x02\xe4\x02\x20\x02\x41\x08\x36\x02\xe0\x02\x20\x02\x41\x09\x36\x02\xd8\x02\x20\x02\x41\x0a\x36\x02\xd4\x02\x20\x02\x41\x0b\x36\x02\xd0\x02\x20\x02\x41\x0c\x36\x02\xcc\x02\x20\x02\x41\x07\x36\x02\xc8\x02\x20\x02\x41\x08\x36\x02\xc4\x02\x20\x02\x41\x09\x36\x02\xbc\x02\x20\x02\x41\x0a\x36\x02\xb8\x02\x20\x02\x41\x0b\x36\x02\xb4\x02\x20\x02\x41\x0c\x36\x02\xb0\x02\x20\x02\x41\x07\x36\x02\xac\x02\x20\x02\x41\x08\x36\x02\xa8\x02\x20\x02\x41\x09\x36\x02\xa0\x02\x20\x02\x41\x0a\x36\x02\x9c\x02\x20\x02\x41\x0b\x36\x02\x98\x02\x20\x02\x41\x0c\x36\x02\x94\x02\x20\x02\x41\x0d\x36\x02\xdc\x01\x20\x02\x20\x02\x36\x02\xd8\x01\x20\x02\x20\x02\x41\xa0\x01\x6a\x22\x05\x36\x02\xa4\x01\x20\x02\x20\x05\x36\x02\xa0\x01\x20\x02\x41\x00\x3a\x00\x68\x20\x02\x20\x02\x41\xd8\x00\x6a\x22\x06\x36\x02\x5c\x20\x02\x20\x06\x36\x02\x58\x20\x02\x20\x02\x41\xd0\x00\x6a\x22\x07\x36\x02\x54\x20\x02\x20\x07\x36\x02\x50\x20\x02\x20\x02\x41\xc8\x00\x6a\x22\x00\x36\x02\x4c\x20\x02\x20\x00\x36\x02\x48\x20\x02\x41\x00\x36\x02\x24\x20\x02\x41\x00\x36\x02\x34\x20\x02\x41\x00\x36\x02\x3c\x20\x02\x42\x00\x37\x03\x28\x02\x40\x02\x40\x20\x02\x41\x80\x02\x10\xb9\x04\x0d\x00\x41\x90\xe8\x01\x21\x08\x41\x01\x21\x00\x02\x40\x03\x40\x20\x00\x41\xde\x01\x46\x0d\x01\x20\x02\x20\x08\x10\x71\x22\x09\x41\x00\x10\xea\x02\x22\x0a\x45\x0d\x02\x20\x0a\x41\x10\x6a\x20\x08\x20\x09\x10\x70\x20\x09\x6a\x41\x00\x3a\x00\x00\x20\x02\x20\x0a\x41\x04\x41\x03\x41\x01\x20\x00\x41\xcf\x01\x4b\x1b\x20\x00\x41\xcf\x01\x46\x1b\x10\xb7\x04\x45\x0d\x02\x20\x00\x41\x01\x6a\x21\x00\x20\x08\x20\x09\x6a\x41\x01\x6a\x21\x08\x0c\x00\x0b\x00\x0b\x20\x02\x41\x80\xf9\x01\x41\x01\x41\x2f\x10\xe4\x01\x41\x00\x48\x0d\x00\x20\x02\x41\x00\x36\x02\xd0\x01\x20\x02\x42\x84\x80\x80\x80\x80\x02\x37\x03\xc8\x01\x20\x02\x28\x02\x44\x22\x00\x41\xd4\x01\x6a\x41\xb4\xfd\x01\x36\x02\x00\x20\x00\x41\xf8\x02\x6a\x41\x0e\x36\x02\x00\x20\x00\x41\xb0\x02\x6a\x41\x0f\x36\x02\x00\x20\x00\x41\x9c\x02\x6a\x41\xec\xfd\x01\x36\x02\x00\x20\x00\x41\x8c\x01\x6a\x41\xd0\xfd\x01\x36\x02\x00\x20\x00\x41\x90\x03\x6a\x41\x10\x36\x02\x00\x20\x00\x41\xe0\x02\x6a\x41\x11\x36\x02\x00\x20\x03\x41\xc0\x00\x20\x02\x28\x02\x00\x11\x03\x00\x22\x00\x0d\x01\x20\x02\x41\x00\x36\x02\xd4\x01\x0b\x20\x02\x41\xd4\x00\x6a\x21\x0a\x20\x02\x20\x02\x29\x03\x80\x01\x10\xda\x02\x20\x02\x28\x02\xa4\x01\x21\x09\x02\x40\x03\x40\x20\x09\x20\x05\x46\x0d\x01\x20\x09\x28\x02\x04\x21\x0b\x20\x09\x41\x18\x6a\x21\x08\x41\x00\x21\x00\x02\x40\x03\x40\x20\x00\x20\x09\x28\x02\x10\x4e\x0d\x01\x20\x02\x20\x08\x29\x03\x00\x10\xda\x02\x20\x08\x41\x08\x6a\x21\x08\x20\x00\x41\x01\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x20\x03\x20\x09\x20\x02\x28\x02\x04\x11\x00\x00\x20\x0b\x21\x09\x0c\x00\x0b\x00\x0b\x20\x02\x20\x05\x36\x02\xa4\x01\x20\x02\x20\x05\x36\x02\xa0\x01\x20\x02\x20\x02\x41\xe0\x00\x6a\x22\x08\x36\x02\x64\x20\x02\x20\x08\x36\x02\x60\x20\x02\x41\xe4\x00\x6a\x21\x0c\x20\x02\x28\x02\x54\x21\x0b\x03\x40\x02\x40\x20\x0b\x22\x00\x20\x07\x47\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x03\x40\x02\x40\x20\x0a\x28\x02\x00\x22\x00\x20\x07\x47\x0d\x00\x20\x0c\x21\x00\x03\x40\x20\x00\x28\x02\x00\x22\x00\x20\x08\x46\x0d\x03\x20\x02\x20\x00\x41\x78\x6a\x41\x12\x10\xf3\x04\x20\x00\x41\x04\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x20\x00\x41\x78\x6a\x22\x09\x28\x02\x00\x41\x00\x4c\x0d\x02\x20\x00\x41\x7c\x6a\x22\x0a\x20\x0a\x2d\x00\x00\x41\x0f\x71\x3a\x00\x00\x20\x02\x20\x09\x41\x13\x10\xf3\x04\x20\x00\x41\x04\x6a\x21\x0a\x0c\x00\x0b\x00\x0b\x20\x02\x41\x02\x3a\x00\x68\x02\x40\x03\x40\x20\x0c\x28\x02\x00\x22\x00\x20\x08\x46\x0d\x01\x02\x40\x20\x00\x41\x7c\x6a\x2d\x00\x00\x41\x0e\x71\x0d\x00\x20\x02\x20\x00\x41\x78\x6a\x10\xd6\x02\x0c\x01\x0b\x20\x00\x28\x02\x04\x22\x09\x20\x00\x28\x02\x00\x22\x0a\x36\x02\x00\x20\x00\x41\x00\x36\x02\x00\x20\x0a\x20\x09\x36\x02\x04\x20\x00\x20\x06\x28\x02\x00\x22\x09\x36\x02\x00\x20\x09\x20\x00\x36\x02\x04\x20\x06\x20\x00\x36\x02\x00\x20\x00\x20\x06\x36\x02\x04\x0c\x00\x0b\x00\x0b\x20\x02\x41\x00\x3a\x00\x68\x20\x02\x28\x02\x5c\x21\x00\x02\x40\x03\x40\x20\x00\x20\x06\x46\x0d\x01\x20\x00\x41\x7c\x6a\x2d\x00\x00\x41\x0e\x71\x0d\x03\x20\x00\x28\x02\x04\x21\x08\x20\x03\x20\x00\x41\x78\x6a\x20\x02\x28\x02\x04\x11\x00\x00\x20\x08\x21\x00\x0c\x00\x0b\x00\x0b\x20\x02\x20\x06\x36\x02\x5c\x20\x02\x20\x06\x36\x02\x58\x20\x02\x28\x02\x54\x20\x07\x47\x0d\x02\x41\x00\x21\x00\x41\x04\x21\x08\x02\x40\x03\x40\x20\x00\x20\x02\x28\x02\x40\x4e\x0d\x01\x02\x40\x20\x02\x28\x02\x44\x20\x08\x6a\x22\x09\x41\x7c\x6a\x28\x02\x00\x45\x0d\x00\x20\x02\x20\x09\x28\x02\x00\x10\xdc\x02\x0b\x20\x08\x41\x18\x6a\x21\x08\x20\x00\x41\x01\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x20\x03\x20\x02\x28\x02\x44\x20\x02\x28\x02\x04\x11\x00\x00\x02\x40\x20\x02\x28\x02\x90\x02\x22\x0a\x45\x0d\x00\x20\x0a\x41\xa8\x0d\x6a\x21\x0c\x41\x00\x21\x05\x02\x40\x03\x40\x20\x05\x41\x05\x46\x0d\x01\x41\x00\x21\x0b\x20\x0c\x21\x07\x02\x40\x03\x40\x20\x0b\x41\x02\x46\x0d\x01\x41\x00\x21\x00\x02\x40\x03\x40\x20\x00\x41\xd0\x00\x46\x0d\x01\x02\x40\x20\x07\x20\x00\x6a\x22\x08\x28\x02\x00\x22\x09\x45\x0d\x00\x20\x0a\x28\x02\x00\x22\x06\x28\x02\x00\x20\x09\x41\x00\x20\x06\x28\x02\x04\x11\x01\x00\x1a\x20\x08\x41\x00\x36\x02\x00\x0b\x20\x00\x41\x04\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x20\x07\x41\xd0\x00\x6a\x21\x07\x20\x0b\x41\x01\x6a\x21\x0b\x0c\x00\x0b\x00\x0b\x20\x0c\x41\xa0\x01\x6a\x21\x0c\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x02\x28\x02\xd8\x01\x20\x0a\x41\x00\x20\x02\x28\x02\xdc\x01\x11\x01\x00\x1a\x20\x02\x41\x00\x36\x02\x90\x02\x0b\x20\x04\x10\x9f\x05\x20\x02\x41\xf8\x01\x6a\x10\x9f\x05\x41\x00\x21\x08\x41\x00\x21\x00\x02\x40\x03\x40\x20\x00\x20\x02\x28\x02\x2c\x4e\x0d\x01\x02\x40\x20\x02\x28\x02\x38\x20\x08\x6a\x28\x02\x00\x22\x09\x41\x01\x71\x0d\x00\x20\x03\x20\x09\x20\x02\x28\x02\x04\x11\x00\x00\x0b\x20\x08\x41\x04\x6a\x21\x08\x20\x00\x41\x01\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x20\x03\x20\x02\x28\x02\x38\x20\x02\x28\x02\x04\x11\x00\x00\x20\x03\x20\x02\x28\x02\x34\x20\x02\x28\x02\x04\x11\x00\x00\x20\x03\x20\x02\x28\x02\xd4\x01\x20\x02\x28\x02\x04\x11\x00\x00\x20\x01\x41\x10\x6a\x41\x08\x6a\x20\x03\x41\x08\x6a\x29\x02\x00\x37\x03\x00\x20\x01\x20\x03\x29\x02\x00\x37\x03\x10\x20\x01\x41\x10\x6a\x20\x02\x20\x02\x28\x02\x04\x11\x00\x00\x0c\x06\x0b\x41\xcb\xfe\x01\x41\xae\xb7\x01\x41\xfd\x2c\x41\xdc\xfe\x01\x10\x4a\x00\x0b\x41\xe4\xfe\x01\x41\xae\xb7\x01\x41\xb3\x2d\x41\xc5\xff\x01\x10\x4a\x00\x0b\x41\x88\xfe\x01\x41\xae\xb7\x01\x41\xb2\x0f\x41\xa5\xfe\x01\x10\x4a\x00\x0b\x02\x40\x20\x00\x41\x7c\x6a\x22\x09\x2d\x00\x00\x41\x10\x4f\x0d\x00\x20\x00\x28\x02\x04\x21\x0b\x20\x02\x20\x00\x41\x78\x6a\x22\x05\x41\x14\x10\xf3\x04\x20\x09\x20\x09\x2d\x00\x00\x41\x0f\x71\x41\x10\x72\x3a\x00\x00\x20\x05\x28\x02\x00\x0d\x01\x20\x00\x28\x02\x04\x22\x09\x20\x00\x28\x02\x00\x22\x05\x36\x02\x00\x20\x00\x41\x00\x36\x02\x00\x20\x05\x20\x09\x36\x02\x04\x20\x00\x20\x08\x28\x02\x00\x22\x09\x36\x02\x00\x20\x09\x20\x00\x36\x02\x04\x20\x08\x20\x00\x36\x02\x00\x20\x00\x20\x08\x36\x02\x04\x0c\x01\x0b\x0b\x41\xb4\xfe\x01\x41\xae\xb7\x01\x41\xda\x2c\x41\xc1\xfe\x01\x10\x4a\x00\x0b\x20\x00\x41\x00\x41\xc0\x00\x10\x74\x21\x00\x20\x02\x42\x80\x80\x80\x80\x20\x37\x03\x80\x01\x20\x02\x20\x01\x41\x80\x80\x70\x6a\x36\x02\x78\x20\x02\x20\x01\x36\x02\x74\x20\x02\x41\x80\x80\x10\x36\x02\x70\x20\x02\x20\x00\x36\x02\xd4\x01\x0c\x01\x0b\x41\x00\x21\x02\x0b\x20\x01\x41\x20\x6a\x24\x00\x20\x02\x0b\xe2\x1d\x02\x08\x7f\x04\x7e\x23\x00\x41\xd0\x00\x6b\x22\x01\x24\x00\x02\x40\x02\x40\x20\x00\x41\x10\x6a\x22\x02\x41\x88\x02\x20\x00\x28\x02\x00\x11\x03\x00\x22\x03\x45\x0d\x00\x41\x00\x21\x04\x20\x03\x41\x05\x6a\x41\x00\x41\x83\x02\x10\x74\x1a\x20\x03\x41\x05\x3a\x00\x04\x20\x03\x20\x00\x28\x02\x50\x22\x05\x36\x02\x08\x20\x05\x20\x03\x41\x08\x6a\x22\x06\x36\x02\x04\x20\x03\x41\x01\x36\x02\x00\x20\x00\x20\x06\x36\x02\x50\x20\x03\x20\x00\x41\xd0\x00\x6a\x36\x02\x0c\x20\x03\x20\x02\x20\x00\x28\x02\x40\x41\x03\x74\x20\x00\x28\x02\x00\x11\x03\x00\x22\x05\x36\x02\x28\x02\x40\x20\x05\x0d\x00\x20\x02\x20\x03\x20\x00\x28\x02\x04\x11\x00\x00\x0c\x01\x0b\x20\x03\x20\x00\x28\x02\x48\x22\x02\x36\x02\x14\x20\x02\x20\x03\x41\x14\x6a\x22\x06\x36\x02\x04\x20\x03\x20\x00\x36\x02\x10\x20\x03\x42\xf1\x80\x80\x80\x80\x39\x37\x02\xdc\x01\x20\x03\x20\x00\x41\xd8\x01\x6a\x36\x02\xd8\x01\x20\x00\x20\x06\x36\x02\x48\x20\x03\x20\x00\x41\xc8\x00\x6a\x36\x02\x18\x20\x00\x28\x02\x40\x21\x00\x02\x40\x03\x40\x20\x04\x20\x00\x4e\x0d\x01\x20\x05\x42\x80\x80\x80\x80\x20\x37\x03\x00\x20\x05\x41\x08\x6a\x21\x05\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x03\x42\x80\x80\x80\x80\x20\x37\x03\x50\x20\x03\x42\x80\x80\x80\x80\x20\x37\x03\x48\x20\x03\x42\x80\x80\x80\x80\x20\x37\x03\x40\x20\x03\x20\x03\x41\xf4\x01\x6a\x22\x05\x36\x02\xf8\x01\x20\x03\x20\x05\x36\x02\xf4\x01\x20\x03\x42\x80\x80\x80\x80\x20\x10\xbd\x01\x21\x09\x20\x03\x28\x02\x28\x20\x09\x37\x03\x08\x20\x03\x20\x03\x41\x15\x41\xd2\xc7\x01\x41\x00\x41\x00\x41\x00\x20\x09\x10\xbf\x01\x22\x09\x37\x03\x30\x20\x09\x10\xc0\x01\x21\x09\x20\x03\x28\x02\x28\x20\x09\x37\x03\x68\x20\x03\x10\xc1\x01\x21\x09\x20\x03\x28\x02\x28\x20\x09\x37\x03\x18\x20\x03\x20\x09\x41\xc0\x81\x02\x41\x03\x10\xc2\x01\x20\x03\x41\xd8\x00\x6a\x21\x04\x41\x60\x21\x05\x02\x40\x03\x40\x20\x03\x28\x02\x28\x21\x00\x20\x05\x45\x0d\x01\x20\x03\x20\x03\x20\x00\x29\x03\x18\x10\xbd\x01\x22\x09\x41\x36\x20\x03\x20\x05\x41\x90\x82\x02\x6a\x28\x02\x00\x10\xc3\x01\x41\x03\x10\xc4\x01\x1a\x20\x03\x20\x09\x41\x33\x20\x03\x41\x2f\x10\xc5\x01\x41\x03\x10\xc4\x01\x1a\x20\x04\x20\x09\x37\x03\x00\x20\x05\x41\x04\x6a\x21\x05\x20\x04\x41\x08\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x03\x20\x00\x29\x03\x08\x41\x02\x10\xc6\x01\x21\x09\x20\x03\x28\x02\x28\x20\x09\x37\x03\x10\x41\x00\x21\x05\x20\x03\x20\x03\x41\x00\x20\x09\xa7\x20\x09\x42\x80\x80\x80\x80\x70\x54\x1b\x41\x01\x10\xc7\x01\x36\x02\x24\x20\x03\x20\x03\x41\x24\x6a\x41\x00\x41\x30\x41\x0a\x10\xc8\x01\x1a\x20\x03\x20\x03\x41\x16\x41\x00\x41\x00\x10\xca\x01\x37\x03\xb0\x01\x20\x03\x41\x17\x41\x00\x41\x00\x10\xca\x01\x21\x09\x20\x03\x20\x03\x29\x03\x30\x41\xcf\x00\x42\x80\x80\x80\x80\x30\x20\x09\x20\x03\x29\x03\xb0\x01\x41\x81\x32\x10\xcc\x01\x1a\x20\x03\x20\x03\x29\x03\x30\x41\xcd\x00\x42\x80\x80\x80\x80\x30\x20\x09\x20\x03\x29\x03\xb0\x01\x41\x81\x32\x10\xcc\x01\x1a\x20\x03\x20\x09\x10\xcd\x01\x20\x03\x20\x03\x42\x80\x80\x80\x80\x30\x41\x01\x20\x03\x41\xb0\x01\x6a\x41\x01\x10\xce\x01\x10\xcd\x01\x20\x03\x20\x03\x10\xc1\x01\x37\x03\xc0\x01\x20\x03\x20\x03\x42\x80\x80\x80\x80\x20\x10\xbd\x01\x37\x03\xc8\x01\x20\x03\x20\x03\x41\x8f\x83\x02\x41\x18\x41\x01\x20\x03\x28\x02\x28\x29\x03\x08\x10\xd0\x01\x41\xa0\x83\x02\x41\x16\x10\xc2\x01\x20\x03\x20\x03\x28\x02\x28\x29\x03\x08\x41\x80\x86\x02\x41\x0b\x10\xc2\x01\x20\x03\x20\x03\x29\x03\x30\x41\xb0\x87\x02\x41\x07\x10\xc2\x01\x20\x03\x20\x03\x41\x19\x41\xa0\x88\x02\x41\x01\x41\x05\x41\x00\x10\xd2\x01\x22\x09\x37\x03\x38\x20\x03\x20\x09\x10\xc0\x01\x41\xa0\x88\x02\x20\x03\x29\x03\x30\x10\xd3\x01\x20\x03\x20\x03\x41\x1a\x41\xfe\x82\x02\x41\x01\x41\x05\x41\x7f\x10\xd2\x01\x22\x09\x41\xfe\x82\x02\x20\x03\x28\x02\x28\x29\x03\x18\x10\xd3\x01\x20\x03\x41\xd8\x00\x6a\x21\x04\x41\xf0\x81\x02\x21\x00\x02\x40\x03\x40\x20\x05\x41\x08\x46\x0d\x01\x20\x03\x20\x03\x41\x1a\x20\x00\x28\x02\x00\x22\x02\x41\x02\x41\x01\x20\x05\x41\x07\x46\x1b\x41\x05\x20\x05\x20\x09\x10\xbf\x01\x20\x02\x20\x04\x29\x03\x00\x10\xd3\x01\x20\x00\x41\x04\x6a\x21\x00\x20\x04\x41\x08\x6a\x21\x04\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x03\x20\x03\x10\xc1\x01\x22\x09\x37\x03\x98\x01\x20\x03\x20\x09\x41\xb0\x88\x02\x41\x01\x10\xc2\x01\x20\x03\x20\x03\x28\x02\x28\x29\x03\x10\x41\xc0\x88\x02\x41\x20\x10\xc2\x01\x20\x03\x20\x03\x41\xc0\x8c\x02\x41\x1b\x41\x01\x20\x03\x28\x02\x28\x29\x03\x10\x10\xd0\x01\x10\xc0\x01\x22\x09\x37\x03\x40\x20\x03\x20\x09\x41\xd0\x8c\x02\x41\x04\x10\xc2\x01\x20\x01\x41\x90\x8d\x02\x41\xca\x00\x10\x70\x21\x00\x20\x03\x42\x80\x80\x80\x80\x20\x10\xbd\x01\x21\x09\x41\xe3\x00\x21\x04\x20\x00\x21\x05\x02\x40\x03\x40\x20\x04\x41\xff\x01\x71\x45\x0d\x01\x20\x03\x20\x09\x20\x05\x42\x81\x80\x80\x80\x10\x41\x07\x10\xd6\x01\x1a\x20\x05\x10\x71\x20\x05\x6a\x41\x01\x6a\x22\x05\x2d\x00\x00\x21\x04\x0c\x00\x0b\x00\x0b\x20\x03\x20\x03\x28\x02\x28\x29\x03\x10\x41\xdb\x01\x20\x09\x41\x01\x10\xc4\x01\x1a\x20\x03\x20\x03\x20\x03\x28\x02\x28\x29\x03\x10\x22\x09\x41\xeb\x00\x20\x09\x41\x00\x10\xb4\x01\x37\x03\xa8\x01\x20\x03\x20\x03\x29\x03\x98\x01\x10\xbd\x01\x21\x09\x20\x03\x28\x02\x28\x20\x09\x37\x03\xe0\x02\x20\x03\x20\x09\x41\xe0\x8d\x02\x41\x02\x10\xc2\x01\x20\x03\x20\x03\x29\x03\xc0\x01\x41\x80\x8e\x02\x41\x0e\x10\xc2\x01\x20\x03\x20\x03\x28\x02\x28\x29\x03\x08\x41\x04\x10\xc6\x01\x21\x09\x20\x03\x28\x02\x28\x20\x09\x37\x03\x20\x20\x03\x20\x09\x42\x00\x10\xd7\x01\x20\x03\x20\x03\x28\x02\x28\x29\x03\x20\x41\xe0\x8f\x02\x41\x06\x10\xc2\x01\x20\x03\x20\x03\x41\xc0\x90\x02\x41\x1c\x41\x01\x20\x03\x28\x02\x28\x29\x03\x20\x10\xd0\x01\x41\xd0\x90\x02\x41\x0e\x10\xc2\x01\x20\x03\x20\x03\x28\x02\x28\x29\x03\x08\x41\x06\x10\xc6\x01\x21\x09\x20\x03\x28\x02\x28\x20\x09\x37\x03\x30\x20\x03\x20\x09\x42\x80\x80\x80\x80\x10\x10\xd7\x01\x20\x03\x20\x03\x28\x02\x28\x29\x03\x30\x41\xb0\x92\x02\x41\x02\x10\xc2\x01\x20\x03\x41\xd0\x92\x02\x41\x1d\x41\x01\x20\x03\x28\x02\x28\x29\x03\x30\x10\xd0\x01\x1a\x20\x03\x20\x03\x28\x02\x28\x29\x03\x08\x41\x05\x10\xc6\x01\x21\x09\x20\x03\x28\x02\x28\x20\x09\x37\x03\x28\x20\x03\x20\x09\x20\x03\x41\x2f\x10\xc5\x01\x10\xd7\x01\x20\x03\x20\x03\x41\xd8\x92\x02\x41\x1e\x41\x01\x20\x03\x28\x02\x28\x29\x03\x28\x10\xd0\x01\x41\xe0\x92\x02\x41\x03\x10\xc2\x01\x20\x03\x20\x03\x28\x02\x28\x29\x03\x28\x41\x90\x93\x02\x41\x31\x10\xc2\x01\x20\x03\x20\x03\x29\x03\x98\x01\x10\xbd\x01\x21\x09\x20\x03\x28\x02\x28\x20\x09\x37\x03\xe8\x02\x20\x03\x20\x09\x41\xa0\x99\x02\x41\x02\x10\xc2\x01\x20\x00\x41\x00\x10\x3f\x1a\x20\x03\x42\x01\x20\x00\x29\x03\x00\x42\xc0\x84\x3d\x7e\x20\x00\x29\x03\x08\x7c\x22\x09\x20\x09\x50\x1b\x37\x03\xd0\x01\x20\x03\x20\x03\x29\x03\xc0\x01\x41\xc0\x99\x02\x41\x01\x10\xc2\x01\x20\x03\x20\x03\x29\x03\xc0\x01\x41\xd0\x99\x02\x41\x01\x10\xc2\x01\x20\x03\x10\xc1\x01\x21\x09\x20\x03\x28\x02\x28\x20\x09\x37\x03\x38\x20\x03\x20\x09\x41\xe0\x99\x02\x41\x05\x10\xc2\x01\x20\x03\x20\x03\x41\xb0\x9a\x02\x41\x1f\x41\x00\x20\x03\x28\x02\x28\x29\x03\x38\x10\xd0\x01\x22\x09\x41\xc0\x9a\x02\x41\x02\x10\xc2\x01\x41\xd0\x01\x21\x05\x20\x03\x41\x10\x6a\x21\x06\x02\x40\x03\x40\x20\x05\x41\xde\x01\x46\x0d\x01\x20\x03\x20\x09\x20\x06\x28\x02\x00\x20\x00\x20\x05\x10\xdc\x01\x22\x04\x41\x2e\x10\x76\x22\x02\x41\x01\x6a\x20\x04\x20\x02\x1b\x20\x03\x20\x05\x10\xdd\x01\x41\x00\x10\xd6\x01\x1a\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x03\x20\x03\x29\x03\x98\x01\x10\xbd\x01\x21\x09\x20\x03\x28\x02\x28\x20\x09\x37\x03\xf8\x02\x20\x03\x20\x09\x41\xe0\x9a\x02\x41\x04\x10\xc2\x01\x20\x03\x20\x03\x29\x03\x30\x10\xbd\x01\x21\x09\x20\x03\x28\x02\x28\x20\x09\x37\x03\x80\x01\x20\x03\x41\x19\x41\xa0\x9b\x02\x41\x01\x41\x05\x41\x01\x10\xd2\x01\x21\x09\x20\x03\x20\x03\x28\x02\x28\x29\x03\x80\x01\x41\xc0\x9b\x02\x41\x01\x10\xc2\x01\x20\x03\x20\x03\x28\x02\x28\x22\x05\x29\x03\x80\x01\x20\x05\x29\x03\xf8\x02\x41\x01\x41\x01\x10\xde\x01\x20\x03\x20\x09\x20\x03\x28\x02\x28\x29\x03\x80\x01\x41\x00\x41\x01\x10\xde\x01\x20\x03\x20\x09\x10\xcd\x01\x20\x03\x20\x03\x41\x20\x41\xd0\x9b\x02\x41\x01\x10\xca\x01\x22\x09\x37\x03\xb8\x01\x20\x03\x20\x03\x29\x03\xc0\x01\x41\x3a\x20\x09\x10\xc0\x01\x41\x03\x10\xc4\x01\x1a\x20\x03\x20\x03\x29\x03\xc0\x01\x10\xc0\x01\x22\x09\x41\x8a\x01\x20\x09\x41\x03\x10\xc4\x01\x1a\x20\x03\x10\xc1\x01\x21\x09\x20\x03\x28\x02\x28\x20\x09\x37\x03\x50\x20\x03\x20\x09\x41\xa0\xba\x02\x41\x2f\x10\xc2\x01\x20\x03\x20\x03\x41\x90\xc0\x02\x41\x21\x41\x07\x20\x03\x28\x02\x28\x29\x03\x50\x10\xd0\x01\x41\xa0\xc0\x02\x41\x03\x10\xc2\x01\x20\x03\x41\x22\x36\x02\x80\x02\x20\x03\x20\x03\x28\x02\x28\x29\x03\x28\x41\xf0\xec\x02\x41\x01\x10\xc2\x01\x20\x03\x41\x23\x36\x02\xfc\x01\x20\x03\x10\xc1\x01\x21\x09\x20\x03\x28\x02\x28\x20\x09\x37\x03\x90\x01\x20\x03\x20\x09\x41\xb0\xed\x02\x41\x11\x10\xc2\x01\x20\x03\x20\x03\x41\xc0\xef\x02\x41\x24\x41\x02\x20\x03\x28\x02\x28\x29\x03\x90\x01\x10\xd0\x01\x10\xc0\x01\x22\x09\x37\x03\x48\x20\x03\x20\x09\x41\xd0\xef\x02\x41\x01\x10\xc2\x01\x20\x03\x20\x03\x29\x03\x98\x01\x10\xbd\x01\x21\x09\x20\x03\x28\x02\x28\x20\x09\x37\x03\xf0\x02\x20\x03\x20\x09\x41\xe0\xef\x02\x41\x02\x10\xc2\x01\x20\x03\x20\x03\x29\x03\xc0\x01\x41\x80\xf3\x02\x41\x01\x10\xc2\x01\x02\x40\x02\x40\x20\x03\x41\x10\x6a\x28\x02\x00\x22\x05\x28\x02\x40\x41\x31\x49\x0d\x00\x20\x05\x28\x02\x44\x28\x02\x80\x09\x0d\x01\x0b\x20\x05\x41\xa4\xf5\x02\x41\x30\x41\x01\x10\xe4\x01\x1a\x20\x05\x28\x02\x44\x22\x05\x41\x94\x09\x6a\x41\xb0\xf5\x02\x36\x02\x00\x20\x05\x41\x90\x09\x6a\x41\x25\x36\x02\x00\x0b\x02\x40\x20\x03\x41\x26\x41\xcc\xf5\x02\x41\x02\x41\x02\x41\x00\x10\xd2\x01\x22\x09\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x09\xa7\x22\x05\x20\x05\x2d\x00\x05\x41\x10\x72\x3a\x00\x05\x0b\x20\x03\x20\x09\x41\xe0\xf5\x02\x41\x01\x10\xc2\x01\x20\x03\x20\x03\x29\x03\xc0\x01\x41\xcc\xf5\x02\x20\x09\x41\x03\x10\xd6\x01\x1a\x41\xd8\xf9\x02\x21\x02\x41\xc0\xf9\x02\x21\x06\x41\xb0\x02\x21\x05\x20\x03\x41\x10\x6a\x21\x07\x41\x00\x21\x04\x02\x40\x03\x40\x02\x40\x20\x05\x41\xd0\x02\x47\x0d\x00\x41\xdc\xf9\x02\x21\x04\x41\xd0\xf9\x02\x21\x02\x41\xd0\x02\x21\x05\x03\x40\x20\x05\x41\xe0\x02\x46\x0d\x03\x20\x03\x20\x03\x29\x03\x98\x01\x10\xbd\x01\x21\x09\x20\x03\x28\x02\x28\x20\x05\x6a\x20\x09\x37\x03\x00\x20\x03\x20\x09\x20\x02\x28\x02\x00\x20\x04\x2d\x00\x00\x10\xc2\x01\x20\x05\x41\x08\x6a\x21\x05\x20\x02\x41\x04\x6a\x21\x02\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x07\x28\x02\x00\x20\x00\x20\x04\x41\xb5\x01\x6a\x10\xdc\x01\x21\x08\x20\x03\x10\xc1\x01\x21\x09\x20\x03\x28\x02\x28\x20\x05\x6a\x20\x09\x37\x03\x00\x20\x03\x20\x09\x20\x06\x28\x02\x00\x20\x02\x2d\x00\x00\x10\xc2\x01\x20\x03\x41\x27\x20\x08\x41\x00\x41\x03\x20\x04\x10\xd2\x01\x21\x09\x02\x40\x20\x04\x41\x01\x4b\x0d\x00\x20\x03\x20\x09\x41\xe0\xf9\x02\x41\x01\x10\xc2\x01\x0b\x20\x03\x20\x09\x20\x08\x20\x03\x28\x02\x28\x20\x05\x6a\x29\x03\x00\x10\xd3\x01\x20\x05\x41\x08\x6a\x21\x05\x20\x06\x41\x04\x6a\x21\x06\x20\x02\x41\x01\x6a\x21\x02\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x03\x10\xc1\x01\x21\x09\x20\x03\x28\x02\x28\x20\x09\x37\x03\x98\x01\x20\x03\x20\x09\x41\xc0\xff\x02\x41\x03\x10\xc2\x01\x20\x03\x20\x03\x41\xf0\xff\x02\x41\x28\x20\x03\x28\x02\x28\x29\x03\x98\x01\x10\xe9\x01\x41\x80\x80\x03\x41\x02\x10\xc2\x01\x20\x03\x10\xc1\x01\x21\x09\x20\x03\x28\x02\x28\x20\x09\x37\x03\xa0\x01\x20\x03\x20\x09\x41\xa0\x80\x03\x41\x03\x10\xc2\x01\x20\x03\x20\x03\x41\xd0\x80\x03\x41\x29\x20\x03\x28\x02\x28\x29\x03\xa0\x01\x10\xe9\x01\x41\xf0\x80\x03\x41\x01\x10\xc2\x01\x20\x03\x20\x03\x10\xc1\x01\x22\x0a\x41\x80\x81\x03\x41\x1e\x10\xc2\x01\x20\x03\x20\x0a\x41\x37\x20\x03\x20\x03\x28\x02\x28\x29\x03\x10\x22\x09\x41\x37\x20\x09\x41\x00\x10\xb4\x01\x41\x03\x10\xc4\x01\x1a\x20\x03\x20\x03\x41\x2a\x41\x8c\xb5\x02\x41\x00\x10\xca\x01\x22\x0b\x41\xe0\x84\x03\x41\x03\x10\xc2\x01\x20\x03\x20\x0b\x20\x0a\x10\xec\x01\x41\x15\x21\x04\x41\xa8\x01\x21\x05\x41\x8b\xe6\x01\x21\x02\x20\x03\x41\x10\x6a\x21\x08\x02\x40\x03\x40\x20\x05\x41\x80\x02\x46\x0d\x01\x20\x03\x20\x0a\x10\xbd\x01\x21\x09\x20\x03\x28\x02\x28\x20\x05\x6a\x20\x09\x37\x03\x00\x20\x03\x20\x09\x41\x90\x85\x03\x41\x01\x20\x02\x2d\x00\x00\x74\xad\x22\x0c\x41\x00\x10\xd6\x01\x1a\x20\x03\x20\x03\x41\x2b\x20\x08\x28\x02\x00\x20\x00\x20\x04\x41\x8e\x01\x6a\x10\xdc\x01\x22\x06\x41\x03\x41\x03\x20\x04\x20\x0b\x10\xbf\x01\x22\x09\x20\x06\x20\x03\x28\x02\x28\x20\x05\x6a\x29\x03\x00\x10\xd3\x01\x20\x03\x20\x09\x41\x90\x85\x03\x20\x0c\x41\x00\x10\xd6\x01\x1a\x20\x02\x41\x01\x6a\x21\x02\x20\x05\x41\x08\x6a\x21\x05\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x03\x20\x0a\x10\xcd\x01\x20\x03\x20\x0b\x10\xcd\x01\x20\x03\x10\xc1\x01\x21\x09\x20\x03\x28\x02\x28\x20\x09\x37\x03\x80\x02\x20\x03\x20\x09\x41\xb0\x85\x03\x41\x18\x10\xc2\x01\x20\x03\x41\x97\xb5\x02\x41\x2c\x20\x03\x28\x02\x28\x29\x03\x80\x02\x10\xe9\x01\x1a\x02\x40\x02\x40\x20\x03\x41\x10\x6a\x28\x02\x00\x22\x05\x28\x02\x40\x41\x32\x49\x0d\x00\x20\x05\x28\x02\x44\x28\x02\x98\x09\x0d\x01\x0b\x20\x05\x41\x90\x8c\x03\x41\x31\x41\x09\x10\xe4\x01\x1a\x20\x05\x28\x02\x44\x22\x05\x41\xd0\x0a\x6a\x41\x2d\x36\x02\x00\x20\x05\x41\xa0\x0a\x6a\x41\x2e\x36\x02\x00\x20\x05\x41\x88\x0a\x6a\x41\x2e\x36\x02\x00\x20\x05\x41\xf0\x09\x6a\x41\x2f\x36\x02\x00\x20\x05\x41\xd8\x09\x6a\x41\x30\x36\x02\x00\x20\x05\x41\xc0\x09\x6a\x41\x30\x36\x02\x00\x0b\x20\x03\x10\xc1\x01\x21\x09\x20\x03\x28\x02\x28\x20\x09\x37\x03\x88\x03\x20\x03\x20\x09\x41\x80\x8d\x03\x41\x04\x10\xc2\x01\x20\x03\x20\x03\x41\x31\x41\xc0\x8d\x03\x41\x01\x41\x02\x41\x00\x10\xd2\x01\x10\xc0\x01\x22\x09\x37\x03\x50\x20\x03\x20\x09\x41\xd0\x8d\x03\x41\x07\x10\xc2\x01\x20\x03\x20\x09\x41\xc0\x8d\x03\x20\x03\x28\x02\x28\x29\x03\x88\x03\x10\xd3\x01\x20\x03\x20\x03\x29\x03\x30\x10\xbd\x01\x21\x09\x20\x03\x28\x02\x28\x20\x09\x37\x03\xa0\x03\x20\x03\x41\x19\x41\xc0\x8e\x03\x41\x01\x41\x05\x41\x02\x20\x03\x29\x03\x38\x10\xbf\x01\x21\x09\x20\x03\x20\x03\x28\x02\x28\x29\x03\xa0\x03\x41\xd0\x8e\x03\x41\x01\x10\xc2\x01\x20\x03\x20\x09\x20\x03\x28\x02\x28\x29\x03\xa0\x03\x41\x00\x41\x01\x10\xde\x01\x20\x03\x20\x09\x10\xcd\x01\x20\x03\x20\x03\x10\xc1\x01\x22\x09\x37\x03\xa0\x01\x20\x03\x20\x09\x41\xe0\x8e\x03\x41\x01\x10\xc2\x01\x20\x03\x20\x03\x29\x03\xa0\x01\x10\xbd\x01\x21\x09\x20\x03\x28\x02\x28\x20\x09\x37\x03\xb8\x03\x20\x03\x20\x09\x41\xf0\x8e\x03\x41\x03\x10\xc2\x01\x20\x03\x20\x03\x29\x03\xa0\x01\x10\xbd\x01\x21\x09\x20\x03\x28\x02\x28\x20\x09\x37\x03\xc8\x03\x20\x03\x20\x09\x41\xa0\x8f\x03\x41\x04\x10\xc2\x01\x20\x03\x20\x03\x29\x03\x30\x10\xbd\x01\x21\x09\x20\x03\x28\x02\x28\x20\x09\x37\x03\xc0\x03\x20\x03\x41\x19\x41\xe0\x8f\x03\x41\x01\x41\x05\x41\x03\x20\x03\x29\x03\x38\x10\xbf\x01\x21\x09\x20\x03\x20\x03\x28\x02\x28\x29\x03\xc0\x03\x41\x80\x90\x03\x41\x01\x10\xc2\x01\x20\x03\x20\x03\x28\x02\x28\x22\x05\x29\x03\xc0\x03\x20\x05\x29\x03\xc8\x03\x41\x01\x41\x01\x10\xde\x01\x20\x03\x20\x09\x20\x03\x28\x02\x28\x29\x03\xc0\x03\x41\x00\x41\x01\x10\xde\x01\x20\x03\x20\x09\x10\xcd\x01\x20\x03\x41\x10\x6a\x28\x02\x00\x22\x05\x41\x32\x36\x02\x94\x02\x20\x05\x41\xa4\x02\x6a\x41\x33\x36\x02\x00\x20\x05\x41\xa0\x02\x6a\x41\x34\x36\x02\x00\x20\x05\x41\x9c\x02\x6a\x41\x35\x36\x02\x00\x20\x05\x41\x98\x02\x6a\x41\x36\x36\x02\x00\x20\x03\x10\xc1\x01\x21\x09\x20\x03\x28\x02\x28\x20\x09\x37\x03\x88\x02\x20\x03\x20\x09\x41\xa0\x94\x03\x41\x03\x10\xc2\x01\x20\x03\x20\x03\x41\xd0\x94\x03\x41\x37\x41\x01\x20\x03\x28\x02\x28\x29\x03\x88\x02\x10\xd0\x01\x41\xe0\x94\x03\x41\x0e\x10\xc2\x01\x0c\x01\x0b\x41\x00\x21\x03\x0b\x20\x01\x41\xd0\x00\x6a\x24\x00\x20\x03\x0b\xad\x0a\x01\x02\x7e\x20\x00\x29\x03\xc0\x01\x10\xc0\x01\x21\x01\x20\x00\x20\x00\x10\xc1\x01\x22\x02\x41\xf9\xac\x01\x20\x00\x41\x38\x41\xf9\xac\x01\x41\x01\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\x87\xad\x01\x20\x00\x41\x39\x41\x87\xad\x01\x41\x01\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\x94\xad\x01\x20\x00\x41\x3a\x41\x94\xad\x01\x41\x02\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xa3\xad\x01\x20\x00\x41\x3b\x41\xa3\xad\x01\x41\x01\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xb6\xad\x01\x20\x00\x41\x3c\x41\xb6\xad\x01\x41\x01\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xc8\xad\x01\x20\x00\x41\x3d\x41\xc8\xad\x01\x41\x01\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xda\xad\x01\x20\x00\x41\x3e\x41\xda\xad\x01\x41\x01\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xf1\xad\x01\x20\x00\x41\x3f\x41\xf1\xad\x01\x41\x01\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xf7\xad\x01\x20\x00\x41\xc0\x00\x41\xf7\xad\x01\x41\x00\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\x83\xae\x01\x20\x00\x41\xc1\x00\x41\x83\xae\x01\x41\x00\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\x93\xae\x01\x20\x00\x41\xc2\x00\x41\x93\xae\x01\x41\x00\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xa0\xae\x01\x20\x00\x41\xc3\x00\x41\xa0\xae\x01\x41\x00\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xae\xae\x01\x20\x00\x41\xc4\x00\x41\xae\xae\x01\x41\x00\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xbe\xae\x01\x20\x00\x41\xc5\x00\x41\xbe\xae\x01\x41\x00\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xd5\xae\x01\x20\x00\x41\xc6\x00\x41\xd5\xae\x01\x41\x00\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xe6\xae\x01\x20\x00\x41\xc7\x00\x41\xe6\xae\x01\x41\x00\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xf2\xae\x01\x20\x00\x41\xc8\x00\x41\xf2\xae\x01\x41\x00\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xfb\xae\x01\x20\x00\x41\xc9\x00\x41\xfb\xae\x01\x41\x01\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\x87\xaf\x01\x20\x00\x41\xca\x00\x41\x87\xaf\x01\x41\x02\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\x8e\xaf\x01\x20\x00\x41\xcb\x00\x41\x8e\xaf\x01\x41\x02\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\x98\xaf\x01\x20\x00\x41\xcc\x00\x41\x98\xaf\x01\x41\x02\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xa2\xaf\x01\x20\x00\x41\xcd\x00\x41\xa2\xaf\x01\x41\x02\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xac\xaf\x01\x20\x00\x41\xce\x00\x41\xac\xaf\x01\x41\x05\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xb6\xaf\x01\x20\x00\x41\xcf\x00\x41\xb6\xaf\x01\x41\x01\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xc3\xaf\x01\x20\x00\x41\xd0\x00\x41\xc3\xaf\x01\x41\x01\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xc9\xaf\x01\x20\x00\x41\xd1\x00\x41\xc9\xaf\x01\x41\x01\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\x9f\xa7\x02\x20\x00\x41\xd2\x00\x41\x9f\xa7\x02\x41\x01\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xd4\xaf\x01\x20\x00\x41\xd3\x00\x41\xd4\xaf\x01\x41\x01\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xdd\xaf\x01\x20\x00\x41\xd4\x00\x41\xdd\xaf\x01\x41\x01\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xe7\xaf\x01\x20\x00\x41\xd5\x00\x41\xe7\xaf\x01\x41\x05\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xf6\xaf\x01\x20\x00\x41\xd6\x00\x41\xf6\xaf\x01\x41\x06\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\x83\xb0\x01\x20\x00\x41\xd7\x00\x41\x83\xb0\x01\x41\x01\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\x8f\xb0\x01\x20\x00\x41\xd8\x00\x41\x8f\xb0\x01\x41\x01\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xa4\xb0\x01\x20\x00\x41\xd9\x00\x41\xa4\xb0\x01\x41\x02\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xb7\xb0\x01\x20\x00\x41\xda\x00\x41\xb7\xb0\x01\x41\x01\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xdb\xb0\x01\x20\x00\x41\xdb\x00\x41\xdb\xb0\x01\x41\x02\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\x80\xb1\x01\x20\x00\x41\xdc\x00\x41\x80\xb1\x01\x41\x05\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xa3\xb1\x01\x20\x00\x41\xdd\x00\x41\xa3\xb1\x01\x41\x02\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xc1\xb1\x01\x20\x00\x41\xde\x00\x41\xc1\xb1\x01\x41\x03\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xdc\xb1\x01\x20\x00\x41\xdf\x00\x41\xdc\xb1\x01\x41\x03\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\x8a\xb2\x01\x20\x00\x41\xe0\x00\x41\x8a\xb2\x01\x41\x06\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xba\xb2\x01\x20\x00\x41\xe1\x00\x41\xba\xb2\x01\x41\x02\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xda\xb2\x01\x20\x00\x41\xe2\x00\x41\xda\xb2\x01\x41\x02\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xfe\xb2\x01\x20\x00\x41\xe3\x00\x41\xfe\xb2\x01\x41\x00\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\x94\xb3\x01\x20\x00\x41\xe4\x00\x41\x94\xb3\x01\x41\x02\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xa3\xb3\x01\x20\x00\x41\xe5\x00\x41\xa3\xb3\x01\x41\x01\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xb2\xb3\x01\x20\x00\x41\xe6\x00\x41\xb2\xb3\x01\x41\x02\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xc0\xb3\x01\x20\x00\x41\xe7\x00\x41\xc0\xb3\x01\x41\x02\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xcd\xb3\x01\x20\x00\x41\xe8\x00\x41\xcd\xb3\x01\x41\x02\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xdc\xb3\x01\x20\x00\x41\xe9\x00\x41\xdc\xb3\x01\x41\x02\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xec\xb3\x01\x20\x00\x41\xea\x00\x41\xec\xb3\x01\x41\x02\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x02\x41\xfc\xb3\x01\x20\x00\x41\xeb\x00\x41\xfc\xb3\x01\x41\x01\x10\xfb\x01\x10\xfc\x01\x20\x00\x20\x01\x41\x92\xb4\x01\x20\x02\x10\xfc\x01\x0b\x89\x07\x02\x05\x7f\x02\x7e\x23\x00\x41\xa0\x20\x6b\x22\x01\x24\x00\x20\x01\x41\x2c\x6a\x42\x00\x37\x02\x00\x20\x01\x41\x34\x6a\x42\x00\x37\x02\x00\x20\x01\x41\x3c\x6a\x41\x00\x36\x02\x00\x20\x00\x20\x00\x2f\x01\x1c\x41\x01\x6a\x3b\x01\x1c\x20\x00\x20\x00\x28\x02\x20\x41\xb7\x16\x6a\x36\x02\x20\x20\x01\x42\x00\x37\x02\x24\x20\x01\x41\xe7\xac\x01\x36\x02\x1c\x20\x01\x41\xb0\x96\x01\x36\x02\x14\x20\x01\x20\x00\x36\x02\x10\x20\x01\x41\xb0\x96\x01\x36\x02\x18\x20\x01\x41\xde\x01\x36\x02\x20\x20\x01\x41\x80\x02\x36\x02\x30\x02\x40\x02\x40\x20\x01\x41\x10\x6a\x20\x01\x41\x0f\x6a\x10\xbc\x09\x0d\x00\x02\x40\x20\x01\x2d\x00\x0f\x22\x02\x41\x02\x46\x0d\x00\x20\x01\x20\x02\x36\x02\x00\x20\x01\x41\x02\x36\x02\x04\x20\x01\x28\x02\x10\x41\xc0\x98\x03\x20\x01\x10\xc5\x04\x0c\x01\x0b\x20\x01\x41\x10\x6a\x20\x01\x41\x24\x6a\x10\xbe\x09\x0d\x00\x02\x40\x20\x01\x28\x02\x24\x22\x03\x45\x0d\x00\x20\x01\x20\x01\x28\x02\x10\x20\x03\x41\x02\x74\x10\xe2\x03\x22\x02\x36\x02\x28\x20\x02\x0d\x00\x20\x01\x41\x7f\x36\x02\x2c\x0c\x01\x0b\x41\x00\x21\x04\x41\x00\x21\x02\x02\x40\x03\x40\x20\x02\x20\x03\x4f\x0d\x01\x20\x01\x41\x10\x6a\x10\xbf\x09\x22\x03\x45\x0d\x02\x02\x40\x20\x01\x28\x02\x10\x41\x10\x6a\x28\x02\x00\x20\x03\x10\xf1\x03\x22\x03\x0d\x00\x20\x01\x41\x7f\x36\x02\x2c\x0c\x03\x0b\x20\x01\x28\x02\x28\x20\x04\x6a\x20\x03\x36\x02\x00\x02\x40\x20\x01\x28\x02\x30\x22\x05\x41\x80\x80\xfc\x07\x71\x45\x0d\x00\x20\x02\x20\x01\x28\x02\x20\x6a\x20\x03\x46\x0d\x00\x20\x01\x20\x05\x41\xff\xff\x83\x78\x71\x36\x02\x30\x0b\x20\x04\x41\x04\x6a\x21\x04\x20\x02\x41\x01\x6a\x21\x02\x20\x01\x28\x02\x24\x21\x03\x0c\x00\x0b\x00\x0b\x20\x01\x41\x10\x6a\x10\xc0\x09\x21\x06\x0c\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x0b\x02\x40\x20\x01\x28\x02\x28\x22\x03\x45\x0d\x00\x41\x00\x21\x04\x41\x00\x21\x02\x02\x40\x03\x40\x20\x01\x28\x02\x10\x21\x05\x20\x02\x20\x01\x28\x02\x24\x4f\x0d\x01\x20\x05\x20\x03\x20\x04\x6a\x28\x02\x00\x10\xe4\x02\x20\x04\x41\x04\x6a\x21\x04\x20\x02\x41\x01\x6a\x21\x02\x20\x01\x28\x02\x28\x21\x03\x0c\x00\x0b\x00\x0b\x20\x05\x28\x02\x10\x22\x02\x41\x10\x6a\x20\x03\x20\x02\x28\x02\x04\x11\x00\x00\x0b\x20\x01\x28\x02\x10\x28\x02\x10\x22\x02\x41\x10\x6a\x20\x01\x28\x02\x34\x20\x02\x28\x02\x04\x11\x00\x00\x02\x40\x02\x40\x02\x40\x20\x06\x42\x80\x80\x80\x80\x70\x83\x22\x07\x42\x80\x80\x80\x80\x50\x51\x0d\x00\x20\x07\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x41\xab\xc4\x05\x41\xd7\xc4\x05\x41\xd6\x01\x41\x8b\xc5\x05\x10\x4a\x00\x0b\x02\x40\x20\x00\x20\x06\xa7\x22\x04\x10\xe7\x03\x41\x7f\x4a\x0d\x00\x20\x00\x41\x01\x10\xe2\x02\x20\x00\x20\x06\x10\xff\x09\x0c\x01\x0b\x20\x00\x20\x00\x20\x04\x28\x02\x04\x10\xd9\x03\x22\x03\x10\xd2\x02\x21\x02\x20\x00\x20\x03\x10\xe4\x02\x02\x40\x20\x02\x45\x0d\x00\x02\x40\x02\x40\x20\x02\x41\x3a\x10\x76\x0d\x00\x20\x01\x42\xe6\xd2\xb1\xab\xa6\xe7\xcb\x17\x37\x03\x10\x20\x01\x41\x10\x6a\x21\x03\x20\x01\x41\x10\x6a\x10\x71\x22\x05\x41\x8f\x20\x4a\x0d\x01\x20\x01\x41\x10\x6a\x20\x05\x6a\x41\x90\x20\x20\x05\x6b\x20\x02\x10\x87\x08\x0c\x01\x0b\x20\x01\x41\x10\x6a\x41\x90\x20\x20\x02\x10\x87\x08\x20\x01\x41\x10\x6a\x21\x03\x0b\x20\x00\x20\x02\x10\xcf\x02\x20\x00\x20\x04\x10\x84\x03\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x07\x41\xa5\xc5\x05\x20\x00\x20\x03\x10\xc7\x02\x41\x07\x10\xd6\x01\x1a\x20\x00\x20\x07\x41\xa9\xc5\x05\x42\x80\x80\x80\x80\x10\x41\x07\x10\xd6\x01\x1a\x20\x00\x20\x07\x10\xff\x09\x0b\x20\x00\x20\x06\x10\xe8\x03\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0b\x20\x00\x10\xfd\x09\x41\x01\x10\x49\x00\x0b\x20\x00\x20\x04\x10\xe9\x03\x21\x06\x20\x01\x41\xa0\x20\x6a\x24\x00\x20\x06\x0b\x0d\x00\x20\x00\x20\x01\x20\x01\x10\x71\x10\xb0\x04\x0b\x97\x07\x02\x07\x7f\x01\x7e\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x42\x20\x88\xa7\x22\x06\x41\x01\x6a\x22\x07\x41\x07\x4d\x0d\x00\x20\x06\x41\x79\x46\x0d\x01\x0c\x03\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x0c\x02\x40\x02\x40\x20\x07\x0e\x08\x03\x04\x04\x00\x01\x04\x04\x08\x03\x0b\x20\x00\x20\x02\x41\xc0\xe7\x01\x10\xf1\x02\x0c\x05\x0b\x20\x00\x20\x02\x41\xe2\xe7\x01\x10\xf1\x02\x0c\x04\x0b\x20\x01\xa7\x21\x07\x02\x40\x20\x02\x41\x7f\x4a\x0d\x00\x20\x02\x41\xff\xff\xff\xff\x07\x71\x22\x08\x20\x07\x28\x02\x04\x22\x06\x41\xff\xff\xff\xff\x07\x71\x4f\x0d\x02\x02\x40\x02\x40\x20\x06\x41\x7f\x4a\x0d\x00\x20\x07\x20\x08\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x21\x02\x0c\x01\x0b\x20\x07\x20\x08\x6a\x41\x10\x6a\x2d\x00\x00\x21\x02\x0b\x20\x00\x20\x02\x41\xff\xff\x03\x71\x10\xf2\x02\x21\x0c\x0c\x06\x0b\x20\x02\x41\x30\x47\x0d\x01\x20\x07\x29\x02\x04\x42\xff\xff\xff\xff\x07\x83\x21\x0c\x0c\x05\x0b\x20\x01\xa7\x21\x07\x0c\x01\x0b\x20\x00\x20\x01\x10\xf3\x02\xa7\x22\x07\x45\x0d\x02\x0b\x20\x02\x41\xff\xff\xff\xff\x07\x71\x21\x09\x03\x40\x20\x07\x28\x02\x10\x22\x08\x20\x08\x28\x02\x18\x20\x02\x71\x41\x7f\x73\x41\x02\x74\x6a\x28\x02\x00\x21\x06\x02\x40\x03\x40\x20\x06\x45\x0d\x01\x20\x08\x20\x06\x41\x7f\x6a\x41\x03\x74\x22\x0a\x6a\x22\x0b\x41\x30\x6a\x21\x06\x02\x40\x20\x0b\x41\x34\x6a\x28\x02\x00\x20\x02\x46\x0d\x00\x20\x06\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x21\x06\x0c\x01\x0b\x0b\x20\x07\x28\x02\x14\x20\x0a\x6a\x21\x08\x02\x40\x02\x40\x02\x40\x02\x40\x20\x06\x28\x02\x00\x41\x1e\x76\x0e\x04\x03\x00\x01\x02\x03\x0b\x20\x08\x28\x02\x00\x22\x02\x45\x0d\x06\x20\x00\x20\x02\xad\x42\x80\x80\x80\x80\x70\x84\x10\xc0\x01\x20\x03\x41\x00\x41\x00\x10\xef\x02\x21\x0c\x0c\x07\x0b\x02\x40\x20\x08\x28\x02\x00\x28\x02\x10\x29\x03\x00\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xc0\x00\x52\x0d\x00\x20\x00\x20\x02\x10\xf4\x02\x0c\x05\x0b\x20\x0c\x10\xc0\x01\x21\x0c\x0c\x06\x0b\x20\x00\x20\x07\x20\x02\x20\x08\x20\x06\x10\xf5\x02\x45\x0d\x02\x0c\x03\x0b\x20\x08\x29\x03\x00\x10\xc0\x01\x21\x0c\x0c\x04\x0b\x02\x40\x20\x07\x2d\x00\x05\x22\x06\x41\x04\x71\x45\x0d\x00\x02\x40\x20\x06\x41\x08\x71\x45\x0d\x00\x02\x40\x20\x02\x41\x7f\x4a\x0d\x00\x02\x40\x20\x09\x20\x07\x41\x28\x6a\x28\x02\x00\x4f\x0d\x00\x20\x00\x20\x07\xad\x42\x80\x80\x80\x80\x70\x84\x20\x09\x10\xf6\x02\x21\x0c\x0c\x07\x0b\x20\x07\x2f\x01\x06\x41\x6b\x6a\x41\xff\xff\x03\x71\x41\x0b\x49\x0d\x05\x0c\x02\x0b\x20\x07\x2f\x01\x06\x41\x6b\x6a\x41\xff\xff\x03\x71\x41\x0a\x4b\x0d\x01\x20\x00\x20\x02\x10\xf7\x02\x22\x06\x45\x0d\x01\x42\x80\x80\x80\x80\xe0\x00\x42\x80\x80\x80\x80\x30\x20\x06\x41\x00\x48\x1b\x21\x0c\x0c\x05\x0b\x20\x00\x28\x02\x10\x28\x02\x44\x20\x07\x2f\x01\x06\x41\x18\x6c\x6a\x28\x02\x14\x22\x06\x45\x0d\x00\x02\x40\x20\x06\x28\x02\x14\x45\x0d\x00\x20\x00\x20\x07\xad\x42\x80\x80\x80\x80\x70\x84\x10\xc0\x01\x22\x01\x20\x02\x20\x03\x20\x06\x28\x02\x14\x11\x35\x00\x21\x0c\x20\x00\x20\x01\x10\xcd\x01\x0c\x05\x0b\x20\x06\x28\x02\x00\x45\x0d\x00\x20\x00\x20\x05\x20\x07\xad\x42\x80\x80\x80\x80\x70\x84\x10\xc0\x01\x22\x0c\x20\x02\x20\x06\x28\x02\x00\x11\x17\x00\x21\x06\x20\x00\x20\x0c\x10\xcd\x01\x20\x06\x41\x00\x48\x0d\x02\x20\x06\x45\x0d\x00\x02\x40\x20\x05\x2d\x00\x00\x41\x10\x71\x45\x0d\x00\x20\x00\x20\x05\x29\x03\x18\x10\xcd\x01\x20\x00\x20\x05\x29\x03\x10\x20\x03\x41\x00\x41\x00\x10\xef\x02\x21\x0c\x0c\x05\x0b\x20\x05\x29\x03\x08\x21\x0c\x0c\x04\x0b\x20\x07\x28\x02\x10\x28\x02\x2c\x22\x07\x0d\x00\x0b\x42\x80\x80\x80\x80\x30\x21\x0c\x20\x04\x45\x0d\x02\x20\x00\x20\x02\x10\xf8\x02\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x0c\x0c\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x0c\x0b\x20\x05\x41\x20\x6a\x24\x00\x20\x0c\x0b\x17\x00\x20\x00\x20\x01\x20\x02\x42\x80\x80\x80\x80\x30\x20\x03\x20\x04\x41\x02\x10\xf9\x02\x0b\x21\x00\x20\x00\x20\x01\x20\x00\x20\x02\x10\xb3\x01\x22\x02\x20\x01\x41\x00\x10\xb4\x01\x21\x01\x20\x00\x20\x02\x10\xe4\x02\x20\x01\x0b\x0d\x00\x20\x00\x20\x01\x20\x02\x41\x00\x10\xb0\x02\x0b\xcd\x01\x02\x04\x7f\x01\x7e\x02\x40\x03\x40\x20\x00\x28\x02\x10\x22\x01\x41\xa4\x01\x6a\x28\x02\x00\x22\x02\x20\x01\x41\xa0\x01\x6a\x46\x0d\x01\x20\x02\x28\x02\x04\x22\x01\x20\x02\x28\x02\x00\x22\x03\x36\x02\x00\x20\x03\x20\x01\x36\x02\x04\x41\x00\x21\x01\x20\x02\x41\x00\x36\x02\x00\x20\x02\x41\x00\x36\x02\x04\x20\x02\x28\x02\x08\x22\x04\x20\x02\x28\x02\x10\x20\x02\x41\x18\x6a\x22\x03\x20\x02\x41\x0c\x6a\x28\x02\x00\x11\x18\x00\x21\x05\x02\x40\x03\x40\x20\x01\x20\x02\x28\x02\x10\x4e\x0d\x01\x20\x04\x20\x03\x29\x03\x00\x10\xcd\x01\x20\x03\x41\x08\x6a\x21\x03\x20\x01\x41\x01\x6a\x21\x01\x0c\x00\x0b\x00\x0b\x20\x04\x20\x05\x10\xcd\x01\x20\x04\x28\x02\x10\x22\x01\x41\x10\x6a\x20\x02\x20\x01\x28\x02\x04\x11\x00\x00\x20\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x0b\x20\x04\x10\xfd\x09\x0b\x0b\xf7\x01\x02\x05\x7f\x02\x7e\x23\x00\x41\x10\x6b\x22\x00\x24\x00\x10\xaf\x01\x10\xb0\x01\x22\x01\x10\xb1\x01\x02\x40\x20\x01\x20\x01\x20\x01\x10\xb2\x01\x22\x05\x20\x01\x41\xee\xb6\x01\x10\xb3\x01\x20\x05\x41\x00\x10\xb4\x01\x20\x05\x41\x00\x41\x00\x10\xb5\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x28\x02\x10\x22\x02\x29\x03\x80\x01\x21\x05\x20\x02\x42\x80\x80\x80\x80\x20\x37\x03\x80\x01\x20\x01\x20\x05\x41\x84\x83\x02\x10\xb6\x01\x21\x06\x20\x01\x20\x05\x41\x94\xc4\x05\x10\xb6\x01\x21\x05\x20\x01\x20\x00\x41\x0c\x6a\x20\x06\x10\xb7\x01\x21\x02\x20\x01\x20\x00\x41\x08\x6a\x20\x05\x10\xb7\x01\x21\x03\x20\x00\x28\x02\x0c\x22\x04\x20\x00\x28\x02\x08\x6a\x41\x01\x6a\x10\x39\x20\x02\x20\x04\x10\x6a\x22\x02\x20\x00\x28\x02\x0c\x6a\x22\x04\x41\x0a\x3a\x00\x00\x20\x04\x41\x01\x6a\x20\x03\x20\x00\x28\x02\x08\x10\x6a\x1a\x20\x00\x28\x02\x0c\x20\x00\x28\x02\x08\x6a\x41\x01\x6a\xad\x20\x02\xad\x10\x00\x0b\x20\x01\x10\xb8\x01\x20\x00\x41\x10\x6a\x24\x00\x0b\xf7\x01\x02\x05\x7f\x02\x7e\x23\x00\x41\x10\x6b\x22\x00\x24\x00\x10\xaf\x01\x10\xb0\x01\x22\x01\x10\xb1\x01\x02\x40\x20\x01\x20\x01\x20\x01\x10\xb2\x01\x22\x05\x20\x01\x41\xdd\xb6\x01\x10\xb3\x01\x20\x05\x41\x00\x10\xb4\x01\x20\x05\x41\x00\x41\x00\x10\xb5\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x28\x02\x10\x22\x02\x29\x03\x80\x01\x21\x05\x20\x02\x42\x80\x80\x80\x80\x20\x37\x03\x80\x01\x20\x01\x20\x05\x41\x84\x83\x02\x10\xb6\x01\x21\x06\x20\x01\x20\x05\x41\x94\xc4\x05\x10\xb6\x01\x21\x05\x20\x01\x20\x00\x41\x0c\x6a\x20\x06\x10\xb7\x01\x21\x02\x20\x01\x20\x00\x41\x08\x6a\x20\x05\x10\xb7\x01\x21\x03\x20\x00\x28\x02\x0c\x22\x04\x20\x00\x28\x02\x08\x6a\x41\x01\x6a\x10\x39\x20\x02\x20\x04\x10\x6a\x22\x02\x20\x00\x28\x02\x0c\x6a\x22\x04\x41\x0a\x3a\x00\x00\x20\x04\x41\x01\x6a\x20\x03\x20\x00\x28\x02\x08\x10\x6a\x1a\x20\x00\x28\x02\x0c\x20\x00\x28\x02\x08\x6a\x41\x01\x6a\xad\x20\x02\xad\x10\x00\x0b\x20\x01\x10\xb8\x01\x20\x00\x41\x10\x6a\x24\x00\x0b\xf7\x01\x02\x05\x7f\x02\x7e\x23\x00\x41\x10\x6b\x22\x00\x24\x00\x10\xaf\x01\x10\xb0\x01\x22\x01\x10\xb1\x01\x02\x40\x20\x01\x20\x01\x20\x01\x10\xb2\x01\x22\x05\x20\x01\x41\xc9\xb6\x01\x10\xb3\x01\x20\x05\x41\x00\x10\xb4\x01\x20\x05\x41\x00\x41\x00\x10\xb5\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x28\x02\x10\x22\x02\x29\x03\x80\x01\x21\x05\x20\x02\x42\x80\x80\x80\x80\x20\x37\x03\x80\x01\x20\x01\x20\x05\x41\x84\x83\x02\x10\xb6\x01\x21\x06\x20\x01\x20\x05\x41\x94\xc4\x05\x10\xb6\x01\x21\x05\x20\x01\x20\x00\x41\x0c\x6a\x20\x06\x10\xb7\x01\x21\x02\x20\x01\x20\x00\x41\x08\x6a\x20\x05\x10\xb7\x01\x21\x03\x20\x00\x28\x02\x0c\x22\x04\x20\x00\x28\x02\x08\x6a\x41\x01\x6a\x10\x39\x20\x02\x20\x04\x10\x6a\x22\x02\x20\x00\x28\x02\x0c\x6a\x22\x04\x41\x0a\x3a\x00\x00\x20\x04\x41\x01\x6a\x20\x03\x20\x00\x28\x02\x08\x10\x6a\x1a\x20\x00\x28\x02\x0c\x20\x00\x28\x02\x08\x6a\x41\x01\x6a\xad\x20\x02\xad\x10\x00\x0b\x20\x01\x10\xb8\x01\x20\x00\x41\x10\x6a\x24\x00\x0b\xf7\x01\x02\x05\x7f\x02\x7e\x23\x00\x41\x10\x6b\x22\x00\x24\x00\x10\xaf\x01\x10\xb0\x01\x22\x01\x10\xb1\x01\x02\x40\x20\x01\x20\x01\x20\x01\x10\xb2\x01\x22\x05\x20\x01\x41\xe7\xac\x01\x10\xb3\x01\x20\x05\x41\x00\x10\xb4\x01\x20\x05\x41\x00\x41\x00\x10\xb5\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x28\x02\x10\x22\x02\x29\x03\x80\x01\x21\x05\x20\x02\x42\x80\x80\x80\x80\x20\x37\x03\x80\x01\x20\x01\x20\x05\x41\x84\x83\x02\x10\xb6\x01\x21\x06\x20\x01\x20\x05\x41\x94\xc4\x05\x10\xb6\x01\x21\x05\x20\x01\x20\x00\x41\x0c\x6a\x20\x06\x10\xb7\x01\x21\x02\x20\x01\x20\x00\x41\x08\x6a\x20\x05\x10\xb7\x01\x21\x03\x20\x00\x28\x02\x0c\x22\x04\x20\x00\x28\x02\x08\x6a\x41\x01\x6a\x10\x39\x20\x02\x20\x04\x10\x6a\x22\x02\x20\x00\x28\x02\x0c\x6a\x22\x04\x41\x0a\x3a\x00\x00\x20\x04\x41\x01\x6a\x20\x03\x20\x00\x28\x02\x08\x10\x6a\x1a\x20\x00\x28\x02\x0c\x20\x00\x28\x02\x08\x6a\x41\x01\x6a\xad\x20\x02\xad\x10\x00\x0b\x20\x01\x10\xb8\x01\x20\x00\x41\x10\x6a\x24\x00\x0b\x0b\x00\x20\x00\x20\x01\x41\x01\x10\xc6\x01\x0b\x08\x00\x42\x80\x80\x80\x80\x30\x0b\x9e\x01\x01\x01\x7f\x02\x40\x20\x00\x20\x06\x41\x0c\x10\xc6\x01\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x00\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x20\x06\xa7\x22\x07\x41\x2a\x6a\x20\x05\x3b\x01\x00\x20\x07\x41\x29\x6a\x20\x04\x3a\x00\x00\x20\x07\x41\x28\x6a\x20\x03\x3a\x00\x00\x20\x07\x41\x24\x6a\x20\x01\x36\x02\x00\x20\x07\x20\x00\x36\x02\x20\x20\x07\x20\x07\x2d\x00\x05\x41\xef\x01\x71\x20\x04\x41\x7e\x6a\x41\x04\x49\x41\x04\x74\x72\x3a\x00\x05\x20\x00\x20\x06\x20\x00\x20\x02\x41\xd2\xc7\x01\x20\x02\x1b\x10\xb3\x01\x22\x07\x20\x03\x10\xca\x03\x20\x00\x20\x07\x10\xe4\x02\x0b\x20\x06\x0b\x24\x01\x01\x7f\x02\x40\x20\x00\x42\x20\x88\xa7\x41\x75\x49\x0d\x00\x20\x00\xa7\x22\x01\x20\x01\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x0b\x20\x00\x0b\x11\x00\x20\x00\x20\x00\x28\x02\x28\x29\x03\x08\x41\x01\x10\xc6\x01\x0b\x97\x06\x02\x06\x7f\x02\x7e\x23\x00\x41\xe0\x00\x6b\x22\x04\x24\x00\x41\x00\x21\x05\x02\x40\x03\x40\x20\x05\x20\x03\x4e\x0d\x01\x20\x00\x20\x02\x28\x02\x00\x10\xaf\x04\x21\x06\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x41\x05\x6a\x22\x07\x2d\x00\x00\x22\x08\x41\x09\x4b\x0d\x00\x20\x02\x41\x04\x6a\x2d\x00\x00\x21\x09\x42\x80\x80\x80\x80\x30\x21\x0a\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x08\x0e\x0a\x01\x02\x02\x05\x07\x03\x04\x08\x05\x00\x01\x0b\x20\x00\x20\x02\x41\x08\x6a\x28\x02\x00\x10\xaf\x04\x21\x08\x20\x02\x41\x0c\x6a\x28\x02\x00\x41\x01\x6a\x22\x07\x41\x02\x4b\x0d\x05\x02\x40\x02\x40\x02\x40\x02\x40\x20\x07\x0e\x03\x02\x00\x01\x02\x0b\x20\x00\x20\x00\x29\x03\xc0\x01\x22\x0a\x20\x08\x20\x0a\x41\x00\x10\xb4\x01\x21\x0a\x0c\x02\x0b\x20\x00\x20\x00\x28\x02\x28\x29\x03\x10\x22\x0a\x20\x08\x20\x0a\x41\x00\x10\xb4\x01\x21\x0a\x0c\x01\x0b\x20\x00\x20\x01\x20\x08\x20\x01\x41\x00\x10\xb4\x01\x21\x0a\x0b\x20\x00\x20\x08\x10\xe4\x02\x02\x40\x20\x06\x41\xd0\x01\x47\x0d\x00\x41\x01\x21\x09\x0c\x08\x0b\x20\x06\x41\xd9\x01\x47\x0d\x07\x41\x00\x21\x09\x0c\x07\x0b\x02\x40\x02\x40\x20\x06\x41\xd0\x01\x47\x0d\x00\x41\x01\x21\x09\x0c\x01\x0b\x20\x06\x41\xd9\x01\x47\x0d\x00\x41\x00\x21\x09\x0b\x20\x00\x20\x01\x20\x06\x41\x02\x20\x02\x20\x09\x10\xcb\x03\x1a\x0c\x07\x0b\x42\x80\x80\x80\x80\x30\x21\x0a\x42\x80\x80\x80\x80\x30\x21\x0b\x02\x40\x20\x02\x41\x08\x6a\x22\x08\x28\x02\x00\x45\x0d\x00\x20\x04\x20\x02\x28\x02\x00\x36\x02\x10\x20\x04\x41\x20\x6a\x41\xc0\x00\x41\x88\xd8\x01\x20\x04\x41\x10\x6a\x10\x5f\x1a\x20\x00\x20\x08\x28\x02\x00\x20\x04\x41\x20\x6a\x41\x00\x41\x0a\x41\x08\x20\x07\x2d\x00\x00\x41\x02\x46\x1b\x20\x02\x41\x06\x6a\x2e\x01\x00\x10\xd2\x01\x21\x0b\x0b\x02\x40\x20\x02\x41\x0c\x6a\x22\x08\x28\x02\x00\x45\x0d\x00\x20\x04\x20\x02\x28\x02\x00\x36\x02\x00\x20\x04\x41\x20\x6a\x41\xc0\x00\x41\x8f\xd8\x01\x20\x04\x10\x5f\x1a\x20\x00\x20\x08\x28\x02\x00\x20\x04\x41\x20\x6a\x41\x01\x41\x0b\x41\x09\x20\x07\x2d\x00\x00\x41\x02\x46\x1b\x20\x02\x41\x06\x6a\x2e\x01\x00\x10\xd2\x01\x21\x0a\x0b\x20\x00\x20\x01\x20\x06\x42\x80\x80\x80\x80\x30\x20\x0b\x20\x0a\x20\x09\x41\x80\x3a\x72\x10\xcc\x01\x1a\x20\x00\x20\x0b\x10\xcd\x01\x20\x00\x20\x0a\x10\xcd\x01\x0c\x06\x0b\x02\x40\x20\x02\x41\x08\x6a\x29\x03\x00\x22\x0a\x42\x80\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x0a\x42\xff\xff\xff\xff\x0f\x83\x21\x0a\x0c\x05\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x0a\xb9\xbd\x22\x0a\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x0a\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x0a\x0c\x04\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x02\x41\x08\x6a\x29\x03\x00\x22\x0a\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x0a\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x0a\x0c\x03\x0b\x20\x00\x20\x01\x20\x06\x41\x02\x20\x02\x20\x09\x10\xcb\x03\x1a\x0c\x03\x0b\x10\x40\x00\x0b\x20\x02\x41\x08\x6a\x35\x02\x00\x21\x0a\x0b\x20\x00\x20\x01\x20\x06\x20\x0a\x20\x09\x10\xc4\x01\x1a\x0b\x20\x00\x20\x06\x10\xe4\x02\x20\x02\x41\x10\x6a\x21\x02\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x04\x41\xe0\x00\x6a\x24\x00\x0b\x2c\x01\x01\x7e\x02\x40\x20\x00\x20\x01\x10\xb3\x01\x22\x01\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x00\x20\x01\x10\xc5\x01\x21\x02\x20\x00\x20\x01\x10\xe4\x02\x20\x02\x0b\x2b\x00\x20\x00\x20\x01\x20\x02\x20\x03\x42\x80\x80\x80\x80\x30\x42\x80\x80\x80\x80\x30\x20\x04\x41\x80\xce\x00\x72\x10\xcc\x01\x21\x02\x20\x00\x20\x03\x10\xcd\x01\x20\x02\x0b\x0b\x00\x20\x00\x20\x01\x41\x01\x10\xe5\x02\x0b\xaa\x01\x01\x03\x7f\x20\x00\x28\x02\x10\x22\x03\x28\x02\xd4\x01\x41\x00\x20\x01\xa7\x20\x01\x42\x80\x80\x80\x80\x70\x54\x1b\x22\x04\x41\x81\x80\xdc\xf1\x79\x6c\x41\x81\x80\xdc\xf1\x79\x6a\x22\x05\x41\x20\x20\x03\x28\x02\xc8\x01\x6b\x76\x41\x02\x74\x6a\x21\x03\x02\x40\x02\x40\x02\x40\x03\x40\x20\x03\x28\x02\x00\x22\x03\x45\x0d\x01\x02\x40\x20\x03\x28\x02\x14\x20\x05\x47\x0d\x00\x20\x03\x28\x02\x2c\x20\x04\x47\x0d\x00\x20\x03\x28\x02\x20\x45\x0d\x03\x0b\x20\x03\x41\x28\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x20\x04\x41\x02\x10\xc7\x01\x22\x03\x0d\x01\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x03\x20\x03\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x0b\x20\x00\x20\x03\x20\x02\x10\xca\x02\x0b\xb3\x03\x01\x0b\x7f\x02\x40\x20\x00\x28\x02\x10\x22\x03\x28\x02\xd0\x01\x41\x01\x74\x41\x02\x6a\x20\x03\x28\x02\xcc\x01\x4c\x0d\x00\x20\x03\x41\x10\x6a\x22\x04\x41\x01\x20\x03\x28\x02\xc8\x01\x22\x05\x41\x01\x6a\x22\x06\x74\x22\x07\x41\x02\x74\x22\x08\x20\x03\x28\x02\x00\x11\x03\x00\x22\x09\x45\x0d\x00\x41\x00\x21\x0a\x20\x09\x41\x00\x20\x08\x10\x74\x21\x0b\x41\x1f\x20\x05\x6b\x21\x0c\x20\x03\x28\x02\xcc\x01\x21\x0d\x02\x40\x03\x40\x20\x0a\x20\x0d\x4e\x0d\x01\x20\x03\x28\x02\xd4\x01\x20\x0a\x41\x02\x74\x6a\x28\x02\x00\x21\x05\x02\x40\x03\x40\x20\x05\x45\x0d\x01\x20\x05\x28\x02\x28\x21\x08\x20\x05\x20\x0b\x20\x05\x28\x02\x14\x20\x0c\x76\x41\x02\x74\x6a\x22\x09\x28\x02\x00\x36\x02\x28\x20\x09\x20\x05\x36\x02\x00\x20\x08\x21\x05\x0c\x00\x0b\x00\x0b\x20\x0a\x41\x01\x6a\x21\x0a\x0c\x00\x0b\x00\x0b\x20\x04\x20\x03\x28\x02\xd4\x01\x20\x03\x28\x02\x04\x11\x00\x00\x20\x03\x20\x0b\x36\x02\xd4\x01\x20\x03\x20\x07\x36\x02\xcc\x01\x20\x03\x20\x06\x36\x02\xc8\x01\x0b\x02\x40\x20\x00\x20\x02\x41\x03\x74\x41\xc0\x00\x6a\x10\xc0\x02\x22\x05\x0d\x00\x41\x00\x0f\x0b\x20\x05\x41\x02\x3a\x00\x14\x20\x05\x20\x03\x28\x02\x50\x22\x08\x36\x02\x18\x20\x08\x20\x05\x41\x18\x6a\x22\x09\x36\x02\x04\x20\x05\x41\x01\x36\x02\x10\x20\x03\x20\x09\x36\x02\x50\x20\x05\x20\x03\x41\xd0\x00\x6a\x36\x02\x1c\x20\x05\x41\x10\x6a\x21\x08\x02\x40\x20\x01\x45\x0d\x00\x20\x01\xad\x42\x80\x80\x80\x80\x70\x84\x10\xc0\x01\x1a\x0b\x20\x05\x42\x00\x37\x02\x00\x20\x05\x41\x08\x6a\x42\x00\x37\x02\x00\x20\x05\x20\x01\x36\x02\x3c\x20\x05\x42\x00\x37\x02\x30\x20\x05\x20\x02\x36\x02\x2c\x20\x05\x41\x03\x36\x02\x28\x20\x05\x41\x01\x3b\x01\x20\x20\x05\x20\x01\x41\x81\x80\xdc\xf1\x79\x6c\x41\x81\x80\xdc\xf1\x79\x6a\x36\x02\x24\x20\x00\x28\x02\x10\x20\x08\x10\xce\x03\x20\x08\x0b\xb6\x02\x01\x04\x7f\x20\x00\x28\x02\x10\x21\x05\x02\x40\x02\x40\x20\x01\x28\x02\x00\x22\x06\x2d\x00\x10\x0d\x00\x41\x00\x21\x07\x0c\x01\x0b\x20\x05\x20\x06\x10\xe0\x02\x20\x06\x28\x02\x14\x20\x03\x6a\x41\x81\x80\xdc\xf1\x79\x6c\x20\x04\x6a\x41\x81\x80\xdc\xf1\x79\x6c\x21\x07\x0b\x02\x40\x02\x40\x20\x06\x28\x02\x20\x22\x08\x20\x06\x28\x02\x1c\x48\x0d\x00\x02\x40\x20\x00\x20\x01\x20\x02\x20\x08\x41\x01\x6a\x10\x90\x04\x45\x0d\x00\x41\x7f\x21\x00\x20\x06\x2d\x00\x10\x45\x0d\x02\x20\x05\x20\x06\x10\xce\x03\x41\x7f\x0f\x0b\x20\x01\x28\x02\x00\x21\x06\x0b\x02\x40\x20\x06\x2d\x00\x10\x45\x0d\x00\x20\x06\x20\x07\x36\x02\x14\x20\x05\x20\x06\x10\xce\x03\x0b\x20\x06\x20\x06\x28\x02\x20\x22\x05\x41\x01\x6a\x36\x02\x20\x20\x00\x20\x03\x10\xd9\x03\x21\x00\x20\x06\x20\x05\x41\x03\x74\x6a\x22\x05\x41\x30\x6a\x22\x03\x20\x03\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x20\x04\x41\x1a\x74\x72\x36\x02\x00\x20\x06\x20\x06\x2d\x00\x11\x20\x00\x41\x1f\x76\x72\x3a\x00\x11\x20\x05\x41\x34\x6a\x20\x00\x36\x02\x00\x20\x03\x20\x03\x28\x02\x00\x41\x80\x80\x80\x60\x71\x20\x06\x20\x00\x20\x06\x28\x02\x18\x71\x41\x7f\x73\x41\x02\x74\x6a\x22\x00\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x72\x36\x02\x00\x20\x00\x20\x06\x28\x02\x20\x36\x02\x00\x41\x00\x21\x00\x0b\x20\x00\x0b\x14\x00\x20\x00\x41\xfd\xb9\x02\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x0b\x11\x00\x20\x00\x20\x01\x20\x02\x20\x03\x41\x00\x41\x00\x10\xd2\x01\x0b\x46\x01\x01\x7f\x02\x40\x02\x40\x20\x01\x10\xc4\x02\x22\x04\x45\x0d\x00\x20\x04\x2d\x00\x10\x41\x01\x71\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x01\x20\x04\x2d\x00\x11\x41\x01\x71\x0d\x01\x0b\x20\x00\x41\xfd\xb9\x02\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x01\x0b\x86\x10\x02\x0c\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x07\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x0c\x01\x0b\x20\x06\x41\x80\x30\x71\x22\x08\x45\x20\x06\x20\x06\x41\x08\x76\x22\x09\x71\x20\x09\x41\x7f\x73\x72\x41\x07\x71\x22\x0a\x41\x07\x46\x71\x21\x0b\x20\x06\x41\x80\xc0\x00\x71\x21\x0c\x20\x02\x41\xff\xff\xff\xff\x07\x71\x21\x0d\x20\x01\xa7\x21\x0e\x03\x40\x20\x0e\x28\x02\x10\x22\x0f\x20\x0f\x28\x02\x18\x20\x02\x71\x41\x7f\x73\x41\x02\x74\x6a\x28\x02\x00\x21\x10\x02\x40\x03\x40\x20\x10\x45\x0d\x01\x20\x0f\x20\x10\x41\x7f\x6a\x41\x03\x74\x22\x11\x6a\x22\x12\x41\x30\x6a\x21\x10\x02\x40\x20\x12\x41\x34\x6a\x28\x02\x00\x20\x02\x46\x0d\x00\x20\x10\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x21\x10\x0c\x01\x0b\x0b\x20\x0e\x28\x02\x14\x20\x11\x6a\x21\x12\x20\x07\x20\x10\x36\x02\x0c\x20\x10\x28\x02\x00\x21\x0f\x02\x40\x20\x0c\x45\x0d\x00\x20\x0f\x41\x80\x80\x80\x80\x02\x71\x45\x0d\x00\x20\x00\x20\x07\x41\x08\x6a\x20\x03\x10\xc0\x01\x41\x00\x10\xcf\x03\x0d\x03\x02\x40\x02\x40\x20\x07\x28\x02\x08\x22\x10\x41\x00\x48\x0d\x00\x20\x10\xad\x21\x03\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x10\xb8\xbd\x22\x03\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x03\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x03\x0b\x20\x0e\x28\x02\x10\x22\x0f\x20\x0f\x28\x02\x18\x20\x02\x71\x41\x7f\x73\x41\x02\x74\x6a\x28\x02\x00\x21\x10\x02\x40\x02\x40\x03\x40\x20\x10\x45\x0d\x01\x20\x0f\x20\x10\x41\x7f\x6a\x41\x03\x74\x22\x11\x6a\x22\x12\x41\x30\x6a\x21\x10\x20\x12\x41\x34\x6a\x28\x02\x00\x20\x02\x46\x0d\x02\x20\x10\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x21\x10\x0c\x00\x0b\x00\x0b\x41\x91\xe5\x01\x41\xae\xb7\x01\x41\xee\xc6\x00\x41\x9d\xe5\x01\x10\x4a\x00\x0b\x20\x0e\x28\x02\x14\x20\x11\x6a\x21\x12\x20\x07\x20\x10\x36\x02\x0c\x20\x10\x28\x02\x00\x21\x0f\x0b\x20\x0f\x41\x1a\x76\x22\x11\x20\x06\x10\xd0\x03\x45\x0d\x0c\x02\x40\x20\x11\x41\x30\x71\x22\x11\x41\x30\x47\x0d\x00\x20\x00\x20\x0e\x20\x02\x20\x12\x20\x10\x10\xf5\x02\x45\x0d\x02\x0c\x03\x0b\x20\x06\x41\x80\xf4\x00\x71\x45\x0d\x0b\x02\x40\x20\x08\x45\x0d\x00\x20\x04\xa7\x41\x00\x20\x00\x20\x04\x10\xf0\x02\x1b\x21\x02\x20\x05\xa7\x41\x00\x20\x00\x20\x05\x10\xf0\x02\x1b\x21\x11\x02\x40\x02\x40\x20\x0f\x41\x80\x80\x80\x80\x7c\x71\x41\x80\x80\x80\x80\x04\x46\x0d\x00\x41\x7f\x21\x10\x20\x00\x20\x0e\x20\x07\x41\x0c\x6a\x10\xd1\x03\x0d\x10\x02\x40\x02\x40\x20\x07\x28\x02\x0c\x28\x02\x00\x41\x80\x80\x80\x80\x7c\x71\x41\x80\x80\x80\x80\x78\x47\x0d\x00\x20\x00\x28\x02\x10\x20\x12\x28\x02\x00\x10\xde\x02\x0c\x01\x0b\x20\x00\x20\x12\x29\x03\x00\x10\xcd\x01\x0b\x20\x07\x28\x02\x0c\x22\x10\x20\x10\x28\x02\x00\x41\xff\xff\xff\xbf\x01\x71\x41\x80\x80\x80\x80\x04\x72\x36\x02\x00\x20\x12\x42\x00\x37\x03\x00\x0c\x01\x0b\x20\x0f\x41\x80\x80\x80\x20\x71\x0d\x00\x02\x40\x20\x06\x41\x80\x10\x71\x45\x0d\x00\x20\x02\x20\x12\x28\x02\x00\x47\x0d\x0f\x0b\x20\x06\x41\x80\x20\x71\x45\x0d\x00\x20\x11\x20\x12\x28\x02\x04\x47\x0d\x0e\x0b\x02\x40\x20\x06\x41\x80\x10\x71\x45\x0d\x00\x02\x40\x20\x12\x28\x02\x00\x22\x10\x45\x0d\x00\x20\x00\x20\x10\xad\x42\x80\x80\x80\x80\x70\x84\x10\xcd\x01\x0b\x02\x40\x20\x02\x45\x0d\x00\x20\x04\x10\xc0\x01\x1a\x0b\x20\x12\x20\x02\x36\x02\x00\x0b\x20\x06\x41\x80\x20\x71\x45\x0d\x0c\x02\x40\x20\x12\x28\x02\x04\x22\x10\x45\x0d\x00\x20\x00\x20\x10\xad\x42\x80\x80\x80\x80\x70\x84\x10\xcd\x01\x0b\x02\x40\x20\x11\x45\x0d\x00\x20\x05\x10\xc0\x01\x1a\x0b\x20\x12\x20\x11\x36\x02\x04\x0c\x0c\x0b\x20\x11\x41\x20\x46\x0d\x0a\x02\x40\x20\x11\x41\x10\x47\x0d\x00\x41\x7f\x21\x10\x20\x00\x20\x0e\x20\x07\x41\x0c\x6a\x10\xd1\x03\x0d\x0e\x02\x40\x20\x12\x28\x02\x00\x22\x10\x45\x0d\x00\x20\x00\x20\x10\xad\x42\x80\x80\x80\x80\x70\x84\x10\xcd\x01\x0b\x02\x40\x20\x12\x28\x02\x04\x22\x10\x45\x0d\x00\x20\x00\x20\x10\xad\x42\x80\x80\x80\x80\x70\x84\x10\xcd\x01\x0b\x20\x07\x28\x02\x0c\x22\x10\x20\x10\x28\x02\x00\x41\xff\xff\xff\xbf\x03\x71\x36\x02\x00\x20\x12\x42\x80\x80\x80\x80\x30\x37\x03\x00\x20\x07\x28\x02\x0c\x28\x02\x00\x21\x0f\x0c\x0b\x0b\x20\x0c\x45\x0d\x0a\x20\x0f\x41\x80\x80\x80\xe0\x00\x71\x0d\x0a\x41\x01\x21\x10\x20\x00\x20\x03\x20\x12\x29\x03\x00\x10\x8d\x03\x45\x0d\x0c\x0c\x0d\x0b\x20\x07\x41\x00\x36\x02\x0c\x20\x0e\x2d\x00\x05\x41\x08\x71\x45\x0d\x04\x20\x0e\x2f\x01\x06\x22\x10\x41\x02\x47\x0d\x03\x20\x02\x41\x7f\x4a\x0d\x04\x20\x0d\x20\x0e\x28\x02\x28\x4f\x0d\x04\x20\x0b\x0d\x02\x20\x00\x20\x0e\x10\xd2\x03\x45\x0d\x00\x0b\x0b\x41\x7f\x21\x10\x0c\x0a\x0b\x41\x01\x21\x10\x20\x0c\x45\x0d\x09\x20\x00\x20\x0e\x41\x24\x6a\x28\x02\x00\x20\x0d\x41\x03\x74\x6a\x20\x03\x10\xc0\x01\x10\x98\x03\x0c\x09\x0b\x20\x10\x41\x6b\x6a\x41\xff\xff\x03\x71\x41\x0a\x4b\x0d\x00\x02\x40\x20\x02\x41\x00\x48\x0d\x00\x20\x00\x20\x02\x10\xd3\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x22\x13\x42\x80\x80\x80\x80\x30\x51\x0d\x01\x41\x7f\x21\x10\x20\x13\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x09\x41\x7f\x21\x10\x02\x40\x20\x00\x20\x01\x10\xd4\x03\x22\x02\x41\x7f\x4a\x0d\x00\x20\x00\x20\x01\x10\xcd\x01\x0c\x0a\x0b\x02\x40\x20\x02\x0d\x00\x20\x00\x20\x01\x10\xcd\x01\x20\x00\x20\x06\x41\xcc\xe5\x01\x41\x00\x10\xd5\x03\x21\x10\x0c\x0a\x0b\x41\x07\x20\x01\x42\x20\x88\xa7\x22\x10\x20\x10\x41\x0b\x6a\x41\x11\x4b\x1b\x22\x10\x41\x0b\x6a\x22\x02\x41\x02\x4d\x0d\x02\x02\x40\x20\x10\x41\x07\x46\x0d\x00\x20\x10\x0d\x04\x20\x01\xa7\x41\x1f\x76\x21\x10\x0c\x05\x0b\x20\x01\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\x42\x3f\x88\xa7\x21\x10\x0c\x04\x0b\x20\x0d\x20\x0e\x28\x02\x20\x28\x02\x14\x20\x0e\x2f\x01\x06\x41\xf6\xe5\x01\x6a\x2d\x00\x00\x76\x4f\x0d\x04\x02\x40\x02\x40\x20\x08\x0d\x00\x20\x0a\x41\x07\x46\x0d\x01\x0b\x20\x00\x20\x06\x41\xb8\xe6\x01\x41\x00\x10\xd5\x03\x21\x10\x0c\x09\x0b\x41\x01\x21\x10\x20\x0c\x45\x0d\x08\x20\x00\x20\x01\x20\x0d\xad\x20\x03\x10\xc0\x01\x20\x06\x10\xba\x03\x21\x10\x0c\x08\x0b\x20\x00\x20\x0e\x20\x02\x20\x03\x20\x04\x20\x05\x20\x06\x10\xd6\x03\x21\x10\x0c\x07\x0b\x02\x40\x02\x40\x02\x40\x20\x02\x0e\x03\x00\x02\x01\x00\x0b\x20\x01\xa7\x41\x08\x6a\x28\x02\x00\x21\x10\x0c\x03\x0b\x20\x01\xa7\x41\x08\x6a\x28\x02\x00\x21\x10\x0c\x02\x0b\x20\x01\xa7\x22\x10\x41\x08\x6a\x28\x02\x00\x45\x0d\x00\x20\x10\x41\x0c\x6a\x28\x02\x00\x41\x80\x80\x80\x80\x78\x47\x21\x10\x0c\x01\x0b\x20\x00\x20\x01\x10\xcd\x01\x0c\x01\x0b\x20\x00\x20\x01\x10\xcd\x01\x20\x10\x45\x0d\x00\x20\x00\x20\x06\x41\xed\xe5\x01\x41\x00\x10\xd5\x03\x21\x10\x0c\x04\x0b\x20\x00\x20\x06\x41\x96\xe6\x01\x41\x00\x10\xd5\x03\x21\x10\x0c\x03\x0b\x02\x40\x20\x0f\x41\x80\x80\x80\x80\x7c\x71\x41\x80\x80\x80\x80\x78\x47\x0d\x00\x02\x40\x20\x0c\x45\x0d\x00\x02\x40\x20\x0e\x2f\x01\x06\x41\x0b\x47\x0d\x00\x20\x00\x20\x03\x20\x12\x28\x02\x00\x28\x02\x10\x29\x03\x00\x10\x8d\x03\x45\x0d\x04\x0b\x20\x00\x20\x12\x28\x02\x00\x28\x02\x10\x20\x03\x10\xc0\x01\x10\x98\x03\x0b\x20\x06\x41\x82\x04\x71\x41\x80\x04\x47\x0d\x01\x41\x7f\x21\x10\x20\x00\x20\x0e\x20\x07\x41\x0c\x6a\x10\xd1\x03\x0d\x03\x20\x12\x28\x02\x00\x28\x02\x10\x29\x03\x00\x10\xc0\x01\x21\x03\x20\x00\x28\x02\x10\x20\x12\x28\x02\x00\x10\xde\x02\x20\x12\x20\x03\x37\x03\x00\x20\x07\x28\x02\x0c\x22\x10\x20\x10\x28\x02\x00\x41\xff\xff\xff\xbf\x03\x71\x36\x02\x00\x0c\x01\x0b\x02\x40\x20\x0f\x41\x80\x80\x80\x80\x02\x71\x45\x0d\x00\x41\x01\x21\x02\x02\x40\x20\x0c\x45\x0d\x00\x20\x00\x20\x0e\x20\x03\x10\xc0\x01\x20\x06\x10\xd7\x03\x21\x02\x0b\x02\x40\x20\x06\x41\x82\x04\x71\x41\x80\x04\x47\x0d\x00\x20\x07\x20\x0e\x28\x02\x10\x22\x0f\x41\x30\x6a\x36\x02\x0c\x41\x7f\x21\x10\x20\x00\x20\x0e\x20\x07\x41\x0c\x6a\x20\x0f\x28\x02\x30\x41\x1a\x76\x41\x3d\x71\x10\xd8\x03\x0d\x04\x0b\x20\x02\x21\x10\x0c\x03\x0b\x02\x40\x20\x0c\x45\x0d\x00\x20\x00\x20\x12\x29\x03\x00\x10\xcd\x01\x20\x12\x20\x03\x10\xc0\x01\x37\x03\x00\x0b\x20\x06\x41\x80\x04\x71\x45\x0d\x00\x41\x7f\x21\x10\x20\x00\x20\x0e\x20\x07\x41\x0c\x6a\x20\x07\x28\x02\x0c\x28\x02\x00\x41\x1a\x76\x41\x3d\x71\x20\x06\x41\x02\x71\x72\x10\xd8\x03\x0d\x02\x0b\x41\x7f\x41\x01\x20\x00\x20\x0e\x20\x07\x41\x0c\x6a\x20\x07\x28\x02\x0c\x28\x02\x00\x41\x1a\x76\x20\x09\x41\x05\x71\x22\x10\x41\x7f\x73\x71\x20\x10\x20\x06\x71\x72\x10\xd8\x03\x1b\x21\x10\x0c\x01\x0b\x20\x00\x20\x06\x41\xaf\xe5\x01\x41\x00\x10\xd5\x03\x21\x10\x0b\x20\x07\x41\x10\x6a\x24\x00\x20\x10\x0b\x38\x01\x01\x7f\x02\x40\x20\x01\x42\x20\x88\xa7\x41\x75\x49\x0d\x00\x20\x01\xa7\x22\x02\x20\x02\x28\x02\x00\x22\x02\x41\x7f\x6a\x36\x02\x00\x20\x02\x41\x01\x4a\x0d\x00\x20\x00\x41\x10\x6a\x28\x02\x00\x20\x01\x10\xd3\x02\x0b\x0b\xb4\x02\x02\x08\x7f\x02\x7e\x23\x00\x41\x30\x6b\x22\x05\x24\x00\x02\x40\x02\x40\x20\x03\x29\x03\x00\x22\x0d\x42\xff\xff\xff\xff\x6f\x58\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x0e\x20\x00\x20\x0d\x10\xa4\x05\x22\x03\x41\x00\x48\x0d\x01\x02\x40\x20\x03\x0d\x00\x20\x00\x41\xf8\x9f\x02\x41\x00\x10\xb2\x02\x0c\x02\x0b\x20\x00\x20\x05\x41\x2c\x6a\x20\x05\x41\x28\x6a\x20\x0d\xa7\x22\x06\x41\x03\x10\x9d\x03\x0d\x01\x20\x05\x28\x02\x2c\x22\x07\x41\x04\x6a\x21\x08\x20\x05\x28\x02\x28\x22\x09\x21\x03\x02\x40\x02\x40\x03\x40\x20\x03\x45\x0d\x01\x20\x08\x28\x02\x00\x21\x0a\x41\x80\x82\x01\x21\x0b\x02\x40\x20\x04\x45\x0d\x00\x20\x00\x20\x05\x41\x08\x6a\x20\x06\x20\x0a\x10\xea\x03\x22\x0c\x41\x00\x48\x0d\x03\x20\x0c\x45\x0d\x00\x20\x05\x28\x02\x08\x21\x0b\x20\x00\x20\x05\x41\x08\x6a\x10\x81\x04\x41\x80\x86\x01\x41\x80\x82\x01\x20\x0b\x41\x02\x71\x1b\x21\x0b\x0b\x20\x00\x20\x0d\x20\x0a\x42\x80\x80\x80\x80\x30\x42\x80\x80\x80\x80\x30\x42\x80\x80\x80\x80\x30\x20\x0b\x10\xcc\x01\x41\x00\x48\x0d\x02\x20\x03\x41\x7f\x6a\x21\x03\x20\x08\x41\x08\x6a\x21\x08\x0c\x00\x0b\x00\x0b\x20\x00\x20\x07\x20\x09\x10\x9e\x03\x0c\x01\x0b\x20\x00\x20\x07\x20\x09\x10\x9e\x03\x0c\x01\x0b\x20\x0d\x10\xc0\x01\x21\x0e\x0b\x20\x05\x41\x30\x6a\x24\x00\x20\x0e\x0b\x62\x00\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x01\xa7\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x28\x02\x08\x46\x0d\x00\x20\x00\x20\x01\x41\x01\x10\xda\x03\x0f\x0b\x02\x40\x20\x03\x29\x03\x00\x22\x01\x42\x20\x88\xa7\x22\x03\x41\x7e\x71\x41\x02\x47\x0d\x00\x20\x03\x41\x0b\x6a\x41\x11\x4b\x0d\x00\x20\x00\x10\xc1\x01\x0f\x0b\x20\x00\x20\x01\x10\xfe\x02\x0b\x20\x01\x01\x7e\x20\x00\x20\x00\x20\x02\x20\x01\x20\x03\x41\x04\x41\x00\x10\xd2\x01\x22\x05\x20\x01\x20\x04\x10\xd3\x01\x20\x05\x0b\xa9\x04\x02\x04\x7f\x02\x7e\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x20\x00\x20\x05\x41\x08\x6a\x41\x00\x10\xb3\x04\x1a\x20\x05\x41\x08\x6a\x41\x28\x10\xb4\x04\x1a\x02\x40\x20\x04\x41\x01\x72\x41\x03\x47\x0d\x00\x20\x05\x41\x08\x6a\x41\x96\xb6\x02\x10\xa5\x05\x1a\x0b\x20\x05\x41\x08\x6a\x41\x9d\xb6\x02\x10\xa5\x05\x1a\x02\x40\x20\x04\x41\x02\x72\x41\x03\x47\x0d\x00\x20\x05\x41\x08\x6a\x41\x2a\x10\xb4\x04\x1a\x0b\x20\x05\x41\x08\x6a\x41\xa6\xb6\x02\x10\xa5\x05\x1a\x20\x02\x41\x7f\x6a\x21\x06\x41\x00\x21\x07\x20\x03\x21\x08\x02\x40\x02\x40\x02\x40\x02\x40\x03\x40\x20\x07\x20\x06\x4e\x0d\x01\x02\x40\x20\x07\x45\x0d\x00\x20\x05\x41\x08\x6a\x41\x2c\x10\xb4\x04\x1a\x0b\x20\x07\x41\x01\x6a\x21\x07\x20\x08\x29\x03\x00\x21\x09\x20\x08\x41\x08\x6a\x21\x08\x20\x05\x41\x08\x6a\x20\x09\x10\xa6\x05\x45\x0d\x00\x0c\x02\x0b\x00\x0b\x20\x05\x41\x08\x6a\x41\xb2\xb6\x02\x10\xa5\x05\x1a\x02\x40\x20\x02\x41\x01\x48\x0d\x00\x20\x05\x41\x08\x6a\x20\x03\x20\x06\x41\x03\x74\x6a\x29\x03\x00\x10\xa6\x05\x0d\x01\x0b\x20\x05\x41\x08\x6a\x41\xb8\xb6\x02\x10\xa5\x05\x1a\x42\x80\x80\x80\x80\x30\x21\x09\x20\x05\x41\x08\x6a\x10\xf6\x03\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x00\x29\x03\xc0\x01\x20\x0a\x41\x03\x41\x7f\x10\x8e\x03\x21\x09\x20\x00\x20\x0a\x10\xcd\x01\x20\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x02\x20\x00\x20\x01\x41\x3b\x20\x01\x41\x00\x10\xb4\x01\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x02\x40\x20\x0a\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x20\x0a\x10\xcd\x01\x20\x00\x20\x01\x10\xdd\x04\x22\x07\x45\x0d\x02\x20\x07\x28\x02\x28\x20\x04\x41\x01\x74\x41\xac\xe7\x01\x6a\x2f\x01\x00\x41\x03\x74\x6a\x29\x03\x00\x10\xc0\x01\x21\x0a\x0b\x20\x00\x20\x09\x20\x0a\x41\x01\x10\xc2\x03\x21\x07\x20\x00\x20\x0a\x10\xcd\x01\x20\x07\x41\x00\x4e\x0d\x02\x0c\x01\x0b\x20\x05\x28\x02\x08\x28\x02\x10\x22\x07\x41\x10\x6a\x20\x05\x28\x02\x0c\x20\x07\x28\x02\x04\x11\x00\x00\x20\x05\x41\x00\x36\x02\x0c\x42\x80\x80\x80\x80\x30\x21\x09\x0b\x20\x00\x20\x09\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x09\x0b\x20\x05\x41\x20\x6a\x24\x00\x20\x09\x0b\x16\x00\x20\x00\x20\x01\x20\x02\x20\x03\x20\x04\x20\x05\x20\x00\x29\x03\x30\x10\xbf\x01\x0b\x29\x00\x20\x00\x20\x00\x29\x03\xc0\x01\x20\x02\x20\x01\x10\xc0\x01\x22\x01\x41\x03\x10\xd6\x01\x1a\x20\x00\x20\x01\x20\x03\x10\xec\x01\x20\x00\x20\x01\x10\xcd\x01\x0b\xeb\x04\x02\x02\x7f\x06\x7e\x23\x00\x41\x10\x6b\x22\x05\x24\x00\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x29\x03\x08\x21\x01\x0b\x02\x40\x02\x40\x20\x00\x20\x01\x41\x3b\x20\x01\x41\x00\x10\xb4\x01\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x07\x21\x01\x0c\x01\x0b\x02\x40\x02\x40\x20\x07\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x20\x07\x10\xcd\x01\x20\x00\x20\x01\x10\xdd\x04\x22\x06\x45\x0d\x01\x02\x40\x02\x40\x20\x04\x41\x7f\x4a\x0d\x00\x20\x06\x28\x02\x28\x41\x18\x6a\x21\x06\x0c\x01\x0b\x20\x06\x20\x04\x41\x03\x74\x6a\x41\xd8\x00\x6a\x21\x06\x0b\x20\x06\x29\x03\x00\x10\xc0\x01\x21\x07\x0b\x20\x00\x20\x07\x41\x03\x10\xc6\x01\x21\x01\x20\x00\x20\x07\x10\xcd\x01\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x02\x40\x02\x40\x20\x03\x20\x04\x41\x07\x46\x41\x03\x74\x6a\x29\x03\x00\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x07\x10\xe6\x02\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x01\x41\x33\x20\x07\x41\x03\x10\xc4\x01\x1a\x0b\x02\x40\x20\x04\x41\x07\x47\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x42\x80\x80\x80\x80\x30\x21\x09\x02\x40\x02\x40\x02\x40\x20\x00\x20\x03\x29\x03\x00\x41\x00\x10\xb3\x03\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x0a\x0c\x01\x0b\x20\x00\x20\x07\x41\xea\x00\x20\x07\x41\x00\x10\xb4\x01\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x10\x85\x03\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x42\x00\x21\x0b\x02\x40\x03\x40\x20\x00\x20\x07\x20\x0a\x20\x05\x41\x0c\x6a\x10\xb7\x03\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x02\x40\x20\x05\x28\x02\x0c\x45\x0d\x00\x20\x09\x21\x08\x0c\x04\x0b\x20\x00\x20\x09\x20\x0b\x20\x0c\x10\xa7\x05\x21\x04\x20\x0b\x42\x01\x7c\x21\x0b\x20\x04\x41\x7f\x4a\x0d\x00\x0b\x0b\x20\x00\x20\x07\x41\x01\x10\xfc\x02\x1a\x0b\x20\x00\x20\x09\x10\xcd\x01\x0b\x20\x00\x20\x0a\x10\xcd\x01\x20\x00\x20\x07\x10\xcd\x01\x20\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x01\x41\x34\x20\x08\x41\x03\x10\xc4\x01\x1a\x0b\x20\x00\x20\x01\x41\x00\x41\x00\x41\x01\x10\xc8\x02\x0c\x02\x0b\x20\x00\x20\x01\x10\xcd\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x05\x41\x10\x6a\x24\x00\x20\x01\x0b\x9b\x02\x02\x03\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x20\x00\x20\x01\x41\x02\x10\xda\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x02\x40\x20\x02\x41\x01\x47\x0d\x00\x02\x40\x20\x03\x29\x03\x00\x22\x07\x42\x20\x88\xa7\x22\x05\x45\x0d\x00\x20\x05\x41\x0b\x6a\x41\x12\x49\x0d\x01\x0b\x20\x00\x20\x04\x41\x0c\x6a\x20\x07\x10\xc0\x01\x41\x01\x10\xcf\x03\x0d\x01\x02\x40\x02\x40\x20\x04\x28\x02\x0c\x22\x05\x41\x00\x48\x0d\x00\x20\x05\xad\x21\x07\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x05\xb8\xbd\x22\x07\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x07\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x07\x0b\x20\x00\x20\x01\x41\x30\x20\x07\x10\x82\x04\x41\x7f\x4a\x0d\x02\x0c\x01\x0b\x41\x00\x21\x05\x03\x40\x20\x05\x20\x02\x4e\x0d\x02\x20\x00\x20\x01\x20\x05\x20\x03\x29\x03\x00\x10\xc0\x01\x10\xa8\x05\x21\x06\x20\x03\x41\x08\x6a\x21\x03\x20\x05\x41\x01\x6a\x21\x05\x20\x06\x41\x7f\x4a\x0d\x00\x0b\x0b\x20\x00\x20\x01\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x01\x0b\x21\x00\x20\x00\x20\x01\x20\x00\x20\x02\x10\xb3\x01\x22\x02\x20\x03\x20\x04\x10\xc4\x01\x21\x04\x20\x00\x20\x02\x10\xe4\x02\x20\x04\x0b\x7d\x01\x03\x7f\x02\x40\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x02\x40\x20\x01\xa7\x22\x03\x2f\x01\x06\x22\x04\x41\x76\x6a\x22\x05\x41\x1a\x4b\x0d\x00\x41\x01\x20\x05\x74\x41\x81\x80\x80\x2c\x71\x0d\x02\x0b\x20\x04\x41\x7c\x6a\x41\x04\x49\x0d\x01\x0b\x20\x00\x20\x02\x10\xcd\x01\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x41\x97\xe7\x01\x41\x00\x10\xb2\x02\x0f\x0b\x20\x00\x20\x03\x29\x03\x20\x10\xcd\x01\x20\x03\x20\x02\x37\x03\x20\x0b\x0b\xa6\x02\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x02\x40\x20\x02\x0d\x00\x42\x00\x21\x05\x0c\x01\x0b\x20\x00\x20\x03\x29\x03\x00\x10\x9b\x04\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x05\x42\x20\x88\xa7\x41\x0b\x6a\x22\x02\x41\x02\x4b\x0d\x00\x02\x40\x02\x40\x20\x02\x0e\x03\x01\x00\x00\x01\x0b\x20\x05\xa7\x41\x04\x6a\x20\x04\x41\x08\x6a\x10\xa7\x04\x20\x00\x20\x05\x10\xcd\x01\x42\x80\x80\x80\x80\xc0\x7e\x20\x04\x29\x03\x08\x22\x05\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x05\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x05\x0c\x01\x0b\x20\x00\x20\x05\x10\xf2\x03\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x05\x10\xed\x03\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x0b\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x02\x40\x20\x00\x20\x01\x41\x04\x10\xda\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x01\x20\x05\x10\xd7\x01\x0b\x20\x01\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x5d\x01\x01\x7e\x20\x00\x20\x03\x29\x03\x00\x10\xa9\x05\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x21\x04\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x04\x0f\x0b\x02\x40\x20\x00\x20\x01\x41\x06\x10\xda\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x01\x20\x04\x10\xd7\x01\x0b\x20\x01\x0b\xea\x01\x01\x02\x7e\x02\x40\x02\x40\x02\x40\x20\x02\x0d\x00\x20\x01\x42\x80\x80\x80\x80\x70\x83\x21\x04\x20\x00\x41\x2f\x10\xc5\x01\x21\x05\x0c\x01\x0b\x20\x03\x29\x03\x00\x21\x05\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x83\x22\x04\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x80\x7f\x52\x0d\x00\x20\x00\x41\x97\xae\x02\x20\x00\x20\x00\x28\x02\x10\x20\x05\xa7\x10\xdd\x03\x10\xc5\x01\x41\x9f\xae\x02\x10\xc1\x03\x21\x05\x0c\x01\x0b\x20\x00\x20\x05\x10\xe6\x02\x21\x05\x0b\x20\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x0b\x20\x04\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x02\x40\x20\x00\x20\x01\x41\x05\x10\xda\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x01\x20\x05\x10\xd7\x01\x20\x00\x20\x01\x41\x30\x20\x05\xa7\x29\x02\x04\x42\xff\xff\xff\xff\x07\x83\x41\x00\x10\xc4\x01\x1a\x0b\x20\x01\x21\x05\x0b\x20\x05\x0b\x89\x01\x02\x01\x7f\x01\x7e\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x41\xff\xe4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x41\x00\x21\x04\x02\x40\x02\x40\x20\x02\x45\x0d\x00\x20\x03\x29\x03\x00\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x20\x00\x20\x05\x10\xe6\x02\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x05\xa7\x21\x04\x0b\x20\x00\x20\x04\x41\x03\x10\xde\x03\x21\x01\x0b\x20\x01\x0b\xab\x03\x02\x05\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x41\x7f\x4a\x0d\x00\x20\x03\x20\x02\x41\xff\xff\xff\xff\x07\x71\x36\x02\x00\x20\x01\x41\xc0\x00\x41\xaa\xc2\x01\x20\x03\x10\x5f\x1a\x0c\x01\x0b\x20\x00\x28\x02\x2c\x20\x02\x4d\x0d\x01\x02\x40\x20\x02\x0d\x00\x20\x01\x41\x03\x6a\x41\x00\x28\x00\x97\xc2\x01\x36\x00\x00\x20\x01\x41\x00\x28\x00\x94\xc2\x01\x36\x00\x00\x0c\x01\x0b\x20\x00\x28\x02\x38\x20\x02\x41\x02\x74\x6a\x28\x02\x00\x22\x04\x41\x01\x71\x0d\x02\x20\x01\x21\x02\x02\x40\x02\x40\x20\x04\x45\x0d\x00\x41\x00\x21\x05\x02\x40\x20\x04\x29\x02\x04\x22\x08\xa7\x22\x02\x41\x00\x48\x0d\x00\x20\x04\x41\x10\x6a\x22\x06\x21\x00\x02\x40\x03\x40\x20\x02\x45\x0d\x01\x20\x02\x41\x7f\x6a\x21\x02\x20\x05\x20\x00\x2d\x00\x00\x72\x21\x05\x20\x00\x41\x01\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x20\x05\x41\x80\x01\x48\x0d\x02\x0b\x41\x00\x21\x00\x20\x04\x41\x10\x6a\x22\x07\x21\x06\x20\x01\x21\x02\x03\x40\x20\x00\x20\x08\xa7\x22\x05\x41\xff\xff\xff\xff\x07\x71\x4f\x0d\x01\x02\x40\x02\x40\x20\x05\x41\x7f\x4a\x0d\x00\x20\x06\x2f\x01\x00\x21\x05\x0c\x01\x0b\x20\x07\x20\x00\x6a\x2d\x00\x00\x21\x05\x0b\x20\x02\x20\x01\x6b\x41\x39\x4a\x0d\x01\x02\x40\x02\x40\x20\x05\x41\xff\x00\x4b\x0d\x00\x20\x02\x20\x05\x3a\x00\x00\x20\x02\x41\x01\x6a\x21\x02\x0c\x01\x0b\x20\x02\x20\x02\x20\x05\x10\xe8\x02\x6a\x21\x02\x0b\x20\x06\x41\x02\x6a\x21\x06\x20\x00\x41\x01\x6a\x21\x00\x20\x04\x29\x02\x04\x21\x08\x0c\x00\x0b\x00\x0b\x20\x02\x41\x00\x3a\x00\x00\x0c\x01\x0b\x20\x06\x21\x01\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x01\x0f\x0b\x41\xad\xc2\x01\x41\xae\xb7\x01\x41\xd2\x17\x41\xb3\xda\x01\x10\x4a\x00\x0b\x41\xc3\xda\x01\x41\xae\xb7\x01\x41\xdc\x17\x41\xb3\xda\x01\x10\x4a\x00\x0b\x0b\x00\x20\x00\x20\x01\x41\x00\x10\xe5\x02\x0b\x26\x00\x20\x00\x20\x01\x41\x3b\x20\x02\x10\xc0\x01\x22\x02\x20\x03\x10\xc4\x01\x1a\x20\x00\x20\x02\x41\x3c\x20\x01\x10\xc0\x01\x20\x04\x10\xc4\x01\x1a\x0b\x16\x00\x20\x00\x20\x00\x29\x03\xc0\x01\x20\x03\x29\x03\x00\x41\x03\x41\x7f\x10\x8e\x03\x0b\xb5\x06\x03\x04\x7f\x03\x7e\x01\x7c\x23\x00\x41\xd0\x00\x6b\x22\x04\x24\x00\x41\x00\x21\x05\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x41\x00\x20\x01\x42\x80\x80\x80\x80\x70\x83\x22\x08\x42\x80\x80\x80\x80\x30\x52\x1b\x22\x02\x41\x01\x4b\x0d\x00\x02\x40\x02\x40\x20\x02\x0e\x02\x00\x01\x00\x0b\x10\xe2\x06\xb9\x21\x0b\x0c\x02\x0b\x02\x40\x02\x40\x20\x03\x29\x03\x00\x22\x09\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x09\xa7\x22\x05\x2f\x01\x06\x41\x0a\x47\x0d\x00\x02\x40\x20\x05\x29\x03\x20\x22\x0a\x42\x20\x88\xa7\x22\x05\x45\x0d\x00\x20\x05\x41\x0b\x6a\x41\x12\x49\x0d\x01\x0b\x20\x00\x20\x04\x41\xc0\x00\x6a\x20\x0a\x10\xdf\x04\x0d\x04\x20\x04\x2b\x03\x40\x22\x0b\x44\x00\x00\xdc\xc2\x08\xb2\x3e\xc3\x66\x20\x0b\x44\x00\x00\xdc\xc2\x08\xb2\x3e\x43\x65\x71\x21\x05\x20\x0b\x9d\x21\x0b\x0c\x01\x0b\x20\x04\x20\x00\x20\x09\x41\x02\x10\xeb\x02\x22\x09\x37\x03\x00\x02\x40\x02\x40\x20\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x90\x7f\x52\x0d\x00\x20\x00\x42\x80\x80\x80\x80\x30\x41\x01\x20\x04\x10\xe3\x06\x21\x0a\x20\x00\x20\x09\x10\xcd\x01\x20\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x05\x20\x00\x20\x04\x41\xc0\x00\x6a\x20\x0a\x10\xf8\x03\x45\x0d\x01\x0c\x05\x0b\x20\x00\x20\x04\x41\xc0\x00\x6a\x20\x09\x10\xf8\x03\x0d\x04\x0b\x20\x04\x2b\x03\x40\x22\x0b\x44\x00\x00\xdc\xc2\x08\xb2\x3e\xc3\x66\x20\x0b\x44\x00\x00\xdc\xc2\x08\xb2\x3e\x43\x65\x71\x21\x05\x20\x0b\x9d\x21\x0b\x0b\x20\x0b\x44\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x44\x00\x00\x00\x00\x00\x00\xf8\x7f\x20\x05\x1b\x21\x0b\x0c\x01\x0b\x20\x04\x41\x00\x41\x38\x10\x74\x22\x06\x42\x80\x80\x80\x80\x80\x80\x80\xf8\x3f\x37\x03\x10\x20\x02\x41\x07\x20\x02\x41\x07\x48\x1b\x21\x07\x20\x06\x21\x02\x02\x40\x03\x40\x20\x05\x20\x07\x4e\x0d\x01\x20\x00\x20\x06\x41\xc8\x00\x6a\x20\x03\x29\x03\x00\x10\xdf\x04\x0d\x03\x20\x06\x2b\x03\x48\x22\x0b\x99\x44\x00\x00\x00\x00\x00\x00\xf0\x7f\x63\x41\x01\x73\x0d\x01\x20\x02\x20\x0b\x9d\x39\x03\x00\x02\x40\x20\x05\x0d\x00\x20\x06\x2b\x03\x00\x22\x0b\x44\x00\x00\x00\x00\x00\x00\x00\x00\x66\x41\x01\x73\x0d\x00\x20\x0b\x44\x00\x00\x00\x00\x00\x00\x59\x40\x63\x41\x01\x73\x0d\x00\x20\x06\x20\x0b\x44\x00\x00\x00\x00\x00\xb0\x9d\x40\xa0\x39\x03\x00\x0b\x20\x02\x41\x08\x6a\x21\x02\x20\x03\x41\x08\x6a\x21\x03\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x44\x00\x00\x00\x00\x00\x00\xf8\x7f\x21\x0b\x20\x07\x20\x05\x47\x0d\x00\x20\x06\x41\x01\x10\xe4\x06\x21\x0b\x0b\x20\x04\x20\x0b\x39\x03\x40\x02\x40\x20\x00\x20\x01\x41\x0a\x10\xda\x03\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x0b\xbd\x21\x01\x02\x40\x02\x40\x20\x0b\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x0b\xaa\x21\x05\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x05\x0b\x02\x40\x02\x40\x20\x01\x20\x05\xb7\xbd\x52\x0d\x00\x20\x05\xad\x21\x01\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x01\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x01\x0b\x20\x00\x20\x09\x20\x01\x10\xd7\x01\x20\x08\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x20\x09\x41\x00\x41\x00\x41\x13\x10\xe5\x06\x21\x01\x20\x00\x20\x09\x10\xcd\x01\x0c\x02\x0b\x20\x09\x21\x01\x0c\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x04\x41\xd0\x00\x6a\x24\x00\x20\x01\x0b\x97\x0e\x02\x07\x7f\x01\x7e\x23\x00\x41\xe0\x00\x6b\x22\x07\x24\x00\x20\x07\x41\x08\x6a\x41\x00\x41\xd0\x00\x10\x74\x1a\x20\x07\x20\x04\x36\x02\x14\x20\x07\x20\x00\x36\x02\x08\x20\x07\x20\x02\x20\x03\x6a\x22\x03\x36\x02\x44\x20\x07\x20\x02\x36\x02\x40\x20\x07\x41\x01\x36\x02\x10\x20\x07\x42\xa0\x80\x80\x80\x10\x37\x03\x18\x20\x07\x20\x02\x36\x02\x5c\x02\x40\x20\x02\x2d\x00\x00\x41\x23\x47\x0d\x00\x20\x02\x2d\x00\x01\x41\x21\x47\x0d\x00\x20\x07\x20\x02\x41\x02\x6a\x22\x02\x36\x02\x5c\x03\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x20\x03\x4f\x0d\x00\x02\x40\x20\x02\x2d\x00\x00\x22\x03\x41\x76\x6a\x22\x08\x41\x03\x4b\x0d\x00\x20\x08\x0e\x04\x01\x00\x00\x01\x01\x0b\x20\x03\x41\x18\x74\x41\x18\x75\x41\x7f\x4a\x0d\x02\x20\x02\x41\x06\x20\x07\x41\xdc\x00\x6a\x10\x9e\x04\x22\x03\x41\x01\x72\x41\xa9\xc0\x00\x47\x0d\x01\x20\x07\x28\x02\x5c\x21\x02\x0b\x20\x07\x20\x02\x36\x02\x40\x0c\x04\x0b\x20\x07\x28\x02\x5c\x21\x02\x20\x03\x41\x7f\x47\x0d\x01\x0b\x20\x07\x20\x02\x41\x01\x6a\x22\x02\x36\x02\x5c\x0b\x20\x07\x28\x02\x44\x21\x03\x0c\x00\x0b\x00\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x05\x41\x03\x71\x22\x08\x41\x02\x47\x0d\x00\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x22\x09\x45\x0d\x04\x20\x09\x29\x03\x08\x22\x0e\x42\xff\xff\xff\xff\x6f\x58\x0d\x03\x20\x0e\xa7\x22\x02\x2f\x01\x06\x10\xc6\x02\x45\x0d\x02\x20\x02\x41\x24\x6a\x28\x02\x00\x21\x0a\x20\x02\x28\x02\x20\x22\x03\x2d\x00\x10\x21\x0b\x41\x00\x21\x0c\x0c\x01\x0b\x20\x05\x41\x03\x76\x21\x02\x02\x40\x20\x08\x41\x01\x46\x0d\x00\x20\x02\x41\x03\x71\x21\x0b\x41\x00\x21\x09\x41\x00\x21\x0a\x41\x00\x21\x03\x41\x00\x21\x0c\x0c\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x0e\x20\x00\x20\x04\x10\xb3\x01\x22\x03\x45\x0d\x0c\x20\x00\x20\x03\x10\xfb\x06\x22\x0c\x45\x0d\x0c\x20\x02\x41\x02\x71\x41\x01\x72\x21\x0b\x41\x00\x21\x09\x41\x00\x21\x0a\x41\x00\x21\x03\x0b\x20\x00\x41\x00\x41\x01\x41\x00\x20\x04\x41\x01\x10\xfc\x06\x22\x02\x45\x0d\x08\x20\x02\x20\x08\x36\x02\x24\x20\x02\x20\x08\x41\x02\x47\x22\x08\x36\x02\x4c\x20\x02\x20\x05\x41\x06\x76\x41\x01\x71\x36\x02\x68\x20\x07\x20\x02\x36\x02\x48\x02\x40\x02\x40\x20\x08\x0d\x00\x20\x02\x20\x03\x2f\x00\x11\x41\x06\x76\x41\x01\x71\x36\x02\x50\x20\x02\x20\x03\x2f\x00\x11\x41\x07\x76\x41\x01\x71\x36\x02\x54\x20\x02\x20\x03\x41\x12\x6a\x2d\x00\x00\x41\x01\x71\x36\x02\x58\x20\x03\x2f\x00\x11\x21\x08\x20\x02\x41\xd0\x00\x36\x02\x70\x20\x02\x20\x0b\x3a\x00\x6e\x20\x02\x20\x08\x41\x09\x76\x41\x01\x71\x36\x02\x5c\x0c\x01\x0b\x20\x02\x41\xd0\x00\x36\x02\x70\x20\x02\x20\x0b\x3a\x00\x6e\x20\x02\x42\x80\x80\x80\x80\x10\x37\x02\x58\x20\x02\x42\x00\x37\x02\x50\x20\x02\x21\x04\x20\x03\x45\x0d\x06\x0b\x20\x02\x41\x00\x36\x02\xc8\x02\x20\x02\x41\x00\x36\x02\xc0\x02\x20\x02\x20\x03\x2f\x01\x2a\x20\x03\x2f\x01\x28\x6a\x20\x03\x28\x02\x3c\x6a\x22\x08\x36\x02\xc4\x02\x20\x02\x21\x04\x20\x08\x45\x0d\x05\x20\x02\x20\x00\x20\x08\x41\x03\x74\x10\xc0\x02\x22\x08\x36\x02\xc8\x02\x20\x08\x45\x0d\x06\x02\x40\x03\x40\x20\x06\x41\x00\x48\x0d\x01\x02\x40\x20\x03\x28\x02\x20\x20\x06\x20\x03\x2f\x01\x28\x6a\x41\x04\x74\x6a\x22\x08\x28\x02\x04\x41\x01\x48\x0d\x00\x20\x02\x20\x02\x28\x02\xc0\x02\x22\x04\x41\x01\x6a\x36\x02\xc0\x02\x20\x00\x20\x02\x28\x02\xc8\x02\x20\x04\x41\x03\x74\x6a\x20\x08\x20\x06\x10\xfd\x06\x0b\x20\x08\x28\x02\x08\x21\x06\x0c\x00\x0b\x00\x0b\x20\x06\x41\x7e\x46\x0d\x03\x41\x00\x21\x08\x41\x00\x21\x06\x03\x40\x02\x40\x20\x06\x20\x03\x2f\x01\x28\x49\x0d\x00\x41\x00\x21\x06\x03\x40\x20\x06\x20\x03\x2f\x01\x2a\x4f\x0d\x07\x02\x40\x20\x03\x28\x02\x20\x20\x06\x20\x03\x2f\x01\x28\x6a\x41\x04\x74\x6a\x22\x08\x28\x02\x04\x0d\x00\x20\x08\x28\x02\x00\x41\xd1\x00\x46\x0d\x00\x20\x02\x20\x02\x28\x02\xc0\x02\x22\x04\x41\x01\x6a\x36\x02\xc0\x02\x20\x00\x20\x02\x28\x02\xc8\x02\x20\x04\x41\x03\x74\x6a\x20\x08\x20\x06\x10\xfd\x06\x0b\x20\x06\x41\x01\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x20\x02\x20\x02\x28\x02\xc0\x02\x22\x04\x41\x01\x6a\x36\x02\xc0\x02\x20\x03\x28\x02\x20\x21\x0b\x20\x02\x28\x02\xc8\x02\x20\x04\x41\x03\x74\x6a\x22\x04\x41\x03\x3a\x00\x00\x20\x04\x20\x06\x3b\x01\x02\x20\x04\x20\x00\x20\x0b\x20\x08\x6a\x28\x02\x00\x10\xd9\x03\x36\x02\x04\x20\x08\x41\x10\x6a\x21\x08\x20\x06\x41\x01\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x41\xbe\xc8\x02\x41\xae\xb7\x01\x41\xf8\x86\x02\x41\xfc\xc7\x02\x10\x4a\x00\x0b\x41\x8e\xc8\x02\x41\xae\xb7\x01\x41\xf6\x86\x02\x41\xfc\xc7\x02\x10\x4a\x00\x0b\x41\xf1\xc7\x02\x41\xae\xb7\x01\x41\xf5\x86\x02\x41\xfc\xc7\x02\x10\x4a\x00\x0b\x41\x00\x21\x06\x03\x40\x20\x06\x20\x03\x2f\x01\x2a\x4f\x0d\x01\x02\x40\x20\x03\x28\x02\x20\x20\x06\x20\x03\x2f\x01\x28\x6a\x41\x04\x74\x6a\x22\x08\x28\x02\x04\x0d\x00\x20\x08\x10\xfe\x06\x45\x0d\x00\x20\x02\x20\x02\x28\x02\xc0\x02\x22\x04\x41\x01\x6a\x36\x02\xc0\x02\x20\x00\x20\x02\x28\x02\xc8\x02\x20\x04\x41\x03\x74\x6a\x20\x08\x20\x06\x10\xfd\x06\x0b\x20\x06\x41\x01\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x41\x00\x21\x0b\x41\x00\x21\x04\x02\x40\x03\x40\x20\x04\x20\x03\x28\x02\x3c\x4e\x0d\x01\x20\x02\x20\x02\x28\x02\xc0\x02\x22\x06\x41\x01\x6a\x36\x02\xc0\x02\x20\x03\x28\x02\x24\x21\x08\x20\x02\x28\x02\xc8\x02\x20\x06\x41\x03\x74\x6a\x22\x06\x20\x06\x2d\x00\x00\x22\x0d\x41\xfe\x01\x71\x3a\x00\x00\x20\x06\x20\x08\x20\x0b\x6a\x22\x08\x2d\x00\x00\x41\x02\x71\x20\x0d\x41\xfc\x01\x71\x72\x22\x0d\x3a\x00\x00\x20\x06\x20\x0d\x41\xfa\x01\x71\x20\x08\x2d\x00\x00\x41\x04\x71\x72\x22\x0d\x3a\x00\x00\x20\x06\x20\x0d\x41\xf6\x01\x71\x20\x08\x2d\x00\x00\x41\x08\x71\x72\x22\x0d\x3a\x00\x00\x20\x06\x20\x0d\x41\x0e\x71\x20\x08\x2d\x00\x00\x41\xf0\x01\x71\x72\x3a\x00\x00\x20\x06\x20\x04\x3b\x01\x02\x20\x06\x20\x00\x20\x08\x41\x04\x6a\x28\x02\x00\x10\xd9\x03\x36\x02\x04\x20\x0b\x41\x08\x6a\x21\x0b\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x07\x28\x02\x48\x21\x04\x0b\x20\x02\x20\x0c\x36\x02\x94\x03\x20\x07\x20\x0c\x45\x36\x02\x50\x20\x07\x20\x0c\x41\x00\x47\x36\x02\x4c\x20\x07\x41\x08\x6a\x10\xff\x06\x1a\x20\x02\x20\x02\x28\x02\xbc\x01\x36\x02\xf0\x01\x20\x07\x41\x08\x6a\x10\x80\x07\x0d\x00\x20\x07\x41\x08\x6a\x10\x81\x07\x0d\x00\x41\x01\x21\x03\x02\x40\x20\x04\x28\x02\x24\x41\x02\x49\x0d\x00\x20\x04\x2d\x00\x6e\x41\x7f\x73\x41\x01\x71\x21\x03\x0b\x20\x04\x20\x03\x36\x02\x28\x02\x40\x20\x07\x28\x02\x4c\x0d\x00\x20\x04\x20\x07\x28\x02\x08\x20\x04\x41\xd1\x00\x10\x82\x07\x22\x03\x36\x02\xa4\x01\x20\x03\x41\x00\x48\x0d\x01\x0b\x03\x40\x20\x07\x28\x02\x18\x41\xac\x7f\x46\x0d\x02\x20\x07\x41\x08\x6a\x10\x83\x07\x45\x0d\x00\x0b\x0b\x20\x07\x41\x08\x6a\x20\x07\x41\x18\x6a\x10\x84\x07\x20\x00\x20\x02\x10\x85\x07\x0c\x01\x0b\x02\x40\x02\x40\x20\x07\x28\x02\x4c\x45\x0d\x00\x20\x07\x41\x08\x6a\x41\x29\x10\x86\x07\x0c\x01\x0b\x20\x07\x41\x08\x6a\x41\xd8\x00\x10\x86\x07\x20\x07\x28\x02\x48\x41\x80\x02\x6a\x20\x04\x2f\x01\xa4\x01\x10\x87\x07\x20\x07\x41\x08\x6a\x41\x28\x10\x86\x07\x0b\x20\x00\x20\x02\x10\x88\x07\x22\x0e\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x0c\x45\x0d\x00\x20\x0c\x20\x0e\x37\x03\x48\x20\x00\x20\x0c\x10\xe7\x03\x41\x00\x48\x0d\x02\x20\x0c\xad\x42\x80\x80\x80\x80\x50\x84\x10\xc0\x01\x21\x0e\x0b\x20\x05\x41\x20\x71\x0d\x03\x20\x00\x20\x0e\x20\x01\x20\x0a\x20\x09\x10\xd4\x04\x21\x0e\x0c\x03\x0b\x20\x0c\x45\x0d\x01\x0b\x20\x00\x20\x0c\x10\xe3\x02\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x0e\x0b\x20\x07\x41\xe0\x00\x6a\x24\x00\x20\x0e\x0b\xf7\x0a\x02\x0c\x7f\x01\x7e\x23\x00\x41\xc0\x02\x6b\x22\x03\x24\x00\x41\x00\x21\x04\x02\x40\x02\x40\x20\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x0f\x20\x00\x20\x03\x41\xdc\x00\x6a\x20\x02\x10\xe1\x03\x22\x05\x45\x0d\x01\x41\x00\x21\x04\x20\x03\x28\x02\x5c\x21\x06\x41\x00\x21\x07\x02\x40\x03\x40\x20\x06\x20\x07\x46\x0d\x01\x02\x40\x02\x40\x20\x05\x20\x07\x6a\x2c\x00\x00\x41\x99\x7f\x6a\x22\x08\x41\x1f\x77\x22\x09\x41\x09\x4b\x0d\x00\x41\xcb\x05\x20\x08\x41\x01\x76\x41\xff\xff\x03\x71\x76\x41\x01\x71\x45\x0d\x00\x20\x09\x41\x02\x74\x41\xac\xf2\x02\x6a\x28\x02\x00\x22\x08\x20\x04\x71\x45\x0d\x01\x0b\x20\x00\x20\x05\x10\xcf\x02\x20\x00\x41\xd4\xf2\x02\x41\x00\x10\xc5\x04\x0c\x04\x0b\x20\x07\x41\x01\x6a\x21\x07\x20\x08\x20\x04\x72\x21\x04\x0c\x00\x0b\x00\x0b\x20\x00\x20\x05\x10\xcf\x02\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x0f\x20\x00\x20\x03\x41\xdc\x00\x6a\x20\x01\x20\x04\x41\x04\x76\x41\x01\x71\x22\x08\x41\x01\x73\x10\xb0\x02\x22\x07\x45\x0d\x00\x20\x03\x28\x02\x5c\x21\x09\x20\x03\x41\xbc\x01\x6a\x41\x00\x41\x80\x01\x10\x74\x1a\x20\x03\x41\xe0\x00\x6a\x41\x08\x6a\x42\x00\x37\x03\x00\x20\x03\x41\xac\x01\x6a\x42\x00\x37\x02\x00\x20\x03\x41\xb8\x01\x6a\x20\x00\x36\x02\x00\x20\x03\x41\xb4\x01\x6a\x41\xec\x00\x36\x02\x00\x20\x03\x41\x7f\x36\x02\x9c\x01\x20\x03\x42\x81\x80\x80\x80\x70\x37\x02\x94\x01\x20\x03\x20\x08\x36\x02\x88\x01\x20\x03\x20\x07\x36\x02\x80\x01\x20\x03\x20\x07\x20\x09\x6a\x36\x02\x7c\x20\x03\x20\x07\x36\x02\x78\x20\x03\x20\x00\x36\x02\xa0\x01\x20\x03\x42\x00\x37\x03\x60\x20\x03\x20\x00\x36\x02\x74\x20\x03\x42\x00\x37\x02\xa4\x01\x20\x03\x41\xec\x00\x36\x02\x70\x20\x03\x20\x04\x36\x02\x84\x01\x20\x03\x20\x04\x41\x03\x76\x41\x01\x71\x36\x02\x90\x01\x20\x03\x20\x04\x41\x01\x76\x41\x01\x71\x36\x02\x8c\x01\x20\x03\x41\xe0\x00\x6a\x20\x04\x41\xff\x01\x71\x10\xcd\x02\x20\x03\x41\xe0\x00\x6a\x41\x00\x10\xcd\x02\x20\x03\x41\xe0\x00\x6a\x41\x00\x10\xcd\x02\x20\x03\x41\xe0\x00\x6a\x41\x00\x10\x81\x08\x02\x40\x20\x04\x41\x20\x71\x0d\x00\x20\x03\x41\xe0\x00\x6a\x41\x08\x41\x06\x10\x82\x08\x1a\x20\x03\x41\xe0\x00\x6a\x41\x04\x10\xcd\x02\x20\x03\x41\xe0\x00\x6a\x41\x07\x41\x75\x10\x82\x08\x1a\x0b\x20\x03\x41\xa4\x01\x6a\x21\x09\x20\x03\x41\xe0\x00\x6a\x41\x0b\x41\x00\x10\x83\x08\x02\x40\x02\x40\x20\x03\x41\xe0\x00\x6a\x41\x00\x10\x84\x08\x0d\x00\x20\x03\x41\xe0\x00\x6a\x41\x0c\x41\x00\x10\x83\x08\x20\x03\x41\xe0\x00\x6a\x41\x0a\x10\xcd\x02\x02\x40\x20\x03\x28\x02\x78\x2d\x00\x00\x45\x0d\x00\x20\x03\x41\xe0\x00\x6a\x41\xaa\x9b\x03\x41\x00\x10\x85\x08\x0c\x01\x0b\x02\x40\x20\x03\x28\x02\x6c\x45\x0d\x00\x20\x03\x41\xe0\x00\x6a\x10\x86\x08\x0c\x01\x0b\x20\x03\x28\x02\x64\x41\x79\x6a\x21\x06\x20\x03\x28\x02\x60\x22\x0a\x41\x07\x6a\x21\x0b\x41\x00\x21\x0c\x41\x00\x21\x0d\x41\x00\x21\x04\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x03\x40\x20\x04\x20\x06\x4e\x0d\x01\x20\x0b\x20\x04\x6a\x22\x0e\x2d\x00\x00\x22\x08\x41\x1d\x4f\x0d\x04\x20\x04\x20\x08\x41\xd0\x9b\x03\x6a\x2d\x00\x00\x22\x05\x6a\x20\x06\x4a\x0d\x05\x02\x40\x20\x08\x41\x71\x6a\x22\x08\x41\x0b\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x08\x0e\x0c\x00\x01\x04\x04\x04\x04\x02\x03\x04\x04\x00\x01\x00\x0b\x20\x0c\x41\x01\x6a\x21\x08\x02\x40\x20\x0c\x20\x0d\x4e\x0d\x00\x20\x08\x21\x0c\x0c\x04\x0b\x20\x0c\x41\xfe\x01\x4a\x21\x0e\x20\x08\x21\x0c\x20\x08\x21\x0d\x20\x0e\x45\x0d\x03\x0c\x06\x0b\x20\x0c\x41\x00\x4c\x0d\x09\x20\x0c\x41\x7f\x6a\x21\x0c\x0c\x02\x0b\x20\x0e\x2f\x00\x01\x41\x02\x74\x20\x05\x6a\x21\x05\x0c\x01\x0b\x20\x0e\x2f\x00\x01\x41\x03\x74\x20\x05\x6a\x21\x05\x0b\x20\x05\x20\x04\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x0d\x41\x7f\x4a\x0d\x01\x0b\x20\x03\x41\xe0\x00\x6a\x41\xea\x9c\x03\x41\x00\x10\x85\x08\x0c\x04\x0b\x20\x0a\x20\x03\x28\x02\x94\x01\x3a\x00\x01\x20\x03\x28\x02\x60\x20\x0d\x3a\x00\x02\x20\x03\x28\x02\x60\x20\x03\x28\x02\x64\x41\x79\x6a\x36\x00\x03\x02\x40\x20\x03\x41\xa8\x01\x6a\x28\x02\x00\x22\x04\x20\x03\x28\x02\x94\x01\x41\x7f\x6a\x4d\x0d\x00\x20\x03\x41\xe0\x00\x6a\x20\x03\x28\x02\xa4\x01\x20\x04\x10\xa5\x07\x1a\x20\x03\x28\x02\x60\x22\x04\x20\x04\x2d\x00\x00\x41\x80\x01\x72\x3a\x00\x00\x0b\x02\x40\x20\x03\x28\x02\xa4\x01\x22\x04\x45\x0d\x00\x20\x03\x28\x02\xb8\x01\x20\x04\x41\x00\x20\x03\x28\x02\xb4\x01\x11\x01\x00\x1a\x0b\x20\x09\x42\x00\x37\x02\x00\x20\x09\x41\x10\x6a\x42\x00\x37\x02\x00\x20\x09\x41\x08\x6a\x42\x00\x37\x02\x00\x20\x03\x41\x00\x3a\x00\x10\x20\x03\x28\x02\x60\x21\x04\x20\x03\x28\x02\x64\x21\x08\x0c\x04\x0b\x41\xed\x9b\x03\x41\x81\x9c\x03\x41\xfa\x0d\x41\xae\x9c\x03\x10\x4a\x00\x0b\x41\xc1\x9c\x03\x41\x81\x9c\x03\x41\xfb\x0d\x41\xae\x9c\x03\x10\x4a\x00\x0b\x41\xdb\x9c\x03\x41\x81\x9c\x03\x41\x88\x0e\x41\xae\x9c\x03\x10\x4a\x00\x0b\x02\x40\x20\x03\x28\x02\x60\x22\x04\x45\x0d\x00\x20\x03\x28\x02\x74\x20\x04\x41\x00\x20\x03\x28\x02\x70\x11\x01\x00\x1a\x0b\x20\x03\x41\xe0\x00\x6a\x41\x10\x6a\x42\x00\x37\x03\x00\x20\x03\x41\xe0\x00\x6a\x41\x08\x6a\x42\x00\x37\x03\x00\x20\x03\x42\x00\x37\x03\x60\x02\x40\x20\x03\x28\x02\xa4\x01\x22\x04\x45\x0d\x00\x20\x03\x28\x02\xb8\x01\x20\x04\x41\x00\x20\x03\x28\x02\xb4\x01\x11\x01\x00\x1a\x0b\x20\x09\x42\x00\x37\x02\x00\x20\x09\x41\x10\x6a\x42\x00\x37\x02\x00\x20\x09\x41\x08\x6a\x42\x00\x37\x02\x00\x20\x03\x41\x10\x6a\x41\xc0\x00\x20\x03\x41\xbc\x01\x6a\x10\x87\x08\x41\x00\x21\x08\x41\x00\x21\x04\x0b\x20\x00\x20\x07\x10\xcf\x02\x02\x40\x20\x04\x0d\x00\x20\x03\x20\x03\x41\x10\x6a\x36\x02\x00\x20\x00\x41\xe6\xd7\x01\x20\x03\x10\xc5\x04\x0c\x01\x0b\x20\x00\x20\x04\x20\x08\x10\xb3\x02\x21\x0f\x20\x00\x28\x02\x10\x22\x07\x41\x10\x6a\x20\x04\x20\x07\x28\x02\x04\x11\x00\x00\x0b\x20\x03\x41\xc0\x02\x6a\x24\x00\x20\x0f\x0b\xa0\x04\x02\x04\x7e\x01\x7f\x20\x03\x29\x03\x08\x21\x04\x02\x40\x20\x00\x20\x03\x29\x03\x00\x22\x05\x10\xd6\x05\x22\x03\x41\x00\x48\x0d\x00\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x29\x03\x08\x21\x01\x20\x03\x45\x0d\x00\x20\x04\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x02\x40\x20\x00\x20\x05\x41\x3c\x20\x05\x41\x00\x10\xb4\x01\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x06\x0f\x0b\x20\x00\x20\x06\x20\x01\x10\x8d\x03\x21\x08\x20\x00\x20\x06\x10\xcd\x01\x20\x08\x45\x0d\x00\x20\x05\x10\xc0\x01\x0f\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x05\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x05\xa7\x22\x08\x2f\x01\x06\x41\x12\x47\x0d\x00\x20\x08\x35\x02\x20\x42\x80\x80\x80\x80\x90\x7f\x84\x10\xc0\x01\x21\x06\x20\x04\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x01\x20\x08\x35\x02\x24\x42\x80\x80\x80\x80\x90\x7f\x84\x10\xc0\x01\x21\x05\x0c\x03\x0b\x02\x40\x02\x40\x02\x40\x20\x03\x45\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x07\x20\x00\x20\x05\x41\xec\x00\x20\x05\x41\x00\x10\xb4\x01\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x06\x20\x04\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x01\x20\x00\x20\x05\x41\xed\x00\x20\x05\x41\x00\x10\xb4\x01\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x02\x0c\x06\x0b\x20\x05\x10\xc0\x01\x21\x06\x0b\x20\x04\x10\xc0\x01\x21\x07\x0b\x02\x40\x20\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x41\x2f\x10\xc5\x01\x21\x06\x0c\x02\x0b\x20\x00\x20\x06\x10\xe6\x02\x21\x05\x20\x00\x20\x06\x10\xcd\x01\x20\x05\x21\x06\x20\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x0c\x01\x0b\x20\x00\x20\x04\x10\xe6\x02\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x0b\x20\x00\x20\x06\x20\x07\x10\xe2\x01\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x07\x10\xcd\x01\x0b\x20\x00\x20\x01\x20\x06\x20\x05\x10\x91\x03\x0f\x0b\x20\x00\x20\x06\x10\xcd\x01\x20\x00\x20\x07\x10\xcd\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x0b\xbf\x03\x01\x0e\x7f\x20\x00\x41\x10\x6a\x21\x04\x20\x00\x41\xcc\x00\x6a\x21\x05\x20\x00\x41\xc8\x00\x6a\x21\x06\x41\x00\x21\x07\x03\x40\x02\x40\x20\x07\x20\x03\x48\x0d\x00\x41\x00\x0f\x0b\x02\x40\x20\x07\x20\x02\x6a\x22\x08\x41\xff\xff\x03\x4b\x0d\x00\x20\x01\x20\x07\x41\x0c\x6c\x6a\x22\x09\x28\x02\x00\x21\x0a\x20\x09\x28\x02\x08\x21\x0b\x20\x09\x28\x02\x04\x21\x0c\x02\x40\x02\x40\x20\x00\x28\x02\x40\x22\x09\x20\x08\x4d\x0d\x00\x20\x00\x28\x02\x44\x22\x09\x20\x08\x41\x18\x6c\x6a\x28\x02\x00\x45\x0d\x01\x0c\x02\x0b\x20\x09\x41\x03\x6c\x41\x02\x6d\x22\x09\x20\x08\x41\x01\x6a\x20\x09\x20\x08\x4a\x1b\x22\x09\x41\x3a\x20\x09\x41\x3a\x4a\x1b\x22\x0d\x41\x03\x74\x21\x0e\x20\x05\x21\x09\x02\x40\x03\x40\x20\x09\x28\x02\x00\x22\x0f\x20\x06\x46\x0d\x01\x20\x04\x20\x0f\x41\x14\x6a\x28\x02\x00\x20\x0e\x20\x00\x28\x02\x08\x11\x01\x00\x22\x10\x45\x0d\x03\x20\x10\x20\x00\x28\x02\x40\x22\x09\x41\x03\x74\x6a\x21\x11\x02\x40\x03\x40\x20\x09\x20\x0d\x4e\x0d\x01\x20\x11\x42\x80\x80\x80\x80\x20\x37\x03\x00\x20\x11\x41\x08\x6a\x21\x11\x20\x09\x41\x01\x6a\x21\x09\x0c\x00\x0b\x00\x0b\x20\x0f\x20\x10\x36\x02\x14\x20\x0f\x41\x04\x6a\x21\x09\x0c\x00\x0b\x00\x0b\x20\x04\x20\x00\x28\x02\x44\x20\x0d\x41\x18\x6c\x20\x00\x28\x02\x08\x11\x01\x00\x22\x09\x45\x0d\x01\x20\x09\x20\x00\x28\x02\x40\x22\x11\x41\x18\x6c\x6a\x41\x00\x20\x0d\x20\x11\x6b\x41\x18\x6c\x10\x74\x1a\x20\x00\x20\x0d\x36\x02\x40\x20\x00\x20\x09\x36\x02\x44\x0b\x20\x09\x20\x08\x41\x18\x6c\x6a\x22\x09\x20\x08\x36\x02\x00\x02\x40\x20\x0a\x41\xde\x01\x48\x0d\x00\x20\x00\x28\x02\x38\x20\x0a\x41\x02\x74\x6a\x28\x02\x00\x22\x11\x20\x11\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x0b\x20\x09\x42\x00\x37\x02\x10\x20\x09\x20\x0b\x36\x02\x0c\x20\x09\x20\x0c\x36\x02\x08\x20\x09\x20\x0a\x36\x02\x04\x20\x07\x41\x01\x6a\x21\x07\x0c\x01\x0b\x0b\x41\x7f\x0b\x8b\x04\x02\x01\x7f\x02\x7e\x23\x00\x41\x20\x6b\x22\x06\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x05\x41\x01\x71\x45\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x20\x00\x20\x06\x41\x18\x6a\x20\x01\x41\xde\x00\x10\xe3\x03\x22\x05\x45\x0d\x03\x02\x40\x02\x40\x20\x05\x29\x03\x00\x22\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x2d\x00\x05\x41\x10\x71\x0d\x01\x0b\x20\x00\x41\xff\xe4\x01\x41\x00\x10\xb2\x02\x0c\x04\x0b\x02\x40\x20\x06\x29\x03\x18\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x20\x01\x20\x02\x20\x03\x20\x04\x10\xdc\x03\x21\x07\x0c\x04\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x20\x00\x20\x03\x20\x04\x10\x80\x04\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x20\x05\x29\x03\x00\x21\x07\x20\x06\x20\x02\x37\x03\x10\x20\x06\x20\x01\x37\x03\x08\x20\x06\x20\x07\x37\x03\x00\x20\x00\x20\x08\x20\x05\x29\x03\x08\x41\x03\x20\x06\x10\xb5\x01\x22\x02\x42\xff\xff\xff\xff\x6f\x56\x0d\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x20\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x02\x10\xcd\x01\x20\x00\x10\x8a\x03\x0c\x02\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x20\x00\x20\x06\x41\x18\x6a\x20\x01\x41\xda\x00\x10\xe3\x03\x22\x05\x45\x0d\x02\x20\x06\x29\x03\x18\x21\x01\x02\x40\x20\x05\x2d\x00\x10\x0d\x00\x20\x00\x20\x01\x10\xcd\x01\x20\x00\x41\xca\xc3\x01\x41\x00\x10\xb2\x02\x0c\x03\x0b\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x20\x05\x29\x03\x00\x20\x02\x20\x03\x20\x04\x10\xb5\x01\x21\x07\x0c\x03\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x02\x40\x20\x00\x20\x03\x20\x04\x10\x80\x04\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x05\x29\x03\x00\x21\x07\x20\x06\x20\x08\x37\x03\x10\x20\x06\x20\x02\x37\x03\x08\x20\x06\x20\x07\x37\x03\x00\x20\x00\x20\x01\x20\x05\x29\x03\x08\x41\x03\x20\x06\x10\xb5\x01\x21\x07\x0b\x20\x00\x20\x01\x10\xcd\x01\x20\x00\x20\x08\x10\xcd\x01\x0c\x02\x0b\x20\x02\x21\x07\x0b\x20\x00\x20\x08\x10\xcd\x01\x20\x00\x20\x01\x10\xcd\x01\x0b\x20\x06\x41\x20\x6a\x24\x00\x20\x07\x0b\xd3\x01\x01\x03\x7e\x02\x40\x02\x40\x20\x03\x29\x03\x00\x22\x04\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x03\x29\x03\x08\x22\x05\x42\xff\xff\xff\xff\x6f\x56\x0d\x01\x0b\x20\x00\x10\x8a\x03\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x02\x40\x20\x00\x42\x80\x80\x80\x80\x20\x41\x30\x10\xc6\x01\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x00\x41\x18\x10\xc0\x02\x22\x03\x0d\x00\x20\x00\x20\x06\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x03\x20\x04\x10\xc0\x01\x22\x04\x37\x03\x00\x20\x03\x20\x05\x10\xc0\x01\x37\x03\x08\x20\x00\x20\x04\x10\xf0\x02\x21\x00\x20\x03\x41\x00\x3a\x00\x11\x20\x03\x20\x00\x3a\x00\x10\x20\x06\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x06\xa7\x22\x00\x20\x03\x36\x02\x20\x20\x00\x20\x00\x2d\x00\x05\x41\xef\x01\x71\x20\x04\xa7\x2d\x00\x05\x41\x10\x71\x72\x3a\x00\x05\x0b\x20\x06\x0b\xad\x06\x02\x03\x7f\x07\x7e\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x02\x40\x20\x00\x20\x01\x20\x04\x41\x26\x6a\x10\xda\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x09\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x41\x1c\x10\xe2\x03\x22\x06\x45\x0d\x00\x20\x06\x20\x04\x41\x01\x76\x41\x01\x71\x36\x02\x00\x20\x06\x20\x06\x41\x04\x6a\x22\x07\x36\x02\x08\x20\x06\x20\x07\x36\x02\x04\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x20\x06\x36\x02\x20\x0b\x20\x06\x41\x01\x36\x02\x14\x20\x06\x20\x00\x41\x08\x10\xc0\x02\x22\x07\x36\x02\x10\x42\x80\x80\x80\x80\x30\x21\x0a\x42\x80\x80\x80\x80\x30\x21\x0b\x20\x07\x45\x0d\x02\x20\x06\x41\x04\x36\x02\x18\x20\x07\x20\x07\x36\x02\x04\x20\x07\x20\x07\x36\x02\x00\x20\x02\x41\x01\x48\x0d\x03\x20\x03\x29\x03\x00\x22\x0b\x42\x80\x80\x80\x80\x10\x84\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x03\x20\x00\x20\x01\x41\xe8\x00\x41\xc2\x00\x20\x04\x41\x01\x71\x22\x06\x1b\x20\x01\x41\x00\x10\xb4\x01\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x09\x10\xf0\x02\x0d\x01\x20\x00\x41\xf0\xf9\x02\x41\x00\x10\xb2\x02\x0b\x42\x80\x80\x80\x80\x30\x21\x0a\x42\x80\x80\x80\x80\x30\x21\x0b\x0c\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x0a\x02\x40\x20\x00\x20\x0b\x41\x00\x10\xb3\x03\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x0b\x41\xea\x00\x20\x0b\x41\x00\x10\xb4\x01\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x03\x40\x20\x05\x20\x00\x20\x0b\x20\x0a\x20\x05\x41\x14\x6a\x10\xb7\x03\x22\x0c\x37\x03\x18\x20\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x02\x40\x20\x05\x28\x02\x14\x0d\x00\x02\x40\x02\x40\x20\x06\x45\x0d\x00\x20\x00\x20\x09\x20\x01\x41\x01\x20\x05\x41\x18\x6a\x10\xb5\x01\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x20\x00\x20\x05\x29\x03\x18\x10\xcd\x01\x0c\x05\x0b\x02\x40\x02\x40\x02\x40\x20\x0c\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x42\x80\x80\x80\x80\x30\x21\x0d\x0c\x01\x0b\x20\x00\x20\x0c\x42\x00\x10\xbb\x03\x22\x0d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x0e\x0c\x04\x0b\x20\x00\x20\x05\x29\x03\x18\x42\x01\x10\xbb\x03\x22\x0e\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x05\x20\x0e\x37\x03\x08\x20\x05\x20\x0d\x37\x03\x00\x20\x00\x20\x09\x20\x01\x41\x02\x20\x05\x10\xb5\x01\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x00\x20\x0d\x10\xcd\x01\x20\x00\x20\x0e\x10\xcd\x01\x0b\x20\x00\x20\x0c\x10\xcd\x01\x20\x00\x20\x05\x29\x03\x18\x10\xcd\x01\x0c\x01\x0b\x0b\x20\x00\x20\x0c\x10\xcd\x01\x20\x00\x20\x0a\x10\xcd\x01\x20\x00\x20\x0b\x10\xcd\x01\x20\x00\x20\x09\x10\xcd\x01\x0c\x03\x0b\x20\x00\x20\x05\x29\x03\x18\x10\xcd\x01\x20\x00\x20\x0d\x10\xcd\x01\x20\x00\x20\x0e\x10\xcd\x01\x0b\x20\x0b\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x00\x20\x0b\x41\x01\x10\xfc\x02\x1a\x0b\x20\x00\x20\x0a\x10\xcd\x01\x20\x00\x20\x0b\x10\xcd\x01\x20\x00\x20\x09\x10\xcd\x01\x20\x00\x20\x01\x10\xcd\x01\x0c\x01\x0b\x20\x01\x21\x08\x0b\x20\x05\x41\x20\x6a\x24\x00\x20\x08\x0b\x43\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xbf\x06\x0d\x00\x20\x00\x20\x01\x20\x04\x29\x03\x08\x10\xc0\x06\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x20\x01\x01\x7e\x20\x00\x20\x00\x20\x02\x20\x01\x41\x01\x41\x02\x41\x00\x10\xd2\x01\x22\x04\x20\x01\x20\x03\x10\xd3\x01\x20\x04\x0b\x45\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xbf\x06\x0d\x00\x20\x00\x20\x01\x20\x04\x29\x03\x08\x41\x14\x10\xc2\x06\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x14\x00\x20\x00\x41\xcc\x8a\x03\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x0b\x0f\x00\x20\x00\x20\x01\x20\x02\x41\x00\x41\x03\x10\xde\x01\x0b\xfd\x0b\x02\x06\x7f\x07\x7e\x23\x00\x41\x10\x6b\x22\x05\x24\x00\x20\x04\x41\xf6\xe5\x01\x6a\x2d\x00\x00\x22\x06\xad\x21\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x03\x29\x03\x00\x22\x0c\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x0d\x20\x00\x20\x05\x41\x08\x6a\x20\x0c\x10\xbf\x06\x0d\x04\x42\x80\x80\x80\x80\xe0\x00\x21\x0d\x20\x00\x42\x80\x80\x80\x80\x30\x20\x05\x29\x03\x08\x22\x0e\x20\x0b\x86\x10\xc0\x06\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x04\x42\x00\x21\x0f\x20\x05\x42\x00\x37\x03\x00\x0c\x01\x0b\x02\x40\x02\x40\x20\x0c\xa7\x22\x07\x2f\x01\x06\x22\x08\x41\x6d\x6a\x41\xff\xff\x03\x71\x41\x01\x4b\x0d\x00\x20\x07\x28\x02\x20\x21\x07\x42\x80\x80\x80\x80\xe0\x00\x21\x0d\x20\x00\x20\x05\x20\x03\x29\x03\x08\x10\xbf\x06\x0d\x05\x20\x07\x2d\x00\x04\x0d\x04\x02\x40\x02\x40\x20\x05\x29\x03\x00\x22\x0f\x41\x7f\x20\x06\x74\x41\x7f\x73\x22\x06\xac\x83\x42\x00\x52\x0d\x00\x20\x0f\x20\x07\x28\x02\x00\x22\x08\xac\x22\x0c\x58\x0d\x01\x0b\x20\x00\x41\xc8\xb5\x02\x41\x00\x10\xa6\x04\x0c\x06\x0b\x02\x40\x02\x40\x20\x03\x29\x03\x10\x22\x0e\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x08\x20\x06\x71\x0d\x01\x20\x05\x20\x0c\x20\x0f\x7d\x20\x0b\x88\x22\x0e\x37\x03\x08\x0c\x03\x0b\x20\x00\x20\x05\x41\x08\x6a\x20\x0e\x10\xbf\x06\x0d\x06\x20\x07\x2d\x00\x04\x0d\x05\x20\x05\x29\x03\x08\x22\x0e\x20\x0b\x86\x20\x0f\x7c\x20\x07\x34\x02\x00\x58\x0d\x02\x0b\x20\x00\x41\xd7\xb5\x02\x41\x00\x10\xa6\x04\x0c\x05\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x08\x41\x6b\x6a\x41\xff\xff\x03\x71\x41\x0a\x4b\x0d\x00\x20\x00\x20\x01\x20\x04\x10\xda\x03\x22\x0d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x10\x20\x07\x28\x02\x20\x22\x08\x28\x02\x0c\x22\x06\x28\x02\x20\x22\x03\x2d\x00\x04\x0d\x0a\x20\x07\x41\x28\x6a\x28\x02\x00\x21\x09\x42\x80\x80\x80\x80\x30\x21\x01\x02\x40\x20\x03\x2d\x00\x05\x0d\x00\x20\x00\x20\x06\xad\x42\x80\x80\x80\x80\x70\x84\x42\x80\x80\x80\x80\x30\x10\xbd\x06\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x0c\x0b\x20\x00\x20\x01\x20\x09\xad\x22\x0e\x20\x0b\x86\x10\xc0\x06\x21\x0b\x20\x00\x20\x01\x10\xcd\x01\x20\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x0b\x02\x40\x20\x07\x28\x02\x20\x28\x02\x0c\x28\x02\x20\x2d\x00\x04\x45\x0d\x00\x20\x00\x20\x0b\x10\xcd\x01\x0c\x0b\x0b\x41\x00\x21\x06\x02\x40\x20\x0b\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x0b\xa7\x22\x0a\x2f\x01\x06\x41\x13\x47\x0d\x00\x20\x0a\x28\x02\x20\x21\x06\x0b\x20\x00\x20\x0d\x20\x0b\x42\x00\x20\x0e\x10\xc1\x06\x0d\x0b\x20\x07\x2f\x01\x06\x20\x04\x46\x0d\x01\x41\x00\x21\x04\x03\x40\x20\x09\x20\x04\x46\x0d\x11\x20\x00\x20\x0c\x20\x04\x10\xf6\x02\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x0c\x20\x00\x20\x0d\x20\x04\x20\x01\x10\xa8\x05\x21\x03\x20\x04\x41\x01\x6a\x21\x04\x20\x03\x41\x7f\x4a\x0d\x00\x0c\x0c\x0b\x00\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x0d\x20\x00\x20\x01\x20\x04\x10\xda\x03\x22\x0e\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x0f\x42\x80\x80\x80\x80\x30\x21\x01\x20\x00\x20\x0c\x41\xd1\x01\x20\x0c\x41\x00\x10\xb4\x01\x22\x0f\x42\x80\x80\x80\x80\x70\x83\x22\x0d\x42\x80\x80\x80\x80\x20\x51\x0d\x01\x20\x0d\x42\x80\x80\x80\x80\x30\x51\x0d\x01\x20\x0d\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x07\x41\x00\x21\x03\x02\x40\x20\x00\x10\x85\x03\x22\x10\x42\x80\x80\x80\x80\x70\x83\x22\x0d\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x10\x21\x01\x0c\x06\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x41\x00\x21\x03\x02\x40\x20\x00\x20\x0c\x20\x0f\x10\xfd\x03\x22\x0d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x0c\x0c\x04\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x20\x00\x20\x0d\x41\xea\x00\x20\x0d\x41\x00\x10\xb4\x01\x22\x11\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x41\x00\x21\x03\x41\x00\x21\x04\x03\x40\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x20\x00\x20\x0d\x20\x11\x20\x05\x41\x08\x6a\x10\xb7\x03\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x02\x40\x20\x05\x28\x02\x08\x45\x0d\x00\x20\x04\x21\x03\x20\x10\x21\x01\x0c\x06\x0b\x02\x40\x20\x00\x20\x10\x20\x04\xad\x20\x0c\x41\x80\x80\x01\x10\xc8\x04\x41\x00\x4e\x0d\x00\x20\x11\x21\x0c\x20\x0d\x21\x11\x20\x10\x21\x0d\x41\x00\x21\x03\x0c\x06\x0b\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x06\x28\x02\x08\x20\x03\x28\x02\x08\x20\x08\x28\x02\x10\x6a\x20\x06\x28\x02\x00\x10\x70\x1a\x0c\x0e\x0b\x20\x00\x20\x05\x41\x08\x6a\x20\x0c\x10\xfb\x05\x0d\x05\x20\x0c\x10\xc0\x01\x21\x01\x20\x05\x29\x03\x08\x21\x0d\x0c\x04\x0b\x20\x11\x21\x0c\x0b\x20\x0d\x21\x11\x20\x10\x21\x0d\x0b\x20\x00\x20\x0c\x10\xcd\x01\x20\x00\x20\x11\x10\xcd\x01\x20\x00\x20\x0d\x10\xcd\x01\x20\x01\x42\x80\x80\x80\x80\x70\x83\x21\x0d\x0b\x20\x00\x20\x0f\x10\xcd\x01\x20\x0d\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x05\x20\x03\xad\x22\x0d\x37\x03\x08\x0b\x20\x00\x42\x80\x80\x80\x80\x30\x20\x0d\x20\x0b\x86\x10\xc0\x06\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x0e\x20\x0c\x42\x00\x20\x0d\x10\xc1\x06\x0d\x00\x41\x00\x21\x04\x03\x40\x02\x40\x20\x0d\x20\x04\xad\x55\x0d\x00\x20\x0e\x21\x0d\x0c\x03\x0b\x20\x00\x20\x01\x20\x04\x10\xf6\x02\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x0e\x20\x04\x20\x0c\x10\xa8\x05\x21\x03\x20\x04\x41\x01\x6a\x21\x04\x20\x03\x41\x7f\x4a\x0d\x00\x0b\x0b\x20\x00\x20\x01\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x0d\x20\x0e\x21\x01\x0b\x20\x00\x20\x01\x10\xcd\x01\x0c\x06\x0b\x20\x00\x10\xff\x03\x0b\x20\x00\x20\x0d\x10\xcd\x01\x0c\x02\x0b\x20\x03\x29\x03\x00\x10\xc0\x01\x21\x0c\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x0d\x02\x40\x20\x00\x20\x01\x20\x04\x10\xda\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x0c\x10\xcd\x01\x0c\x03\x0b\x02\x40\x20\x00\x20\x01\x20\x0c\x20\x0f\x20\x0e\x10\xc1\x06\x0d\x00\x20\x01\x21\x0d\x0c\x03\x0b\x20\x00\x20\x01\x10\xcd\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x0d\x0c\x01\x0b\x20\x00\x10\xff\x03\x0b\x20\x05\x41\x10\x6a\x24\x00\x20\x0d\x0b\x89\x03\x02\x04\x7f\x03\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x02\x40\x20\x00\x20\x03\x29\x03\x00\x22\x09\x10\xbc\x08\x22\x05\x45\x0d\x00\x20\x04\x42\x00\x37\x03\x08\x02\x40\x20\x02\x41\x02\x48\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x08\x10\xbf\x06\x0d\x01\x0b\x02\x40\x20\x05\x2d\x00\x04\x45\x0d\x00\x20\x00\x10\xff\x03\x0c\x01\x0b\x02\x40\x20\x04\x29\x03\x08\x22\x0a\x20\x05\x28\x02\x00\x22\x06\xac\x58\x0d\x00\x20\x00\x41\xb0\x88\x03\x41\x00\x10\xa6\x04\x0c\x01\x0b\x20\x06\x20\x0a\xa7\x22\x07\x6b\x21\x06\x02\x40\x20\x02\x41\x03\x48\x0d\x00\x20\x03\x29\x03\x10\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x04\x20\x0a\x10\xbf\x06\x0d\x01\x02\x40\x20\x04\x29\x03\x00\x22\x0a\x20\x06\xad\x58\x0d\x00\x20\x00\x41\xc3\x88\x03\x41\x00\x10\xa6\x04\x0c\x02\x0b\x20\x0a\xa7\x21\x06\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x20\x00\x20\x01\x41\x20\x10\xda\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x05\x2d\x00\x04\x45\x0d\x00\x20\x00\x10\xff\x03\x0c\x01\x0b\x20\x00\x41\x18\x10\xc0\x02\x22\x03\x0d\x01\x0b\x20\x00\x20\x01\x10\xcd\x01\x0c\x01\x0b\x20\x03\x20\x01\xa7\x22\x00\x36\x02\x08\x20\x09\x10\xc0\x01\x21\x08\x20\x03\x20\x05\x28\x02\x0c\x22\x02\x36\x02\x00\x20\x02\x20\x03\x36\x02\x04\x20\x03\x20\x06\x36\x02\x14\x20\x03\x20\x07\x36\x02\x10\x20\x03\x20\x08\x3e\x02\x0c\x20\x05\x20\x03\x36\x02\x0c\x20\x03\x20\x05\x41\x0c\x6a\x36\x02\x04\x20\x00\x20\x03\x36\x02\x20\x20\x01\x21\x08\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x08\x0b\xc5\x01\x01\x02\x7f\x02\x40\x20\x00\x41\xd0\x00\x10\xe2\x03\x22\x06\x45\x0d\x00\x20\x06\x41\x00\x36\x02\x04\x20\x06\x20\x06\x41\xc8\x00\x6a\x22\x07\x36\x02\x4c\x20\x06\x20\x07\x36\x02\x48\x02\x40\x02\x40\x20\x00\x20\x06\x41\x08\x6a\x22\x07\x20\x01\x20\x02\x20\x03\x20\x04\x10\xef\x04\x45\x0d\x00\x20\x06\x41\x05\x36\x02\x04\x0c\x01\x0b\x20\x00\x20\x07\x10\xf0\x04\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x02\x10\xcd\x01\x20\x00\x20\x01\x41\x39\x10\xda\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x06\x20\x01\xa7\x22\x00\x36\x02\x00\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x00\x20\x06\x36\x02\x20\x0b\x20\x01\x0f\x0b\x20\x00\x28\x02\x10\x20\x06\x10\xf0\x08\x0b\x42\x80\x80\x80\x80\xe0\x00\x0b\x79\x01\x02\x7f\x20\x01\xa7\x22\x06\x2f\x01\x06\x41\x4b\x6a\x21\x07\x20\x06\x28\x02\x20\x21\x06\x02\x40\x02\x40\x20\x03\x41\x01\x4e\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x01\x0c\x01\x0b\x20\x04\x29\x03\x00\x21\x01\x0b\x20\x06\x41\x34\x6a\x20\x07\x36\x02\x00\x20\x01\x10\xc0\x01\x21\x01\x02\x40\x02\x40\x20\x07\x45\x0d\x00\x20\x00\x20\x01\x10\xc9\x02\x0c\x01\x0b\x20\x06\x41\xe4\x00\x6a\x28\x02\x00\x41\x78\x6a\x20\x01\x37\x03\x00\x0b\x20\x00\x20\x06\x10\xee\x08\x42\x80\x80\x80\x80\x30\x0b\xe4\x01\x02\x04\x7f\x02\x7e\x02\x40\x20\x00\x41\xe8\x00\x10\xe2\x03\x22\x06\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x00\x28\x02\x10\x21\x07\x20\x06\x41\x04\x3a\x00\x04\x20\x07\x28\x02\x50\x22\x08\x20\x06\x41\x08\x6a\x22\x09\x36\x02\x04\x20\x06\x20\x08\x36\x02\x08\x20\x06\x41\x01\x36\x02\x00\x20\x06\x41\x00\x36\x02\x20\x20\x06\x42\x80\x80\x80\x80\x30\x37\x03\x18\x20\x06\x42\x80\x80\x80\x80\x30\x37\x03\x10\x20\x06\x20\x07\x41\xd0\x00\x6a\x36\x02\x0c\x20\x07\x20\x09\x36\x02\x50\x42\x80\x80\x80\x80\xe0\x00\x21\x0a\x02\x40\x02\x40\x02\x40\x20\x00\x20\x06\x41\x10\x6a\x10\x93\x03\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x06\x41\x28\x6a\x20\x01\x20\x02\x20\x03\x20\x04\x10\xef\x04\x45\x0d\x01\x0b\x20\x00\x20\x0b\x10\xcd\x01\x0c\x01\x0b\x20\x06\x41\x01\x36\x02\x20\x20\x00\x20\x06\x10\xee\x08\x20\x0b\x21\x0a\x0b\x20\x00\x28\x02\x10\x20\x06\x10\xef\x08\x20\x0a\x0b\xba\x02\x02\x04\x7f\x01\x7e\x23\x00\x41\x20\x6b\x22\x06\x24\x00\x02\x40\x20\x01\xa7\x22\x07\x28\x02\x20\x22\x08\x45\x0d\x00\x20\x08\x28\x02\x08\x22\x09\x28\x02\x04\x0d\x00\x20\x09\x41\x01\x36\x02\x04\x20\x07\x2f\x01\x06\x41\x4e\x6a\x21\x07\x02\x40\x02\x40\x02\x40\x20\x03\x41\x01\x4e\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x01\x0c\x01\x0b\x20\x04\x29\x03\x00\x21\x01\x20\x07\x0d\x00\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x00\x20\x01\x20\x08\x29\x03\x00\x10\x8d\x03\x45\x0d\x00\x20\x00\x41\xd1\x93\x03\x41\x00\x10\xb2\x02\x0c\x01\x0b\x20\x00\x20\x01\x41\xff\x00\x20\x01\x41\x00\x10\xb4\x01\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0b\x20\x00\x28\x02\x10\x22\x03\x29\x03\x80\x01\x21\x01\x20\x03\x42\x80\x80\x80\x80\x20\x37\x03\x80\x01\x20\x00\x20\x08\x29\x03\x00\x20\x01\x41\x01\x10\xec\x08\x20\x00\x20\x01\x10\xcd\x01\x0c\x03\x0b\x20\x00\x20\x0a\x10\xf0\x02\x0d\x01\x20\x00\x20\x0a\x10\xcd\x01\x0b\x20\x00\x20\x08\x29\x03\x00\x20\x01\x20\x07\x10\xec\x08\x0c\x01\x0b\x20\x06\x20\x0a\x37\x03\x10\x20\x06\x20\x01\x37\x03\x08\x20\x06\x20\x08\x29\x03\x00\x37\x03\x00\x20\x00\x41\xed\x00\x41\x03\x20\x06\x10\x95\x03\x20\x00\x20\x0a\x10\xcd\x01\x0b\x20\x06\x41\x20\x6a\x24\x00\x42\x80\x80\x80\x80\x30\x0b\x9f\x03\x02\x03\x7f\x03\x7e\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x02\x40\x20\x00\x20\x03\x29\x03\x00\x22\x08\x10\xdb\x03\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x20\x00\x20\x01\x41\x31\x10\xda\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x00\x41\x20\x10\xe2\x03\x22\x05\x45\x0d\x00\x41\x00\x21\x03\x20\x05\x41\x00\x36\x02\x14\x20\x05\x41\x00\x36\x02\x00\x02\x40\x03\x40\x20\x03\x41\x10\x46\x0d\x01\x20\x05\x20\x03\x6a\x22\x06\x41\x08\x6a\x20\x06\x41\x04\x6a\x22\x06\x36\x02\x00\x20\x06\x20\x06\x36\x02\x00\x20\x03\x41\x08\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x05\x42\x80\x80\x80\x80\x30\x37\x03\x18\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x20\x05\x36\x02\x20\x0b\x20\x00\x20\x04\x41\x10\x6a\x20\x01\x10\xdc\x04\x0d\x00\x02\x40\x02\x40\x20\x00\x20\x08\x42\x80\x80\x80\x80\x30\x41\x02\x20\x04\x41\x10\x6a\x10\xb5\x01\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x28\x02\x10\x22\x03\x29\x03\x80\x01\x21\x09\x20\x03\x42\x80\x80\x80\x80\x20\x37\x03\x80\x01\x20\x04\x20\x09\x37\x03\x08\x20\x00\x20\x04\x29\x03\x18\x42\x80\x80\x80\x80\x30\x41\x01\x20\x04\x41\x08\x6a\x10\xb5\x01\x21\x09\x20\x00\x20\x04\x29\x03\x08\x10\xcd\x01\x20\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x09\x10\xcd\x01\x0b\x20\x00\x20\x08\x10\xcd\x01\x20\x00\x20\x04\x29\x03\x10\x10\xcd\x01\x20\x00\x20\x04\x29\x03\x18\x10\xcd\x01\x20\x01\x21\x07\x0c\x02\x0b\x20\x00\x20\x04\x29\x03\x10\x10\xcd\x01\x20\x00\x20\x04\x29\x03\x18\x10\xcd\x01\x0b\x20\x00\x20\x01\x10\xcd\x01\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x07\x0b\x0b\x00\x20\x00\x20\x01\x41\x0a\x10\x95\x09\x0b\xf3\x01\x01\x04\x7f\x23\x00\x41\x30\x6b\x22\x04\x24\x00\x41\x7f\x21\x05\x02\x40\x20\x00\x20\x04\x41\x18\x6a\x20\x02\x10\x91\x04\x22\x06\x45\x0d\x00\x02\x40\x02\x40\x20\x00\x20\x04\x20\x03\x10\x91\x04\x22\x07\x0d\x00\x20\x06\x20\x04\x41\x18\x6a\x47\x0d\x01\x20\x04\x41\x18\x6a\x10\xd7\x02\x0c\x01\x0b\x02\x40\x02\x40\x02\x40\x20\x01\x41\xdd\x7e\x6a\x22\x05\x41\x06\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x05\x0e\x07\x05\x00\x01\x02\x04\x04\x03\x05\x0b\x20\x06\x20\x07\x10\xac\x09\x21\x05\x0c\x05\x0b\x20\x07\x20\x06\x10\xad\x09\x21\x05\x0c\x04\x0b\x20\x07\x20\x06\x10\xac\x09\x21\x05\x0c\x03\x0b\x20\x06\x20\x07\x10\x92\x04\x21\x05\x0c\x02\x0b\x10\x40\x00\x0b\x20\x06\x20\x07\x10\xad\x09\x21\x05\x0b\x02\x40\x20\x06\x20\x04\x41\x18\x6a\x47\x0d\x00\x20\x04\x41\x18\x6a\x10\xd7\x02\x0b\x02\x40\x20\x07\x20\x04\x47\x0d\x00\x20\x04\x10\xd7\x02\x0b\x20\x00\x20\x02\x10\xcd\x01\x0c\x01\x0b\x20\x02\x21\x03\x0b\x20\x00\x20\x03\x10\xcd\x01\x20\x04\x41\x30\x6a\x24\x00\x20\x05\x0b\xf6\x09\x02\x06\x7f\x04\x7e\x23\x00\x41\xd0\x00\x6b\x22\x05\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x10\xb8\x02\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x05\x41\x38\x6a\x20\x03\x10\xa4\x09\x22\x06\x45\x0d\x00\x02\x40\x20\x00\x20\x05\x41\x20\x6a\x20\x04\x10\xa4\x09\x22\x07\x0d\x00\x20\x00\x20\x06\x20\x05\x41\x38\x6a\x10\xd0\x04\x0c\x01\x0b\x20\x01\x41\xe6\x7e\x6a\x22\x08\x41\x18\x4b\x0d\x0a\x20\x0b\xa7\x41\x04\x6a\x21\x09\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x08\x0e\x19\x01\x02\x04\x12\x00\x05\x0d\x0d\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x11\x0e\x10\x0f\x11\x11\x03\x01\x0b\x20\x09\x20\x06\x20\x07\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa7\x09\x21\x08\x0c\x12\x0b\x20\x09\x20\x06\x20\x07\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa2\x09\x21\x08\x0c\x11\x0b\x02\x40\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x22\x08\x45\x0d\x00\x20\x08\x2d\x00\x28\x41\x04\x71\x0d\x04\x0b\x20\x05\x42\x00\x37\x02\x0c\x20\x05\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x04\x20\x05\x20\x00\x28\x02\xd8\x01\x36\x02\x00\x20\x09\x20\x05\x20\x06\x20\x07\x41\x01\x10\xbd\x02\x21\x08\x20\x05\x10\xd7\x02\x0c\x10\x0b\x20\x09\x20\x06\x20\x07\x41\x06\x10\xa8\x09\x41\x01\x71\x21\x08\x0c\x0f\x0b\x20\x09\x20\x06\x20\x07\x41\x01\x10\xa8\x09\x41\x01\x71\x21\x08\x0c\x0e\x0b\x20\x07\x28\x02\x04\x45\x0d\x06\x41\x01\x21\x08\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x22\x09\x45\x0d\x0d\x20\x09\x2d\x00\x28\x41\x04\x71\x45\x0d\x0d\x0b\x20\x00\x20\x0b\x10\xcd\x01\x02\x40\x20\x00\x20\x00\x28\x02\x28\x29\x03\x88\x02\x22\x0b\x41\xdd\x01\x20\x0b\x41\x00\x10\xb4\x01\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x22\x0c\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x0c\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x00\x20\x0b\x41\x25\x10\xfe\x03\x22\x09\x45\x0d\x03\x20\x09\x20\x01\x10\x99\x04\x41\x02\x74\x6a\x41\x08\x6a\x28\x02\x00\x22\x09\x0d\x02\x20\x00\x20\x0b\x10\xcd\x01\x0b\x20\x00\x10\xa1\x04\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x04\x20\x00\x20\x06\x20\x05\x41\x38\x6a\x10\xd0\x04\x20\x00\x20\x07\x20\x05\x41\x20\x6a\x10\xd0\x04\x0b\x20\x00\x20\x0b\x10\xcd\x01\x20\x00\x20\x03\x10\xcd\x01\x20\x00\x20\x04\x10\xcd\x01\x0c\x0d\x0b\x20\x00\x20\x03\x10\x9b\x04\x22\x0d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x00\x20\x04\x10\x9b\x04\x22\x0e\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x0d\x10\xcd\x01\x0c\x01\x0b\x20\x09\xad\x42\x80\x80\x80\x80\x70\x84\x10\xc0\x01\x21\x0c\x20\x05\x20\x0e\x37\x03\x08\x20\x05\x20\x0d\x37\x03\x00\x20\x00\x20\x0c\x42\x80\x80\x80\x80\x30\x41\x02\x20\x05\x10\xef\x02\x21\x0c\x20\x00\x20\x0d\x10\xcd\x01\x20\x00\x20\x0e\x10\xcd\x01\x41\x00\x21\x01\x20\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0b\x41\x01\x21\x01\x42\x80\x80\x80\x80\x30\x21\x0c\x0b\x20\x00\x20\x0b\x10\xcd\x01\x20\x00\x20\x06\x20\x05\x41\x38\x6a\x10\xd0\x04\x20\x00\x20\x07\x20\x05\x41\x20\x6a\x10\xd0\x04\x20\x00\x20\x03\x10\xcd\x01\x20\x00\x20\x04\x10\xcd\x01\x41\x7f\x21\x00\x20\x01\x0d\x0b\x20\x02\x20\x0c\x37\x03\x00\x0c\x09\x0b\x20\x0b\xa7\x41\x04\x6a\x21\x09\x20\x00\x41\xe0\x01\x6a\x28\x02\x00\x21\x08\x20\x00\x28\x02\xdc\x01\x21\x0a\x02\x40\x02\x40\x20\x01\x41\x9b\x01\x47\x0d\x00\x20\x09\x20\x06\x20\x07\x20\x0a\x20\x08\x10\xa1\x09\x21\x01\x0c\x01\x0b\x20\x09\x20\x06\x20\x07\x20\x0a\x20\x08\x41\x80\x80\x04\x72\x10\xa9\x09\x21\x01\x0b\x20\x00\x20\x06\x20\x05\x41\x38\x6a\x10\xd0\x04\x20\x00\x20\x07\x20\x05\x41\x20\x6a\x10\xd0\x04\x20\x00\x20\x03\x10\xcd\x01\x20\x00\x20\x04\x10\xcd\x01\x02\x40\x20\x01\x41\x20\x71\x22\x01\x45\x0d\x00\x20\x00\x20\x0b\x10\xcd\x01\x20\x00\x20\x01\x10\x86\x04\x0c\x0a\x0b\x20\x02\x20\x0b\x37\x03\x00\x0c\x08\x0b\x20\x09\x20\x06\x20\x07\x41\xff\xff\xff\xff\x03\x41\x81\x80\x04\x10\xa9\x09\x21\x08\x0c\x06\x0b\x20\x05\x20\x07\x41\x00\x10\xa5\x04\x02\x40\x02\x40\x20\x05\x28\x02\x00\x22\x08\x41\x80\x80\x80\x80\x78\x46\x22\x0a\x0d\x00\x20\x01\x41\xa1\x01\x47\x0d\x01\x0b\x20\x05\x41\x00\x41\x81\x80\x80\x80\x78\x20\x08\x20\x0a\x1b\x22\x08\x6b\x20\x08\x20\x01\x41\xa1\x01\x46\x1b\x22\x08\x36\x02\x00\x0b\x20\x09\x20\x06\x10\xcc\x04\x20\x09\x20\x08\x41\xff\xff\xff\xff\x03\x41\x01\x10\xba\x02\x72\x21\x08\x20\x05\x28\x02\x00\x41\x7f\x4a\x0d\x05\x20\x09\x41\x02\x10\xcd\x04\x41\x24\x71\x20\x08\x72\x21\x08\x0c\x05\x0b\x20\x09\x20\x06\x20\x07\x10\xaa\x09\x21\x08\x0c\x04\x0b\x20\x09\x20\x06\x20\x07\x41\x00\x10\xab\x09\x21\x08\x0c\x03\x0b\x20\x09\x20\x06\x20\x07\x41\x01\x10\xab\x09\x21\x08\x0c\x02\x0b\x10\x40\x00\x0b\x20\x09\x20\x06\x20\x07\x41\xff\xff\xff\xff\x03\x41\x01\x10\xbb\x02\x21\x08\x0b\x20\x00\x20\x06\x20\x05\x41\x38\x6a\x10\xd0\x04\x20\x00\x20\x07\x20\x05\x41\x20\x6a\x10\xd0\x04\x20\x00\x20\x03\x10\xcd\x01\x20\x00\x20\x04\x10\xcd\x01\x02\x40\x20\x08\x45\x0d\x00\x20\x00\x20\x0b\x10\xcd\x01\x20\x00\x20\x08\x10\x86\x04\x0c\x02\x0b\x20\x02\x20\x00\x20\x0b\x10\xa6\x09\x37\x03\x00\x0b\x41\x00\x21\x00\x0c\x01\x0b\x41\x7f\x21\x00\x0b\x20\x05\x41\xd0\x00\x6a\x24\x00\x20\x00\x0b\xeb\x02\x02\x05\x7f\x01\x7e\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x41\x8d\x01\x47\x0d\x00\x02\x40\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x22\x05\x45\x0d\x00\x20\x05\x2d\x00\x28\x41\x04\x71\x0d\x01\x0b\x20\x00\x41\xa3\x98\x03\x41\x00\x10\xb2\x02\x0c\x01\x0b\x20\x00\x10\xb8\x02\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0b\x20\x00\x20\x03\x10\xcd\x01\x41\x7f\x21\x00\x0c\x01\x0b\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x10\xa4\x09\x21\x05\x02\x40\x02\x40\x02\x40\x20\x02\x41\xf4\x7e\x6a\x22\x06\x41\x09\x4b\x0d\x00\x20\x09\xa7\x22\x07\x41\x04\x6a\x21\x08\x02\x40\x02\x40\x02\x40\x20\x06\x0e\x0a\x01\x00\x04\x04\x03\x03\x03\x03\x03\x02\x01\x0b\x20\x08\x20\x05\x10\xcc\x04\x21\x02\x0c\x04\x0b\x20\x08\x20\x05\x10\xcc\x04\x21\x02\x20\x07\x41\x08\x6a\x22\x08\x20\x08\x28\x02\x00\x41\x01\x73\x36\x02\x00\x0c\x03\x0b\x20\x08\x20\x05\x42\x01\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa5\x09\x21\x02\x20\x07\x41\x08\x6a\x22\x08\x20\x08\x28\x02\x00\x41\x01\x73\x36\x02\x00\x0c\x02\x0b\x10\x40\x00\x0b\x20\x08\x20\x05\x20\x02\x41\x01\x74\x41\xe3\x7d\x6a\xac\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa5\x09\x21\x02\x0b\x20\x00\x20\x05\x20\x04\x41\x08\x6a\x10\xd0\x04\x20\x00\x20\x03\x10\xcd\x01\x02\x40\x20\x02\x45\x0d\x00\x20\x00\x20\x09\x10\xcd\x01\x20\x00\x20\x02\x10\x86\x04\x41\x7f\x21\x00\x0c\x01\x0b\x20\x01\x20\x00\x20\x09\x10\xa6\x09\x37\x03\x00\x41\x00\x21\x00\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x00\x0b\xe0\x0e\x02\x0e\x7f\x01\x7e\x23\x00\x41\xd0\x00\x6b\x22\x05\x24\x00\x02\x40\x20\x00\x10\xb8\x02\x22\x13\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x05\x20\x01\x36\x02\x34\x20\x13\xa7\x41\x04\x6a\x21\x06\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x41\x10\x4a\x0d\x00\x20\x01\x41\xe2\xcb\x05\x20\x05\x41\x34\x6a\x10\x96\x09\x0d\x01\x20\x05\x28\x02\x34\x21\x01\x0b\x41\x00\x21\x07\x02\x40\x20\x01\x2d\x00\x00\x22\x08\x41\x55\x6a\x22\x09\x41\x02\x4b\x0d\x00\x02\x40\x02\x40\x20\x09\x0e\x03\x01\x02\x00\x01\x0b\x41\x01\x21\x07\x0b\x20\x05\x20\x01\x41\x01\x6a\x22\x09\x36\x02\x34\x20\x01\x2d\x00\x01\x21\x08\x20\x09\x21\x01\x0b\x02\x40\x02\x40\x02\x40\x20\x08\x41\xff\x01\x71\x41\x30\x47\x0d\x00\x20\x01\x2d\x00\x01\x22\x08\x41\xc2\x00\x46\x0d\x01\x02\x40\x20\x08\x41\xf8\x00\x46\x0d\x00\x20\x08\x41\xe2\x00\x46\x0d\x02\x20\x08\x41\xd8\x00\x47\x0d\x02\x0b\x02\x40\x20\x02\x41\x6f\x71\x0d\x00\x20\x05\x20\x01\x41\x02\x6a\x36\x02\x34\x41\x10\x21\x02\x20\x01\x2d\x00\x02\x10\x97\x09\x41\x10\x4e\x0d\x04\x0c\x03\x0b\x20\x08\x41\xe2\x00\x47\x1a\x0c\x01\x0b\x20\x02\x41\x10\x4a\x0d\x01\x20\x01\x41\xe6\xcb\x05\x20\x05\x41\x34\x6a\x10\x96\x09\x45\x0d\x00\x20\x06\x20\x07\x10\xa2\x04\x41\x00\x21\x08\x0c\x04\x0b\x20\x02\x0d\x00\x41\x0a\x21\x02\x0b\x02\x40\x02\x40\x20\x02\x20\x02\x41\x7f\x6a\x22\x08\x71\x45\x0d\x00\x20\x05\x42\x00\x37\x02\x24\x20\x05\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x1c\x20\x05\x20\x06\x28\x02\x00\x36\x02\x18\x20\x05\x41\x18\x6a\x21\x0a\x41\x00\x21\x0b\x0c\x01\x0b\x41\x00\x41\x20\x20\x08\x67\x6b\x20\x02\x41\x02\x49\x1b\x21\x0b\x20\x06\x21\x0a\x0b\x20\x05\x28\x02\x34\x21\x08\x02\x40\x03\x40\x20\x08\x2d\x00\x00\x41\x30\x47\x0d\x01\x20\x05\x20\x08\x41\x01\x6a\x22\x08\x36\x02\x34\x0c\x00\x0b\x00\x0b\x41\x20\x21\x0c\x02\x40\x20\x0b\x0d\x00\x20\x02\x41\xee\xcb\x05\x6a\x2d\x00\x00\x21\x0c\x0b\x20\x0a\x41\x01\x10\x98\x09\x1a\x20\x05\x41\x00\x36\x02\x30\x20\x0c\x21\x08\x41\x00\x21\x0d\x41\x00\x21\x0e\x41\x00\x21\x0f\x41\x00\x21\x10\x02\x40\x02\x40\x02\x40\x02\x40\x03\x40\x02\x40\x02\x40\x20\x05\x28\x02\x34\x22\x09\x2d\x00\x00\x22\x11\x41\x2e\x47\x0d\x00\x02\x40\x20\x09\x20\x01\x4b\x0d\x00\x41\x2e\x21\x11\x20\x09\x2c\x00\x01\x10\x97\x09\x20\x02\x4e\x0d\x01\x0b\x20\x10\x0d\x03\x41\x01\x21\x10\x20\x05\x20\x09\x41\x01\x6a\x22\x12\x36\x02\x34\x20\x09\x2d\x00\x01\x21\x11\x20\x0f\x21\x0e\x0c\x01\x0b\x20\x09\x21\x12\x0b\x20\x11\x41\x18\x74\x41\x18\x75\x10\x97\x09\x22\x09\x20\x02\x4f\x0d\x01\x20\x05\x20\x12\x41\x01\x6a\x36\x02\x34\x20\x0f\x41\x01\x6a\x21\x0f\x02\x40\x20\x0b\x45\x0d\x00\x02\x40\x20\x08\x20\x0b\x6b\x22\x08\x41\x00\x4a\x0d\x00\x20\x0a\x20\x05\x41\x30\x6a\x20\x09\x41\x00\x20\x08\x6b\x76\x20\x0d\x72\x10\x99\x09\x0d\x05\x20\x08\x41\x1f\x75\x20\x09\x20\x08\x41\x20\x6a\x22\x08\x74\x71\x21\x0d\x0c\x02\x0b\x20\x09\x20\x08\x74\x20\x0d\x72\x21\x0d\x0c\x01\x0b\x20\x09\x20\x0d\x20\x02\x6c\x6a\x21\x0d\x20\x08\x41\x7f\x6a\x22\x08\x0d\x00\x20\x0a\x20\x05\x41\x30\x6a\x20\x0d\x10\x99\x09\x21\x09\x20\x0c\x21\x08\x41\x00\x21\x0d\x20\x09\x45\x0d\x00\x0c\x02\x0b\x00\x0b\x20\x08\x20\x0c\x46\x0d\x02\x02\x40\x20\x0b\x0d\x00\x03\x40\x20\x08\x45\x0d\x01\x20\x08\x41\x7f\x6a\x21\x08\x20\x0d\x20\x02\x6c\x21\x0d\x0c\x00\x0b\x00\x0b\x20\x0a\x20\x05\x41\x30\x6a\x20\x0d\x10\x99\x09\x45\x0d\x02\x20\x0b\x0d\x01\x0b\x20\x0a\x10\x9a\x09\x0b\x20\x06\x10\x97\x04\x41\x20\x21\x08\x0c\x03\x0b\x20\x0a\x28\x02\x10\x41\x00\x20\x05\x28\x02\x30\x22\x12\x41\x02\x74\x41\x04\x6a\x10\x74\x1a\x20\x05\x28\x02\x34\x22\x0d\x20\x01\x47\x0d\x01\x20\x0b\x0d\x00\x20\x0a\x10\x9a\x09\x0b\x20\x06\x10\x97\x04\x41\x00\x21\x08\x0c\x01\x0b\x20\x0e\x20\x0f\x20\x10\x1b\x21\x0f\x20\x0d\x2d\x00\x00\x21\x08\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x41\x0a\x47\x0d\x00\x20\x08\x41\x20\x72\x41\xe5\x00\x46\x0d\x01\x41\x00\x21\x11\x41\x00\x21\x10\x0c\x02\x0b\x20\x08\x41\xc0\x00\x46\x0d\x00\x02\x40\x20\x0b\x0d\x00\x41\x00\x21\x11\x0c\x05\x0b\x20\x08\x41\x20\x72\x41\xf0\x00\x46\x0d\x00\x41\x00\x21\x11\x0c\x02\x0b\x41\x00\x21\x11\x41\x00\x21\x10\x20\x0d\x20\x01\x4d\x0d\x00\x20\x05\x20\x0d\x41\x01\x6a\x22\x09\x36\x02\x34\x20\x08\x41\x20\x72\x21\x01\x41\x00\x21\x08\x02\x40\x02\x40\x20\x0d\x2d\x00\x01\x41\x55\x6a\x22\x10\x41\x02\x4b\x0d\x00\x41\x00\x21\x11\x02\x40\x02\x40\x20\x10\x0e\x03\x00\x03\x01\x00\x0b\x20\x05\x20\x0d\x41\x02\x6a\x22\x09\x36\x02\x34\x0c\x01\x0b\x20\x05\x20\x0d\x41\x02\x6a\x22\x09\x36\x02\x34\x41\x01\x21\x11\x0c\x01\x0b\x41\x00\x21\x11\x0b\x20\x01\x41\xf0\x00\x46\x21\x10\x02\x40\x03\x40\x20\x09\x2c\x00\x00\x10\x97\x09\x22\x0d\x41\x09\x4a\x0d\x01\x02\x40\x20\x08\x41\xcc\x99\xb3\xe6\x00\x48\x0d\x00\x02\x40\x20\x11\x45\x0d\x00\x20\x06\x20\x07\x10\x9b\x09\x41\x18\x21\x08\x0c\x08\x0b\x20\x06\x20\x07\x10\xa2\x04\x41\x14\x21\x08\x0c\x07\x0b\x20\x05\x20\x09\x41\x01\x6a\x22\x09\x36\x02\x34\x20\x0d\x20\x08\x41\x0a\x6c\x6a\x21\x08\x0c\x00\x0b\x00\x0b\x41\x00\x20\x08\x6b\x20\x08\x20\x11\x1b\x21\x11\x0b\x20\x0b\x45\x0d\x02\x41\x01\x21\x08\x20\x10\x0d\x01\x0b\x20\x0b\x21\x08\x0b\x20\x0a\x20\x07\x36\x02\x04\x20\x0a\x20\x08\x20\x11\x6c\x20\x0f\x20\x0b\x6c\x6a\x36\x02\x08\x20\x0a\x41\xff\xff\xff\xff\x03\x41\x01\x10\x9c\x09\x21\x08\x0c\x01\x0b\x20\x05\x20\x12\x41\x01\x6a\x22\x08\x36\x02\x30\x02\x40\x02\x40\x20\x0a\x28\x02\x0c\x20\x08\x6b\x22\x12\x0d\x00\x20\x06\x20\x07\x10\x9b\x09\x41\x00\x21\x08\x0c\x01\x0b\x20\x05\x42\x00\x37\x02\x0c\x20\x05\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x04\x20\x05\x20\x06\x28\x02\x00\x22\x0b\x36\x02\x00\x20\x0a\x28\x02\x10\x21\x10\x20\x02\x10\x9d\x09\x21\x0e\x41\x00\x21\x09\x02\x40\x02\x40\x02\x40\x20\x0b\x28\x02\x00\x41\x00\x41\x02\x41\x22\x20\x12\x41\x7f\x6a\x67\x6b\x20\x12\x41\x01\x46\x1b\x22\x0d\x41\x14\x6c\x20\x0b\x28\x02\x04\x11\x01\x00\x22\x01\x45\x0d\x00\x20\x10\x20\x08\x41\x02\x74\x6a\x21\x10\x20\x0f\x20\x12\x20\x0c\x6c\x6b\x20\x11\x6a\x21\x0f\x20\x01\x21\x08\x02\x40\x03\x40\x20\x09\x20\x0d\x4e\x0d\x01\x20\x08\x20\x05\x28\x02\x00\x36\x02\x00\x20\x08\x41\x0c\x6a\x42\x00\x37\x02\x00\x20\x08\x41\x04\x6a\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x00\x20\x08\x41\x14\x6a\x21\x08\x20\x09\x41\x01\x6a\x21\x09\x0c\x00\x0b\x00\x0b\x41\x00\x21\x08\x20\x05\x20\x10\x20\x12\x41\x00\x20\x12\x20\x0e\x20\x01\x10\x9e\x09\x21\x11\x20\x01\x21\x09\x02\x40\x03\x40\x20\x08\x20\x0d\x4e\x0d\x01\x20\x08\x41\x01\x6a\x21\x08\x20\x09\x10\x9a\x09\x20\x09\x41\x14\x6a\x21\x09\x0c\x00\x0b\x00\x0b\x20\x0b\x28\x02\x00\x20\x01\x41\x00\x20\x0b\x28\x02\x04\x11\x01\x00\x1a\x20\x11\x45\x0d\x01\x0b\x20\x06\x10\x97\x04\x41\x20\x21\x08\x0c\x01\x0b\x20\x05\x20\x07\x36\x02\x04\x02\x40\x20\x05\x28\x02\x0c\x0d\x00\x20\x06\x20\x05\x10\xcc\x04\x21\x08\x0c\x01\x0b\x02\x40\x20\x0f\x0d\x00\x20\x06\x20\x05\x10\xcc\x04\x20\x06\x41\xff\xff\xff\xff\x03\x41\x01\x10\x9f\x09\x72\x21\x08\x0c\x01\x0b\x20\x05\x42\x00\x37\x02\x44\x20\x05\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x3c\x20\x05\x20\x06\x28\x02\x00\x36\x02\x38\x20\x05\x41\x38\x6a\x20\x02\x20\x0f\x20\x0f\x41\x1f\x75\x22\x08\x6a\x20\x08\x73\x41\xff\xff\xff\xff\x03\x41\x00\x10\xa0\x09\x21\x08\x02\x40\x02\x40\x20\x0f\x41\x7f\x4a\x0d\x00\x20\x06\x20\x05\x20\x05\x41\x38\x6a\x20\x05\x28\x02\x0c\x41\x05\x74\x41\x00\x10\xa1\x09\x21\x09\x0c\x01\x0b\x20\x06\x20\x05\x20\x05\x41\x38\x6a\x41\xff\xff\xff\xff\x03\x41\x00\x10\xa2\x09\x21\x09\x0b\x20\x09\x20\x08\x72\x21\x08\x20\x05\x41\x38\x6a\x10\x9a\x09\x0b\x20\x05\x10\x9a\x09\x0b\x20\x0a\x10\x9a\x09\x0b\x02\x40\x20\x08\x41\x20\x71\x45\x0d\x00\x20\x00\x20\x13\x10\xcd\x01\x20\x00\x10\xc1\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x13\x0c\x01\x0b\x20\x00\x20\x13\x20\x03\x41\x09\x76\x41\x01\x71\x10\xa3\x09\x21\x13\x0b\x20\x05\x41\xd0\x00\x6a\x24\x00\x20\x13\x0b\xf2\x03\x02\x03\x7f\x01\x7e\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x41\xff\xe4\x01\x41\x00\x10\xb2\x02\x0c\x01\x0b\x20\x03\x29\x03\x00\x10\xc0\x01\x21\x01\x02\x40\x03\x40\x41\x07\x20\x01\x42\x20\x88\xa7\x22\x03\x20\x03\x41\x0b\x6a\x41\x11\x4b\x1b\x41\x0b\x6a\x22\x03\x41\x12\x4b\x0d\x01\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x03\x0e\x13\x02\x08\x01\x06\x03\x06\x06\x06\x06\x06\x04\x00\x00\x06\x06\x06\x06\x06\x01\x02\x0b\x20\x00\x20\x01\x42\x20\x86\x42\x20\x87\x10\xf7\x03\x21\x01\x0c\x07\x0b\x02\x40\x02\x40\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x01\x10\x91\x04\x22\x03\x28\x02\x08\x41\xfe\xff\xff\xff\x07\x48\x0d\x00\x20\x00\x20\x01\x10\xcd\x01\x20\x00\x41\xc4\x97\x03\x41\x00\x10\xa6\x04\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0c\x01\x0b\x20\x00\x10\xb8\x02\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x07\xa7\x41\x04\x6a\x22\x05\x20\x03\x10\xcc\x04\x21\x06\x20\x05\x41\x01\x10\xcd\x04\x21\x05\x20\x00\x20\x01\x10\xcd\x01\x02\x40\x20\x05\x20\x06\x72\x22\x05\x41\x20\x71\x45\x0d\x00\x20\x00\x20\x07\x10\xcd\x01\x20\x00\x10\xc1\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0c\x01\x0b\x02\x40\x20\x05\x41\x10\x71\x45\x0d\x00\x20\x00\x20\x07\x10\xcd\x01\x20\x00\x41\xed\x97\x03\x41\x00\x10\xa6\x04\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0c\x01\x0b\x20\x00\x20\x07\x10\xa6\x09\x21\x01\x0b\x20\x03\x20\x04\x41\x08\x6a\x47\x0d\x07\x20\x04\x41\x08\x6a\x10\xd7\x02\x0c\x07\x0b\x20\x00\x20\x01\x10\xcd\x01\x0c\x05\x0b\x20\x00\x20\x01\x10\xf2\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x02\x0c\x05\x0b\x20\x00\x20\x01\x10\xd1\x04\x21\x01\x0c\x04\x0b\x20\x00\x20\x01\x41\x01\x10\xed\x02\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x0c\x03\x0b\x00\x0b\x20\x00\x20\x01\x10\xcd\x01\x20\x00\x41\xd4\xde\x01\x41\x00\x10\xb2\x02\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x01\x0b\x82\x01\x02\x02\x7f\x02\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\x96\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x0c\x01\x0b\x02\x40\x20\x04\x29\x03\x08\x22\x06\x10\x01\x22\x07\x42\x7f\x52\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x06\x0c\x01\x0b\x20\x06\x20\x07\xa7\x22\x05\x10\x39\x22\x03\xad\x10\x02\x20\x00\x20\x03\x20\x05\x10\xb3\x02\x21\x06\x20\x03\x10\x3b\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x06\x0b\x11\x00\x20\x00\x20\x01\x20\x02\x20\x03\x41\x00\x41\x00\x10\xd2\x01\x0b\x20\x00\x20\x00\x20\x01\x20\x00\x20\x02\x10\xb3\x01\x22\x02\x20\x03\x41\x80\x80\x01\x10\x9f\x03\x1a\x20\x00\x20\x02\x10\xe4\x02\x0b\x56\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\x96\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0c\x01\x0b\x20\x00\x20\x04\x29\x03\x08\x10\x01\x10\xb4\x02\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x70\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\x96\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0c\x01\x0b\x20\x00\x20\x04\x41\x04\x6a\x20\x03\x29\x03\x08\x10\xb5\x02\x21\x00\x20\x04\x29\x03\x08\x20\x04\x35\x02\x04\x20\x00\xad\x10\x03\x42\x80\x80\x80\x80\x30\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x57\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\x96\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0c\x01\x0b\x20\x04\x29\x03\x08\x10\x04\x42\x80\x80\x80\x80\x30\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x57\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\x96\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0c\x01\x0b\x20\x04\x29\x03\x08\x10\x05\x42\x80\x80\x80\x80\x30\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x57\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\x96\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0c\x01\x0b\x20\x04\x29\x03\x08\x10\x06\x42\x80\x80\x80\x80\x30\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x57\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\x96\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0c\x01\x0b\x20\x04\x29\x03\x08\x10\x07\x42\x80\x80\x80\x80\x30\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x57\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\x96\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0c\x01\x0b\x20\x04\x29\x03\x08\x10\x08\x42\x80\x80\x80\x80\x30\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x09\x00\x20\x00\x10\x09\x10\xb4\x02\x0b\x09\x00\x20\x00\x10\x0a\x10\xb4\x02\x0b\x09\x00\x20\x00\x10\x0b\x10\xb4\x02\x0b\x09\x00\x20\x00\x10\x0c\x10\xb4\x02\x0b\x26\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x04\xad\x10\x0d\x20\x00\x20\x04\x10\xb6\x02\x21\x05\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x26\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x04\xad\x10\x0e\x20\x00\x20\x04\x10\xb6\x02\x21\x05\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x26\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x04\xad\x10\x0f\x20\x00\x20\x04\x10\xb6\x02\x21\x05\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x09\x00\x20\x00\x10\x10\x10\xb4\x02\x0b\x09\x00\x20\x00\x10\x11\x10\xb4\x02\x0b\x57\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\x96\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0c\x01\x0b\x20\x04\x29\x03\x08\x10\x12\x42\x80\x80\x80\x80\x30\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x70\x02\x02\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x00\x20\x04\x41\x04\x6a\x20\x03\x29\x03\x00\x10\xb5\x02\x21\x05\x02\x40\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x08\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\x96\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x0c\x01\x0b\x20\x04\x35\x02\x04\x20\x05\xad\x20\x04\x29\x03\x08\x10\x13\x42\x80\x80\x80\x80\x30\x21\x06\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x06\x0b\x70\x02\x02\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x00\x20\x04\x41\x04\x6a\x20\x03\x29\x03\x00\x10\xb5\x02\x21\x05\x02\x40\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x08\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\x96\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x0c\x01\x0b\x20\x04\x35\x02\x04\x20\x05\xad\x20\x04\x29\x03\x08\x10\x14\x42\x80\x80\x80\x80\x30\x21\x06\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x06\x0b\x70\x02\x02\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x00\x20\x04\x41\x04\x6a\x20\x03\x29\x03\x00\x10\xb5\x02\x21\x05\x02\x40\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x08\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\x96\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x0c\x01\x0b\x20\x04\x35\x02\x04\x20\x05\xad\x20\x04\x29\x03\x08\x10\x15\x42\x80\x80\x80\x80\x30\x21\x06\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x06\x0b\x70\x02\x02\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x00\x20\x04\x41\x04\x6a\x20\x03\x29\x03\x00\x10\xb5\x02\x21\x05\x02\x40\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x08\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\x96\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x0c\x01\x0b\x20\x04\x35\x02\x04\x20\x05\xad\x20\x04\x29\x03\x08\x10\x16\x42\x80\x80\x80\x80\x30\x21\x06\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x06\x0b\xe9\x01\x02\x03\x7f\x01\x7e\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x20\x00\x20\x04\x41\x04\x6a\x20\x03\x29\x03\x00\x10\xb5\x02\x21\x05\x20\x00\x20\x04\x20\x03\x29\x03\x08\x10\xb5\x02\x21\x06\x02\x40\x02\x40\x20\x00\x20\x04\x41\x18\x6a\x20\x03\x29\x03\x10\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\x91\xb6\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x0c\x01\x0b\x02\x40\x20\x00\x20\x04\x41\x10\x6a\x20\x03\x29\x03\x18\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\xb5\xb6\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x0c\x01\x0b\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x20\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\x96\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x0c\x01\x0b\x20\x00\x20\x04\x35\x02\x04\x20\x05\xad\x20\x04\x35\x02\x00\x20\x06\xad\x20\x04\x29\x03\x18\x20\x04\x29\x03\x10\x20\x04\x29\x03\x08\x10\x17\x10\xb4\x02\x21\x07\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x07\x0b\x35\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x00\x10\xb5\x02\x21\x00\x20\x04\x35\x02\x0c\x20\x00\xad\x10\x18\x20\x04\x41\x10\x6a\x24\x00\x42\x80\x80\x80\x80\x30\x0b\x46\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x02\x41\x01\x47\x0d\x00\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x00\x10\xb7\x01\x21\x02\x20\x04\x35\x02\x0c\x20\x02\xad\x10\x00\x0c\x01\x0b\x10\x19\x0b\x20\x04\x41\x10\x6a\x24\x00\x42\x80\x80\x80\x80\x30\x0b\x35\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x00\x10\xb5\x02\x21\x00\x20\x04\x35\x02\x0c\x20\x00\xad\x10\x00\x20\x04\x41\x10\x6a\x24\x00\x42\x80\x80\x80\x80\x30\x0b\x35\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x00\x10\xb7\x01\x21\x00\x20\x04\x35\x02\x0c\x20\x00\xad\x10\x1a\x20\x04\x41\x10\x6a\x24\x00\x42\x80\x80\x80\x80\x30\x0b\x35\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x00\x10\xb5\x02\x21\x00\x20\x04\x35\x02\x0c\x20\x00\xad\x10\x1a\x20\x04\x41\x10\x6a\x24\x00\x42\x80\x80\x80\x80\x30\x0b\x35\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x00\x10\xb5\x02\x21\x00\x20\x04\x35\x02\x0c\x20\x00\xad\x10\x1b\x20\x04\x41\x10\x6a\x24\x00\x42\x80\x80\x80\x80\x30\x0b\xd2\x01\x02\x04\x7f\x01\x7e\x23\x00\x41\x30\x6b\x22\x04\x24\x00\x20\x00\x20\x04\x41\x2c\x6a\x20\x03\x29\x03\x00\x10\xb7\x01\x21\x05\x20\x00\x20\x04\x41\x28\x6a\x20\x03\x29\x03\x08\x10\xb7\x01\x21\x06\x20\x00\x20\x04\x41\x24\x6a\x20\x03\x29\x03\x10\x10\xb5\x02\x21\x07\x02\x40\x02\x40\x20\x00\x20\x03\x29\x03\x18\x20\x04\x41\x10\x6a\x10\xb7\x02\x45\x0d\x00\x20\x00\x41\xc4\xb5\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x0c\x01\x0b\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x20\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\xde\xb5\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x0c\x01\x0b\x20\x00\x20\x04\x35\x02\x2c\x20\x05\xad\x20\x04\x35\x02\x28\x20\x06\xad\x20\x04\x35\x02\x24\x20\x07\xad\x20\x04\x41\x10\x6a\xad\x20\x04\x29\x03\x08\x10\x1c\x10\xb4\x02\x21\x08\x0b\x20\x04\x41\x30\x6a\x24\x00\x20\x08\x0b\x86\x02\x02\x04\x7f\x01\x7e\x23\x00\x41\xc0\x00\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x38\x6a\x20\x03\x29\x03\x00\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\xef\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x0c\x01\x0b\x20\x00\x20\x04\x41\x34\x6a\x20\x03\x29\x03\x08\x10\xb7\x01\x21\x05\x20\x00\x20\x04\x41\x30\x6a\x20\x03\x29\x03\x10\x10\xb7\x01\x21\x06\x20\x00\x20\x04\x41\x2c\x6a\x20\x03\x29\x03\x18\x10\xb5\x02\x21\x07\x02\x40\x20\x00\x20\x03\x29\x03\x20\x20\x04\x41\x10\x6a\x10\xb7\x02\x45\x0d\x00\x20\x00\x41\xc4\xb5\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x0c\x01\x0b\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x28\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\xde\xb5\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x0c\x01\x0b\x20\x00\x20\x04\x29\x03\x38\x20\x04\x35\x02\x34\x20\x05\xad\x20\x04\x35\x02\x30\x20\x06\xad\x20\x04\x35\x02\x2c\x20\x07\xad\x20\x04\x41\x10\x6a\xad\x20\x04\x29\x03\x08\x10\x1d\x10\xb4\x02\x21\x08\x0b\x20\x04\x41\xc0\x00\x6a\x24\x00\x20\x08\x0b\x8c\x01\x02\x06\x7f\x01\x7e\x23\x00\x22\x04\x21\x05\x20\x04\x20\x02\x41\x03\x74\x41\x0f\x6a\x41\x70\x71\x6b\x22\x06\x24\x00\x41\x00\x21\x04\x41\x7f\x21\x07\x02\x40\x02\x40\x03\x40\x20\x07\x41\x01\x6a\x22\x07\x20\x02\x4e\x0d\x01\x20\x06\x20\x04\x6a\x21\x08\x20\x03\x20\x04\x6a\x21\x09\x20\x04\x41\x08\x6a\x21\x04\x20\x00\x20\x08\x20\x09\x29\x03\x00\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x0b\x20\x00\x41\xf4\xb5\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x0a\x0c\x01\x0b\x20\x00\x20\x06\xad\x20\x02\xac\x10\x1e\x10\xb4\x02\x21\x0a\x0b\x20\x05\x24\x00\x20\x0a\x0b\x3a\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x00\x10\xb7\x01\x21\x03\x20\x00\x20\x04\x35\x02\x0c\x20\x03\xad\x10\x1f\x10\xb4\x02\x21\x05\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x6f\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\xef\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0c\x01\x0b\x20\x00\x20\x04\x41\x04\x6a\x20\x03\x29\x03\x08\x10\xb7\x01\x21\x03\x20\x00\x20\x04\x29\x03\x08\x20\x04\x35\x02\x04\x20\x03\xad\x10\x20\x10\xb4\x02\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x57\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\xef\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0c\x01\x0b\x20\x04\x29\x03\x08\x10\x21\x42\x80\x80\x80\x80\x30\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x70\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\xef\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0c\x01\x0b\x20\x00\x20\x04\x41\x04\x6a\x20\x03\x29\x03\x08\x10\xb5\x02\x21\x00\x20\x04\x29\x03\x08\x20\x04\x35\x02\x04\x20\x00\xad\x10\x22\x42\x80\x80\x80\x80\x30\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\xec\x01\x02\x03\x7f\x01\x7e\x23\x00\x41\x30\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x28\x6a\x20\x03\x29\x03\x00\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\xef\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x0c\x01\x0b\x20\x00\x20\x04\x41\x24\x6a\x20\x03\x29\x03\x08\x10\xb7\x01\x21\x05\x20\x00\x20\x04\x41\x20\x6a\x20\x03\x29\x03\x10\x10\xb5\x02\x21\x06\x02\x40\x20\x00\x20\x03\x29\x03\x18\x20\x04\x41\x10\x6a\x10\xb7\x02\x45\x0d\x00\x20\x00\x41\xc4\xb5\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x0c\x01\x0b\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x20\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\xde\xb5\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x0c\x01\x0b\x20\x04\x29\x03\x28\x20\x04\x35\x02\x24\x20\x05\xad\x20\x04\x35\x02\x20\x20\x06\xad\x20\x04\x41\x10\x6a\xad\x20\x04\x29\x03\x08\x10\x23\x42\x80\x80\x80\x80\x30\x21\x07\x0b\x20\x04\x41\x30\x6a\x24\x00\x20\x07\x0b\x82\x01\x02\x01\x7f\x01\x7e\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x18\x6a\x20\x03\x29\x03\x00\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\xef\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0c\x01\x0b\x02\x40\x20\x00\x20\x03\x29\x03\x08\x20\x04\x10\xb7\x02\x45\x0d\x00\x20\x00\x41\xc4\xb5\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0c\x01\x0b\x20\x04\x29\x03\x18\x20\x04\xad\x10\x24\x42\x80\x80\x80\x80\x30\x21\x05\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x05\x0b\xa1\x01\x02\x01\x7f\x01\x7e\x23\x00\x41\x30\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x28\x6a\x20\x03\x29\x03\x00\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\xef\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0c\x01\x0b\x02\x40\x20\x00\x20\x03\x29\x03\x08\x20\x04\x41\x10\x6a\x10\xb7\x02\x45\x0d\x00\x20\x00\x41\xc4\xb5\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0c\x01\x0b\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x10\x10\xb7\x01\x21\x00\x20\x04\x29\x03\x28\x20\x04\x41\x10\x6a\xad\x20\x04\x35\x02\x0c\x20\x00\xad\x10\x25\x42\x80\x80\x80\x80\x30\x21\x05\x0b\x20\x04\x41\x30\x6a\x24\x00\x20\x05\x0b\xa2\x01\x02\x02\x7f\x01\x7e\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x18\x6a\x20\x03\x29\x03\x00\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\xef\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x0c\x01\x0b\x20\x00\x20\x04\x41\x14\x6a\x20\x03\x29\x03\x08\x10\xb7\x01\x21\x05\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x10\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\x8f\xb5\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x0c\x01\x0b\x20\x04\x29\x03\x18\x20\x04\x35\x02\x14\x20\x05\xad\x20\x04\x29\x03\x08\x10\x26\x42\x80\x80\x80\x80\x30\x21\x06\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x06\x0b\xff\x01\x02\x03\x7f\x01\x7e\x23\x00\x41\x30\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x28\x6a\x20\x03\x29\x03\x00\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\xef\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x0c\x01\x0b\x20\x00\x20\x04\x41\x24\x6a\x20\x03\x29\x03\x08\x10\xb7\x01\x21\x05\x02\x40\x20\x00\x20\x04\x41\x10\x6a\x20\x03\x29\x03\x10\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\x8f\xb5\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x0c\x01\x0b\x02\x40\x20\x00\x20\x03\x29\x03\x18\x20\x04\x10\xb7\x02\x45\x0d\x00\x20\x00\x41\xa7\xb5\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x0c\x01\x0b\x20\x00\x20\x04\x41\x20\x6a\x20\x03\x29\x03\x20\x10\xb7\x01\x21\x06\x20\x00\x20\x04\x41\x1c\x6a\x20\x03\x29\x03\x28\x10\xb7\x01\x21\x00\x20\x04\x29\x03\x28\x20\x04\x35\x02\x24\x20\x05\xad\x20\x04\x29\x03\x10\x20\x04\xad\x20\x04\x35\x02\x20\x20\x06\xad\x20\x04\x35\x02\x1c\x20\x00\xad\x10\x27\x42\x80\x80\x80\x80\x30\x21\x07\x0b\x20\x04\x41\x30\x6a\x24\x00\x20\x07\x0b\x70\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\xef\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0c\x01\x0b\x20\x00\x20\x04\x41\x04\x6a\x20\x03\x29\x03\x08\x10\xb7\x01\x21\x00\x20\x04\x29\x03\x08\x20\x04\x35\x02\x04\x20\x00\xad\x10\x28\x42\x80\x80\x80\x80\x30\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x70\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\xef\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0c\x01\x0b\x20\x00\x20\x04\x41\x04\x6a\x20\x03\x29\x03\x08\x10\xb7\x01\x21\x00\x20\x04\x29\x03\x08\x20\x04\x35\x02\x04\x20\x00\xad\x10\x29\x42\x80\x80\x80\x80\x30\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x09\x00\x20\x00\x10\x2a\x10\xb4\x02\x0b\x85\x01\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\xd2\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0c\x01\x0b\x02\x40\x20\x00\x20\x04\x20\x03\x29\x03\x08\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\x96\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0c\x01\x0b\x20\x00\x20\x04\x29\x03\x08\x20\x04\x29\x03\x00\x10\x2b\x10\xb4\x02\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x57\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\xb4\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0c\x01\x0b\x20\x04\x29\x03\x08\x10\x2c\x42\x80\x80\x80\x80\x30\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x85\x01\x02\x03\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x00\x10\xb5\x02\x21\x05\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x08\x10\xb5\x02\x21\x06\x02\x40\x02\x40\x20\x00\x20\x04\x20\x03\x29\x03\x10\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\x96\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x0c\x01\x0b\x20\x00\x20\x04\x35\x02\x0c\x20\x05\xad\x20\x04\x35\x02\x08\x20\x06\xad\x20\x04\x29\x03\x00\x10\x2d\x10\xb4\x02\x21\x07\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x07\x0b\x6c\x02\x02\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x00\x10\xb5\x02\x21\x05\x02\x40\x02\x40\x20\x00\x20\x04\x20\x03\x29\x03\x08\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\x96\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x0c\x01\x0b\x20\x00\x20\x04\x35\x02\x0c\x20\x05\xad\x20\x04\x29\x03\x00\x10\x2e\x10\xb4\x02\x21\x06\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x06\x0b\x6c\x02\x02\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x00\x10\xb5\x02\x21\x05\x02\x40\x02\x40\x20\x00\x20\x04\x20\x03\x29\x03\x08\x10\xb1\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\x96\xb4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x0c\x01\x0b\x20\x00\x20\x04\x35\x02\x0c\x20\x05\xad\x20\x04\x29\x03\x00\x10\x2f\x10\xb4\x02\x21\x06\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x06\x0b\x3a\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x00\x10\xb5\x02\x21\x03\x20\x00\x20\x04\x35\x02\x0c\x20\x03\xad\x10\x30\x10\xb4\x02\x21\x05\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x3f\x02\x01\x7f\x01\x7e\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x20\x00\x20\x04\x41\x1c\x6a\x20\x03\x29\x03\x00\x10\xb7\x01\x21\x03\x20\x04\x35\x02\x1c\x20\x03\xad\x20\x04\xad\x10\x31\x20\x00\x20\x04\x10\xb6\x02\x21\x05\x20\x04\x41\x20\x6a\x24\x00\x20\x05\x0b\x26\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x04\xad\x10\x32\x20\x00\x20\x04\x10\xb6\x02\x21\x05\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\xd9\x04\x01\x09\x7f\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x90\x7f\x51\x0d\x00\x20\x00\x20\x02\x10\xe6\x02\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0c\x02\x0b\x20\x02\x10\xc0\x01\x21\x02\x0b\x20\x02\xa7\x22\x04\x28\x02\x04\x22\x05\x41\xff\xff\xff\xff\x07\x71\x21\x06\x41\x00\x21\x07\x02\x40\x02\x40\x20\x05\x41\x00\x48\x0d\x00\x20\x06\x21\x05\x20\x04\x41\x10\x6a\x22\x08\x21\x09\x02\x40\x03\x40\x20\x05\x45\x0d\x01\x20\x05\x41\x7f\x6a\x21\x05\x20\x07\x20\x09\x2d\x00\x00\x41\x07\x76\x6a\x21\x07\x20\x09\x41\x01\x6a\x21\x09\x0c\x00\x0b\x00\x0b\x02\x40\x20\x07\x0d\x00\x20\x01\x45\x0d\x04\x20\x01\x20\x06\x36\x02\x00\x20\x08\x0f\x0b\x20\x00\x20\x07\x20\x06\x6a\x41\x00\x10\xe7\x02\x22\x0a\x45\x0d\x02\x20\x04\x41\x10\x6a\x21\x09\x20\x0a\x41\x10\x6a\x22\x08\x21\x05\x03\x40\x20\x06\x45\x0d\x02\x02\x40\x02\x40\x20\x09\x2c\x00\x00\x22\x07\x41\x00\x48\x0d\x00\x20\x05\x20\x07\x3a\x00\x00\x20\x05\x41\x01\x6a\x21\x05\x0c\x01\x0b\x20\x05\x20\x07\x41\x3f\x71\x41\x80\x01\x72\x3a\x00\x01\x20\x05\x20\x07\x41\xc0\x01\x71\x41\x06\x76\x41\xc0\x01\x72\x3a\x00\x00\x20\x05\x41\x02\x6a\x21\x05\x0b\x20\x06\x41\x7f\x6a\x21\x06\x20\x09\x41\x01\x6a\x21\x09\x0c\x00\x0b\x00\x0b\x41\x00\x21\x07\x20\x00\x20\x06\x41\x03\x6c\x41\x00\x10\xe7\x02\x22\x0a\x45\x0d\x01\x20\x0a\x41\x10\x6a\x22\x08\x21\x05\x03\x40\x20\x07\x22\x09\x20\x06\x4e\x0d\x01\x20\x09\x41\x01\x6a\x21\x07\x02\x40\x20\x04\x20\x09\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x22\x0b\x41\xff\x00\x4b\x0d\x00\x20\x05\x20\x0b\x3a\x00\x00\x20\x05\x41\x01\x6a\x21\x05\x0c\x01\x0b\x02\x40\x20\x0b\x41\x80\xf8\x03\x71\x41\x80\xb0\x03\x47\x0d\x00\x20\x03\x0d\x00\x20\x07\x20\x06\x4e\x0d\x00\x20\x04\x20\x07\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x22\x0c\x41\x80\xf8\x03\x71\x41\x80\xb8\x03\x47\x0d\x00\x20\x0b\x41\x0a\x74\x41\x80\xf8\x3f\x71\x20\x0c\x41\xff\x07\x71\x72\x41\x80\x80\x04\x6a\x21\x0b\x20\x09\x41\x02\x6a\x21\x07\x0b\x20\x05\x20\x05\x20\x0b\x10\xe8\x02\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x05\x41\x00\x3a\x00\x00\x20\x0a\x20\x0a\x29\x02\x04\x42\x80\x80\x80\x80\x78\x83\x20\x05\x20\x0a\x6b\x41\x70\x6a\x41\xff\xff\xff\xff\x07\x71\xad\x84\x37\x02\x04\x20\x00\x20\x02\x10\xcd\x01\x20\x01\x45\x0d\x01\x20\x01\x20\x0a\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x36\x02\x00\x20\x08\x0f\x0b\x02\x40\x20\x01\x0d\x00\x41\x00\x0f\x0b\x41\x00\x21\x08\x20\x01\x41\x00\x36\x02\x00\x0b\x20\x08\x0b\xad\x03\x03\x02\x7f\x01\x7e\x01\x7c\x23\x00\x41\x20\x6b\x22\x03\x24\x00\x20\x02\x10\xc0\x01\x21\x05\x02\x40\x02\x40\x20\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x7e\x52\x0d\x00\x02\x40\x20\x00\x20\x03\x41\x08\x6a\x20\x05\x10\xce\x04\x22\x04\x0d\x00\x20\x01\x42\x00\x37\x03\x00\x41\x7f\x21\x04\x0c\x02\x0b\x20\x01\x20\x04\x10\xbe\x02\x1a\x20\x00\x20\x04\x20\x03\x41\x08\x6a\x10\xd0\x04\x41\x00\x21\x04\x0c\x01\x0b\x02\x40\x02\x40\x03\x40\x02\x40\x02\x40\x41\x07\x20\x05\x42\x20\x88\xa7\x22\x04\x20\x04\x41\x0b\x6a\x41\x11\x4b\x1b\x22\x04\x41\x07\x4d\x0d\x00\x20\x04\x41\x77\x47\x0d\x01\x20\x03\x41\x08\x6a\x20\x05\xa7\x41\x04\x6a\x41\x01\x10\xcf\x04\x1a\x20\x00\x20\x05\x10\xcd\x01\x41\x00\x21\x04\x20\x03\x29\x03\x08\x21\x05\x0c\x04\x0b\x02\x40\x02\x40\x20\x04\x0e\x08\x00\x00\x00\x00\x02\x02\x02\x01\x00\x0b\x20\x05\x42\x20\x86\x42\x20\x87\x21\x05\x0c\x03\x0b\x02\x40\x20\x05\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\x22\x05\x42\x34\x88\xa7\x41\xff\x0f\x71\x22\x04\x41\xbd\x08\x4b\x0d\x00\x02\x40\x20\x05\xbf\x22\x06\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x43\x63\x45\x0d\x00\x20\x06\xb0\x21\x05\x0c\x04\x0b\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x21\x05\x0c\x03\x0b\x02\x40\x20\x04\x41\xf2\x08\x4b\x0d\x00\x42\x00\x20\x05\x42\xff\xff\xff\xff\xff\xff\xff\x07\x83\x42\x80\x80\x80\x80\x80\x80\x80\x08\x84\x20\x04\x41\xcd\x77\x6a\xad\x86\x22\x02\x7d\x20\x02\x20\x05\x42\x00\x53\x1b\x21\x05\x0c\x03\x0b\x42\x00\x21\x05\x0c\x02\x0b\x20\x00\x20\x05\x10\xed\x03\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x0b\x41\x7f\x21\x04\x42\x00\x21\x05\x0c\x01\x0b\x20\x03\x20\x05\x37\x03\x08\x41\x00\x21\x04\x0b\x20\x01\x20\x05\x37\x03\x00\x0b\x20\x03\x41\x20\x6a\x24\x00\x20\x04\x0b\x26\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x20\x03\x20\x02\x36\x02\x0c\x20\x00\x41\x04\x20\x01\x20\x02\x10\xc3\x02\x20\x03\x41\x10\x6a\x24\x00\x0b\x4a\x00\x02\x40\x20\x02\x41\x00\x4a\x0d\x00\x20\x00\x41\x2f\x10\xc5\x01\x0f\x0b\x02\x40\x20\x00\x20\x02\x41\x00\x10\xe7\x02\x22\x00\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x00\x41\x10\x6a\x20\x01\x20\x02\x10\x70\x20\x02\x6a\x41\x00\x3a\x00\x00\x20\x00\xad\x42\x80\x80\x80\x80\x90\x7f\x84\x0b\xb6\x01\x02\x01\x7f\x01\x7e\x02\x40\x02\x40\x02\x40\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x22\x02\x45\x0d\x00\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x02\x28\x02\x28\x41\x04\x71\x45\x0d\x00\x20\x01\x42\x80\x80\x80\x80\x08\x54\x0d\x01\x42\x80\x80\x80\x80\xc0\x7e\x20\x01\xb9\xbd\x22\x01\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x0f\x0b\x20\x00\x10\xb8\x02\x22\x03\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x03\xa7\x41\x04\x6a\x20\x01\x10\xb9\x02\x45\x0d\x01\x20\x00\x20\x03\x10\xcd\x01\x20\x00\x10\xc1\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x01\x0f\x0b\x20\x03\x0b\x89\x01\x01\x01\x7f\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x90\x7f\x51\x0d\x00\x20\x00\x20\x02\x10\xe6\x02\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0c\x02\x0b\x20\x02\x10\xc0\x01\x21\x02\x0b\x20\x02\xa7\x22\x00\x28\x02\x04\x22\x03\x41\x00\x48\x0d\x00\x20\x00\x41\x10\x6a\x21\x00\x20\x01\x45\x0d\x01\x20\x01\x20\x03\x41\xff\xff\xff\xff\x07\x71\x36\x02\x00\x20\x00\x0f\x0b\x02\x40\x20\x01\x0d\x00\x41\x00\x0f\x0b\x41\x00\x21\x00\x20\x01\x41\x00\x36\x02\x00\x0b\x20\x00\x0b\xae\x01\x02\x02\x7f\x01\x7e\x23\x00\x41\x20\x6b\x22\x02\x24\x00\x20\x00\x10\xb8\x02\x22\x04\xa7\x22\x03\x41\x04\x6a\x22\x00\x20\x01\x29\x03\x08\x10\xb9\x02\x1a\x20\x00\x41\xc0\x00\x41\xff\xff\xff\xff\x03\x41\x01\x10\xba\x02\x1a\x20\x02\x42\x00\x37\x02\x14\x20\x02\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x0c\x20\x02\x20\x03\x28\x02\x04\x36\x02\x08\x20\x02\x41\x08\x6a\x20\x01\x29\x03\x00\x10\xb9\x02\x1a\x20\x00\x20\x00\x20\x02\x41\x08\x6a\x41\xff\xff\xff\xff\x03\x41\x01\x10\xbb\x02\x1a\x02\x40\x20\x02\x28\x02\x08\x22\x00\x45\x0d\x00\x20\x02\x28\x02\x18\x22\x01\x45\x0d\x00\x20\x00\x28\x02\x00\x20\x01\x41\x00\x20\x00\x28\x02\x04\x11\x01\x00\x1a\x0b\x20\x02\x41\x20\x6a\x24\x00\x20\x04\x0b\x96\x03\x01\x02\x7f\x23\x00\x41\x80\x01\x6b\x22\x03\x24\x00\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x7e\x52\x0d\x00\x20\x03\x42\x00\x37\x02\x14\x20\x03\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x0c\x20\x03\x20\x01\xa7\x22\x00\x28\x02\x04\x36\x02\x08\x20\x03\x41\x08\x6a\x42\x01\x10\xb9\x02\x1a\x41\x01\x21\x04\x20\x03\x41\x08\x6a\x41\x80\x01\x41\xff\xff\xff\xff\x03\x41\x01\x10\xba\x02\x1a\x20\x03\x41\x08\x6a\x20\x00\x41\x04\x6a\x22\x00\x10\xbc\x02\x41\x01\x48\x0d\x01\x20\x03\x42\x00\x37\x02\x74\x20\x03\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x6c\x20\x03\x42\x00\x37\x02\x5c\x20\x03\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x54\x20\x03\x42\x00\x37\x02\x44\x20\x03\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x3c\x20\x03\x42\x00\x37\x02\x2c\x20\x03\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x24\x20\x03\x20\x00\x28\x02\x00\x22\x04\x36\x02\x68\x20\x03\x20\x04\x36\x02\x50\x20\x03\x20\x04\x36\x02\x38\x20\x03\x20\x04\x36\x02\x20\x20\x03\x41\x38\x6a\x42\x7f\x10\xb9\x02\x1a\x20\x03\x41\x20\x6a\x42\x01\x10\xb9\x02\x1a\x20\x03\x41\x38\x6a\x20\x03\x41\x38\x6a\x20\x03\x41\x20\x6a\x41\xff\xff\xff\xff\x03\x41\x01\x10\xbb\x02\x1a\x20\x03\x41\xe8\x00\x6a\x20\x03\x41\xd0\x00\x6a\x20\x00\x20\x03\x41\x38\x6a\x41\x01\x10\xbd\x02\x1a\x20\x02\x20\x03\x41\xd0\x00\x6a\x10\xbe\x02\x1a\x20\x02\x41\x08\x6a\x20\x03\x41\xe8\x00\x6a\x10\xbe\x02\x1a\x41\x00\x21\x04\x0c\x01\x0b\x41\x00\x21\x04\x02\x40\x20\x00\x20\x02\x20\x01\x10\xb1\x02\x41\x00\x4e\x0d\x00\x41\x01\x21\x04\x0c\x01\x0b\x20\x02\x42\x00\x37\x03\x08\x0b\x20\x03\x41\x80\x01\x6a\x24\x00\x20\x04\x0b\x4e\x01\x01\x7f\x02\x40\x20\x00\x41\x18\x10\xc0\x02\x22\x01\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x01\x41\x01\x36\x02\x00\x20\x01\x42\x00\x37\x02\x10\x20\x01\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x08\x20\x01\x20\x00\x28\x02\xd8\x01\x36\x02\x04\x20\x01\xad\x42\x80\x80\x80\x80\xe0\x7e\x84\x0b\xb0\x01\x01\x04\x7f\x20\x00\x41\x00\x36\x02\x04\x02\x40\x20\x01\x42\x00\x52\x0d\x00\x20\x00\x41\x80\x80\x80\x80\x78\x36\x02\x08\x20\x00\x41\x00\x10\x98\x09\x1a\x41\x00\x0f\x0b\x02\x40\x02\x40\x20\x01\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x00\x41\x01\x10\x98\x09\x0d\x01\x20\x00\x28\x02\x10\x20\x01\x20\x01\xa7\x67\x22\x02\xad\x86\x3e\x02\x00\x20\x00\x41\x20\x20\x02\x6b\x36\x02\x08\x41\x00\x0f\x0b\x20\x00\x41\x02\x10\x98\x09\x0d\x00\x20\x00\x28\x02\x10\x22\x03\x20\x01\xa7\x22\x04\x20\x01\x42\x20\x88\xa7\x22\x05\x67\x22\x02\x74\x36\x02\x00\x20\x03\x20\x04\x41\x20\x20\x02\x6b\x76\x20\x05\x20\x02\x74\x72\x36\x02\x04\x20\x00\x41\xc0\x00\x20\x02\x6b\x36\x02\x08\x41\x00\x0f\x0b\x20\x00\x10\x97\x04\x41\x20\x0b\x4f\x01\x01\x7f\x02\x40\x20\x00\x28\x02\x0c\x22\x04\x0d\x00\x41\x00\x0f\x0b\x20\x00\x20\x00\x28\x02\x08\x20\x01\x41\x81\x80\x80\x80\x7c\x20\x01\x41\x81\x80\x80\x80\x7c\x4a\x1b\x22\x01\x41\xff\xff\xff\xff\x03\x20\x01\x41\xff\xff\xff\xff\x03\x48\x1b\x6a\x36\x02\x08\x20\x00\x20\x02\x20\x03\x20\x04\x41\x00\x10\x81\x0a\x0b\x12\x00\x20\x00\x20\x01\x20\x02\x20\x03\x20\x04\x41\xee\x00\x10\x9e\x0a\x0b\x78\x01\x04\x7f\x41\x02\x21\x02\x02\x40\x02\x40\x20\x00\x28\x02\x08\x22\x03\x41\xff\xff\xff\xff\x07\x46\x0d\x00\x20\x01\x28\x02\x08\x22\x04\x41\xff\xff\xff\xff\x07\x46\x0d\x00\x20\x00\x28\x02\x04\x22\x05\x20\x01\x28\x02\x04\x46\x0d\x01\x02\x40\x20\x03\x41\x80\x80\x80\x80\x78\x47\x0d\x00\x41\x00\x21\x02\x20\x04\x41\x80\x80\x80\x80\x78\x46\x0d\x01\x0b\x41\x01\x20\x05\x41\x01\x74\x6b\x21\x02\x0b\x20\x02\x0f\x0b\x41\x00\x20\x00\x20\x01\x10\x93\x04\x22\x00\x6b\x20\x00\x20\x05\x1b\x0b\x8c\x06\x01\x07\x7f\x23\x00\x41\x30\x6b\x22\x05\x24\x00\x02\x40\x02\x40\x02\x40\x20\x00\x20\x02\x46\x0d\x00\x20\x00\x20\x03\x46\x0d\x00\x20\x01\x20\x02\x46\x0d\x01\x20\x01\x20\x03\x46\x0d\x01\x20\x00\x20\x01\x46\x0d\x02\x02\x40\x02\x40\x02\x40\x20\x02\x28\x02\x0c\x22\x06\x45\x0d\x00\x20\x03\x28\x02\x0c\x22\x07\x0d\x01\x0b\x41\x00\x21\x04\x20\x00\x41\x00\x10\x9b\x09\x02\x40\x02\x40\x20\x02\x28\x02\x08\x22\x00\x41\xff\xff\xff\xff\x07\x46\x0d\x00\x20\x03\x28\x02\x08\x22\x03\x41\xff\xff\xff\xff\x07\x47\x0d\x01\x0b\x20\x01\x10\x97\x04\x0c\x02\x0b\x02\x40\x02\x40\x20\x00\x41\xfe\xff\xff\xff\x07\x46\x0d\x00\x20\x03\x41\x80\x80\x80\x80\x78\x47\x0d\x01\x0b\x20\x01\x10\x97\x04\x41\x01\x21\x04\x0c\x02\x0b\x20\x01\x20\x02\x10\xcc\x04\x1a\x20\x01\x41\xff\xff\xff\xff\x03\x41\x01\x10\x9f\x09\x21\x04\x0c\x01\x0b\x20\x03\x28\x02\x04\x20\x02\x28\x02\x04\x22\x08\x73\x21\x09\x41\x00\x21\x0a\x02\x40\x20\x04\x41\x7e\x6a\x22\x0b\x41\x04\x4b\x0d\x00\x41\x00\x21\x0a\x02\x40\x02\x40\x02\x40\x02\x40\x20\x0b\x0e\x05\x00\x01\x04\x02\x03\x00\x0b\x20\x09\x21\x0a\x0c\x03\x0b\x20\x09\x41\x01\x73\x21\x0a\x0c\x02\x0b\x41\x01\x21\x0a\x0c\x01\x0b\x20\x08\x21\x0a\x0b\x20\x05\x20\x06\x36\x02\x24\x20\x05\x41\x00\x36\x02\x1c\x20\x05\x20\x07\x36\x02\x0c\x20\x05\x41\x00\x36\x02\x04\x20\x05\x20\x02\x28\x02\x08\x22\x06\x36\x02\x20\x20\x05\x20\x02\x28\x02\x10\x36\x02\x28\x20\x05\x20\x03\x28\x02\x08\x22\x07\x36\x02\x08\x20\x05\x20\x03\x28\x02\x10\x36\x02\x10\x02\x40\x02\x40\x20\x05\x41\x18\x6a\x20\x05\x10\x93\x04\x41\x7f\x4a\x0d\x00\x20\x00\x42\x00\x10\xb9\x02\x1a\x20\x01\x20\x05\x41\x18\x6a\x10\xcc\x04\x1a\x0c\x01\x0b\x20\x00\x20\x05\x41\x18\x6a\x20\x05\x41\x02\x20\x06\x20\x07\x6b\x22\x03\x41\x01\x6a\x20\x03\x41\x02\x48\x1b\x41\x01\x10\xa1\x09\x1a\x20\x00\x41\x01\x10\xcd\x04\x1a\x20\x01\x20\x00\x20\x05\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa2\x09\x1a\x20\x01\x20\x05\x41\x18\x6a\x20\x01\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa7\x09\x1a\x0b\x02\x40\x20\x00\x28\x02\x08\x22\x03\x41\xff\xff\xff\xff\x07\x46\x0d\x00\x20\x01\x28\x02\x08\x41\xff\xff\xff\xff\x07\x46\x0d\x00\x02\x40\x20\x01\x28\x02\x0c\x45\x0d\x00\x02\x40\x02\x40\x20\x04\x41\x7b\x71\x0d\x00\x20\x05\x20\x05\x28\x02\x08\x22\x0a\x41\x7f\x6a\x36\x02\x08\x20\x01\x20\x05\x10\x93\x04\x21\x06\x20\x05\x20\x0a\x36\x02\x08\x20\x06\x41\x00\x4a\x0d\x01\x20\x06\x0d\x02\x20\x04\x41\x04\x46\x0d\x01\x20\x00\x28\x02\x10\x20\x00\x28\x02\x0c\x22\x04\x20\x04\x41\x05\x74\x20\x03\x6b\x10\x82\x0a\x0d\x01\x0c\x02\x0b\x20\x0a\x45\x0d\x01\x0b\x20\x00\x20\x00\x42\x01\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa5\x09\x20\x01\x20\x01\x20\x05\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa7\x09\x72\x41\x20\x71\x0d\x01\x0b\x20\x01\x20\x01\x28\x02\x04\x20\x02\x28\x02\x04\x73\x36\x02\x04\x20\x00\x20\x09\x36\x02\x04\x20\x01\x41\xff\xff\xff\xff\x03\x41\x01\x10\x9f\x09\x21\x04\x0c\x01\x0b\x20\x00\x10\x97\x04\x20\x01\x10\x97\x04\x41\x20\x21\x04\x0b\x20\x05\x41\x30\x6a\x24\x00\x20\x04\x0f\x0b\x41\xcd\xc7\x05\x41\xc3\xc5\x05\x41\xcc\x0d\x41\xde\xc7\x05\x10\x4a\x00\x0b\x41\xe8\xc7\x05\x41\xc3\xc5\x05\x41\xcd\x0d\x41\xde\xc7\x05\x10\x4a\x00\x0b\x41\xf9\xc7\x05\x41\xc3\xc5\x05\x41\xce\x0d\x41\xde\xc7\x05\x10\x4a\x00\x0b\xc4\x01\x02\x03\x7f\x02\x7e\x41\x01\x21\x02\x42\x7f\x21\x05\x02\x40\x20\x01\x28\x02\x08\x22\x03\x41\xff\xff\xff\xff\x07\x46\x0d\x00\x41\x01\x21\x02\x02\x40\x02\x40\x20\x03\x41\x01\x4e\x0d\x00\x42\x00\x21\x05\x0c\x01\x0b\x02\x40\x20\x01\x28\x02\x04\x45\x0d\x00\x42\x00\x21\x05\x0c\x02\x0b\x20\x03\x41\xc0\x00\x4a\x0d\x01\x20\x01\x28\x02\x0c\x22\x04\x41\x02\x74\x20\x01\x28\x02\x10\x22\x01\x6a\x41\x7c\x6a\x28\x02\x00\x21\x02\x02\x40\x20\x03\x41\x20\x4a\x0d\x00\x20\x02\x41\x20\x20\x03\x6b\x76\xad\x21\x05\x0c\x01\x0b\x20\x02\xad\x42\x20\x86\x21\x06\x42\x00\x21\x05\x02\x40\x20\x04\x41\x02\x49\x0d\x00\x20\x04\x41\x02\x74\x20\x01\x6a\x41\x78\x6a\x35\x02\x00\x21\x05\x0b\x20\x05\x20\x06\x84\x41\xc0\x00\x20\x03\x6b\xad\x88\x21\x05\x0b\x41\x00\x21\x02\x0b\x20\x00\x20\x05\x37\x03\x00\x20\x02\x0b\x13\x00\x20\x00\x41\x10\x6a\x20\x01\x20\x02\x20\x00\x28\x02\x08\x11\x01\x00\x0b\x26\x01\x01\x7f\x02\x40\x20\x00\x28\x02\x10\x22\x02\x41\x10\x6a\x20\x01\x20\x02\x28\x02\x00\x11\x03\x00\x22\x01\x0d\x00\x20\x00\x10\xc1\x02\x0b\x20\x01\x0b\x2f\x01\x01\x7f\x02\x40\x20\x00\x28\x02\x10\x22\x01\x2d\x00\x88\x01\x0d\x00\x20\x01\x41\x01\x3a\x00\x88\x01\x20\x00\x41\x8a\x9d\x03\x41\x00\x10\xc2\x02\x20\x01\x41\x00\x3a\x00\x88\x01\x0b\x0b\x26\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x20\x03\x20\x02\x36\x02\x0c\x20\x00\x41\x06\x20\x01\x20\x02\x10\xc3\x02\x20\x03\x41\x10\x6a\x24\x00\x0b\x43\x01\x02\x7f\x41\x00\x21\x04\x02\x40\x20\x00\x28\x02\x10\x22\x05\x2d\x00\x88\x01\x0d\x00\x02\x40\x20\x05\x28\x02\x8c\x01\x22\x04\x0d\x00\x41\x01\x21\x04\x0c\x01\x0b\x20\x04\x29\x03\x08\x10\xc4\x02\x45\x21\x04\x0b\x20\x00\x20\x01\x20\x02\x20\x03\x20\x04\x10\xc5\x02\x0b\x2d\x01\x02\x7f\x41\x00\x21\x01\x02\x40\x20\x00\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x00\xa7\x22\x02\x2f\x01\x06\x10\xc6\x02\x45\x0d\x00\x20\x02\x28\x02\x20\x21\x01\x0b\x20\x01\x0b\x8c\x01\x02\x01\x7f\x01\x7e\x23\x00\x41\x80\x02\x6b\x22\x05\x24\x00\x20\x05\x41\x80\x02\x20\x02\x20\x03\x10\x4e\x1a\x02\x40\x02\x40\x20\x00\x20\x00\x20\x01\x41\x03\x74\x6a\x41\xd8\x00\x6a\x29\x03\x00\x41\x03\x10\xc6\x01\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x42\x80\x80\x80\x80\x20\x21\x06\x0c\x01\x0b\x20\x00\x20\x06\x41\x33\x20\x00\x20\x05\x10\xc7\x02\x41\x03\x10\xc4\x01\x1a\x0b\x02\x40\x20\x04\x45\x0d\x00\x20\x00\x20\x06\x41\x00\x41\x00\x41\x00\x10\xc8\x02\x0b\x20\x00\x20\x06\x10\xc9\x02\x20\x05\x41\x80\x02\x6a\x24\x00\x0b\x38\x01\x02\x7f\x41\x01\x21\x01\x02\x40\x02\x40\x02\x40\x20\x00\x41\x73\x6a\x22\x02\x41\x03\x4d\x0d\x00\x20\x00\x41\x34\x46\x0d\x02\x0c\x01\x0b\x20\x02\x0e\x04\x01\x00\x00\x01\x01\x0b\x20\x00\x41\x38\x46\x21\x01\x0b\x20\x01\x0b\x0d\x00\x20\x00\x20\x01\x20\x01\x10\x71\x10\xcb\x02\x0b\xc9\x07\x02\x0a\x7f\x01\x7e\x23\x00\x41\xf0\x00\x6b\x22\x05\x24\x00\x20\x05\x41\xd8\x00\x6a\x42\x00\x37\x03\x00\x20\x05\x42\x00\x37\x03\x50\x20\x05\x41\xef\x00\x36\x02\x60\x20\x05\x20\x00\x28\x02\x10\x22\x06\x36\x02\x64\x02\x40\x02\x40\x20\x02\x45\x0d\x00\x20\x05\x20\x02\x36\x02\x40\x20\x05\x41\xd0\x00\x6a\x41\xfa\xc1\x01\x20\x05\x41\xc0\x00\x6a\x10\xcc\x02\x02\x40\x20\x03\x41\x7f\x46\x0d\x00\x20\x05\x20\x03\x36\x02\x30\x20\x05\x41\xd0\x00\x6a\x41\x84\xc2\x01\x20\x05\x41\x30\x6a\x10\xcc\x02\x0b\x20\x05\x41\xd0\x00\x6a\x41\x0a\x10\xcd\x02\x20\x00\x20\x01\x41\x31\x20\x00\x20\x02\x10\xc7\x02\x41\x03\x10\xc4\x01\x1a\x20\x00\x20\x01\x41\x32\x20\x03\xad\x41\x03\x10\xc4\x01\x1a\x20\x04\x41\x02\x71\x0d\x01\x20\x00\x28\x02\x10\x21\x06\x0b\x20\x06\x41\x8c\x01\x6a\x21\x03\x03\x40\x20\x03\x28\x02\x00\x22\x03\x45\x0d\x01\x41\x00\x21\x02\x02\x40\x20\x04\x41\x01\x71\x0d\x00\x41\x88\xc2\x01\x21\x02\x41\x00\x21\x06\x02\x40\x20\x03\x29\x03\x08\x22\x0f\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x0f\xa7\x22\x07\x28\x02\x10\x22\x08\x20\x08\x28\x02\x18\x41\x7f\x73\x41\x02\x74\x41\xa4\x7e\x72\x6a\x28\x02\x00\x21\x09\x03\x40\x20\x09\x45\x0d\x01\x20\x08\x20\x09\x41\x7f\x6a\x41\x03\x74\x22\x0a\x6a\x22\x09\x41\x30\x6a\x28\x02\x00\x21\x0b\x02\x40\x20\x09\x41\x34\x6a\x28\x02\x00\x41\x36\x46\x0d\x00\x20\x0b\x41\xff\xff\xff\x1f\x71\x21\x09\x0c\x01\x0b\x0b\x20\x0b\x41\xff\xff\xff\xff\x03\x4b\x0d\x00\x20\x07\x28\x02\x14\x20\x0a\x6a\x29\x03\x00\x22\x0f\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x90\x7f\x52\x0d\x00\x20\x00\x20\x0f\x10\xce\x02\x22\x09\x45\x0d\x00\x20\x09\x41\x88\xc2\x01\x20\x09\x2d\x00\x00\x1b\x21\x02\x20\x09\x21\x06\x0b\x20\x05\x20\x02\x36\x02\x20\x20\x05\x41\xd0\x00\x6a\x41\xfa\xc1\x01\x20\x05\x41\x20\x6a\x10\xcc\x02\x20\x00\x20\x06\x10\xcf\x02\x02\x40\x20\x03\x28\x02\x08\x22\x02\x2f\x01\x06\x10\xc6\x02\x45\x0d\x00\x20\x02\x28\x02\x20\x22\x0c\x2f\x00\x11\x22\x02\x41\x80\x10\x71\x21\x0d\x02\x40\x20\x02\x41\x80\x08\x71\x45\x0d\x00\x41\x7f\x21\x06\x02\x40\x20\x0c\x41\xd0\x00\x6a\x28\x02\x00\x22\x02\x45\x0d\x00\x20\x03\x28\x02\x20\x20\x0c\x28\x02\x14\x41\x7f\x73\x6a\x21\x0e\x20\x02\x20\x0c\x41\xcc\x00\x6a\x28\x02\x00\x6a\x21\x0a\x20\x0c\x41\xc4\x00\x6a\x28\x02\x00\x21\x08\x41\x00\x21\x0b\x03\x40\x20\x08\x21\x06\x20\x02\x20\x0a\x4f\x0d\x01\x20\x02\x41\x01\x6a\x21\x09\x02\x40\x02\x40\x20\x02\x2d\x00\x00\x22\x02\x0d\x00\x02\x40\x20\x05\x41\xe8\x00\x6a\x20\x09\x20\x0a\x10\xd0\x02\x22\x02\x41\x00\x48\x0d\x00\x20\x05\x28\x02\x68\x21\x07\x20\x05\x41\xec\x00\x6a\x20\x09\x20\x02\x6a\x22\x02\x20\x0a\x10\xd1\x02\x22\x09\x41\x00\x48\x0d\x00\x20\x05\x28\x02\x6c\x20\x06\x6a\x21\x08\x20\x02\x20\x09\x6a\x21\x02\x0c\x02\x0b\x20\x0c\x28\x02\x44\x21\x06\x0c\x03\x0b\x20\x06\x20\x02\x41\x7f\x6a\x22\x02\x20\x02\x41\xff\x01\x71\x41\x05\x6e\x22\x07\x41\x7b\x6c\x6a\x41\xff\x01\x71\x6a\x41\x7f\x6a\x21\x08\x20\x09\x21\x02\x0b\x20\x07\x20\x0b\x6a\x22\x0b\x20\x0e\x4d\x0d\x00\x0b\x0b\x20\x05\x20\x00\x20\x0c\x28\x02\x40\x10\xd2\x02\x22\x02\x41\x94\xc2\x01\x20\x02\x1b\x36\x02\x10\x20\x05\x41\xd0\x00\x6a\x41\x9b\xc2\x01\x20\x05\x41\x10\x6a\x10\xcc\x02\x20\x00\x20\x02\x10\xcf\x02\x02\x40\x20\x06\x41\x7f\x46\x0d\x00\x20\x05\x20\x06\x36\x02\x00\x20\x05\x41\xd0\x00\x6a\x41\x84\xc2\x01\x20\x05\x10\xcc\x02\x0b\x20\x05\x41\xd0\x00\x6a\x41\x29\x10\xcd\x02\x0b\x20\x05\x41\xd0\x00\x6a\x41\x0a\x10\xcd\x02\x20\x04\x21\x02\x20\x0d\x0d\x03\x0c\x01\x0b\x20\x05\x41\xd0\x00\x6a\x41\xa0\xc2\x01\x41\x00\x10\xcc\x02\x20\x05\x41\xd0\x00\x6a\x41\x0a\x10\xcd\x02\x20\x04\x21\x02\x0b\x20\x02\x21\x04\x0c\x00\x0b\x00\x0b\x20\x05\x41\xd0\x00\x6a\x41\x00\x10\xcd\x02\x42\x80\x80\x80\x80\x20\x21\x0f\x20\x05\x28\x02\x50\x21\x02\x02\x40\x20\x05\x28\x02\x5c\x0d\x00\x20\x00\x20\x02\x10\xc7\x02\x21\x0f\x0b\x02\x40\x20\x02\x45\x0d\x00\x20\x05\x28\x02\x64\x20\x02\x41\x00\x20\x05\x28\x02\x60\x11\x01\x00\x1a\x0b\x20\x00\x20\x01\x41\x35\x20\x0f\x41\x03\x10\xc4\x01\x1a\x20\x05\x41\xf0\x00\x6a\x24\x00\x0b\x1c\x01\x01\x7f\x20\x00\x20\x00\x28\x02\x10\x22\x02\x29\x03\x80\x01\x10\xcd\x01\x20\x02\x20\x01\x37\x03\x80\x01\x0b\xac\x03\x01\x03\x7f\x02\x40\x02\x40\x20\x00\x41\x30\x10\xc0\x02\x22\x03\x45\x0d\x00\x20\x03\x41\x00\x36\x02\x20\x20\x03\x41\x01\x3a\x00\x05\x20\x03\x20\x02\x3b\x01\x06\x20\x03\x41\x00\x36\x02\x18\x20\x03\x20\x01\x36\x02\x10\x20\x03\x20\x00\x20\x01\x28\x02\x1c\x41\x03\x74\x10\xc0\x02\x22\x04\x36\x02\x14\x20\x04\x0d\x01\x20\x00\x28\x02\x10\x22\x02\x41\x10\x6a\x20\x03\x20\x02\x28\x02\x04\x11\x00\x00\x0b\x20\x00\x28\x02\x10\x20\x01\x10\xd9\x02\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x02\x40\x02\x40\x20\x02\x41\x7f\x6a\x22\x05\x41\x23\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x05\x0e\x24\x07\x00\x06\x04\x04\x04\x04\x02\x06\x04\x06\x01\x06\x06\x06\x06\x06\x05\x06\x06\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x02\x03\x04\x04\x06\x04\x07\x0b\x20\x03\x41\x00\x36\x02\x28\x20\x03\x42\x00\x37\x03\x20\x20\x03\x20\x03\x2d\x00\x05\x41\x0c\x72\x3a\x00\x05\x02\x40\x20\x00\x28\x02\x24\x20\x01\x46\x0d\x00\x20\x00\x20\x03\x41\x30\x41\x0a\x10\xff\x02\x21\x04\x0b\x20\x04\x42\x00\x37\x03\x00\x0c\x06\x0b\x20\x04\x42\x80\x80\x80\x80\x30\x37\x03\x00\x0c\x05\x0b\x20\x03\x42\x00\x37\x02\x24\x20\x03\x20\x03\x2d\x00\x05\x41\x0c\x72\x3a\x00\x05\x0c\x04\x0b\x20\x03\x42\x00\x37\x02\x24\x0c\x03\x0b\x20\x03\x42\x80\x80\x80\x80\x30\x37\x03\x20\x0c\x01\x0b\x20\x03\x42\x00\x37\x03\x20\x0b\x20\x00\x28\x02\x10\x28\x02\x44\x20\x02\x41\x18\x6c\x6a\x28\x02\x14\x45\x0d\x00\x20\x03\x20\x03\x2d\x00\x05\x41\x04\x72\x3a\x00\x05\x0b\x20\x03\x41\x01\x36\x02\x00\x20\x00\x28\x02\x10\x21\x00\x20\x03\x41\x00\x3a\x00\x04\x20\x03\x20\x00\x28\x02\x50\x22\x02\x36\x02\x08\x20\x02\x20\x03\x41\x08\x6a\x22\x01\x36\x02\x04\x20\x00\x20\x01\x36\x02\x50\x20\x03\x20\x00\x41\xd0\x00\x6a\x36\x02\x0c\x20\x03\xad\x42\x80\x80\x80\x80\x70\x84\x0b\xd7\x03\x02\x04\x7f\x01\x7e\x23\x00\x41\x20\x6b\x22\x03\x24\x00\x20\x01\x20\x02\x6a\x21\x04\x41\x00\x21\x05\x02\x40\x03\x40\x20\x01\x20\x05\x6a\x22\x06\x20\x04\x4f\x0d\x01\x20\x06\x2c\x00\x00\x41\x00\x48\x0d\x01\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x02\x40\x02\x40\x02\x40\x20\x05\x41\x80\x80\x80\x80\x04\x49\x0d\x00\x20\x00\x41\xe9\xd7\x01\x41\x00\x10\xc2\x02\x0c\x01\x0b\x02\x40\x20\x02\x20\x05\x47\x0d\x00\x20\x00\x20\x01\x20\x02\x10\xb3\x02\x21\x07\x0c\x02\x0b\x02\x40\x20\x00\x20\x03\x20\x02\x10\xb3\x04\x0d\x00\x20\x03\x20\x01\x20\x05\x10\xf4\x03\x1a\x03\x40\x02\x40\x02\x40\x02\x40\x20\x06\x20\x04\x4f\x0d\x00\x02\x40\x20\x06\x2c\x00\x00\x22\x05\x41\x00\x48\x0d\x00\x20\x03\x20\x05\x41\xff\x01\x71\x10\xb4\x04\x1a\x20\x06\x41\x01\x6a\x21\x06\x0c\x04\x0b\x02\x40\x20\x06\x20\x04\x20\x06\x6b\x20\x03\x41\x1c\x6a\x10\x9e\x04\x22\x02\x41\xff\xff\x03\x4b\x0d\x00\x20\x03\x28\x02\x1c\x21\x06\x0c\x03\x0b\x20\x02\x41\x80\x80\xc4\x00\x49\x0d\x01\x20\x06\x41\x01\x6a\x21\x05\x03\x40\x41\xfd\xff\x03\x21\x02\x20\x06\x20\x04\x4f\x0d\x03\x02\x40\x20\x06\x2c\x00\x00\x22\x01\x41\x7f\x4a\x0d\x00\x20\x01\x41\xff\x01\x71\x41\xc0\x01\x4f\x0d\x00\x20\x05\x41\x01\x6a\x21\x05\x20\x06\x41\x01\x6a\x21\x06\x0c\x01\x0b\x0b\x03\x40\x20\x05\x22\x06\x20\x04\x4f\x0d\x03\x20\x06\x2c\x00\x00\x22\x01\x41\x7f\x4a\x0d\x03\x20\x06\x41\x01\x6a\x21\x05\x20\x01\x41\xff\x01\x71\x41\xc0\x01\x49\x0d\x00\x0c\x03\x0b\x00\x0b\x20\x03\x10\xf6\x03\x21\x07\x0c\x05\x0b\x20\x03\x28\x02\x1c\x21\x06\x20\x03\x20\x02\x41\x80\x80\x7c\x6a\x22\x05\x41\x0a\x76\x41\x80\xb0\x03\x6a\x10\xb5\x04\x1a\x20\x05\x41\xff\x07\x71\x41\x80\xb8\x03\x72\x21\x02\x0b\x20\x03\x20\x02\x10\xb5\x04\x1a\x0c\x00\x0b\x00\x0b\x20\x03\x28\x02\x00\x28\x02\x10\x22\x06\x41\x10\x6a\x20\x03\x28\x02\x04\x20\x06\x28\x02\x04\x11\x00\x00\x20\x03\x41\x00\x36\x02\x04\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x0b\x20\x03\x41\x20\x6a\x24\x00\x20\x07\x0b\x86\x01\x01\x03\x7f\x23\x00\x41\x90\x01\x6b\x22\x03\x24\x00\x20\x03\x20\x02\x36\x02\x8c\x01\x02\x40\x02\x40\x20\x03\x41\x80\x01\x20\x01\x20\x02\x10\x4e\x22\x04\x41\xff\x00\x4b\x0d\x00\x20\x00\x20\x03\x20\x04\x10\xa5\x07\x1a\x0c\x01\x0b\x20\x00\x20\x04\x20\x00\x28\x02\x04\x6a\x41\x01\x6a\x10\xec\x07\x0d\x00\x20\x03\x20\x02\x36\x02\x8c\x01\x20\x00\x28\x02\x00\x20\x00\x28\x02\x04\x22\x05\x6a\x20\x00\x28\x02\x08\x20\x05\x6b\x20\x01\x20\x02\x10\x4e\x1a\x20\x00\x20\x00\x28\x02\x04\x20\x04\x6a\x36\x02\x04\x0b\x20\x03\x41\x90\x01\x6a\x24\x00\x0b\x28\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x20\x02\x20\x01\x3a\x00\x0f\x20\x00\x20\x02\x41\x0f\x6a\x41\x01\x10\xa5\x07\x1a\x20\x02\x41\x10\x6a\x24\x00\x0b\x0d\x00\x20\x00\x41\x00\x20\x01\x41\x00\x10\xb0\x02\x0b\x1d\x00\x02\x40\x20\x01\x45\x0d\x00\x20\x00\x20\x01\x41\x70\x6a\xad\x42\x80\x80\x80\x80\x90\x7f\x84\x10\xcd\x01\x0b\x0b\x65\x01\x04\x7f\x41\x00\x21\x03\x41\x00\x21\x04\x41\x00\x21\x05\x02\x40\x03\x40\x20\x01\x20\x05\x6a\x22\x06\x20\x02\x4f\x0d\x01\x20\x05\x41\x04\x4b\x0d\x01\x20\x05\x41\x01\x6a\x21\x05\x20\x06\x2d\x00\x00\x22\x06\x41\xff\x00\x71\x20\x03\x74\x20\x04\x72\x21\x04\x20\x03\x41\x07\x6a\x21\x03\x20\x06\x41\x80\x01\x71\x0d\x00\x0b\x20\x00\x20\x04\x36\x02\x00\x20\x05\x0f\x0b\x20\x00\x41\x00\x36\x02\x00\x41\x7f\x0b\x55\x01\x02\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x41\x00\x21\x04\x02\x40\x02\x40\x20\x03\x41\x0c\x6a\x20\x01\x20\x02\x10\xd0\x02\x22\x01\x41\x00\x4e\x0d\x00\x41\x7f\x21\x01\x0c\x01\x0b\x20\x03\x28\x02\x0c\x22\x04\x41\x01\x76\x41\x00\x20\x04\x41\x01\x71\x6b\x73\x21\x04\x0b\x20\x00\x20\x04\x36\x02\x00\x20\x03\x41\x10\x6a\x24\x00\x20\x01\x0b\x39\x02\x01\x7f\x01\x7e\x41\x00\x21\x02\x02\x40\x20\x00\x20\x01\x10\xc5\x01\x22\x03\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x03\x10\xce\x02\x21\x02\x20\x00\x20\x03\x10\xcd\x01\x0b\x20\x02\x0b\x09\x00\x20\x00\x20\x01\x10\xd4\x02\x0b\x8e\x03\x01\x06\x7f\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x42\x20\x88\xa7\x22\x03\x41\x0b\x6a\x22\x04\x41\x0a\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x04\x0e\x0b\x03\x02\x02\x04\x00\x05\x05\x05\x06\x01\x01\x03\x0b\x20\x01\xa7\x22\x04\x29\x02\x04\x42\x80\x80\x80\x80\x80\x80\x80\x80\xc0\x00\x54\x0d\x06\x20\x00\x20\x04\x10\xd5\x02\x0c\x07\x0b\x20\x00\x2d\x00\x68\x41\x02\x46\x0d\x06\x20\x01\xa7\x22\x04\x28\x02\x08\x22\x03\x20\x04\x41\x0c\x6a\x22\x05\x28\x02\x00\x22\x06\x36\x02\x04\x20\x06\x20\x03\x36\x02\x00\x20\x05\x41\x00\x36\x02\x00\x20\x04\x20\x00\x41\xd8\x00\x6a\x22\x03\x36\x02\x08\x20\x00\x41\xdc\x00\x6a\x22\x07\x28\x02\x00\x21\x06\x20\x07\x20\x04\x41\x08\x6a\x22\x04\x36\x02\x00\x20\x06\x20\x04\x36\x02\x00\x20\x05\x20\x06\x36\x02\x00\x20\x00\x2d\x00\x68\x0d\x06\x20\x00\x41\x01\x3a\x00\x68\x02\x40\x03\x40\x20\x00\x28\x02\x5c\x22\x04\x20\x03\x46\x0d\x01\x20\x04\x41\x78\x6a\x22\x04\x28\x02\x00\x0d\x09\x20\x00\x20\x04\x10\xd6\x02\x0c\x00\x0b\x00\x0b\x20\x00\x41\x00\x3a\x00\x68\x0c\x06\x0b\x20\x01\xa7\x22\x04\x41\x04\x6a\x10\xd7\x02\x20\x00\x41\x10\x6a\x20\x04\x20\x00\x28\x02\x04\x11\x00\x00\x0c\x05\x0b\x20\x01\xa7\x22\x04\x41\x04\x6a\x10\xd7\x02\x20\x00\x41\x10\x6a\x20\x04\x20\x00\x28\x02\x04\x11\x00\x00\x0c\x04\x0b\x20\x00\x20\x01\xa7\x10\xd5\x02\x0c\x03\x0b\x20\x02\x20\x03\x36\x02\x00\x41\xec\xb7\x01\x20\x02\x10\x51\x1a\x0b\x10\x40\x00\x0b\x20\x00\x41\x10\x6a\x20\x04\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x20\x02\x41\x10\x6a\x24\x00\x0f\x0b\x41\x9c\xb7\x01\x41\xae\xb7\x01\x41\xf1\x2a\x41\xd9\xb7\x01\x10\x4a\x00\x0b\x8e\x02\x02\x05\x7f\x01\x7e\x20\x01\x28\x02\x0c\x21\x02\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x29\x02\x04\x22\x07\x42\x80\x80\x80\x80\x80\x80\x80\x80\x40\x54\x0d\x00\x20\x00\x28\x02\x38\x21\x03\x0c\x01\x0b\x02\x40\x02\x40\x20\x00\x28\x02\x38\x22\x03\x20\x00\x28\x02\x34\x20\x07\x42\x20\x88\xa7\x20\x00\x28\x02\x24\x41\x7f\x6a\x71\x41\x02\x74\x6a\x22\x04\x28\x02\x00\x22\x05\x41\x02\x74\x6a\x28\x02\x00\x22\x06\x20\x01\x47\x0d\x00\x20\x04\x20\x02\x36\x02\x00\x0c\x01\x0b\x03\x40\x20\x06\x21\x04\x20\x05\x45\x0d\x03\x20\x03\x20\x04\x28\x02\x0c\x22\x05\x41\x02\x74\x6a\x28\x02\x00\x22\x06\x20\x01\x47\x0d\x00\x0b\x20\x04\x20\x02\x36\x02\x0c\x0b\x20\x05\x21\x02\x0b\x20\x03\x20\x02\x41\x02\x74\x6a\x20\x00\x28\x02\x3c\x41\x01\x74\x41\x01\x72\x36\x02\x00\x20\x00\x20\x02\x36\x02\x3c\x20\x00\x41\x10\x6a\x20\x01\x20\x00\x28\x02\x04\x11\x00\x00\x20\x00\x20\x00\x28\x02\x28\x22\x05\x41\x7f\x6a\x36\x02\x28\x20\x05\x41\x00\x4c\x0d\x01\x0f\x0b\x41\xcd\xc1\x01\x41\xae\xb7\x01\x41\xcb\x16\x41\xd4\xc1\x01\x10\x4a\x00\x0b\x41\xe6\xc1\x01\x41\xae\xb7\x01\x41\xdf\x16\x41\xd4\xc1\x01\x10\x4a\x00\x0b\xfa\x07\x01\x06\x7f\x02\x40\x20\x01\x2d\x00\x04\x41\x0f\x71\x22\x02\x41\x01\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x0e\x02\x00\x01\x00\x0b\x20\x01\x20\x01\x2d\x00\x05\x41\x02\x72\x3a\x00\x05\x20\x01\x28\x02\x10\x21\x03\x41\x00\x21\x02\x41\x00\x21\x04\x02\x40\x03\x40\x20\x01\x28\x02\x14\x21\x05\x20\x04\x20\x03\x28\x02\x20\x4e\x0d\x01\x20\x00\x20\x05\x20\x02\x6a\x20\x03\x20\x02\x6a\x41\x30\x6a\x28\x02\x00\x41\x1a\x76\x10\xd8\x02\x20\x02\x41\x08\x6a\x21\x02\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x00\x41\x10\x6a\x22\x06\x20\x05\x20\x00\x28\x02\x04\x11\x00\x00\x20\x00\x20\x03\x10\xd9\x02\x20\x01\x42\x00\x37\x03\x10\x02\x40\x20\x01\x41\x18\x6a\x28\x02\x00\x22\x02\x45\x0d\x00\x20\x02\x21\x04\x02\x40\x03\x40\x20\x04\x45\x0d\x01\x20\x04\x28\x02\x08\x28\x02\x00\x45\x0d\x05\x20\x04\x28\x02\x04\x0d\x04\x20\x04\x41\x1c\x6a\x22\x03\x28\x02\x00\x22\x05\x20\x04\x28\x02\x18\x22\x07\x36\x02\x00\x20\x07\x20\x05\x36\x02\x04\x20\x04\x41\x00\x36\x02\x18\x20\x03\x41\x00\x36\x02\x00\x20\x04\x41\x14\x6a\x22\x03\x28\x02\x00\x22\x05\x20\x04\x28\x02\x10\x22\x07\x36\x02\x00\x20\x07\x20\x05\x36\x02\x04\x20\x04\x41\x00\x36\x02\x10\x20\x03\x41\x00\x36\x02\x00\x20\x04\x28\x02\x0c\x21\x04\x0c\x00\x0b\x00\x0b\x02\x40\x03\x40\x20\x02\x45\x0d\x01\x20\x02\x28\x02\x0c\x21\x04\x20\x00\x20\x02\x29\x03\x28\x10\xda\x02\x20\x06\x20\x02\x20\x00\x28\x02\x04\x11\x00\x00\x20\x04\x21\x02\x0c\x00\x0b\x00\x0b\x20\x01\x41\x00\x36\x02\x18\x0b\x02\x40\x20\x00\x28\x02\x44\x20\x01\x2f\x01\x06\x41\x18\x6c\x6a\x28\x02\x08\x22\x02\x45\x0d\x00\x20\x00\x20\x01\xad\x42\x80\x80\x80\x80\x70\x84\x20\x02\x11\x0a\x00\x0b\x20\x01\x42\x00\x37\x03\x20\x20\x01\x41\x00\x3b\x01\x06\x20\x01\x41\x28\x6a\x41\x00\x36\x02\x00\x20\x01\x28\x02\x08\x22\x02\x20\x01\x41\x0c\x6a\x22\x04\x28\x02\x00\x22\x03\x36\x02\x04\x20\x03\x20\x02\x36\x02\x00\x20\x04\x41\x00\x36\x02\x00\x20\x01\x41\x00\x36\x02\x08\x20\x00\x2d\x00\x68\x41\x02\x47\x0d\x03\x20\x01\x28\x02\x00\x45\x0d\x03\x20\x00\x28\x02\x58\x22\x02\x20\x01\x41\x08\x6a\x22\x04\x36\x02\x04\x20\x01\x20\x02\x36\x02\x08\x20\x01\x20\x00\x41\xd8\x00\x6a\x36\x02\x0c\x20\x00\x20\x04\x36\x02\x58\x0f\x0b\x20\x00\x20\x01\x41\x14\x6a\x28\x02\x00\x20\x01\x41\x18\x6a\x28\x02\x00\x41\x01\x10\xdb\x02\x02\x40\x20\x01\x28\x02\x20\x45\x0d\x00\x41\x00\x21\x04\x41\x00\x21\x02\x03\x40\x20\x02\x20\x01\x2f\x01\x2a\x20\x01\x2f\x01\x28\x6a\x4f\x0d\x01\x20\x00\x20\x01\x28\x02\x20\x20\x04\x6a\x28\x02\x00\x10\xdc\x02\x20\x04\x41\x10\x6a\x21\x04\x20\x02\x41\x01\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x41\x00\x21\x04\x41\x00\x21\x02\x03\x40\x02\x40\x20\x02\x20\x01\x28\x02\x38\x48\x0d\x00\x41\x00\x21\x02\x41\x04\x21\x04\x02\x40\x03\x40\x20\x02\x20\x01\x28\x02\x3c\x4e\x0d\x01\x20\x00\x20\x01\x28\x02\x24\x20\x04\x6a\x28\x02\x00\x10\xdc\x02\x20\x04\x41\x08\x6a\x21\x04\x20\x02\x41\x01\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x02\x40\x20\x01\x28\x02\x30\x22\x02\x45\x0d\x00\x20\x02\x10\xdd\x02\x0b\x20\x00\x20\x01\x41\x1c\x6a\x28\x02\x00\x10\xdc\x02\x02\x40\x20\x01\x41\x12\x6a\x2d\x00\x00\x41\x04\x71\x45\x0d\x00\x20\x00\x20\x01\x28\x02\x40\x10\xdc\x02\x20\x00\x41\x10\x6a\x22\x02\x20\x01\x28\x02\x50\x20\x00\x28\x02\x04\x11\x00\x00\x20\x02\x20\x01\x41\xd4\x00\x6a\x28\x02\x00\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x20\x01\x28\x02\x08\x22\x02\x20\x01\x41\x0c\x6a\x22\x04\x28\x02\x00\x22\x03\x36\x02\x04\x20\x03\x20\x02\x36\x02\x00\x20\x04\x41\x00\x36\x02\x00\x20\x01\x41\x00\x36\x02\x08\x02\x40\x20\x00\x2d\x00\x68\x41\x02\x47\x0d\x00\x20\x01\x28\x02\x00\x45\x0d\x00\x20\x00\x28\x02\x58\x22\x02\x20\x01\x41\x08\x6a\x22\x04\x36\x02\x04\x20\x01\x20\x02\x36\x02\x08\x20\x01\x20\x00\x41\xd8\x00\x6a\x36\x02\x0c\x20\x00\x20\x04\x36\x02\x58\x0f\x0b\x20\x00\x41\x10\x6a\x20\x01\x20\x00\x28\x02\x04\x11\x00\x00\x0f\x0b\x20\x00\x20\x01\x28\x02\x34\x20\x04\x6a\x29\x03\x00\x10\xda\x02\x20\x04\x41\x08\x6a\x21\x04\x20\x02\x41\x01\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x41\xa6\xb8\x01\x41\xae\xb7\x01\x41\x8e\xe6\x02\x41\x97\xb8\x01\x10\x4a\x00\x0b\x41\x8c\xb8\x01\x41\xae\xb7\x01\x41\x8d\xe6\x02\x41\x97\xb8\x01\x10\x4a\x00\x0b\x20\x06\x20\x01\x20\x00\x28\x02\x04\x11\x00\x00\x0f\x0b\x10\x40\x00\x0b\x2d\x01\x01\x7f\x02\x40\x20\x00\x28\x02\x00\x22\x01\x45\x0d\x00\x20\x00\x28\x02\x10\x22\x00\x45\x0d\x00\x20\x01\x28\x02\x00\x20\x00\x41\x00\x20\x01\x28\x02\x04\x11\x01\x00\x1a\x0b\x0b\x71\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x41\x04\x76\x41\x03\x71\x0e\x04\x03\x00\x01\x02\x03\x0b\x02\x40\x20\x01\x28\x02\x00\x22\x02\x45\x0d\x00\x20\x00\x20\x02\xad\x42\x80\x80\x80\x80\x70\x84\x10\xda\x02\x0b\x20\x01\x28\x02\x04\x22\x01\x45\x0d\x03\x20\x00\x20\x01\xad\x42\x80\x80\x80\x80\x70\x84\x10\xda\x02\x0f\x0b\x20\x00\x20\x01\x28\x02\x00\x10\xde\x02\x0f\x0b\x20\x01\x10\xdf\x02\x0f\x0b\x20\x00\x20\x01\x29\x03\x00\x10\xda\x02\x0b\x0b\xe3\x01\x01\x03\x7f\x20\x01\x20\x01\x28\x02\x00\x22\x02\x41\x7f\x6a\x22\x03\x36\x02\x00\x02\x40\x02\x40\x20\x02\x41\x01\x4a\x0d\x00\x20\x03\x0d\x01\x02\x40\x20\x01\x2d\x00\x10\x45\x0d\x00\x20\x00\x20\x01\x10\xe0\x02\x0b\x02\x40\x20\x01\x28\x02\x2c\x22\x02\x45\x0d\x00\x20\x00\x20\x02\xad\x42\x80\x80\x80\x80\x70\x84\x10\xda\x02\x0b\x20\x01\x41\x34\x6a\x21\x03\x41\x00\x21\x02\x02\x40\x03\x40\x20\x02\x20\x01\x28\x02\x20\x4f\x0d\x01\x20\x00\x20\x03\x28\x02\x00\x10\xdc\x02\x20\x03\x41\x08\x6a\x21\x03\x20\x02\x41\x01\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x20\x01\x41\x0c\x6a\x22\x02\x28\x02\x00\x22\x03\x20\x01\x28\x02\x08\x22\x04\x36\x02\x00\x20\x04\x20\x03\x36\x02\x04\x20\x01\x41\x00\x36\x02\x08\x20\x02\x41\x00\x36\x02\x00\x20\x00\x41\x10\x6a\x20\x01\x20\x01\x28\x02\x18\x41\x7f\x73\x41\x02\x74\x6a\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x0f\x0b\x41\xa4\xc1\x01\x41\xae\xb7\x01\x41\xd9\x22\x41\xbe\xc1\x01\x10\x4a\x00\x0b\x32\x01\x01\x7f\x02\x40\x20\x01\x42\x20\x88\xa7\x41\x75\x49\x0d\x00\x20\x01\xa7\x22\x02\x20\x02\x28\x02\x00\x22\x02\x41\x7f\x6a\x36\x02\x00\x20\x02\x41\x01\x4a\x0d\x00\x20\x00\x20\x01\x10\xd4\x02\x0b\x0b\x6a\x01\x04\x7f\x41\x00\x21\x04\x02\x40\x03\x40\x20\x04\x20\x02\x4e\x0d\x01\x20\x01\x20\x04\x6a\x22\x05\x2d\x00\x00\x22\x06\x41\x0f\x6a\x20\x06\x20\x06\x41\xb3\x01\x4b\x1b\x20\x06\x20\x03\x1b\x41\x02\x74\x22\x06\x41\x90\xb9\x01\x6a\x2d\x00\x00\x21\x07\x02\x40\x20\x06\x41\x93\xb9\x01\x6a\x2d\x00\x00\x41\x69\x6a\x41\x04\x4b\x0d\x00\x20\x00\x20\x05\x28\x00\x01\x10\xdc\x02\x0b\x20\x04\x20\x07\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x0b\x14\x00\x02\x40\x20\x01\x41\xde\x01\x48\x0d\x00\x20\x00\x20\x01\x10\xe1\x02\x0b\x0b\xbd\x03\x01\x03\x7f\x20\x00\x20\x00\x28\x02\x00\x22\x01\x41\x7f\x6a\x22\x02\x36\x02\x00\x02\x40\x20\x01\x41\x01\x4a\x0d\x00\x02\x40\x20\x02\x0d\x00\x20\x00\x28\x02\x10\x21\x03\x20\x00\x41\x00\x10\xe2\x02\x20\x00\x20\x00\x29\x03\xc0\x01\x10\xcd\x01\x20\x00\x20\x00\x29\x03\xc8\x01\x10\xcd\x01\x20\x00\x20\x00\x29\x03\xb0\x01\x10\xcd\x01\x20\x00\x20\x00\x29\x03\xb8\x01\x10\xcd\x01\x20\x00\x20\x00\x29\x03\xa8\x01\x10\xcd\x01\x41\xd8\x00\x21\x01\x03\x40\x02\x40\x20\x01\x41\x98\x01\x47\x0d\x00\x41\x00\x21\x02\x41\x00\x21\x01\x02\x40\x03\x40\x20\x01\x20\x03\x28\x02\x40\x4e\x0d\x01\x20\x00\x20\x00\x28\x02\x28\x20\x02\x6a\x29\x03\x00\x10\xcd\x01\x20\x02\x41\x08\x6a\x21\x02\x20\x01\x41\x01\x6a\x21\x01\x0c\x00\x0b\x00\x0b\x20\x03\x41\x10\x6a\x20\x00\x28\x02\x28\x20\x03\x28\x02\x04\x11\x00\x00\x20\x00\x20\x00\x29\x03\x98\x01\x10\xcd\x01\x20\x00\x20\x00\x29\x03\xa0\x01\x10\xcd\x01\x20\x00\x20\x00\x29\x03\x50\x10\xcd\x01\x20\x00\x20\x00\x29\x03\x40\x10\xcd\x01\x20\x00\x20\x00\x29\x03\x48\x10\xcd\x01\x20\x00\x20\x00\x29\x03\x38\x10\xcd\x01\x20\x00\x20\x00\x29\x03\x30\x10\xcd\x01\x02\x40\x20\x00\x28\x02\x24\x22\x01\x45\x0d\x00\x20\x00\x28\x02\x10\x20\x01\x10\xd9\x02\x0b\x20\x00\x41\x18\x6a\x22\x01\x28\x02\x00\x22\x02\x20\x00\x28\x02\x14\x22\x03\x36\x02\x00\x20\x03\x20\x02\x36\x02\x04\x20\x00\x41\x00\x36\x02\x14\x20\x01\x41\x00\x36\x02\x00\x20\x00\x41\x0c\x6a\x22\x01\x28\x02\x00\x22\x02\x20\x00\x28\x02\x08\x22\x03\x36\x02\x00\x20\x03\x20\x02\x36\x02\x04\x20\x00\x41\x00\x36\x02\x08\x20\x01\x41\x00\x36\x02\x00\x20\x00\x28\x02\x10\x22\x01\x41\x10\x6a\x20\x00\x20\x01\x28\x02\x04\x11\x00\x00\x0c\x03\x0b\x20\x00\x20\x00\x20\x01\x6a\x29\x03\x00\x10\xcd\x01\x20\x01\x41\x08\x6a\x21\x01\x0c\x00\x0b\x00\x0b\x41\xb1\xb8\x01\x41\xae\xb7\x01\x41\xdb\x11\x41\xcc\xb8\x01\x10\x4a\x00\x0b\x0b\x90\x01\x01\x03\x7f\x02\x40\x02\x40\x20\x01\x45\x0d\x00\x20\x01\x28\x02\x00\x22\x02\x41\x00\x4c\x0d\x01\x20\x01\x20\x02\x41\x7f\x6a\x22\x02\x36\x02\x00\x20\x02\x0d\x00\x02\x40\x20\x01\x2d\x00\x05\x41\x01\x71\x45\x0d\x00\x20\x00\x20\x01\x29\x03\x18\x10\xda\x02\x0b\x20\x01\x41\x0c\x6a\x22\x02\x28\x02\x00\x22\x03\x20\x01\x28\x02\x08\x22\x04\x36\x02\x00\x20\x04\x20\x03\x36\x02\x04\x20\x01\x41\x00\x36\x02\x08\x20\x02\x41\x00\x36\x02\x00\x20\x00\x41\x10\x6a\x20\x01\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x0f\x0b\x41\xdb\xb8\x01\x41\xae\xb7\x01\x41\x8a\x29\x41\xf9\xb8\x01\x10\x4a\x00\x0b\x0d\x00\x20\x00\x28\x02\x00\x41\x7c\x71\x10\xdd\x02\x0b\x50\x01\x03\x7f\x20\x00\x28\x02\xd4\x01\x20\x01\x28\x02\x14\x41\x20\x20\x00\x28\x02\xc8\x01\x6b\x76\x41\x02\x74\x6a\x21\x02\x03\x40\x20\x02\x22\x03\x28\x02\x00\x22\x04\x41\x28\x6a\x21\x02\x20\x04\x20\x01\x47\x0d\x00\x0b\x20\x03\x20\x01\x28\x02\x28\x36\x02\x00\x20\x00\x20\x00\x28\x02\xd0\x01\x41\x7f\x6a\x36\x02\xd0\x01\x0b\x32\x01\x01\x7f\x20\x00\x28\x02\x38\x20\x01\x41\x02\x74\x6a\x28\x02\x00\x22\x01\x20\x01\x28\x02\x00\x22\x02\x41\x7f\x6a\x36\x02\x00\x02\x40\x20\x02\x41\x01\x4a\x0d\x00\x20\x00\x20\x01\x10\xd5\x02\x0b\x0b\x75\x01\x04\x7f\x20\x00\x41\xf4\x01\x6a\x21\x02\x20\x00\x41\xf8\x01\x6a\x28\x02\x00\x21\x03\x20\x01\x41\x02\x4b\x21\x04\x02\x40\x03\x40\x20\x03\x22\x05\x20\x02\x46\x0d\x01\x20\x05\x28\x02\x04\x21\x03\x20\x04\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x01\x0e\x03\x02\x00\x01\x02\x0b\x20\x05\x41\xcc\x00\x6a\x2c\x00\x00\x0d\x02\x0c\x01\x0b\x20\x05\x41\xcc\x00\x6a\x29\x02\x00\x42\x20\x86\x42\x38\x87\xa7\x0d\x01\x0b\x20\x00\x20\x05\x41\x78\x6a\x10\xe3\x02\x0c\x00\x0b\x00\x0b\x0b\xa8\x03\x01\x03\x7f\x20\x00\x20\x01\x28\x02\x04\x10\xe4\x02\x41\x00\x21\x02\x41\x00\x21\x03\x02\x40\x03\x40\x20\x03\x20\x01\x28\x02\x14\x4e\x0d\x01\x20\x00\x20\x01\x28\x02\x10\x20\x02\x6a\x28\x02\x00\x10\xe4\x02\x20\x02\x41\x08\x6a\x21\x02\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x01\x28\x02\x10\x20\x03\x28\x02\x04\x11\x00\x00\x41\x00\x21\x02\x41\x08\x21\x04\x02\x40\x03\x40\x20\x02\x20\x01\x28\x02\x20\x4e\x0d\x01\x02\x40\x20\x01\x28\x02\x1c\x20\x04\x6a\x22\x03\x28\x02\x00\x0d\x00\x20\x00\x28\x02\x10\x20\x03\x41\x7c\x6a\x28\x02\x00\x10\xde\x02\x0b\x20\x00\x20\x03\x41\x08\x6a\x28\x02\x00\x10\xe4\x02\x20\x00\x20\x03\x41\x04\x6a\x28\x02\x00\x10\xe4\x02\x20\x04\x41\x14\x6a\x21\x04\x20\x02\x41\x01\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x01\x28\x02\x1c\x20\x03\x28\x02\x04\x11\x00\x00\x20\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x01\x28\x02\x28\x20\x03\x28\x02\x04\x11\x00\x00\x41\x00\x21\x03\x41\x04\x21\x02\x02\x40\x03\x40\x20\x03\x20\x01\x28\x02\x38\x4e\x0d\x01\x20\x00\x20\x01\x28\x02\x34\x20\x02\x6a\x28\x02\x00\x10\xe4\x02\x20\x02\x41\x0c\x6a\x21\x02\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x01\x28\x02\x34\x20\x03\x28\x02\x04\x11\x00\x00\x20\x00\x20\x01\x29\x03\x40\x10\xcd\x01\x20\x00\x20\x01\x29\x03\x48\x10\xcd\x01\x20\x00\x20\x01\x29\x03\x60\x10\xcd\x01\x20\x00\x20\x01\x29\x03\x68\x10\xcd\x01\x20\x01\x41\x0c\x6a\x22\x03\x28\x02\x00\x22\x02\x20\x01\x28\x02\x08\x22\x04\x36\x02\x00\x20\x04\x20\x02\x36\x02\x04\x20\x01\x41\x00\x36\x02\x08\x20\x03\x41\x00\x36\x02\x00\x20\x00\x28\x02\x10\x22\x00\x41\x10\x6a\x20\x01\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x17\x00\x02\x40\x20\x01\x41\xde\x01\x48\x0d\x00\x20\x00\x28\x02\x10\x20\x01\x10\xe1\x02\x0b\x0b\xea\x01\x02\x01\x7f\x01\x7e\x23\x00\x41\xd0\x00\x6b\x22\x03\x24\x00\x02\x40\x02\x40\x02\x40\x20\x01\x41\x7f\x4a\x0d\x00\x20\x03\x20\x01\x41\xff\xff\xff\xff\x07\x71\x36\x02\x00\x20\x03\x41\x10\x6a\x41\xc0\x00\x41\xaa\xc2\x01\x20\x03\x10\x5f\x1a\x20\x00\x20\x03\x41\x10\x6a\x10\xc7\x02\x21\x04\x0c\x01\x0b\x20\x00\x28\x02\x10\x22\x00\x28\x02\x2c\x20\x01\x4d\x0d\x01\x02\x40\x02\x40\x20\x00\x28\x02\x38\x22\x00\x20\x01\x41\x02\x74\x6a\x28\x02\x00\x22\x01\x29\x02\x04\x22\x04\x42\x80\x80\x80\x80\x80\x80\x80\x80\x40\x83\x42\x80\x80\x80\x80\x80\x80\x80\x80\xc0\x00\x51\x0d\x00\x20\x02\x45\x0d\x01\x20\x04\xa7\x41\x80\x80\x80\x80\x78\x47\x0d\x00\x20\x00\x28\x02\xbc\x01\x21\x01\x0b\x20\x01\xad\x42\x80\x80\x80\x80\x90\x7f\x84\x10\xc0\x01\x21\x04\x0c\x01\x0b\x20\x01\xad\x42\x80\x80\x80\x80\x80\x7f\x84\x10\xc0\x01\x21\x04\x0b\x20\x03\x41\xd0\x00\x6a\x24\x00\x20\x04\x0f\x0b\x41\xad\xc2\x01\x41\xae\xb7\x01\x41\x8b\x18\x41\xc2\xc2\x01\x10\x4a\x00\x0b\x0b\x00\x20\x00\x20\x01\x41\x00\x10\xe9\x02\x0b\x1c\x00\x02\x40\x20\x00\x28\x02\x10\x20\x01\x20\x02\x10\xea\x02\x22\x01\x0d\x00\x20\x00\x10\xc1\x02\x0b\x20\x01\x0b\xd8\x02\x01\x03\x7f\x02\x40\x02\x40\x02\x40\x20\x01\x41\xff\x00\x4b\x0d\x00\x20\x00\x20\x01\x3a\x00\x00\x20\x00\x41\x01\x6a\x21\x01\x0c\x01\x0b\x02\x40\x02\x40\x20\x01\x41\xff\x0f\x4b\x0d\x00\x20\x01\x41\x06\x76\x41\x40\x72\x21\x02\x20\x00\x21\x03\x0c\x01\x0b\x02\x40\x02\x40\x20\x01\x41\xff\xff\x03\x4b\x0d\x00\x20\x00\x41\x01\x6a\x21\x03\x20\x01\x41\x0c\x76\x41\x60\x72\x21\x02\x20\x00\x21\x04\x0c\x01\x0b\x02\x40\x02\x40\x20\x01\x41\xff\xff\xff\x00\x4b\x0d\x00\x20\x01\x41\x12\x76\x41\x70\x72\x21\x03\x20\x00\x21\x02\x0c\x01\x0b\x02\x40\x02\x40\x20\x01\x41\xff\xff\xff\x1f\x4b\x0d\x00\x20\x01\x41\x18\x76\x41\x78\x72\x21\x03\x41\x01\x21\x02\x20\x00\x21\x04\x0c\x01\x0b\x41\x00\x21\x03\x20\x01\x41\x00\x48\x0d\x05\x20\x00\x20\x01\x41\x1e\x76\x41\xfc\x01\x72\x3a\x00\x00\x20\x00\x41\x01\x6a\x21\x04\x20\x01\x41\x18\x76\x41\x3f\x71\x41\x80\x7f\x72\x21\x03\x41\x02\x21\x02\x0b\x20\x04\x20\x03\x3a\x00\x00\x20\x00\x20\x02\x6a\x21\x02\x20\x01\x41\x12\x76\x41\x3f\x71\x41\x80\x7f\x72\x21\x03\x0b\x20\x02\x20\x03\x3a\x00\x00\x20\x02\x41\x02\x6a\x21\x03\x20\x02\x41\x01\x6a\x21\x04\x20\x01\x41\x0c\x76\x41\x3f\x71\x41\x80\x7f\x72\x21\x02\x0b\x20\x04\x20\x02\x3a\x00\x00\x20\x01\x41\x06\x76\x41\x3f\x71\x41\x80\x7f\x72\x21\x02\x0b\x20\x03\x20\x02\x3a\x00\x00\x20\x03\x20\x01\x41\x3f\x71\x41\x80\x01\x72\x3a\x00\x01\x20\x03\x41\x02\x6a\x21\x01\x0b\x20\x01\x20\x00\x6b\x21\x03\x0b\x20\x03\x0b\x8e\x03\x02\x03\x7f\x01\x7e\x23\x00\x41\x30\x6b\x22\x03\x24\x00\x02\x40\x02\x40\x02\x40\x41\x07\x20\x01\x42\x20\x88\xa7\x22\x04\x20\x04\x41\x0b\x6a\x41\x11\x4b\x1b\x41\x0b\x6a\x22\x04\x41\x12\x4b\x0d\x00\x41\x89\xc3\x01\x21\x05\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x04\x0e\x13\x0b\x09\x0a\x05\x06\x0c\x0c\x0c\x0c\x0d\x04\x00\x01\x02\x03\x0c\x0c\x0e\x08\x0b\x0b\x20\x03\x20\x01\x3e\x02\x00\x20\x03\x41\x10\x6a\x41\x20\x41\xd3\xc2\x01\x20\x03\x10\x5f\x1a\x20\x03\x41\x10\x6a\x21\x05\x0c\x0c\x0b\x20\x00\x41\x03\x41\x02\x20\x01\xa7\x1b\x10\xc5\x01\x21\x06\x0c\x0c\x0b\x20\x00\x41\x01\x10\xc5\x01\x21\x06\x0c\x0b\x0b\x20\x00\x41\xc5\x00\x10\xc5\x01\x21\x06\x0c\x0a\x0b\x02\x40\x20\x00\x20\x01\x41\x00\x10\xeb\x02\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x21\x06\x0c\x0a\x0b\x20\x00\x20\x01\x20\x02\x10\xe9\x02\x21\x06\x20\x00\x20\x01\x10\xcd\x01\x0c\x09\x0b\x20\x02\x45\x0d\x01\x0b\x20\x01\x10\xc0\x01\x21\x06\x0c\x07\x0b\x20\x00\x41\xd6\xc2\x01\x41\x00\x10\xb2\x02\x0c\x06\x0b\x20\x00\x20\x01\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\x41\x0a\x41\x00\x41\x00\x10\xec\x02\x21\x06\x0c\x05\x0b\x20\x00\x20\x01\x20\x00\x28\x02\x10\x28\x02\x94\x02\x11\x08\x00\x21\x06\x0c\x04\x0b\x20\x00\x20\x01\x20\x00\x28\x02\x10\x28\x02\xb0\x02\x11\x08\x00\x21\x06\x0c\x03\x0b\x20\x00\x20\x01\x20\x00\x28\x02\x10\x28\x02\xcc\x02\x11\x08\x00\x21\x06\x0c\x02\x0b\x41\xf6\xc2\x01\x21\x05\x0b\x20\x00\x20\x05\x10\xc7\x02\x21\x06\x0b\x20\x03\x41\x30\x6a\x24\x00\x20\x06\x0b\x49\x00\x02\x40\x20\x00\x41\x10\x6a\x20\x01\x20\x02\x74\x20\x02\x6b\x41\x11\x6a\x20\x00\x28\x02\x00\x11\x03\x00\x22\x00\x0d\x00\x41\x00\x0f\x0b\x20\x00\x41\x00\x36\x02\x0c\x20\x00\x41\x01\x36\x02\x00\x20\x00\x20\x02\x41\x1f\x74\x20\x01\x41\xff\xff\xff\xff\x07\x71\x72\xad\x37\x02\x04\x20\x00\x0b\x0e\x00\x20\x00\x20\x01\x10\xc0\x01\x20\x02\x10\xed\x02\x0b\xc9\x09\x03\x05\x7f\x01\x7c\x04\x7e\x23\x00\x41\xb0\x02\x6b\x22\x05\x24\x00\x02\x40\x02\x40\x20\x01\x99\x22\x0a\x44\x00\x00\x00\x00\x00\x00\xf0\x7f\x62\x20\x0a\x20\x0a\x61\x71\x0d\x00\x02\x40\x20\x01\x20\x01\x61\x0d\x00\x20\x05\x41\xce\xc2\xb9\x02\x36\x02\xb0\x01\x0c\x02\x0b\x20\x05\x41\xb0\x01\x6a\x21\x03\x02\x40\x20\x01\x44\x00\x00\x00\x00\x00\x00\x00\x00\x63\x41\x01\x73\x0d\x00\x20\x05\x41\x2d\x3a\x00\xb0\x01\x20\x05\x41\xb0\x01\x6a\x41\x01\x72\x21\x03\x0b\x20\x03\x41\x08\x6a\x41\x00\x2d\x00\xd8\xcf\x05\x3a\x00\x00\x20\x03\x41\x00\x29\x00\xd0\xcf\x05\x37\x00\x00\x0c\x01\x0b\x02\x40\x02\x40\x02\x40\x20\x04\x0d\x00\x02\x40\x02\x40\x20\x0a\x44\x00\x00\x00\x00\x00\x00\xe0\x43\x63\x45\x0d\x00\x20\x01\xb0\x21\x0b\x0c\x01\x0b\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x21\x0b\x0b\x02\x40\x20\x0b\x42\xff\xff\xff\xff\xff\xff\xff\x0f\x7c\x42\xfe\xff\xff\xff\xff\xff\xff\x1f\x56\x0d\x00\x20\x0b\xb9\x20\x01\x62\x0d\x00\x20\x05\x41\x00\x3a\x00\x75\x20\x0b\x20\x0b\x42\x3f\x87\x22\x0c\x7c\x20\x0c\x85\x21\x0c\x20\x05\x41\xf4\x00\x6a\x21\x03\x20\x02\xad\x21\x0d\x03\x40\x20\x03\x41\x30\x41\xd7\x00\x20\x0c\x20\x0c\x20\x0d\x80\x22\x0e\x20\x0d\x7e\x7d\xa7\x22\x02\x41\x0a\x48\x1b\x20\x02\x6a\x3a\x00\x00\x20\x03\x41\x7f\x6a\x21\x03\x20\x0c\x20\x0d\x5a\x21\x02\x20\x0e\x21\x0c\x20\x02\x0d\x00\x0b\x02\x40\x02\x40\x20\x0b\x42\x7f\x57\x0d\x00\x20\x03\x41\x01\x6a\x21\x03\x0c\x01\x0b\x20\x03\x41\x2d\x3a\x00\x00\x0b\x20\x05\x41\xb0\x01\x6a\x20\x03\x10\x73\x1a\x0c\x04\x0b\x20\x05\x41\xb0\x01\x6a\x21\x06\x0c\x01\x0b\x44\x00\x00\x00\x00\x00\x00\x00\x00\x20\x01\x20\x01\x44\x00\x00\x00\x00\x00\x00\x00\x00\x61\x1b\x21\x01\x02\x40\x20\x04\x41\x02\x47\x0d\x00\x20\x05\x20\x01\x39\x03\x18\x20\x05\x20\x03\x36\x02\x10\x20\x05\x41\xb0\x01\x6a\x41\x80\x01\x41\x9d\xc3\x01\x20\x05\x41\x10\x6a\x10\x5f\x41\x80\x01\x48\x0d\x03\x41\xa2\xc3\x01\x41\xae\xb7\x01\x41\xa1\xd9\x00\x41\xaf\xc3\x01\x10\x4a\x00\x0b\x20\x05\x41\xb0\x01\x6a\x21\x06\x20\x03\x21\x07\x20\x04\x41\x03\x71\x41\x01\x46\x0d\x01\x0b\x20\x05\x41\x30\x6a\x41\x7f\x6a\x21\x08\x41\x11\x21\x07\x41\x01\x21\x09\x03\x40\x02\x40\x20\x09\x20\x07\x49\x0d\x00\x41\x15\x21\x03\x0c\x02\x0b\x20\x01\x20\x07\x20\x09\x6a\x41\x01\x76\x22\x03\x20\x05\x41\x28\x6a\x20\x05\x41\x2c\x6a\x20\x05\x41\x30\x6a\x20\x06\x10\xee\x02\x02\x40\x20\x06\x41\x00\x10\x83\x01\x20\x01\x62\x0d\x00\x03\x40\x02\x40\x20\x03\x41\x02\x4e\x0d\x00\x20\x03\x21\x07\x0c\x03\x0b\x20\x08\x20\x03\x6a\x21\x02\x20\x03\x21\x07\x20\x03\x41\x7f\x6a\x21\x03\x20\x02\x2d\x00\x00\x41\x30\x47\x0d\x02\x0c\x00\x0b\x00\x0b\x20\x03\x41\x01\x6a\x21\x09\x0c\x00\x0b\x00\x0b\x20\x01\x20\x07\x20\x05\x41\x28\x6a\x20\x05\x41\x2c\x6a\x20\x05\x41\x30\x6a\x20\x06\x10\xee\x02\x20\x05\x28\x02\x28\x21\x08\x02\x40\x02\x40\x20\x05\x28\x02\x2c\x0d\x00\x20\x05\x41\xb0\x01\x6a\x21\x06\x0c\x01\x0b\x20\x05\x41\x2d\x3a\x00\xb0\x01\x20\x05\x41\xb0\x01\x6a\x41\x01\x72\x21\x06\x0b\x02\x40\x20\x04\x41\x04\x71\x0d\x00\x02\x40\x20\x08\x41\x01\x48\x0d\x00\x20\x08\x20\x03\x4a\x0d\x00\x02\x40\x20\x07\x20\x08\x4a\x0d\x00\x20\x08\x20\x07\x6b\x21\x08\x20\x06\x20\x05\x41\x30\x6a\x20\x07\x10\x70\x20\x07\x6a\x21\x07\x41\x00\x21\x03\x02\x40\x03\x40\x20\x07\x20\x03\x6a\x21\x02\x20\x03\x20\x08\x4e\x0d\x01\x20\x02\x41\x30\x3a\x00\x00\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x02\x41\x00\x3a\x00\x00\x0c\x03\x0b\x20\x06\x20\x05\x41\x30\x6a\x20\x08\x10\x70\x20\x08\x6a\x22\x09\x41\x2e\x3a\x00\x00\x20\x07\x20\x08\x6b\x21\x02\x20\x09\x41\x01\x6a\x21\x07\x20\x05\x41\x30\x6a\x20\x08\x6a\x21\x08\x41\x00\x21\x03\x02\x40\x03\x40\x20\x03\x20\x02\x4e\x0d\x01\x20\x07\x20\x03\x6a\x20\x08\x20\x03\x6a\x2d\x00\x00\x3a\x00\x00\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x09\x20\x03\x6a\x41\x01\x6a\x41\x00\x3a\x00\x00\x0c\x02\x0b\x20\x08\x41\x05\x6a\x41\x05\x4b\x0d\x00\x20\x06\x41\xb0\xdc\x00\x3b\x00\x00\x41\x00\x21\x03\x41\x00\x20\x08\x6b\x21\x09\x20\x06\x41\x02\x6a\x21\x08\x02\x40\x03\x40\x20\x08\x20\x03\x6a\x21\x02\x20\x03\x20\x09\x4e\x0d\x01\x20\x02\x41\x30\x3a\x00\x00\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x02\x20\x05\x41\x30\x6a\x20\x07\x10\x70\x1a\x20\x08\x20\x07\x6a\x20\x03\x6a\x41\x00\x3a\x00\x00\x0c\x01\x0b\x20\x06\x20\x05\x2d\x00\x30\x3a\x00\x00\x02\x40\x02\x40\x20\x07\x41\x02\x4e\x0d\x00\x20\x06\x41\x01\x6a\x21\x03\x0c\x01\x0b\x20\x06\x41\x2e\x3a\x00\x01\x20\x07\x41\x7f\x6a\x21\x02\x20\x06\x41\x02\x6a\x21\x03\x20\x05\x41\x30\x6a\x41\x01\x72\x21\x07\x03\x40\x20\x02\x45\x0d\x01\x20\x03\x20\x07\x2d\x00\x00\x3a\x00\x00\x20\x02\x41\x7f\x6a\x21\x02\x20\x07\x41\x01\x6a\x21\x07\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x03\x41\xe5\x00\x3a\x00\x00\x20\x08\x41\x7f\x6a\x21\x02\x02\x40\x02\x40\x20\x08\x41\x01\x4e\x0d\x00\x20\x03\x41\x01\x6a\x21\x03\x0c\x01\x0b\x20\x03\x41\x2b\x3a\x00\x01\x20\x03\x41\x02\x6a\x21\x03\x0b\x20\x05\x20\x02\x36\x02\x00\x20\x03\x41\xd3\xc2\x01\x20\x05\x10\x5e\x1a\x0b\x20\x00\x20\x05\x41\xb0\x01\x6a\x10\xc7\x02\x21\x0c\x20\x05\x41\xb0\x02\x6a\x24\x00\x20\x0c\x0b\x9c\x03\x02\x02\x7f\x02\x7e\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x5a\x0d\x00\x20\x01\x21\x05\x0c\x01\x0b\x20\x02\x41\x6f\x71\x21\x04\x02\x40\x02\x40\x02\x40\x20\x02\x41\x10\x71\x0d\x00\x20\x00\x20\x01\x41\xd0\x01\x20\x01\x41\x00\x10\xb4\x01\x22\x06\x42\x80\x80\x80\x80\x70\x83\x22\x05\x42\x80\x80\x80\x80\x20\x51\x0d\x00\x20\x05\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x05\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x03\x20\x00\x41\xc6\x00\x41\x16\x20\x04\x41\x01\x46\x1b\x41\xc8\x00\x20\x04\x1b\x10\xc5\x01\x37\x03\x08\x20\x00\x20\x06\x20\x01\x41\x01\x20\x03\x41\x08\x6a\x10\xef\x02\x21\x05\x20\x00\x20\x03\x29\x03\x08\x10\xcd\x01\x20\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x01\x10\xcd\x01\x20\x05\x42\x80\x80\x80\x80\x70\x54\x0d\x03\x20\x00\x20\x05\x10\xcd\x01\x20\x00\x41\xbe\xc3\x01\x41\x00\x10\xb2\x02\x0c\x02\x0b\x20\x04\x41\x00\x47\x21\x04\x41\x00\x21\x02\x02\x40\x03\x40\x20\x02\x41\x02\x46\x0d\x01\x20\x00\x20\x01\x41\x37\x41\x39\x20\x04\x20\x02\x46\x1b\x20\x01\x41\x00\x10\xb4\x01\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x02\x40\x20\x00\x20\x05\x10\xf0\x02\x45\x0d\x00\x20\x00\x20\x05\x20\x01\x41\x00\x41\x00\x10\xef\x02\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x05\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x20\x01\x10\xcd\x01\x0c\x05\x0b\x20\x00\x20\x05\x10\xcd\x01\x20\x02\x41\x01\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x20\x00\x41\xbe\xc3\x01\x41\x00\x10\xb2\x02\x0b\x20\x00\x20\x01\x10\xcd\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x05\x0b\x87\x01\x01\x02\x7f\x23\x00\x41\x10\x6b\x22\x06\x24\x00\x20\x06\x20\x00\x39\x03\x08\x20\x06\x20\x01\x41\x7f\x6a\x22\x07\x36\x02\x00\x20\x05\x41\x80\x01\x41\xb8\xc3\x01\x20\x06\x10\x5f\x1a\x20\x03\x20\x05\x2d\x00\x00\x41\x2d\x46\x36\x02\x00\x20\x04\x20\x05\x2d\x00\x01\x3a\x00\x00\x02\x40\x20\x01\x41\x02\x48\x0d\x00\x20\x04\x41\x01\x6a\x20\x05\x41\x03\x6a\x20\x07\x10\x70\x1a\x0b\x20\x04\x20\x01\x6a\x41\x00\x3a\x00\x00\x20\x02\x20\x05\x20\x01\x6a\x20\x01\x41\x01\x4a\x6a\x41\x02\x6a\x10\x7c\x41\x01\x6a\x36\x02\x00\x20\x06\x41\x10\x6a\x24\x00\x0b\x22\x00\x20\x00\x20\x01\x20\x02\x42\x80\x80\x80\x80\x30\x20\x03\x20\x04\x41\x02\x10\xf9\x02\x21\x02\x20\x00\x20\x01\x10\xcd\x01\x20\x02\x0b\x56\x01\x02\x7f\x41\x00\x21\x02\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x02\x40\x20\x01\xa7\x22\x03\x2f\x01\x06\x22\x02\x41\x0d\x47\x0d\x00\x41\x01\x0f\x0b\x02\x40\x20\x02\x41\x30\x47\x0d\x00\x20\x03\x28\x02\x20\x2d\x00\x10\x0f\x0b\x20\x00\x28\x02\x10\x28\x02\x44\x20\x02\x41\x18\x6c\x6a\x28\x02\x10\x41\x00\x47\x21\x02\x0b\x20\x02\x0b\x36\x01\x01\x7f\x23\x00\x41\xd0\x00\x6b\x22\x03\x24\x00\x20\x03\x20\x00\x41\x10\x6a\x28\x02\x00\x20\x03\x41\x10\x6a\x20\x01\x10\xdc\x01\x36\x02\x00\x20\x00\x20\x02\x20\x03\x10\xb2\x02\x20\x03\x41\xd0\x00\x6a\x24\x00\x0b\x52\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x02\x40\x02\x40\x20\x01\x41\xff\x01\x4b\x0d\x00\x20\x02\x20\x01\x3a\x00\x0f\x20\x00\x20\x02\x41\x0f\x6a\x41\x01\x10\xb3\x02\x21\x03\x0c\x01\x0b\x20\x02\x20\x01\x3b\x01\x0c\x20\x00\x20\x02\x41\x0c\x6a\x41\x01\x10\xe0\x04\x21\x03\x0b\x20\x02\x41\x10\x6a\x24\x00\x20\x03\x0b\x4e\x02\x01\x7e\x01\x7f\x42\x80\x80\x80\x80\x20\x21\x02\x02\x40\x41\x9f\xb0\x10\x20\x01\x42\x20\x88\xa7\x41\x0b\x6a\x22\x03\x41\x12\x20\x03\x41\x12\x49\x1b\x22\x03\x76\x41\x01\x71\x45\x0d\x00\x20\x00\x28\x02\x28\x20\x03\x41\x02\x74\x41\xd0\xe1\x01\x6a\x28\x02\x00\x41\x03\x74\x6a\x29\x03\x00\x21\x02\x0b\x20\x02\x0b\x4e\x01\x01\x7f\x23\x00\x41\xd0\x00\x6b\x22\x02\x24\x00\x02\x40\x02\x40\x20\x01\x0d\x00\x41\xfa\xe3\x01\x21\x01\x0c\x01\x0b\x20\x00\x41\x10\x6a\x28\x02\x00\x20\x02\x41\x10\x6a\x20\x01\x10\xdc\x01\x21\x01\x0b\x20\x02\x20\x01\x36\x02\x00\x20\x00\x41\x8b\xe4\x01\x20\x02\x10\x8c\x03\x20\x02\x41\xd0\x00\x6a\x24\x00\x0b\xab\x01\x02\x01\x7f\x02\x7e\x23\x00\x41\x10\x6b\x22\x05\x24\x00\x20\x05\x20\x04\x36\x02\x0c\x02\x40\x20\x00\x20\x01\x20\x05\x41\x0c\x6a\x10\xd1\x03\x0d\x00\x20\x03\x28\x02\x00\x22\x00\x41\x7c\x71\x20\x01\x20\x02\x20\x03\x28\x02\x04\x20\x00\x41\x03\x71\x41\x02\x74\x41\xfc\xd7\x01\x6a\x28\x02\x00\x11\x23\x00\x21\x06\x20\x03\x10\xdf\x02\x20\x05\x28\x02\x0c\x22\x01\x20\x01\x28\x02\x00\x41\xff\xff\xff\xff\x03\x71\x36\x02\x00\x20\x03\x20\x06\x42\x80\x80\x80\x80\x30\x20\x06\x42\x80\x80\x80\x80\x70\x83\x22\x07\x42\x80\x80\x80\x80\xe0\x00\x52\x1b\x37\x03\x00\x20\x05\x41\x10\x6a\x24\x00\x41\x7f\x41\x00\x20\x07\x42\x80\x80\x80\x80\xe0\x00\x51\x1b\x0f\x0b\x20\x05\x41\x10\x6a\x24\x00\x41\x7f\x0b\x57\x01\x01\x7e\x02\x40\x02\x40\x20\x02\x41\x00\x48\x0d\x00\x20\x02\xad\x21\x03\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x02\xb8\xbd\x22\x03\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x03\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x03\x0b\x20\x00\x20\x01\x20\x03\x10\xbb\x03\x0b\x47\x02\x01\x7f\x02\x7e\x41\x00\x21\x02\x02\x40\x20\x00\x20\x01\x10\xd3\x03\x22\x03\x42\x80\x80\x80\x80\x70\x83\x22\x04\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x02\x40\x20\x04\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x03\x10\xcd\x01\x41\x01\x0f\x0b\x41\x7f\x21\x02\x0b\x20\x02\x0b\x38\x01\x01\x7f\x23\x00\x41\xd0\x00\x6b\x22\x02\x24\x00\x20\x02\x20\x00\x41\x10\x6a\x28\x02\x00\x20\x02\x41\x10\x6a\x20\x01\x10\xdc\x01\x36\x02\x00\x20\x00\x41\x9c\xe2\x01\x20\x02\x10\x8c\x03\x20\x02\x41\xd0\x00\x6a\x24\x00\x0b\xd0\xbf\x01\x03\x23\x7f\x07\x7e\x01\x7c\x23\x00\x41\xc0\x01\x6b\x22\x07\x21\x08\x20\x07\x24\x00\x20\x00\x28\x02\x10\x21\x09\x42\x80\x80\x80\x80\xe0\x00\x21\x2a\x02\x40\x20\x00\x10\xfa\x02\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x06\x41\x04\x71\x45\x0d\x01\x20\x01\xa7\x22\x06\x41\x3c\x6a\x22\x07\x28\x02\x00\x21\x0a\x20\x06\x41\x18\x6a\x28\x02\x00\x22\x0b\x41\x24\x6a\x28\x02\x00\x21\x0c\x20\x0b\x28\x02\x20\x21\x0d\x20\x07\x41\x00\x36\x02\x00\x20\x09\x28\x02\x8c\x01\x21\x07\x20\x09\x20\x06\x41\x10\x6a\x22\x0e\x36\x02\x8c\x01\x20\x06\x20\x07\x36\x02\x10\x20\x06\x41\x24\x6a\x28\x02\x00\x22\x0f\x20\x0d\x2f\x01\x2a\x41\x03\x74\x6a\x21\x10\x20\x06\x41\x30\x6a\x28\x02\x00\x21\x11\x20\x0d\x28\x02\x30\x21\x07\x20\x06\x41\x20\x6a\x28\x02\x00\x22\x12\x21\x13\x20\x06\x28\x02\x0c\x45\x0d\x06\x0c\x04\x0b\x20\x01\xa7\x22\x0b\x2f\x01\x06\x22\x0a\x41\x0d\x46\x0d\x02\x20\x09\x28\x02\x44\x20\x0a\x41\x18\x6c\x6a\x28\x02\x10\x22\x07\x0d\x01\x0b\x20\x00\x41\xca\xc3\x01\x41\x00\x10\xb2\x02\x0c\x06\x0b\x20\x00\x20\x01\x20\x02\x20\x04\x20\x05\x20\x06\x20\x07\x11\x15\x00\x21\x2a\x0c\x05\x0b\x02\x40\x20\x08\x20\x0b\x28\x02\x20\x22\x0d\x2f\x01\x2e\x20\x0d\x2f\x01\x2a\x22\x0a\x6a\x20\x0d\x2f\x01\x28\x22\x14\x41\x00\x20\x06\x41\x01\x76\x41\x01\x71\x20\x14\x20\x04\x4a\x22\x15\x72\x1b\x22\x06\x6a\x41\x03\x74\x22\x13\x6b\x20\x09\x28\x02\x78\x4f\x0d\x00\x20\x00\x10\xfb\x02\x0c\x05\x0b\x20\x08\x41\xec\x00\x6a\x20\x08\x41\xe8\x00\x6a\x22\x10\x36\x02\x00\x20\x08\x20\x04\x36\x02\x74\x20\x08\x20\x0d\x2d\x00\x10\x36\x02\x78\x20\x08\x20\x01\x37\x03\x58\x20\x08\x20\x10\x36\x02\x68\x20\x0b\x28\x02\x24\x21\x0c\x20\x07\x20\x13\x41\x0f\x6a\x41\xf0\xff\xff\x01\x71\x6b\x22\x13\x24\x00\x20\x05\x21\x12\x20\x06\x45\x0d\x01\x20\x04\x20\x14\x20\x15\x1b\x21\x14\x41\x00\x21\x0a\x41\x00\x21\x07\x03\x40\x02\x40\x20\x07\x20\x14\x48\x0d\x00\x20\x13\x20\x0a\x6a\x21\x0a\x20\x0d\x2f\x01\x28\x21\x14\x02\x40\x03\x40\x20\x07\x20\x14\x4f\x0d\x01\x20\x0a\x42\x80\x80\x80\x80\x30\x37\x03\x00\x20\x0a\x41\x08\x6a\x21\x0a\x20\x07\x41\x01\x6a\x21\x07\x0c\x00\x0b\x00\x0b\x20\x08\x20\x14\x36\x02\x74\x20\x0d\x2f\x01\x2a\x21\x0a\x20\x13\x21\x12\x0c\x03\x0b\x20\x13\x20\x0a\x6a\x20\x05\x20\x0a\x6a\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x0a\x41\x08\x6a\x21\x0a\x20\x07\x41\x01\x6a\x21\x07\x0c\x00\x0b\x00\x0b\x41\x01\x21\x06\x0c\x02\x0b\x20\x08\x20\x12\x36\x02\x60\x20\x08\x20\x13\x20\x06\x41\x03\x74\x6a\x22\x0f\x36\x02\x64\x20\x0a\x21\x07\x20\x0f\x21\x06\x02\x40\x03\x40\x20\x07\x45\x0d\x01\x20\x06\x42\x80\x80\x80\x80\x30\x37\x03\x00\x20\x07\x41\x7f\x6a\x21\x07\x20\x06\x41\x08\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x20\x08\x20\x09\x28\x02\x8c\x01\x36\x02\x50\x20\x09\x20\x08\x41\xd0\x00\x6a\x36\x02\x8c\x01\x20\x0d\x28\x02\x30\x21\x07\x20\x0d\x28\x02\x14\x21\x11\x20\x08\x41\xd0\x00\x6a\x21\x0e\x20\x0f\x20\x0a\x41\x03\x74\x6a\x22\x0a\x21\x10\x0b\x41\x00\x21\x06\x0b\x03\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x06\x0e\x02\x00\x01\x01\x0b\x20\x04\x41\x03\x74\x21\x16\x20\x03\x42\x80\x80\x80\x80\x70\x83\x21\x01\x20\x0e\x41\x18\x6a\x21\x17\x20\x07\x41\xc8\x01\x6a\x21\x18\x20\x10\x41\x18\x6a\x21\x19\x20\x07\x41\xc0\x01\x6a\x21\x1a\x20\x0f\x41\x08\x6a\x21\x1b\x20\x0f\x41\x10\x6a\x21\x1c\x20\x0f\x41\x18\x6a\x21\x1d\x20\x12\x41\x08\x6a\x21\x1e\x20\x12\x41\x10\x6a\x21\x1f\x20\x12\x41\x18\x6a\x21\x20\x20\x02\x42\x20\x88\xa7\x22\x21\x41\x01\x72\x21\x22\x20\x04\xad\x21\x2b\x20\x08\x41\x20\x6a\x41\x08\x6a\x21\x23\x20\x08\x41\x28\x6a\x41\x08\x6a\x21\x24\x20\x08\x41\x30\x6a\x41\x10\x6a\x21\x25\x20\x0a\x21\x14\x20\x11\x21\x15\x20\x11\x41\x01\x6a\x21\x06\x0c\x01\x0b\x41\x00\x21\x06\x02\x40\x20\x09\x29\x03\x80\x01\x22\x2a\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x2a\xa7\x22\x14\x2f\x01\x06\x41\x03\x47\x0d\x00\x20\x14\x28\x02\x10\x22\x15\x20\x15\x28\x02\x18\x41\x7f\x73\x41\x02\x74\x41\xa8\x7e\x72\x6a\x28\x02\x00\x21\x14\x02\x40\x02\x40\x03\x40\x20\x14\x45\x0d\x01\x20\x15\x20\x14\x41\x7f\x6a\x41\x03\x74\x6a\x22\x14\x41\x34\x6a\x28\x02\x00\x41\x35\x46\x0d\x02\x20\x14\x41\x30\x6a\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x21\x14\x0c\x00\x0b\x00\x0b\x20\x0e\x20\x11\x36\x02\x20\x20\x07\x20\x2a\x41\x00\x41\x00\x41\x00\x10\xc8\x02\x20\x09\x29\x03\x80\x01\x21\x2a\x0b\x20\x2a\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x2a\xa7\x22\x14\x2f\x01\x06\x41\x03\x47\x0d\x00\x20\x14\x2d\x00\x05\x41\x05\x76\x41\x01\x71\x21\x06\x0b\x20\x06\x0d\x02\x03\x40\x02\x40\x20\x0a\x22\x06\x20\x10\x4b\x0d\x00\x20\x06\x21\x0a\x0c\x04\x0b\x20\x07\x20\x06\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x10\xcd\x01\x20\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xd0\x00\x52\x0d\x00\x02\x40\x20\x2a\xa7\x22\x14\x0d\x00\x20\x07\x20\x06\x41\x70\x6a\x22\x0a\x29\x03\x00\x10\xcd\x01\x20\x07\x20\x06\x41\x68\x6a\x29\x03\x00\x41\x01\x10\xfc\x02\x1a\x0c\x01\x0b\x0b\x20\x0a\x20\x09\x29\x03\x80\x01\x37\x03\x00\x20\x09\x42\x80\x80\x80\x80\x20\x37\x03\x80\x01\x20\x0d\x28\x02\x14\x20\x14\x6a\x21\x11\x20\x06\x21\x0a\x0c\x01\x0b\x03\x40\x02\x40\x20\x15\x2d\x00\x00\x22\x26\x41\x02\x74\x41\xc0\xc9\x01\x6a\x28\x02\x00\x41\x7e\x6a\x22\x0a\x41\xd8\x01\x4d\x0d\x00\x20\x14\x20\x06\x35\x00\x00\x37\x03\x00\x20\x06\x41\x04\x6a\x21\x15\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x41\x05\x6a\x21\x06\x0c\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x2a\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x0a\x0e\xd9\x01\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x28\x29\x2a\x2b\x84\x01\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x5b\x5c\x5d\x5e\x5f\x60\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x7b\x7c\x7d\x7e\x7f\x80\x01\x81\x01\x82\x01\xde\x01\xdd\x01\xdc\x01\xdb\x01\xda\x01\xd9\x01\xd8\x01\xd7\x01\xd6\x01\xd5\x01\xd4\x01\xd2\x01\xd1\x01\xd0\x01\xcf\x01\xce\x01\xcd\x01\xcc\x01\xcb\x01\xca\x01\xc9\x01\xc8\x01\xc7\x01\xc6\x01\xc5\x01\xc4\x01\xc3\x01\xc2\x01\xc1\x01\xc0\x01\xbf\x01\xbe\x01\xbd\x01\xbc\x01\xbb\x01\xba\x01\xb9\x01\xb7\x01\xb6\x01\xb5\x01\xb4\x01\xb8\x01\xb3\x01\xb2\x01\xb1\x01\xb0\x01\xaf\x01\xae\x01\xad\x01\xac\x01\xab\x01\xaa\x01\xa9\x01\xa8\x01\xa7\x01\xa6\x01\xa5\x01\xa4\x01\xa3\x01\xa2\x01\xa1\x01\xa0\x01\x9f\x01\x9e\x01\x9d\x01\x9c\x01\x9b\x01\x9a\x01\x99\x01\x98\x01\x97\x01\x96\x01\x95\x01\x94\x01\x92\x01\x91\x01\x90\x01\x8f\x01\x87\x01\x8c\x01\x8b\x01\x89\x01\x88\x01\x86\x01\x85\x01\xef\x01\x00\x0b\x20\x14\x20\x0d\x28\x02\x34\x20\x06\x28\x00\x00\x41\x03\x74\x6a\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x06\x41\x04\x6a\x21\x15\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x41\x05\x6a\x21\x06\x0c\xea\x01\x0b\x20\x14\x20\x26\x41\xcb\x7e\x6a\xad\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xe9\x01\x0b\x20\x14\x20\x06\x30\x00\x00\x42\xff\xff\xff\xff\x0f\x83\x37\x03\x00\x20\x06\x41\x01\x6a\x21\x15\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x41\x02\x6a\x21\x06\x0c\xe8\x01\x0b\x20\x14\x20\x06\x32\x00\x00\x42\xff\xff\xff\xff\x0f\x83\x37\x03\x00\x20\x06\x41\x02\x6a\x21\x15\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x41\x03\x6a\x21\x06\x0c\xe7\x01\x0b\x20\x14\x20\x0d\x28\x02\x34\x20\x06\x2d\x00\x00\x41\x03\x74\x6a\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x41\x01\x6a\x21\x15\x20\x06\x41\x02\x6a\x21\x06\x0c\xe6\x01\x0b\x20\x14\x20\x07\x20\x0d\x28\x02\x34\x20\x06\x2d\x00\x00\x41\x03\x74\x6a\x29\x03\x00\x10\xc0\x01\x20\x0c\x20\x0e\x10\xfd\x02\x22\x2a\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x41\x01\x6a\x21\x15\x20\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\xeb\x01\x20\x06\x41\x02\x6a\x21\x06\x0c\xe5\x01\x0b\x20\x14\x20\x07\x41\x2f\x10\xc5\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xe4\x01\x0b\x20\x07\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x41\x30\x20\x2a\x41\x00\x10\xb4\x01\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\xdf\x01\x20\x07\x20\x0a\x29\x03\x00\x10\xcd\x01\x20\x0a\x20\x2a\x37\x03\x00\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xe3\x01\x0b\x20\x14\x20\x07\x20\x06\x28\x00\x00\x10\xdd\x01\x37\x03\x00\x20\x06\x41\x04\x6a\x21\x15\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x41\x05\x6a\x21\x06\x0c\xe2\x01\x0b\x20\x14\x42\x80\x80\x80\x80\x30\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xe1\x01\x0b\x20\x14\x42\x80\x80\x80\x80\x20\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xe0\x01\x0b\x20\x02\x21\x2a\x02\x40\x02\x40\x02\x40\x20\x0d\x2d\x00\x10\x41\x01\x71\x0d\x00\x20\x02\x21\x2a\x20\x21\x41\x7f\x46\x0d\x00\x20\x22\x41\x03\x47\x0d\x01\x20\x1a\x29\x03\x00\x21\x2a\x0b\x20\x2a\x10\xc0\x01\x21\x2a\x0c\x01\x0b\x20\x07\x20\x02\x10\xfe\x02\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\xdc\x01\x0b\x20\x14\x20\x2a\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xdf\x01\x0b\x20\x14\x42\x80\x80\x80\x80\x10\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xde\x01\x0b\x20\x14\x42\x81\x80\x80\x80\x10\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xdd\x01\x0b\x20\x14\x20\x07\x10\xc1\x01\x22\x2a\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\xd8\x01\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xdc\x01\x0b\x02\x40\x02\x40\x20\x06\x2d\x00\x00\x22\x0a\x41\x06\x4b\x0d\x00\x20\x06\x41\x01\x6a\x21\x15\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x0a\x0e\x07\x00\x01\x02\x03\x04\x05\x06\x00\x0b\x02\x40\x20\x07\x20\x07\x28\x02\x28\x29\x03\x08\x41\x08\x10\xc6\x01\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x14\x20\x2a\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x0a\x0c\xde\x01\x0b\x20\x07\x20\x2a\xa7\x22\x27\x41\x30\x41\x03\x10\xff\x02\x20\x2b\x37\x03\x00\x02\x40\x20\x04\x41\x01\x4e\x0d\x00\x41\x00\x21\x28\x0c\xe2\x01\x0b\x20\x04\x21\x0a\x20\x07\x20\x16\x10\xc0\x02\x22\x28\x21\x26\x20\x05\x21\x11\x02\x40\x20\x28\x0d\x00\x20\x07\x20\x2a\x10\xcd\x01\x20\x14\x42\x80\x80\x80\x80\xe0\x00\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x0a\x0c\xde\x01\x0b\x03\x40\x20\x0a\x45\x0d\xe2\x01\x20\x26\x20\x11\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x0a\x41\x7f\x6a\x21\x0a\x20\x26\x41\x08\x6a\x21\x26\x20\x11\x41\x08\x6a\x21\x11\x0c\x00\x0b\x00\x0b\x20\x0d\x2f\x01\x28\x21\x0a\x02\x40\x20\x07\x20\x07\x28\x02\x28\x29\x03\x08\x41\x09\x10\xc6\x01\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x14\x20\x2a\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x0a\x0c\xdd\x01\x0b\x20\x04\x20\x0a\x20\x0a\x20\x04\x4a\x1b\x21\x26\x20\x07\x20\x2a\xa7\x22\x28\x41\x30\x41\x03\x10\xff\x02\x20\x2b\x37\x03\x00\x41\x00\x21\x0a\x03\x40\x02\x40\x02\x40\x02\x40\x20\x0a\x20\x26\x48\x0d\x00\x20\x05\x20\x26\x41\x03\x74\x6a\x21\x0a\x03\x40\x20\x26\x20\x04\x4e\x0d\x0b\x20\x07\x20\x2a\x20\x26\x20\x0a\x29\x03\x00\x10\xc0\x01\x41\x07\x10\x80\x03\x21\x11\x20\x0a\x41\x08\x6a\x21\x0a\x20\x26\x41\x01\x6a\x21\x26\x20\x11\x41\x7f\x4a\x0d\x00\x0c\x02\x0b\x00\x0b\x20\x07\x20\x0e\x20\x0a\x41\x01\x10\x81\x03\x22\x11\x45\x0d\x00\x20\x07\x20\x28\x20\x0a\x41\x80\x80\x80\x80\x78\x72\x41\x27\x10\xff\x02\x22\x27\x0d\x01\x20\x07\x41\x10\x6a\x28\x02\x00\x20\x11\x10\xde\x02\x0b\x20\x07\x20\x2a\x10\xcd\x01\x20\x14\x42\x80\x80\x80\x80\xe0\x00\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x0a\x0c\xde\x01\x0b\x20\x27\x20\x11\x36\x02\x00\x20\x0a\x41\x01\x6a\x21\x0a\x0c\x00\x0b\x00\x0b\x20\x14\x20\x0e\x29\x03\x08\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x0c\xe0\x01\x0b\x20\x14\x20\x03\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x0c\xdf\x01\x0b\x02\x40\x20\x0b\x28\x02\x28\x22\x0a\x0d\x00\x20\x14\x42\x80\x80\x80\x80\x30\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x0c\xdf\x01\x0b\x20\x14\x20\x0a\xad\x42\x80\x80\x80\x80\x70\x84\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x0c\xde\x01\x0b\x20\x14\x20\x07\x42\x80\x80\x80\x80\x20\x10\xbd\x01\x22\x2a\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\xe4\x01\x0c\xdd\x01\x0b\x02\x40\x02\x40\x20\x07\x10\x82\x03\x22\x0a\x45\x0d\x00\x20\x07\x20\x0a\x10\x83\x03\x21\x26\x20\x07\x20\x0a\x10\xe4\x02\x20\x26\x0d\x01\x0b\x20\x07\x41\xd9\xc3\x01\x41\x00\x10\xb2\x02\x20\x14\x42\x80\x80\x80\x80\xe0\x00\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x0a\x0c\xd8\x01\x0b\x20\x14\x20\x07\x20\x26\x10\x84\x03\x22\x2a\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\xe3\x01\x0c\xdc\x01\x0b\x10\x40\x00\x0b\x20\x07\x20\x2a\x41\xd1\x01\x20\x07\x29\x03\xa8\x01\x10\xc0\x01\x41\x03\x10\xc4\x01\x1a\x20\x07\x20\x2a\x41\xce\x00\x20\x07\x41\x10\x6a\x28\x02\x00\x28\x02\x8c\x01\x29\x03\x08\x10\xc0\x01\x41\x03\x10\xc4\x01\x1a\x20\x14\x20\x2a\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x0c\xda\x01\x0b\x20\x06\x41\x02\x6a\x21\x15\x20\x06\x2f\x00\x00\x21\x27\x20\x07\x10\x85\x03\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x72\x20\x05\x20\x27\x41\x03\x74\x6a\x21\x26\x41\x00\x21\x0a\x02\x40\x03\x40\x20\x27\x20\x0a\x6a\x20\x04\x4e\x0d\x01\x20\x07\x20\x2a\x20\x0a\x20\x26\x29\x03\x00\x10\xc0\x01\x41\x07\x10\x80\x03\x21\x11\x20\x26\x41\x08\x6a\x21\x26\x20\x0a\x41\x01\x6a\x21\x0a\x20\x11\x41\x7f\x4a\x0d\x00\x0b\x20\x07\x20\x2a\x10\xcd\x01\x20\x14\x42\x80\x80\x80\x80\xe0\x00\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x0a\x0c\xd5\x01\x0b\x20\x14\x20\x2a\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x41\x03\x6a\x21\x06\x0c\xda\x01\x0b\x20\x07\x20\x14\x41\x78\x6a\x22\x14\x29\x03\x00\x10\xcd\x01\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xd9\x01\x0b\x20\x07\x20\x14\x41\x70\x6a\x22\x0a\x29\x03\x00\x10\xcd\x01\x20\x0a\x20\x14\x41\x78\x6a\x22\x14\x29\x03\x00\x37\x03\x00\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xd8\x01\x0b\x20\x07\x20\x14\x41\x68\x6a\x22\x0a\x29\x03\x00\x10\xcd\x01\x20\x0a\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x37\x03\x00\x20\x15\x20\x14\x41\x78\x6a\x22\x14\x29\x03\x00\x37\x03\x00\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xd7\x01\x0b\x20\x14\x20\x14\x41\x78\x6a\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xd6\x01\x0b\x20\x14\x20\x14\x41\x70\x6a\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x14\x20\x14\x41\x78\x6a\x29\x03\x00\x10\xc0\x01\x37\x03\x08\x20\x14\x41\x10\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xd5\x01\x0b\x20\x14\x20\x14\x41\x68\x6a\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x14\x20\x14\x41\x70\x6a\x29\x03\x00\x10\xc0\x01\x37\x03\x08\x20\x14\x20\x14\x41\x78\x6a\x29\x03\x00\x10\xc0\x01\x37\x03\x10\x20\x14\x41\x18\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xd4\x01\x0b\x20\x14\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x37\x03\x00\x20\x0a\x20\x14\x41\x70\x6a\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xd3\x01\x0b\x20\x14\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x37\x03\x00\x20\x0a\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x37\x03\x00\x20\x15\x20\x2a\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xd2\x01\x0b\x20\x14\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x37\x03\x00\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x21\x2c\x20\x15\x20\x14\x41\x68\x6a\x22\x26\x29\x03\x00\x37\x03\x00\x20\x0a\x20\x2c\x37\x03\x00\x20\x26\x20\x2a\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xd1\x01\x0b\x20\x14\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x37\x03\x00\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x21\x2c\x20\x15\x20\x14\x41\x68\x6a\x22\x26\x29\x03\x00\x37\x03\x00\x20\x0a\x20\x2c\x37\x03\x00\x20\x26\x20\x14\x41\x60\x6a\x22\x0a\x29\x03\x00\x37\x03\x00\x20\x0a\x20\x2a\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xd0\x01\x0b\x20\x14\x41\x70\x6a\x22\x0a\x29\x03\x00\x21\x2a\x20\x0a\x20\x14\x41\x68\x6a\x22\x15\x29\x03\x00\x37\x03\x00\x20\x15\x20\x2a\x37\x03\x00\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xcf\x01\x0b\x20\x14\x41\x68\x6a\x22\x0a\x29\x03\x00\x21\x2a\x20\x0a\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x37\x03\x00\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x21\x2c\x20\x0a\x20\x2a\x37\x03\x00\x20\x15\x20\x2c\x37\x03\x00\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xce\x01\x0b\x20\x14\x41\x60\x6a\x22\x0a\x29\x03\x00\x21\x2a\x20\x0a\x20\x14\x41\x68\x6a\x22\x15\x29\x03\x00\x37\x03\x00\x20\x14\x41\x70\x6a\x22\x0a\x29\x03\x00\x21\x2c\x20\x0a\x20\x14\x41\x78\x6a\x22\x26\x29\x03\x00\x37\x03\x00\x20\x15\x20\x2c\x37\x03\x00\x20\x26\x20\x2a\x37\x03\x00\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xcd\x01\x0b\x20\x14\x41\x58\x6a\x22\x0a\x29\x03\x00\x21\x2a\x20\x0a\x20\x14\x41\x60\x6a\x22\x15\x29\x03\x00\x37\x03\x00\x20\x14\x41\x68\x6a\x22\x0a\x29\x03\x00\x21\x2c\x20\x0a\x20\x14\x41\x70\x6a\x22\x26\x29\x03\x00\x37\x03\x00\x20\x15\x20\x2c\x37\x03\x00\x20\x26\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x37\x03\x00\x20\x0a\x20\x2a\x37\x03\x00\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xcc\x01\x0b\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x21\x2a\x20\x0a\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x37\x03\x00\x20\x14\x41\x68\x6a\x22\x0a\x29\x03\x00\x21\x2c\x20\x0a\x20\x2a\x37\x03\x00\x20\x15\x20\x2c\x37\x03\x00\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xcb\x01\x0b\x20\x14\x41\x70\x6a\x22\x0a\x29\x03\x00\x21\x2a\x20\x0a\x20\x14\x41\x68\x6a\x22\x15\x29\x03\x00\x37\x03\x00\x20\x14\x41\x60\x6a\x22\x0a\x29\x03\x00\x21\x2c\x20\x0a\x20\x2a\x37\x03\x00\x20\x15\x20\x2c\x37\x03\x00\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xca\x01\x0b\x20\x14\x41\x70\x6a\x22\x0a\x29\x03\x00\x21\x2a\x20\x0a\x20\x14\x41\x68\x6a\x22\x15\x29\x03\x00\x37\x03\x00\x20\x14\x41\x60\x6a\x22\x0a\x29\x03\x00\x21\x2c\x20\x0a\x20\x14\x41\x58\x6a\x22\x26\x29\x03\x00\x37\x03\x00\x20\x15\x20\x2c\x37\x03\x00\x20\x26\x20\x2a\x37\x03\x00\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xc9\x01\x0b\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x21\x2a\x20\x0a\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x37\x03\x00\x20\x15\x20\x2a\x37\x03\x00\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xc8\x01\x0b\x20\x14\x41\x60\x6a\x22\x0a\x29\x03\x00\x21\x2a\x20\x0a\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x37\x03\x00\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x21\x2c\x20\x0a\x20\x14\x41\x68\x6a\x22\x26\x29\x03\x00\x37\x03\x00\x20\x15\x20\x2a\x37\x03\x00\x20\x26\x20\x2c\x37\x03\x00\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xc7\x01\x0b\x20\x14\x20\x07\x20\x0d\x28\x02\x34\x20\x06\x28\x00\x00\x41\x03\x74\x6a\x29\x03\x00\x10\xc0\x01\x20\x0c\x20\x0e\x10\xfd\x02\x22\x2a\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x41\x04\x6a\x21\x15\x20\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\xcc\x01\x20\x06\x41\x05\x6a\x21\x06\x0c\xc6\x01\x0b\x20\x26\x41\x92\x7e\x6a\x21\x11\x20\x06\x21\x15\x0c\x01\x0b\x20\x06\x41\x02\x6a\x21\x15\x20\x06\x2f\x00\x00\x21\x11\x0b\x20\x0e\x20\x15\x36\x02\x20\x20\x07\x20\x14\x20\x11\x41\x03\x74\x6b\x22\x06\x41\x78\x6a\x29\x03\x00\x42\x80\x80\x80\x80\x30\x42\x80\x80\x80\x80\x30\x20\x11\x20\x06\x41\x00\x10\xf9\x02\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\xc9\x01\x20\x26\x41\x23\x46\x0d\xc7\x01\x20\x14\x41\x00\x20\x11\x6b\x41\x03\x74\x6a\x41\x78\x6a\x21\x0a\x41\x7f\x21\x06\x02\x40\x03\x40\x20\x06\x20\x11\x4e\x0d\x01\x20\x07\x20\x0a\x29\x03\x00\x10\xcd\x01\x20\x0a\x41\x08\x6a\x21\x0a\x20\x06\x41\x01\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x20\x14\x20\x11\x41\x7f\x73\x41\x03\x74\x6a\x22\x06\x20\x2a\x37\x03\x00\x20\x06\x41\x08\x6a\x21\x14\x20\x15\x41\x01\x6a\x21\x06\x0c\xc3\x01\x0b\x20\x0e\x20\x06\x41\x02\x6a\x22\x15\x36\x02\x20\x20\x07\x20\x14\x20\x06\x2f\x00\x00\x22\x11\x41\x03\x74\x22\x27\x6b\x22\x0a\x41\x70\x6a\x29\x03\x00\x20\x0a\x41\x78\x6a\x29\x03\x00\x20\x11\x20\x0a\x41\x00\x10\x86\x03\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\xc8\x01\x20\x14\x41\x70\x6a\x21\x26\x41\x00\x20\x27\x6b\x21\x0a\x02\x40\x03\x40\x20\x0a\x41\x10\x46\x0d\x01\x20\x07\x20\x26\x20\x0a\x6a\x29\x03\x00\x10\xcd\x01\x20\x0a\x41\x08\x6a\x21\x0a\x0c\x00\x0b\x00\x0b\x20\x14\x41\x7e\x20\x11\x6b\x41\x03\x74\x6a\x22\x0a\x20\x2a\x37\x03\x00\x20\x0a\x41\x08\x6a\x21\x14\x20\x06\x41\x03\x6a\x21\x06\x0c\xc2\x01\x0b\x20\x0e\x20\x06\x41\x02\x6a\x22\x15\x36\x02\x20\x20\x07\x20\x14\x20\x06\x2f\x00\x00\x22\x11\x41\x03\x74\x6b\x22\x0a\x41\x78\x6a\x29\x03\x00\x20\x0a\x41\x70\x6a\x29\x03\x00\x42\x80\x80\x80\x80\x30\x20\x11\x20\x0a\x41\x00\x10\xf9\x02\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\xc7\x01\x20\x26\x41\x25\x46\x0d\xc5\x01\x20\x14\x41\x70\x6a\x21\x26\x41\x00\x20\x11\x41\x03\x74\x6b\x21\x0a\x02\x40\x03\x40\x20\x0a\x41\x10\x46\x0d\x01\x20\x07\x20\x26\x20\x0a\x6a\x29\x03\x00\x10\xcd\x01\x20\x0a\x41\x08\x6a\x21\x0a\x0c\x00\x0b\x00\x0b\x20\x14\x41\x7e\x20\x11\x6b\x41\x03\x74\x6a\x22\x0a\x20\x2a\x37\x03\x00\x20\x0a\x41\x08\x6a\x21\x14\x20\x06\x41\x03\x6a\x21\x06\x0c\xc1\x01\x0b\x20\x06\x41\x02\x6a\x21\x15\x20\x06\x2f\x00\x00\x21\x27\x20\x07\x10\x85\x03\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\xc6\x01\x41\x00\x21\x0a\x20\x14\x20\x27\x41\x03\x74\x6b\x22\x28\x21\x26\x02\x40\x03\x40\x20\x27\x20\x0a\x46\x0d\x01\x20\x07\x20\x2a\x20\x0a\x41\x80\x80\x80\x80\x78\x72\x20\x26\x29\x03\x00\x41\x87\x80\x01\x10\xc4\x01\x21\x11\x20\x26\x42\x80\x80\x80\x80\x30\x37\x03\x00\x20\x26\x41\x08\x6a\x21\x26\x20\x0a\x41\x01\x6a\x21\x0a\x20\x11\x41\x7f\x4a\x0d\x00\x0b\x20\x07\x20\x2a\x10\xcd\x01\x0c\xba\x01\x0b\x20\x28\x20\x2a\x37\x03\x00\x20\x28\x41\x08\x6a\x21\x14\x20\x06\x41\x03\x6a\x21\x06\x0c\xc0\x01\x0b\x20\x06\x41\x02\x6a\x21\x15\x20\x07\x20\x14\x41\x68\x6a\x22\x0a\x29\x03\x00\x41\x02\x20\x14\x41\x70\x6a\x22\x26\x20\x06\x2f\x00\x00\x10\x87\x03\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\xc5\x01\x20\x07\x20\x0a\x29\x03\x00\x10\xcd\x01\x20\x07\x20\x26\x29\x03\x00\x10\xcd\x01\x20\x07\x20\x14\x41\x78\x6a\x29\x03\x00\x10\xcd\x01\x20\x0a\x20\x2a\x37\x03\x00\x20\x26\x21\x14\x20\x06\x41\x03\x6a\x21\x06\x0c\xbf\x01\x0b\x42\x80\x80\x80\x80\x10\x21\x2a\x02\x40\x20\x14\x41\x78\x6a\x29\x03\x00\x22\x2c\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x42\x81\x80\x80\x80\x10\x21\x2a\x20\x2c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x41\x83\xc4\x01\x41\x00\x10\xb2\x02\x0c\xbb\x01\x0b\x20\x14\x20\x2a\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xbe\x01\x0b\x02\x40\x20\x01\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x07\x41\xc0\xc4\x01\x41\x00\x10\xb2\x02\x0c\xba\x01\x0b\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xbd\x01\x0b\x20\x14\x41\x78\x6a\x29\x03\x00\x22\x2c\x42\xff\xff\xff\xff\x6f\x58\x0d\xb7\x01\x20\x14\x41\x70\x6a\x29\x03\x00\x21\x2a\x20\x2c\xa7\x22\x0a\x2f\x01\x06\x10\xc6\x02\x45\x0d\xb7\x01\x20\x0a\x41\x28\x6a\x28\x02\x00\x22\x0a\x45\x0d\xb7\x01\x20\x0a\x28\x02\x10\x22\x26\x20\x26\x28\x02\x18\x41\x7f\x73\x41\x02\x74\x41\xc0\x79\x72\x6a\x28\x02\x00\x21\x15\x02\x40\x02\x40\x03\x40\x20\x15\x45\x0d\x01\x20\x26\x20\x15\x41\x7f\x6a\x41\x03\x74\x22\x15\x6a\x22\x11\x41\x34\x6a\x28\x02\x00\x41\xcf\x01\x46\x0d\x02\x20\x11\x41\x30\x6a\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x21\x15\x0c\x00\x0b\x00\x0b\x20\x07\x41\xee\xc4\x01\x41\x00\x10\xb2\x02\x0c\xb9\x01\x0b\x20\x2a\x42\x80\x80\x80\x80\x70\x54\x0d\xb7\x01\x20\x0a\x28\x02\x14\x20\x15\x6a\x29\x03\x00\x22\x2c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x80\x7f\x52\x0d\xb7\x01\x20\x07\x41\x10\x6a\x28\x02\x00\x20\x2c\x10\x88\x03\x21\x15\x20\x2a\xa7\x28\x02\x10\x22\x26\x20\x15\x20\x26\x28\x02\x18\x71\x41\x7f\x73\x41\x02\x74\x6a\x28\x02\x00\x21\x0a\x02\x40\x02\x40\x03\x40\x20\x0a\x45\x0d\x01\x20\x26\x20\x0a\x41\x7f\x6a\x41\x03\x74\x6a\x22\x0a\x41\x34\x6a\x28\x02\x00\x20\x15\x46\x0d\x02\x20\x0a\x41\x30\x6a\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x21\x0a\x0c\x00\x0b\x00\x0b\x20\x07\x41\x8e\xc5\x01\x41\x00\x10\xb2\x02\x0c\xb9\x01\x0b\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xbc\x01\x0b\x20\x14\x41\x78\x6a\x22\x27\x29\x03\x00\x22\x2c\x42\xff\xff\xff\xff\x6f\x58\x0d\xb6\x01\x20\x14\x41\x70\x6a\x22\x26\x29\x03\x00\x21\x2a\x20\x2c\xa7\x22\x11\x28\x02\x10\x22\x15\x20\x15\x28\x02\x18\x41\x7f\x73\x41\x02\x74\x41\xc0\x79\x72\x6a\x28\x02\x00\x21\x0a\x02\x40\x02\x40\x02\x40\x03\x40\x20\x0a\x45\x0d\x01\x20\x15\x20\x0a\x41\x7f\x6a\x41\x03\x74\x22\x0a\x6a\x22\x28\x41\x34\x6a\x28\x02\x00\x41\xcf\x01\x46\x0d\x02\x20\x28\x41\x30\x6a\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x21\x0a\x0c\x00\x0b\x00\x0b\x20\x07\x41\xf7\x00\x10\x89\x03\x22\x2c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\xb9\x01\x02\x40\x20\x07\x20\x11\x41\xcf\x01\x41\x07\x10\xff\x02\x22\x0a\x0d\x00\x20\x07\x20\x2c\x10\xcd\x01\x0c\xba\x01\x0b\x20\x0a\x20\x2c\x10\xc0\x01\x22\x2c\x37\x03\x00\x0c\x01\x0b\x20\x11\x28\x02\x14\x20\x0a\x6a\x29\x03\x00\x10\xc0\x01\x21\x2c\x0b\x20\x07\x41\x10\x6a\x28\x02\x00\x20\x2c\x10\x88\x03\x21\x0a\x02\x40\x20\x2a\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x07\x10\x8a\x03\x20\x07\x20\x0a\x10\xe4\x02\x0c\xb8\x01\x0b\x20\x07\x20\x2a\xa7\x20\x0a\x41\x07\x10\xff\x02\x21\x15\x20\x07\x20\x0a\x10\xe4\x02\x20\x15\x45\x0d\xb7\x01\x20\x15\x42\x80\x80\x80\x80\x30\x37\x03\x00\x20\x07\x20\x26\x29\x03\x00\x10\xcd\x01\x20\x07\x20\x27\x29\x03\x00\x10\xcd\x01\x20\x26\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xbb\x01\x0b\x20\x07\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x10\xc9\x02\x0c\xb7\x01\x0b\x20\x06\x41\x05\x6a\x21\x11\x02\x40\x20\x06\x2d\x00\x04\x22\x0a\x41\x04\x4b\x0d\x00\x20\x06\x28\x00\x00\x21\x06\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x0a\x0e\x05\x00\x01\x02\x03\x04\x00\x0b\x20\x07\x20\x06\x41\xa6\xc5\x01\x10\xf1\x02\x0c\xa6\x01\x0b\x20\x07\x20\x06\x10\x8b\x03\x0c\xa5\x01\x0b\x20\x07\x20\x06\x10\xf4\x02\x0c\xa4\x01\x0b\x20\x07\x41\xb8\xc5\x01\x41\x00\x10\x8c\x03\x0c\xa3\x01\x0b\x20\x07\x41\xd9\xc5\x01\x41\x00\x10\xb2\x02\x0c\xa2\x01\x0b\x20\x08\x20\x0a\x36\x02\x00\x20\x07\x41\xff\xc5\x01\x20\x08\x10\xc2\x02\x0c\xa1\x01\x0b\x20\x0e\x20\x06\x41\x04\x6a\x22\x15\x36\x02\x20\x20\x06\x2f\x00\x02\x21\x26\x02\x40\x02\x40\x20\x07\x20\x14\x20\x06\x2f\x00\x00\x22\x11\x41\x03\x74\x6b\x22\x0a\x41\x78\x6a\x22\x27\x29\x03\x00\x20\x07\x29\x03\xb8\x01\x10\x8d\x03\x45\x0d\x00\x20\x26\x41\x7f\x6a\x21\x26\x42\x80\x80\x80\x80\x30\x21\x2a\x02\x40\x20\x11\x45\x0d\x00\x20\x0a\x29\x03\x00\x21\x2a\x0b\x20\x07\x42\x80\x80\x80\x80\x30\x20\x2a\x41\x02\x20\x26\x10\x8e\x03\x21\x2a\x0c\x01\x0b\x20\x07\x20\x27\x29\x03\x00\x42\x80\x80\x80\x80\x30\x42\x80\x80\x80\x80\x30\x20\x11\x20\x0a\x41\x00\x10\xf9\x02\x21\x2a\x0b\x20\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\xb1\x01\x20\x14\x41\x78\x6a\x21\x26\x41\x00\x20\x11\x41\x03\x74\x6b\x21\x0a\x02\x40\x03\x40\x20\x0a\x41\x08\x46\x0d\x01\x20\x07\x20\x26\x20\x0a\x6a\x29\x03\x00\x10\xcd\x01\x20\x0a\x41\x08\x6a\x21\x0a\x0c\x00\x0b\x00\x0b\x20\x14\x20\x11\x41\x7f\x73\x41\x03\x74\x6a\x22\x0a\x20\x2a\x37\x03\x00\x20\x0a\x41\x08\x6a\x21\x14\x20\x06\x41\x05\x6a\x21\x06\x0c\xb8\x01\x0b\x20\x06\x41\x02\x6a\x21\x15\x20\x06\x2f\x00\x00\x21\x27\x20\x07\x20\x08\x41\xcc\x00\x6a\x20\x14\x41\x78\x6a\x22\x26\x29\x03\x00\x10\x8f\x03\x22\x11\x45\x0d\xb0\x01\x02\x40\x02\x40\x20\x07\x20\x14\x41\x70\x6a\x22\x0a\x29\x03\x00\x20\x07\x29\x03\xb8\x01\x10\x8d\x03\x45\x0d\x00\x20\x27\x41\x7f\x6a\x21\x28\x42\x80\x80\x80\x80\x30\x21\x2a\x02\x40\x20\x08\x28\x02\x4c\x22\x27\x45\x0d\x00\x20\x11\x29\x03\x00\x21\x2a\x0b\x20\x07\x42\x80\x80\x80\x80\x30\x20\x2a\x41\x02\x20\x28\x10\x8e\x03\x21\x2a\x0c\x01\x0b\x20\x07\x20\x0a\x29\x03\x00\x42\x80\x80\x80\x80\x30\x20\x08\x28\x02\x4c\x22\x27\x20\x11\x10\xb5\x01\x21\x2a\x0b\x20\x07\x20\x11\x20\x27\x10\x90\x03\x20\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\xb0\x01\x20\x07\x20\x0a\x29\x03\x00\x10\xcd\x01\x20\x07\x20\x26\x29\x03\x00\x10\xcd\x01\x20\x0a\x20\x2a\x37\x03\x00\x20\x26\x21\x14\x20\x06\x41\x03\x6a\x21\x06\x0c\xb7\x01\x0b\x20\x14\x41\x70\x6a\x22\x0a\x20\x07\x42\x80\x80\x80\x80\x30\x20\x0a\x29\x03\x00\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x10\x91\x03\x37\x03\x00\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xb6\x01\x0b\x20\x07\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x10\x92\x03\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\xb1\x01\x20\x07\x20\x0a\x29\x03\x00\x10\xcd\x01\x20\x0a\x20\x2a\x37\x03\x00\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xb5\x01\x0b\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x21\x2c\x02\x40\x02\x40\x20\x07\x10\x82\x03\x22\x15\x0d\x00\x42\x80\x80\x80\x80\x20\x21\x2a\x0c\x01\x0b\x20\x07\x20\x15\x10\xdd\x01\x21\x2a\x20\x07\x20\x15\x10\xe4\x02\x20\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\xb1\x01\x0b\x02\x40\x20\x07\x20\x08\x41\xa0\x01\x6a\x10\x93\x03\x22\x2d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x07\x20\x2a\x10\xcd\x01\x0c\xb1\x01\x0b\x20\x08\x20\x08\x29\x03\xa0\x01\x22\x2e\x37\x03\x80\x01\x20\x08\x20\x2c\x37\x03\x98\x01\x20\x08\x20\x2a\x37\x03\x90\x01\x20\x08\x20\x08\x29\x03\xa8\x01\x22\x2c\x37\x03\x88\x01\x20\x07\x41\xf0\x00\x41\x04\x20\x08\x41\x80\x01\x6a\x10\x95\x03\x20\x07\x20\x2a\x10\xcd\x01\x20\x07\x20\x2e\x10\xcd\x01\x20\x07\x20\x2c\x10\xcd\x01\x20\x07\x20\x0a\x29\x03\x00\x10\xcd\x01\x20\x0a\x20\x2d\x37\x03\x00\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xb4\x01\x0b\x20\x06\x41\x04\x6a\x21\x15\x20\x18\x28\x02\x00\x28\x02\x10\x22\x26\x20\x26\x28\x02\x18\x20\x06\x28\x00\x00\x22\x11\x71\x41\x7f\x73\x41\x02\x74\x6a\x28\x02\x00\x21\x0a\x02\x40\x02\x40\x03\x40\x20\x0a\x45\x0d\x01\x41\x01\x21\x27\x20\x26\x20\x0a\x41\x7f\x6a\x41\x03\x74\x6a\x22\x0a\x41\x34\x6a\x28\x02\x00\x20\x11\x46\x0d\x02\x20\x0a\x41\x30\x6a\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x21\x0a\x0c\x00\x0b\x00\x0b\x20\x07\x20\x07\x29\x03\xc0\x01\x20\x11\x10\x96\x03\x22\x27\x41\x00\x48\x0d\xad\x01\x0b\x20\x14\x20\x27\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x37\x03\x00\x20\x06\x41\x05\x6a\x21\x06\x20\x14\x41\x08\x6a\x21\x14\x0c\xb3\x01\x0b\x20\x26\x41\x49\x6a\x21\x28\x20\x06\x41\x04\x6a\x21\x15\x20\x18\x28\x02\x00\x22\x27\x28\x02\x10\x22\x26\x20\x26\x28\x02\x18\x20\x06\x28\x00\x00\x22\x11\x71\x41\x7f\x73\x41\x02\x74\x6a\x28\x02\x00\x21\x0a\x02\x40\x02\x40\x03\x40\x20\x0a\x45\x0d\x01\x02\x40\x20\x26\x20\x0a\x41\x7f\x6a\x41\x03\x74\x22\x0a\x6a\x22\x29\x41\x34\x6a\x28\x02\x00\x20\x11\x46\x0d\x00\x20\x29\x41\x30\x6a\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x21\x0a\x0c\x01\x0b\x0b\x02\x40\x20\x27\x28\x02\x14\x20\x0a\x6a\x29\x03\x00\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xc0\x00\x52\x0d\x00\x20\x07\x20\x11\x10\xf4\x02\x0c\xae\x01\x0b\x20\x2a\x10\xc0\x01\x21\x2a\x0c\x01\x0b\x20\x07\x20\x07\x29\x03\xc0\x01\x22\x2a\x20\x11\x20\x2a\x20\x28\x10\xb4\x01\x21\x2a\x0b\x20\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\xab\x01\x20\x14\x20\x2a\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x41\x05\x6a\x21\x06\x0c\xb2\x01\x0b\x20\x06\x41\x04\x6a\x21\x15\x20\x07\x20\x06\x28\x00\x00\x20\x14\x41\x78\x6a\x22\x14\x29\x03\x00\x20\x26\x41\x47\x6a\x10\x97\x03\x41\x00\x48\x0d\xaa\x01\x20\x06\x41\x05\x6a\x21\x06\x0c\xb1\x01\x0b\x20\x06\x41\x04\x6a\x21\x15\x20\x06\x28\x00\x00\x21\x26\x02\x40\x20\x14\x41\x70\x6a\x22\x0a\x28\x02\x00\x0d\x00\x20\x07\x20\x26\x10\xf8\x02\x0c\xaa\x01\x0b\x20\x07\x20\x26\x20\x14\x41\x78\x6a\x29\x03\x00\x41\x02\x10\x97\x03\x41\x00\x48\x0d\xaa\x01\x20\x0a\x21\x14\x20\x06\x41\x05\x6a\x21\x06\x0c\xb0\x01\x0b\x20\x06\x41\x05\x6a\x21\x15\x20\x1a\x28\x02\x00\x22\x29\x28\x02\x10\x22\x11\x20\x11\x28\x02\x18\x20\x06\x28\x00\x00\x22\x0a\x71\x41\x7f\x73\x41\x02\x74\x6a\x28\x02\x00\x21\x26\x20\x06\x2d\x00\x04\x21\x27\x03\x40\x02\x40\x20\x26\x0d\x00\x41\x00\x21\x26\x0c\xa9\x01\x0b\x20\x26\x41\x03\x74\x20\x11\x6a\x22\x28\x41\x28\x6a\x21\x26\x20\x28\x41\x2c\x6a\x28\x02\x00\x20\x0a\x46\x0d\xa8\x01\x20\x26\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x21\x26\x0c\x00\x0b\x00\x0b\x20\x06\x2d\x00\x04\x22\x0a\x41\x02\x71\x41\x05\x72\x20\x0a\x41\x01\x71\x41\x06\x72\x20\x0a\x41\x80\x01\x71\x22\x0a\x1b\x21\x29\x20\x18\x20\x1a\x20\x0a\x1b\x28\x02\x00\x22\x28\x28\x02\x10\x22\x11\x20\x11\x28\x02\x18\x20\x06\x28\x00\x00\x22\x27\x71\x41\x7f\x73\x41\x02\x74\x6a\x28\x02\x00\x21\x26\x42\x80\x80\x80\x80\xc0\x00\x42\x80\x80\x80\x80\x30\x20\x0a\x1b\x21\x2a\x20\x06\x41\x05\x6a\x21\x15\x02\x40\x02\x40\x03\x40\x20\x26\x45\x0d\x01\x20\x11\x20\x26\x41\x7f\x6a\x41\x03\x74\x6a\x22\x0a\x41\x34\x6a\x28\x02\x00\x20\x27\x46\x0d\x02\x20\x0a\x41\x30\x6a\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x21\x26\x0c\x00\x0b\x00\x0b\x20\x28\x2d\x00\x05\x41\x01\x71\x45\x0d\x00\x20\x07\x20\x28\x20\x27\x20\x29\x10\xff\x02\x22\x0a\x45\x0d\xa8\x01\x20\x0a\x20\x2a\x37\x03\x00\x0b\x20\x06\x41\x06\x6a\x21\x06\x0c\xae\x01\x0b\x20\x06\x41\x05\x6a\x21\x15\x20\x14\x41\x78\x6a\x22\x27\x29\x03\x00\x21\x2a\x20\x1a\x29\x03\x00\x22\x2c\xa7\x28\x02\x10\x22\x26\x20\x26\x28\x02\x18\x20\x06\x28\x00\x00\x22\x11\x71\x41\x7f\x73\x41\x02\x74\x6a\x28\x02\x00\x21\x0a\x20\x06\x2d\x00\x04\x21\x29\x02\x40\x02\x40\x03\x40\x20\x0a\x45\x0d\x01\x20\x0a\x41\x03\x74\x20\x26\x6a\x22\x0a\x41\x28\x6a\x28\x02\x00\x21\x28\x02\x40\x20\x0a\x41\x2c\x6a\x28\x02\x00\x20\x11\x46\x0d\x00\x20\x28\x41\xff\xff\xff\x1f\x71\x21\x0a\x0c\x01\x0b\x0b\x41\x80\xc0\x01\x21\x0a\x20\x28\x41\x80\x80\x80\x20\x71\x45\x0d\x01\x0b\x20\x29\x41\x86\xce\x01\x72\x21\x0a\x0b\x20\x07\x20\x2c\x20\x11\x20\x2a\x42\x80\x80\x80\x80\x30\x42\x80\x80\x80\x80\x30\x20\x0a\x10\xcc\x01\x41\x00\x48\x0d\xa6\x01\x20\x07\x20\x27\x29\x03\x00\x10\xcd\x01\x20\x27\x21\x14\x20\x06\x41\x06\x6a\x21\x06\x0c\xad\x01\x0b\x20\x14\x20\x0f\x20\x06\x2f\x00\x00\x41\x03\x74\x6a\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x41\x02\x6a\x21\x15\x20\x06\x41\x03\x6a\x21\x06\x0c\xac\x01\x0b\x20\x07\x20\x0f\x20\x06\x2f\x00\x00\x41\x03\x74\x6a\x20\x14\x41\x78\x6a\x22\x14\x29\x03\x00\x10\x98\x03\x20\x06\x41\x02\x6a\x21\x15\x20\x06\x41\x03\x6a\x21\x06\x0c\xab\x01\x0b\x20\x07\x20\x0f\x20\x06\x2f\x00\x00\x41\x03\x74\x6a\x20\x14\x41\x78\x6a\x29\x03\x00\x10\xc0\x01\x10\x98\x03\x20\x06\x41\x02\x6a\x21\x15\x20\x06\x41\x03\x6a\x21\x06\x0c\xaa\x01\x0b\x20\x14\x20\x12\x20\x06\x2f\x00\x00\x41\x03\x74\x6a\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x41\x02\x6a\x21\x15\x20\x06\x41\x03\x6a\x21\x06\x0c\xa9\x01\x0b\x20\x07\x20\x12\x20\x06\x2f\x00\x00\x41\x03\x74\x6a\x20\x14\x41\x78\x6a\x22\x14\x29\x03\x00\x10\x98\x03\x20\x06\x41\x02\x6a\x21\x15\x20\x06\x41\x03\x6a\x21\x06\x0c\xa8\x01\x0b\x20\x07\x20\x12\x20\x06\x2f\x00\x00\x41\x03\x74\x6a\x20\x14\x41\x78\x6a\x29\x03\x00\x10\xc0\x01\x10\x98\x03\x20\x06\x41\x02\x6a\x21\x15\x20\x06\x41\x03\x6a\x21\x06\x0c\xa7\x01\x0b\x20\x14\x20\x0f\x20\x06\x2d\x00\x00\x41\x03\x74\x6a\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x41\x01\x6a\x21\x15\x20\x06\x41\x02\x6a\x21\x06\x0c\xa6\x01\x0b\x20\x07\x20\x0f\x20\x06\x2d\x00\x00\x41\x03\x74\x6a\x20\x14\x41\x78\x6a\x22\x14\x29\x03\x00\x10\x98\x03\x20\x06\x41\x01\x6a\x21\x15\x20\x06\x41\x02\x6a\x21\x06\x0c\xa5\x01\x0b\x20\x07\x20\x0f\x20\x06\x2d\x00\x00\x41\x03\x74\x6a\x20\x14\x41\x78\x6a\x29\x03\x00\x10\xc0\x01\x10\x98\x03\x20\x06\x41\x01\x6a\x21\x15\x20\x06\x41\x02\x6a\x21\x06\x0c\xa4\x01\x0b\x20\x14\x20\x0f\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xa3\x01\x0b\x20\x14\x20\x1b\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xa2\x01\x0b\x20\x14\x20\x1c\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xa1\x01\x0b\x20\x14\x20\x1d\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\xa0\x01\x0b\x20\x07\x20\x0f\x20\x14\x41\x78\x6a\x22\x14\x29\x03\x00\x10\x98\x03\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x9f\x01\x0b\x20\x07\x20\x1b\x20\x14\x41\x78\x6a\x22\x14\x29\x03\x00\x10\x98\x03\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x9e\x01\x0b\x20\x07\x20\x1c\x20\x14\x41\x78\x6a\x22\x14\x29\x03\x00\x10\x98\x03\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x9d\x01\x0b\x20\x07\x20\x1d\x20\x14\x41\x78\x6a\x22\x14\x29\x03\x00\x10\x98\x03\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x9c\x01\x0b\x20\x07\x20\x0f\x20\x14\x41\x78\x6a\x29\x03\x00\x10\xc0\x01\x10\x98\x03\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x9b\x01\x0b\x20\x07\x20\x1b\x20\x14\x41\x78\x6a\x29\x03\x00\x10\xc0\x01\x10\x98\x03\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x9a\x01\x0b\x20\x07\x20\x1c\x20\x14\x41\x78\x6a\x29\x03\x00\x10\xc0\x01\x10\x98\x03\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x99\x01\x0b\x20\x07\x20\x1d\x20\x14\x41\x78\x6a\x29\x03\x00\x10\xc0\x01\x10\x98\x03\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x98\x01\x0b\x20\x14\x20\x12\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x97\x01\x0b\x20\x14\x20\x1e\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x96\x01\x0b\x20\x14\x20\x1f\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x95\x01\x0b\x20\x14\x20\x20\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x94\x01\x0b\x20\x07\x20\x12\x20\x14\x41\x78\x6a\x22\x14\x29\x03\x00\x10\x98\x03\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x93\x01\x0b\x20\x07\x20\x1e\x20\x14\x41\x78\x6a\x22\x14\x29\x03\x00\x10\x98\x03\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x92\x01\x0b\x20\x07\x20\x1f\x20\x14\x41\x78\x6a\x22\x14\x29\x03\x00\x10\x98\x03\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x91\x01\x0b\x20\x07\x20\x20\x20\x14\x41\x78\x6a\x22\x14\x29\x03\x00\x10\x98\x03\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x90\x01\x0b\x20\x07\x20\x12\x20\x14\x41\x78\x6a\x29\x03\x00\x10\xc0\x01\x10\x98\x03\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x8f\x01\x0b\x20\x07\x20\x1e\x20\x14\x41\x78\x6a\x29\x03\x00\x10\xc0\x01\x10\x98\x03\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x8e\x01\x0b\x20\x07\x20\x1f\x20\x14\x41\x78\x6a\x29\x03\x00\x10\xc0\x01\x10\x98\x03\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x8d\x01\x0b\x20\x07\x20\x20\x20\x14\x41\x78\x6a\x29\x03\x00\x10\xc0\x01\x10\x98\x03\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x8c\x01\x0b\x20\x14\x20\x0c\x28\x02\x00\x28\x02\x10\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x8b\x01\x0b\x20\x14\x20\x0c\x28\x02\x04\x28\x02\x10\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x8a\x01\x0b\x20\x14\x20\x0c\x28\x02\x08\x28\x02\x10\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x89\x01\x0b\x20\x14\x20\x0c\x28\x02\x0c\x28\x02\x10\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x88\x01\x0b\x20\x07\x20\x0c\x28\x02\x00\x28\x02\x10\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x10\x98\x03\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x87\x01\x0b\x20\x07\x20\x0c\x28\x02\x04\x28\x02\x10\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x10\x98\x03\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x86\x01\x0b\x20\x07\x20\x0c\x28\x02\x08\x28\x02\x10\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x10\x98\x03\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x85\x01\x0b\x20\x07\x20\x0c\x28\x02\x0c\x28\x02\x10\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x10\x98\x03\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x84\x01\x0b\x20\x07\x20\x0c\x28\x02\x00\x28\x02\x10\x20\x14\x41\x78\x6a\x29\x03\x00\x10\xc0\x01\x10\x98\x03\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x83\x01\x0b\x20\x07\x20\x0c\x28\x02\x04\x28\x02\x10\x20\x14\x41\x78\x6a\x29\x03\x00\x10\xc0\x01\x10\x98\x03\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x82\x01\x0b\x20\x07\x20\x0c\x28\x02\x08\x28\x02\x10\x20\x14\x41\x78\x6a\x29\x03\x00\x10\xc0\x01\x10\x98\x03\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x81\x01\x0b\x20\x07\x20\x0c\x28\x02\x0c\x28\x02\x10\x20\x14\x41\x78\x6a\x29\x03\x00\x10\xc0\x01\x10\x98\x03\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x80\x01\x0b\x20\x14\x20\x0c\x20\x06\x2f\x00\x00\x41\x02\x74\x6a\x28\x02\x00\x28\x02\x10\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x06\x41\x02\x6a\x21\x15\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x41\x03\x6a\x21\x06\x0c\x7f\x0b\x20\x07\x20\x0c\x20\x06\x2f\x00\x00\x41\x02\x74\x6a\x28\x02\x00\x28\x02\x10\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x10\x98\x03\x20\x06\x41\x02\x6a\x21\x15\x20\x0a\x21\x14\x20\x06\x41\x03\x6a\x21\x06\x0c\x7e\x0b\x20\x07\x20\x0c\x20\x06\x2f\x00\x00\x41\x02\x74\x6a\x28\x02\x00\x28\x02\x10\x20\x14\x41\x78\x6a\x29\x03\x00\x10\xc0\x01\x10\x98\x03\x20\x06\x41\x02\x6a\x21\x15\x20\x06\x41\x03\x6a\x21\x06\x0c\x7d\x0b\x20\x06\x41\x02\x6a\x21\x15\x02\x40\x20\x0c\x20\x06\x2f\x00\x00\x22\x0a\x41\x02\x74\x6a\x28\x02\x00\x28\x02\x10\x29\x03\x00\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xc0\x00\x52\x0d\x00\x20\x07\x20\x0d\x20\x0a\x41\x01\x10\x99\x03\x0c\x76\x0b\x20\x14\x20\x2a\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x41\x03\x6a\x21\x06\x0c\x7c\x0b\x20\x06\x41\x02\x6a\x21\x15\x02\x40\x20\x0c\x20\x06\x2f\x00\x00\x22\x26\x41\x02\x74\x6a\x28\x02\x00\x28\x02\x10\x22\x0a\x35\x02\x04\x42\x20\x86\x42\x80\x80\x80\x80\xc0\x00\x52\x0d\x00\x20\x07\x20\x0d\x20\x26\x41\x01\x10\x99\x03\x0c\x75\x0b\x20\x07\x20\x0a\x20\x14\x41\x78\x6a\x22\x14\x29\x03\x00\x10\x98\x03\x20\x14\x21\x14\x20\x06\x41\x03\x6a\x21\x06\x0c\x7b\x0b\x20\x06\x41\x02\x6a\x21\x15\x02\x40\x20\x0c\x20\x06\x2f\x00\x00\x22\x26\x41\x02\x74\x6a\x28\x02\x00\x28\x02\x10\x22\x0a\x35\x02\x04\x42\x20\x86\x42\x80\x80\x80\x80\xc0\x00\x51\x0d\x00\x20\x07\x20\x0d\x20\x26\x41\x01\x10\x99\x03\x0c\x74\x0b\x20\x07\x20\x0a\x20\x14\x41\x78\x6a\x22\x14\x29\x03\x00\x10\x98\x03\x20\x14\x21\x14\x20\x06\x41\x03\x6a\x21\x06\x0c\x7a\x0b\x20\x07\x20\x0f\x20\x06\x2f\x00\x00\x41\x03\x74\x6a\x42\x80\x80\x80\x80\xc0\x00\x10\x98\x03\x20\x06\x41\x02\x6a\x21\x15\x20\x06\x41\x03\x6a\x21\x06\x0c\x79\x0b\x20\x06\x41\x02\x6a\x21\x15\x02\x40\x20\x0f\x20\x06\x2f\x00\x00\x22\x0a\x41\x03\x74\x6a\x29\x03\x00\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xc0\x00\x52\x0d\x00\x20\x07\x20\x0d\x20\x0a\x41\x00\x10\x99\x03\x0c\x72\x0b\x20\x14\x20\x2a\x10\xc0\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x41\x03\x6a\x21\x06\x0c\x78\x0b\x20\x06\x41\x02\x6a\x21\x15\x02\x40\x20\x0f\x20\x06\x2f\x00\x00\x22\x26\x41\x03\x74\x6a\x22\x0a\x35\x02\x04\x42\x20\x86\x42\x80\x80\x80\x80\xc0\x00\x52\x0d\x00\x20\x07\x20\x0d\x20\x26\x41\x00\x10\x99\x03\x0c\x71\x0b\x20\x07\x20\x0a\x20\x14\x41\x78\x6a\x22\x14\x29\x03\x00\x10\x98\x03\x20\x14\x21\x14\x20\x06\x41\x03\x6a\x21\x06\x0c\x77\x0b\x20\x06\x41\x02\x6a\x21\x15\x02\x40\x20\x0f\x20\x06\x2f\x00\x00\x41\x03\x74\x6a\x22\x0a\x35\x02\x04\x42\x20\x86\x42\x80\x80\x80\x80\xc0\x00\x51\x0d\x00\x20\x07\x41\xb5\xc6\x01\x41\x00\x10\x8c\x03\x0c\x70\x0b\x20\x07\x20\x0a\x20\x14\x41\x78\x6a\x22\x14\x29\x03\x00\x10\x98\x03\x20\x14\x21\x14\x20\x06\x41\x03\x6a\x21\x06\x0c\x76\x0b\x20\x0e\x28\x02\x1c\x21\x15\x20\x06\x2f\x00\x00\x21\x26\x02\x40\x03\x40\x20\x15\x22\x0a\x20\x17\x46\x0d\x01\x20\x0a\x28\x02\x04\x21\x15\x20\x0a\x41\x7e\x6a\x2f\x01\x00\x20\x26\x47\x0d\x00\x20\x0a\x41\x78\x6a\x22\x11\x2d\x00\x05\x41\x02\x71\x0d\x00\x20\x0e\x28\x02\x14\x20\x26\x41\x03\x74\x6a\x29\x03\x00\x10\xc0\x01\x21\x2a\x20\x0a\x28\x02\x00\x22\x27\x20\x0a\x28\x02\x04\x22\x28\x36\x02\x04\x20\x28\x20\x27\x36\x02\x00\x20\x11\x20\x11\x2d\x00\x05\x41\x01\x72\x3a\x00\x05\x20\x0a\x41\x00\x36\x02\x00\x20\x07\x41\x10\x6a\x28\x02\x00\x21\x11\x20\x0a\x41\x7c\x6a\x41\x03\x3a\x00\x00\x20\x0a\x20\x11\x28\x02\x50\x22\x27\x36\x02\x00\x20\x27\x20\x0a\x36\x02\x04\x20\x0a\x20\x0a\x41\x10\x6a\x36\x02\x08\x20\x0a\x20\x2a\x37\x03\x10\x20\x11\x20\x0a\x36\x02\x50\x20\x0a\x20\x11\x41\xd0\x00\x6a\x36\x02\x04\x0c\x00\x0b\x00\x0b\x20\x06\x41\x02\x6a\x21\x15\x20\x06\x41\x03\x6a\x21\x06\x0c\x75\x0b\x20\x06\x2f\x00\x04\x21\x27\x20\x06\x28\x00\x00\x21\x11\x20\x14\x20\x07\x42\x80\x80\x80\x80\x20\x10\xbd\x01\x22\x2a\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x0a\x20\x06\x41\x06\x6a\x21\x15\x20\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x6e\x02\x40\x02\x40\x20\x26\x41\xfa\x00\x47\x0d\x00\x20\x0c\x20\x27\x41\x02\x74\x6a\x28\x02\x00\x22\x26\x20\x26\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x0c\x01\x0b\x20\x07\x20\x0e\x20\x27\x20\x26\x41\xf9\x00\x46\x10\x81\x03\x22\x26\x45\x0d\x6f\x0b\x02\x40\x20\x07\x20\x14\x28\x02\x00\x20\x11\x41\x22\x10\xff\x02\x22\x27\x0d\x00\x20\x09\x20\x26\x10\xde\x02\x0c\x6f\x0b\x20\x27\x20\x26\x36\x02\x00\x20\x14\x20\x07\x20\x11\x10\xdd\x01\x37\x03\x08\x20\x14\x41\x10\x6a\x21\x14\x20\x06\x41\x07\x6a\x21\x06\x0c\x74\x0b\x20\x06\x41\x04\x6a\x21\x15\x20\x18\x29\x03\x00\x22\x2a\xa7\x22\x27\x28\x02\x10\x22\x11\x20\x11\x28\x02\x18\x20\x06\x28\x00\x00\x22\x0a\x71\x41\x7f\x73\x41\x02\x74\x6a\x28\x02\x00\x21\x26\x02\x40\x02\x40\x02\x40\x03\x40\x20\x26\x45\x0d\x01\x20\x11\x20\x26\x41\x7f\x6a\x41\x03\x74\x22\x29\x6a\x22\x26\x41\x30\x6a\x21\x28\x02\x40\x20\x26\x41\x34\x6a\x28\x02\x00\x20\x0a\x46\x0d\x00\x20\x28\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x21\x26\x0c\x01\x0b\x0b\x02\x40\x20\x27\x28\x02\x14\x20\x29\x6a\x35\x02\x04\x42\x20\x86\x42\x80\x80\x80\x80\xc0\x00\x52\x0d\x00\x20\x07\x20\x0a\x10\xf4\x02\x0c\x70\x0b\x20\x28\x41\x03\x6a\x2d\x00\x00\x41\x08\x71\x0d\x01\x20\x07\x20\x0a\x41\xa6\xc5\x01\x10\xf1\x02\x0c\x6f\x0b\x20\x07\x20\x07\x29\x03\xc0\x01\x20\x0a\x10\x96\x03\x22\x26\x41\x00\x48\x0d\x6e\x02\x40\x20\x26\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x2a\x0c\x02\x0b\x20\x1a\x29\x03\x00\x21\x2a\x0b\x20\x2a\x10\xc0\x01\x21\x2a\x0b\x20\x14\x20\x2a\x37\x03\x00\x20\x14\x20\x07\x20\x0a\x10\xdd\x01\x37\x03\x08\x20\x06\x41\x05\x6a\x21\x06\x20\x14\x41\x10\x6a\x21\x14\x0c\x73\x0b\x20\x06\x20\x06\x28\x00\x00\x6a\x21\x15\x20\x07\x10\xfa\x02\x0d\x6b\x20\x15\x41\x01\x6a\x21\x06\x0c\x72\x0b\x20\x06\x20\x06\x2e\x00\x00\x6a\x21\x15\x20\x07\x10\xfa\x02\x0d\x6a\x20\x15\x41\x01\x6a\x21\x06\x0c\x71\x0b\x20\x06\x20\x06\x2c\x00\x00\x6a\x21\x15\x20\x07\x10\xfa\x02\x0d\x69\x20\x15\x41\x01\x6a\x21\x06\x0c\x70\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x42\x20\x88\xa7\x41\x03\x4b\x0d\x00\x20\x2a\xa7\x21\x14\x0c\x01\x0b\x20\x07\x20\x2a\x10\x9a\x03\x21\x14\x0b\x02\x40\x02\x40\x20\x14\x0d\x00\x20\x06\x41\x04\x6a\x21\x15\x0c\x01\x0b\x20\x06\x20\x06\x28\x00\x00\x6a\x21\x15\x0b\x20\x07\x10\xfa\x02\x0d\x69\x20\x0a\x21\x14\x20\x15\x41\x01\x6a\x21\x06\x0c\x6f\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x42\x20\x88\xa7\x41\x03\x4b\x0d\x00\x20\x2a\xa7\x21\x14\x0c\x01\x0b\x20\x07\x20\x2a\x10\x9a\x03\x21\x14\x0b\x02\x40\x02\x40\x20\x14\x45\x0d\x00\x20\x06\x41\x04\x6a\x21\x15\x0c\x01\x0b\x20\x06\x20\x06\x28\x00\x00\x6a\x21\x15\x0b\x20\x07\x10\xfa\x02\x0d\x68\x20\x0a\x21\x14\x20\x15\x41\x01\x6a\x21\x06\x0c\x6e\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x42\x20\x88\xa7\x41\x03\x4b\x0d\x00\x20\x2a\xa7\x21\x14\x0c\x01\x0b\x20\x07\x20\x2a\x10\x9a\x03\x21\x14\x0b\x02\x40\x02\x40\x20\x14\x0d\x00\x20\x06\x41\x01\x6a\x21\x15\x0c\x01\x0b\x20\x06\x20\x06\x2c\x00\x00\x6a\x21\x15\x0b\x20\x07\x10\xfa\x02\x0d\x67\x20\x0a\x21\x14\x20\x15\x41\x01\x6a\x21\x06\x0c\x6d\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x42\x20\x88\xa7\x41\x03\x4b\x0d\x00\x20\x2a\xa7\x21\x14\x0c\x01\x0b\x20\x07\x20\x2a\x10\x9a\x03\x21\x14\x0b\x02\x40\x02\x40\x20\x14\x45\x0d\x00\x20\x06\x41\x01\x6a\x21\x11\x0c\x01\x0b\x20\x06\x20\x06\x2c\x00\x00\x6a\x21\x11\x0b\x20\x07\x10\xfa\x02\x0d\x73\x20\x0a\x21\x14\x20\x11\x21\x15\x20\x11\x41\x01\x6a\x21\x06\x0c\x6c\x0b\x20\x14\x20\x06\x20\x06\x28\x00\x00\x6a\x20\x0d\x28\x02\x14\x6b\xad\x42\x80\x80\x80\x80\xd0\x00\x84\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x41\x04\x6a\x21\x15\x20\x06\x41\x05\x6a\x21\x06\x0c\x6b\x0b\x20\x14\x20\x06\x20\x0d\x28\x02\x14\x6b\x41\x04\x6a\xad\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x20\x06\x28\x00\x00\x6a\x22\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x6a\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x0d\x28\x02\x18\x20\x2a\xa7\x22\x15\x4b\x0d\x01\x0b\x20\x07\x41\xd9\xc6\x01\x41\x00\x10\xc2\x02\x0c\x66\x0b\x20\x0a\x21\x14\x20\x0d\x28\x02\x14\x20\x15\x6a\x22\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x69\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x26\x29\x03\x00\x22\x2d\x42\x20\x88\xa7\x22\x15\x41\x01\x6a\x22\x0a\x41\x04\x4b\x0d\x00\x41\x01\x20\x0a\x74\x41\x19\x71\x0d\x01\x0b\x20\x07\x20\x2d\x10\x9b\x03\x21\x2d\x0b\x02\x40\x20\x07\x41\x18\x10\xc0\x02\x22\x0a\x0d\x00\x20\x07\x20\x2d\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x2c\x0c\x60\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x2c\x02\x40\x20\x07\x42\x80\x80\x80\x80\x20\x41\x11\x10\xc6\x01\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x07\x41\x10\x6a\x28\x02\x00\x22\x15\x41\x10\x6a\x20\x0a\x20\x15\x28\x02\x04\x11\x00\x00\x20\x07\x20\x2d\x10\xcd\x01\x0c\x60\x0b\x20\x0a\x41\x00\x36\x02\x10\x20\x0a\x20\x2d\x37\x03\x00\x20\x0a\x41\x00\x36\x02\x08\x20\x2a\xa7\x20\x0a\x36\x02\x20\x20\x15\x41\x01\x72\x41\x03\x46\x0d\x5c\x20\x2d\x10\xc0\x01\x22\x2e\x21\x2c\x03\x40\x02\x40\x02\x40\x20\x07\x20\x2c\x10\x9c\x03\x22\x2c\x42\x80\x80\x80\x80\x70\x83\x22\x2d\x42\x80\x80\x80\x80\x20\x51\x0d\x00\x20\x2d\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x61\x20\x07\x20\x08\x41\x80\x01\x6a\x20\x08\x41\xa0\x01\x6a\x20\x2c\xa7\x41\x11\x10\x9d\x03\x0d\x60\x20\x07\x20\x08\x28\x02\x80\x01\x20\x08\x28\x02\xa0\x01\x22\x15\x10\x9e\x03\x20\x15\x45\x0d\x01\x20\x07\x20\x2c\x10\xcd\x01\x20\x2e\x10\xc0\x01\x21\x2c\x02\x40\x03\x40\x20\x07\x20\x08\x41\x80\x01\x6a\x20\x08\x41\xa0\x01\x6a\x20\x2c\xa7\x41\x21\x10\x9d\x03\x0d\x01\x20\x08\x28\x02\xa0\x01\x22\x11\x21\x15\x20\x08\x28\x02\x80\x01\x22\x27\x21\x0a\x02\x40\x03\x40\x20\x15\x45\x0d\x01\x20\x07\x20\x2a\x20\x0a\x41\x04\x6a\x28\x02\x00\x42\x80\x80\x80\x80\x20\x20\x0a\x28\x02\x00\x41\x00\x47\x41\x02\x74\x10\xc4\x01\x1a\x20\x15\x41\x7f\x6a\x21\x15\x20\x0a\x41\x08\x6a\x21\x0a\x0c\x00\x0b\x00\x0b\x20\x07\x20\x27\x20\x11\x10\x9e\x03\x20\x07\x20\x2c\x10\x9c\x03\x22\x2c\x42\x80\x80\x80\x80\x70\x83\x22\x2d\x42\x80\x80\x80\x80\x20\x51\x0d\x61\x20\x2d\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x63\x20\x07\x10\xfa\x02\x45\x0d\x00\x0b\x0b\x20\x07\x20\x2c\x10\xcd\x01\x0c\x61\x0b\x02\x40\x02\x40\x20\x2e\xa7\x22\x28\x2d\x00\x05\x41\x08\x71\x45\x0d\x00\x20\x28\x28\x02\x10\x22\x15\x41\x30\x6a\x21\x11\x20\x15\x28\x02\x20\x21\x27\x41\x00\x21\x15\x03\x40\x20\x15\x20\x27\x4e\x0d\x02\x20\x11\x41\x03\x6a\x2d\x00\x00\x41\x10\x71\x0d\x01\x20\x11\x41\x08\x6a\x21\x11\x20\x15\x41\x01\x6a\x21\x15\x0c\x00\x0b\x00\x0b\x20\x07\x20\x08\x41\x80\x01\x6a\x20\x08\x41\xa0\x01\x6a\x20\x28\x41\x11\x10\x9d\x03\x0d\x61\x20\x08\x28\x02\x80\x01\x22\x11\x41\x04\x6a\x21\x15\x20\x08\x28\x02\xa0\x01\x22\x27\x21\x0a\x02\x40\x03\x40\x20\x0a\x45\x0d\x01\x20\x07\x20\x2a\x20\x15\x28\x02\x00\x42\x80\x80\x80\x80\x20\x41\x00\x10\x9f\x03\x1a\x20\x0a\x41\x7f\x6a\x21\x0a\x20\x15\x41\x08\x6a\x21\x15\x0c\x00\x0b\x00\x0b\x20\x07\x20\x11\x20\x27\x10\x9e\x03\x0c\x5f\x0b\x20\x0a\x41\x01\x36\x02\x08\x20\x0a\x20\x28\x41\x28\x6a\x28\x02\x00\x36\x02\x0c\x0c\x5e\x0b\x20\x07\x10\xfa\x02\x45\x0d\x00\x0c\x5e\x0b\x00\x0b\x20\x14\x20\x2a\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x0a\x0c\x61\x0b\x20\x14\x41\x78\x6a\x22\x06\x29\x03\x00\x21\x2a\x20\x06\x21\x14\x0c\x6a\x0b\x42\x80\x80\x80\x80\x30\x21\x2a\x0c\x0d\x0b\x20\x0d\x28\x02\x14\x21\x0a\x20\x08\x20\x26\x36\x02\x14\x20\x08\x20\x0a\x41\x7f\x73\x20\x06\x6a\x36\x02\x10\x20\x07\x41\x95\xc9\x01\x20\x08\x41\x10\x6a\x10\xc2\x02\x0c\x60\x0b\x20\x14\x41\x78\x6a\x29\x03\x00\x22\x2a\x42\x80\x80\x80\x80\x60\x83\x42\x80\x80\x80\x80\x20\x51\x0d\x05\x0c\x06\x0b\x20\x07\x20\x14\x41\x78\x6a\x29\x03\x00\x22\x2a\x10\xa0\x03\x41\x1b\x47\x0d\x05\x0c\x01\x0b\x20\x07\x20\x14\x41\x78\x6a\x29\x03\x00\x22\x2a\x10\xa0\x03\x41\xc5\x00\x47\x0d\x04\x0b\x20\x07\x20\x2a\x10\xcd\x01\x0c\x02\x0b\x20\x14\x41\x78\x6a\x29\x03\x00\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x20\x51\x0d\x01\x0c\x02\x0b\x20\x14\x41\x78\x6a\x29\x03\x00\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x01\x0b\x20\x14\x41\x78\x6a\x42\x81\x80\x80\x80\x10\x37\x03\x00\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x5d\x0b\x20\x07\x20\x2a\x10\xcd\x01\x20\x14\x41\x78\x6a\x42\x80\x80\x80\x80\x10\x37\x03\x00\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x5c\x0b\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x5b\x0b\x42\x02\x21\x2a\x0c\x02\x0b\x42\x01\x21\x2a\x0c\x01\x0b\x42\x00\x21\x2a\x0b\x20\x14\x21\x0a\x20\x06\x21\x11\x0c\x5a\x0b\x20\x06\x41\x09\x6a\x21\x15\x20\x06\x2d\x00\x08\x21\x11\x20\x06\x28\x00\x04\x21\x28\x20\x07\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x20\x06\x28\x00\x00\x22\x27\x10\x96\x03\x22\x06\x41\x00\x48\x0d\x4f\x02\x40\x02\x40\x20\x06\x45\x0d\x00\x02\x40\x20\x11\x41\xff\x01\x71\x45\x0d\x00\x20\x07\x20\x2a\x41\xdb\x01\x20\x2a\x41\x00\x10\xb4\x01\x22\x2c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x52\x02\x40\x20\x2c\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x07\x20\x2c\x10\xcd\x01\x0c\x01\x0b\x20\x07\x20\x07\x20\x2c\x20\x27\x20\x2c\x41\x00\x10\xb4\x01\x10\x9a\x03\x21\x06\x20\x07\x20\x2c\x10\xcd\x01\x20\x06\x41\x00\x48\x0d\x52\x20\x06\x0d\x01\x0b\x02\x40\x20\x26\x41\x8e\x7f\x6a\x22\x06\x41\x05\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x06\x0e\x06\x00\x01\x02\x03\x04\x05\x00\x0b\x20\x07\x20\x2a\x20\x27\x20\x2a\x41\x00\x10\xb4\x01\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x57\x20\x07\x20\x0a\x20\x2a\x10\x98\x03\x0c\x05\x0b\x20\x07\x20\x2a\x20\x27\x20\x14\x41\x70\x6a\x22\x14\x29\x03\x00\x41\x80\x80\x02\x10\x9f\x03\x21\x06\x20\x07\x20\x0a\x29\x03\x00\x10\xcd\x01\x20\x06\x41\x00\x48\x0d\x56\x0c\x04\x0b\x20\x07\x20\x2a\x20\x27\x41\x00\x10\xa1\x03\x22\x06\x41\x00\x48\x0d\x55\x20\x07\x20\x0a\x29\x03\x00\x10\xcd\x01\x20\x0a\x20\x06\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x37\x03\x00\x0c\x03\x0b\x20\x14\x20\x07\x20\x27\x10\xdd\x01\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x0c\x02\x0b\x20\x07\x20\x2a\x20\x27\x20\x2a\x41\x00\x10\xb4\x01\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x53\x20\x14\x20\x2a\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x0c\x01\x0b\x20\x07\x20\x2a\x20\x27\x20\x2a\x41\x00\x10\xb4\x01\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x52\x20\x07\x20\x0a\x29\x03\x00\x10\xcd\x01\x20\x14\x20\x2a\x37\x03\x00\x20\x0a\x42\x80\x80\x80\x80\x30\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x0b\x20\x28\x20\x15\x6a\x41\x7b\x6a\x21\x15\x0c\x01\x0b\x20\x07\x20\x0a\x29\x03\x00\x10\xcd\x01\x20\x0a\x21\x14\x0b\x20\x15\x41\x01\x6a\x21\x06\x0c\x56\x0b\x02\x40\x20\x14\x41\x70\x6a\x29\x03\x00\x42\x80\x80\x80\x80\x10\x84\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x07\x41\xff\xc8\x01\x41\x00\x10\xb2\x02\x0c\x52\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x15\x29\x03\x00\x22\x2a\x42\x20\x88\xa7\x41\x08\x6a\x22\x0a\x41\x08\x4b\x0d\x00\x41\x01\x20\x0a\x74\x41\x83\x02\x71\x0d\x01\x0b\x20\x07\x20\x2a\x10\xa2\x03\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x52\x20\x07\x20\x15\x29\x03\x00\x10\xcd\x01\x20\x15\x20\x2a\x37\x03\x00\x0b\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x55\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x15\x29\x03\x00\x22\x2a\x42\x20\x88\xa7\x41\x08\x6a\x22\x0a\x41\x08\x4b\x0d\x00\x41\x01\x20\x0a\x74\x41\x83\x02\x71\x0d\x01\x0b\x20\x07\x20\x2a\x10\xa2\x03\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x51\x20\x07\x20\x15\x29\x03\x00\x10\xcd\x01\x20\x15\x20\x2a\x37\x03\x00\x0b\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x54\x0b\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x07\x20\x2a\x10\xfe\x02\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x50\x20\x07\x20\x0a\x29\x03\x00\x10\xcd\x01\x20\x0a\x20\x2a\x37\x03\x00\x0b\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x53\x0b\x20\x06\x41\x04\x6a\x21\x11\x20\x07\x20\x07\x29\x03\xc0\x01\x20\x06\x28\x00\x00\x41\x00\x10\xa1\x03\x22\x0a\x41\x00\x48\x0d\x3a\x20\x14\x20\x0a\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x11\x21\x15\x20\x06\x41\x05\x6a\x21\x06\x0c\x52\x0b\x20\x14\x41\x70\x6a\x22\x26\x29\x03\x00\x21\x2a\x20\x07\x20\x14\x41\x78\x6a\x22\x11\x29\x03\x00\x22\x2c\x10\xa3\x03\x22\x0a\x45\x0d\x4d\x20\x07\x20\x2a\x20\x0a\x41\x80\x80\x02\x10\xa1\x03\x21\x15\x20\x07\x20\x0a\x10\xe4\x02\x20\x15\x41\x00\x48\x0d\x4d\x20\x07\x20\x2a\x10\xcd\x01\x20\x07\x20\x2c\x10\xcd\x01\x20\x26\x20\x15\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x37\x03\x00\x20\x11\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x51\x0b\x20\x07\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x10\xa0\x03\x21\x15\x20\x07\x20\x2a\x10\xcd\x01\x20\x0a\x20\x07\x20\x15\x10\xc5\x01\x37\x03\x00\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x50\x0b\x20\x07\x20\x14\x41\x70\x6a\x22\x0a\x29\x03\x00\x22\x2a\x20\x14\x41\x78\x6a\x22\x15\x29\x03\x00\x22\x2c\x10\xa4\x03\x22\x26\x41\x00\x48\x0d\x4b\x20\x07\x20\x2a\x10\xcd\x01\x20\x07\x20\x2c\x10\xcd\x01\x20\x0a\x20\x26\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x37\x03\x00\x20\x15\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x4f\x0b\x02\x40\x20\x14\x41\x78\x6a\x22\x26\x29\x03\x00\x22\x2a\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x07\x41\xea\xc8\x01\x41\x00\x10\xb2\x02\x0c\x4b\x0b\x20\x07\x20\x14\x41\x70\x6a\x22\x11\x29\x03\x00\x22\x2c\x10\xa3\x03\x22\x0a\x45\x0d\x4a\x20\x07\x20\x2a\x20\x0a\x10\x96\x03\x21\x15\x20\x07\x20\x0a\x10\xe4\x02\x20\x15\x41\x00\x48\x0d\x4a\x20\x07\x20\x2c\x10\xcd\x01\x20\x07\x20\x2a\x10\xcd\x01\x20\x11\x20\x15\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x37\x03\x00\x20\x26\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x4e\x0b\x20\x07\x20\x14\x20\x09\x28\x02\xc8\x02\x11\x03\x00\x0d\x49\x20\x14\x41\x78\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x4d\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x22\x2c\x84\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x15\x20\x2c\xa7\x20\x2a\xa7\x47\xad\x42\x80\x80\x80\x80\x10\x84\x37\x03\x00\x0c\x01\x0b\x20\x07\x20\x14\x41\x01\x10\xa5\x03\x0b\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x4c\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x22\x2c\x84\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x15\x20\x2c\xa7\x20\x2a\xa7\x46\xad\x42\x80\x80\x80\x80\x10\x84\x37\x03\x00\x0c\x01\x0b\x20\x07\x20\x14\x41\x00\x10\xa5\x03\x0b\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x4b\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x22\x2c\x84\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x15\x20\x2c\xa7\x20\x2a\xa7\x47\xad\x42\x80\x80\x80\x80\x10\x84\x37\x03\x00\x0c\x01\x0b\x20\x07\x20\x14\x41\x01\x10\xa6\x03\x0d\x47\x0b\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x4a\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x22\x2c\x84\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x15\x20\x2c\xa7\x20\x2a\xa7\x46\xad\x42\x80\x80\x80\x80\x10\x84\x37\x03\x00\x0c\x01\x0b\x20\x07\x20\x14\x41\x00\x10\xa6\x03\x0d\x46\x0b\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x49\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x22\x2c\x84\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x15\x20\x2c\xa7\x20\x2a\xa7\x4e\xad\x42\x80\x80\x80\x80\x10\x84\x37\x03\x00\x0c\x01\x0b\x20\x07\x20\x14\x20\x26\x10\xa7\x03\x0d\x45\x0b\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x48\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x22\x2c\x84\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x15\x20\x2c\xa7\x20\x2a\xa7\x4a\xad\x42\x80\x80\x80\x80\x10\x84\x37\x03\x00\x0c\x01\x0b\x20\x07\x20\x14\x20\x26\x10\xa7\x03\x0d\x44\x0b\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x47\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x22\x2c\x84\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x15\x20\x2c\xa7\x20\x2a\xa7\x4c\xad\x42\x80\x80\x80\x80\x10\x84\x37\x03\x00\x0c\x01\x0b\x20\x07\x20\x14\x20\x26\x10\xa7\x03\x0d\x43\x0b\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x46\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x22\x2c\x84\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x15\x20\x2c\xa7\x20\x2a\xa7\x48\xad\x42\x80\x80\x80\x80\x10\x84\x37\x03\x00\x0c\x01\x0b\x20\x07\x20\x14\x20\x26\x10\xa7\x03\x0d\x42\x0b\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x45\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x22\x2c\x84\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x15\x20\x2a\x20\x2c\x85\x42\xff\xff\xff\xff\x0f\x83\x37\x03\x00\x0c\x01\x0b\x20\x07\x20\x14\x20\x26\x10\xa8\x03\x0d\x41\x0b\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x44\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x84\x22\x2a\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x15\x20\x2a\x37\x03\x00\x0c\x01\x0b\x20\x07\x20\x14\x20\x26\x10\xa8\x03\x0d\x40\x0b\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x43\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x22\x2c\x84\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x15\x20\x2c\x20\x2a\x83\x42\xff\xff\xff\xff\x0f\x83\x37\x03\x00\x0c\x01\x0b\x20\x07\x20\x14\x20\x26\x10\xa8\x03\x0d\x3f\x0b\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x42\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x15\x29\x03\x00\x22\x2a\x20\x14\x41\x70\x6a\x22\x11\x29\x03\x00\x22\x2c\x84\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x02\x40\x20\x2a\xa7\x22\x0a\x41\x20\x49\x0d\x00\x20\x0e\x2d\x00\x28\x41\x04\x71\x0d\x01\x20\x0a\x41\x1f\x71\x21\x0a\x0b\x20\x11\x20\x2c\xa7\x20\x0a\x75\xad\x37\x03\x00\x0c\x01\x0b\x20\x07\x20\x14\x20\x26\x10\xa8\x03\x0d\x3e\x0b\x20\x15\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x41\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x22\x2c\x84\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x02\x40\x02\x40\x20\x2c\xa7\x20\x2a\xa7\x41\x1f\x71\x76\x22\x14\x41\x00\x48\x0d\x00\x20\x14\xad\x21\x2a\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x14\xb8\xbd\x22\x2a\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x2a\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x2a\x0b\x20\x15\x20\x2a\x37\x03\x00\x0c\x01\x0b\x20\x07\x20\x14\x10\xa9\x03\x0d\x3d\x0b\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x40\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x15\x29\x03\x00\x22\x2a\x20\x14\x41\x70\x6a\x22\x11\x29\x03\x00\x22\x2c\x84\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x2a\xa7\x21\x0a\x20\x0e\x2d\x00\x28\x41\x04\x71\x45\x0d\x01\x20\x0a\x41\x1f\x4b\x0d\x00\x20\x2c\x42\xff\xff\xff\xff\x0f\x83\x20\x2a\x42\xff\xff\xff\xff\x0f\x83\x86\x42\x80\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x58\x0d\x02\x0b\x20\x07\x20\x14\x20\x26\x10\xa8\x03\x45\x0d\x02\x0c\x3e\x0b\x20\x0a\x41\x1f\x71\x21\x0a\x0b\x20\x11\x20\x2c\xa7\x20\x0a\x74\xad\x37\x03\x00\x0b\x20\x15\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x3f\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x0a\x20\x2a\x42\xff\xff\xff\xff\x0f\x85\x37\x03\x00\x0c\x01\x0b\x20\x07\x20\x14\x10\xaa\x03\x0d\x3b\x0b\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x3e\x0b\x20\x08\x20\x0f\x20\x06\x2d\x00\x00\x41\x03\x74\x6a\x22\x0a\x29\x03\x00\x22\x2a\x37\x03\x20\x20\x06\x41\x01\x6a\x21\x15\x02\x40\x02\x40\x20\x2a\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x2a\xa7\x41\x80\x80\x80\x80\x78\x46\x0d\x00\x20\x0a\x20\x2a\x42\x7f\x7c\x42\xff\xff\xff\xff\x0f\x83\x37\x03\x00\x0c\x01\x0b\x20\x08\x20\x2a\x10\xc0\x01\x37\x03\x20\x20\x07\x20\x23\x41\x8e\x01\x10\xab\x03\x0d\x37\x20\x07\x20\x0a\x20\x08\x29\x03\x20\x10\x98\x03\x0b\x20\x06\x41\x02\x6a\x21\x06\x0c\x3d\x0b\x20\x08\x20\x0f\x20\x06\x2d\x00\x00\x41\x03\x74\x6a\x22\x0a\x29\x03\x00\x22\x2a\x37\x03\x28\x20\x06\x41\x01\x6a\x21\x15\x02\x40\x02\x40\x20\x2a\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x2a\xa7\x41\xff\xff\xff\xff\x07\x46\x0d\x00\x20\x0a\x20\x2a\x42\x01\x7c\x42\xff\xff\xff\xff\x0f\x83\x37\x03\x00\x0c\x01\x0b\x20\x08\x20\x2a\x10\xc0\x01\x37\x03\x28\x20\x07\x20\x24\x41\x8f\x01\x10\xab\x03\x0d\x36\x20\x07\x20\x0a\x20\x08\x29\x03\x28\x10\x98\x03\x0b\x20\x06\x41\x02\x6a\x21\x06\x0c\x3c\x0b\x02\x40\x20\x07\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x10\xac\x03\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x0a\x42\x80\x80\x80\x80\x30\x37\x03\x00\x0c\x38\x0b\x20\x0a\x20\x2a\x37\x03\x00\x20\x14\x20\x2a\x10\xc0\x01\x37\x03\x00\x20\x07\x20\x14\x41\x08\x6a\x22\x0a\x20\x26\x41\x7e\x6a\x10\xab\x03\x0d\x37\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x3b\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x2a\xa7\x41\x80\x80\x80\x80\x78\x46\x0d\x00\x20\x0a\x20\x2a\x42\x7f\x7c\x42\xff\xff\xff\xff\x0f\x83\x37\x03\x00\x0c\x01\x0b\x20\x07\x20\x14\x20\x26\x10\xab\x03\x0d\x37\x0b\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x3a\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x2a\xa7\x41\xff\xff\xff\xff\x07\x46\x0d\x00\x20\x0a\x20\x2a\x42\x01\x7c\x42\xff\xff\xff\xff\x0f\x83\x37\x03\x00\x0c\x01\x0b\x20\x07\x20\x14\x20\x26\x10\xab\x03\x0d\x36\x0b\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x39\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x42\x20\x88\xa7\x22\x15\x0d\x00\x02\x40\x20\x2a\xa7\x22\x15\x0d\x00\x44\x00\x00\x00\x00\x00\x00\x00\x80\x21\x31\x0c\x02\x0b\x20\x15\x41\x80\x80\x80\x80\x78\x47\x0d\x03\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x21\x31\x0c\x01\x0b\x20\x15\x41\x0b\x6a\x41\x12\x49\x0d\x01\x20\x2a\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x85\xbf\x21\x31\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x31\xbd\x22\x2a\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x2a\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x2a\x0c\x02\x0b\x20\x07\x20\x14\x20\x26\x10\xab\x03\x45\x0d\x02\x0c\x37\x0b\x42\x00\x20\x2a\x7d\x42\xff\xff\xff\xff\x0f\x83\x21\x2a\x0b\x20\x0a\x20\x2a\x37\x03\x00\x0b\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x38\x0b\x02\x40\x20\x14\x41\x7c\x6a\x28\x02\x00\x22\x0a\x45\x0d\x00\x20\x0a\x41\x0b\x6a\x41\x11\x4b\x0d\x00\x20\x07\x20\x14\x20\x26\x10\xab\x03\x0d\x34\x0b\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x37\x0b\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x22\x2c\x84\x42\xff\xff\xff\xff\x0f\x56\x0d\x03\x20\x2c\xa7\x22\x11\x41\x1f\x76\x20\x2a\xa7\x22\x27\x41\x01\x48\x72\x0d\x03\x20\x15\x20\x11\x20\x27\x6f\xad\x37\x03\x00\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x36\x0b\x20\x14\x41\x78\x6a\x22\x15\x29\x03\x00\x22\x2a\x20\x14\x41\x70\x6a\x22\x11\x29\x03\x00\x22\x2c\x84\x42\xff\xff\xff\xff\x0f\x56\x0d\x02\x20\x0e\x2d\x00\x28\x41\x04\x71\x0d\x02\x20\x2c\xa7\xb7\x20\x2a\xa7\xb7\xa3\x22\x31\xbd\x21\x2a\x02\x40\x02\x40\x20\x31\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x31\xaa\x21\x0a\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x0a\x0b\x02\x40\x02\x40\x20\x2a\x20\x0a\xb7\xbd\x52\x0d\x00\x20\x0a\xad\x21\x2a\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x2a\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x2a\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x2a\x0b\x20\x11\x20\x2a\x37\x03\x00\x20\x15\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x35\x0b\x02\x40\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x42\x20\x88\x22\x2e\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x22\x2c\x42\x20\x88\x22\x2d\x84\x42\x00\x52\x0d\x00\x02\x40\x20\x2a\x42\x20\x86\x42\x20\x87\x20\x2c\x42\x20\x86\x42\x20\x87\x7e\x22\x2d\x42\x80\x80\x80\x80\x08\x7c\x42\x80\x80\x80\x80\x10\x54\x0d\x00\x02\x40\x20\x2d\x42\xff\xff\xff\xff\xff\xff\xff\x0f\x7c\x42\xff\xff\xff\xff\xff\xff\xff\x1f\x54\x0d\x00\x20\x0e\x28\x02\x28\x41\x04\x71\x0d\x06\x0b\x20\x2d\xb9\x21\x31\x0c\x02\x0b\x02\x40\x20\x2a\x20\x2c\x84\xa7\x41\x7f\x4a\x0d\x00\x20\x2d\x50\x45\x0d\x00\x44\x00\x00\x00\x00\x00\x00\x00\x80\x21\x31\x0c\x02\x0b\x20\x2d\x42\xff\xff\xff\xff\x0f\x83\x21\x2a\x0c\x02\x0b\x20\x2d\xa7\x41\x0b\x6a\x41\x12\x49\x0d\x03\x20\x2e\xa7\x41\x0b\x6a\x41\x12\x49\x0d\x03\x20\x0e\x2d\x00\x28\x41\x04\x71\x0d\x03\x20\x2c\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\x20\x2a\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\xa2\x21\x31\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x31\xbd\x22\x2a\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x2a\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x2a\x0b\x20\x15\x20\x2a\x37\x03\x00\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x34\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x42\x20\x88\x22\x2e\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x22\x2c\x42\x20\x88\x22\x2d\x84\x42\x00\x52\x0d\x00\x20\x2c\x42\x20\x86\x42\x20\x87\x20\x2a\x42\x20\x86\x42\x20\x87\x7d\x22\x2a\x42\x80\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x56\x0d\x02\x20\x2a\x42\xff\xff\xff\xff\x0f\x83\x21\x2a\x0c\x01\x0b\x20\x2d\xa7\x41\x0b\x6a\x41\x12\x49\x0d\x01\x20\x2e\xa7\x41\x0b\x6a\x41\x12\x49\x0d\x01\x42\x80\x80\x80\x80\xc0\x7e\x20\x2c\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\x20\x2a\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\xa1\xbd\x22\x2a\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x2a\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x2a\x0b\x20\x15\x20\x2a\x37\x03\x00\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x33\x0b\x20\x07\x20\x14\x20\x26\x10\xad\x03\x0d\x2e\x20\x14\x41\x78\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x32\x0b\x20\x06\x41\x01\x6a\x21\x15\x02\x40\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x14\x29\x03\x00\x22\x2c\x42\x20\x88\x20\x0f\x20\x06\x2d\x00\x00\x41\x03\x74\x6a\x22\x0a\x29\x03\x00\x22\x2a\x42\x20\x88\x22\x2d\x84\x42\x00\x52\x0d\x00\x20\x2c\xa7\x22\x26\x41\x00\x48\x20\x2a\xa7\x22\x11\x20\x26\x6a\x22\x26\x20\x11\x48\x73\x0d\x01\x20\x0a\x20\x26\xad\x37\x03\x00\x0c\x02\x0b\x20\x2d\x42\xf9\xff\xff\xff\x0f\x52\x0d\x00\x20\x07\x20\x2c\x41\x02\x10\xed\x02\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x2c\x20\x07\x20\x0a\x29\x03\x00\x10\xc0\x01\x20\x2a\x10\xae\x03\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x2c\x20\x07\x20\x0a\x20\x2a\x10\x98\x03\x0c\x01\x0b\x20\x08\x20\x2a\x10\xc0\x01\x37\x03\x30\x20\x08\x20\x14\x29\x03\x00\x37\x03\x38\x20\x07\x20\x25\x10\xaf\x03\x0d\x2b\x20\x07\x20\x0a\x20\x08\x29\x03\x30\x10\x98\x03\x0b\x20\x06\x41\x02\x6a\x21\x06\x0c\x31\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x42\x20\x88\x22\x2e\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x22\x2c\x42\x20\x88\x22\x2d\x84\x42\x00\x52\x0d\x00\x20\x2a\xa7\x22\x26\x41\x00\x48\x20\x2c\xa7\x22\x11\x20\x26\x6a\x22\x26\x20\x11\x48\x73\x0d\x02\x20\x26\xad\x21\x2a\x0c\x01\x0b\x20\x2d\xa7\x41\x0b\x6a\x41\x12\x49\x0d\x01\x20\x2e\xa7\x41\x0b\x6a\x41\x12\x49\x0d\x01\x42\x80\x80\x80\x80\xc0\x7e\x20\x2c\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\x20\x2a\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\xa0\xbd\x22\x2a\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x2a\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x2a\x0b\x20\x15\x20\x2a\x37\x03\x00\x0c\x01\x0b\x20\x07\x20\x14\x10\xaf\x03\x0d\x2d\x0b\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x30\x0b\x20\x06\x41\x01\x6a\x21\x11\x20\x07\x20\x14\x20\x06\x2d\x00\x00\x22\x0a\x41\x7f\x73\x41\x03\x74\x41\x60\x72\x6a\x29\x03\x00\x20\x14\x20\x0a\x41\x02\x76\x41\x7f\x73\x41\x03\x74\x41\x40\x72\x6a\x29\x03\x00\x20\x14\x20\x0a\x41\x05\x76\x41\x7f\x73\x41\x03\x74\x6a\x29\x03\x00\x41\x00\x10\xb0\x03\x0d\x17\x20\x11\x21\x15\x20\x06\x41\x02\x6a\x21\x06\x0c\x2f\x0b\x02\x40\x20\x14\x41\x70\x6a\x22\x28\x29\x03\x00\x22\x2e\x42\x80\x80\x80\x80\x10\x54\x0d\x00\x20\x07\x41\xd1\xc8\x01\x41\x00\x10\xc2\x02\x0c\x2b\x0b\x20\x07\x20\x14\x41\x78\x6a\x22\x11\x29\x03\x00\x22\x2a\x41\xd1\x01\x20\x2a\x41\x00\x10\xb4\x01\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x2a\x20\x2a\x41\xf1\x00\x41\x01\x10\xb2\x03\x21\x15\x20\x07\x20\x2a\x10\xcd\x01\x20\x07\x20\x11\x29\x03\x00\x41\x00\x10\xb3\x03\x22\x2c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x2a\x02\x40\x20\x07\x20\x2c\x41\xea\x00\x20\x2c\x41\x00\x10\xb4\x01\x22\x2d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x07\x20\x2c\x10\xcd\x01\x0c\x2b\x0b\x20\x2e\xa7\x21\x0a\x02\x40\x02\x40\x02\x40\x20\x15\x45\x0d\x00\x20\x2d\x41\xf2\x00\x41\x00\x10\xb2\x03\x45\x0d\x00\x20\x11\x29\x03\x00\x20\x08\x41\x80\x01\x6a\x20\x08\x41\xa0\x01\x6a\x10\xb5\x03\x45\x0d\x00\x20\x07\x20\x08\x41\xbc\x01\x6a\x20\x11\x29\x03\x00\x10\xb6\x03\x0d\x01\x20\x08\x28\x02\xbc\x01\x22\x15\x20\x08\x28\x02\xa0\x01\x47\x0d\x00\x20\x14\x41\x68\x6a\x21\x27\x20\x08\x28\x02\x80\x01\x21\x26\x03\x40\x20\x15\x45\x0d\x03\x20\x07\x20\x27\x29\x03\x00\x20\x0a\x20\x26\x29\x03\x00\x10\xc0\x01\x41\x07\x10\x80\x03\x41\x00\x48\x0d\x02\x20\x15\x41\x7f\x6a\x21\x15\x20\x26\x41\x08\x6a\x21\x26\x20\x0a\x41\x01\x6a\x21\x0a\x0c\x00\x0b\x00\x0b\x20\x14\x41\x68\x6a\x21\x15\x03\x40\x20\x07\x20\x2c\x20\x2d\x20\x08\x41\xbc\x01\x6a\x10\xb7\x03\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x08\x28\x02\xbc\x01\x0d\x02\x20\x07\x20\x15\x29\x03\x00\x20\x0a\x20\x2a\x41\x07\x10\x80\x03\x41\x7f\x4c\x0d\x01\x20\x0a\x41\x01\x6a\x21\x0a\x0c\x00\x0b\x00\x0b\x20\x07\x20\x2c\x41\x01\x10\xfc\x02\x1a\x20\x07\x20\x2c\x10\xcd\x01\x20\x07\x20\x2d\x10\xcd\x01\x0c\x2b\x0b\x20\x28\x20\x0a\xad\x37\x03\x00\x20\x07\x20\x2c\x10\xcd\x01\x20\x07\x20\x2d\x10\xcd\x01\x20\x07\x20\x11\x29\x03\x00\x10\xcd\x01\x20\x11\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x2e\x0b\x20\x07\x20\x14\x41\x68\x6a\x29\x03\x00\x20\x14\x41\x70\x6a\x29\x03\x00\x10\xc0\x01\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x41\x87\x80\x01\x10\xb8\x03\x41\x00\x48\x0d\x2a\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x2d\x0b\x20\x14\x41\x68\x6a\x22\x15\x29\x03\x00\x42\xff\xff\xff\xff\x6f\x58\x0d\x27\x20\x07\x20\x14\x41\x70\x6a\x22\x11\x29\x03\x00\x10\xa3\x03\x22\x26\x45\x0d\x28\x20\x07\x20\x15\x29\x03\x00\x20\x26\x20\x14\x41\x78\x6a\x29\x03\x00\x20\x14\x41\x60\x6a\x22\x0a\x29\x03\x00\x41\x80\x80\x02\x10\xb9\x03\x21\x14\x20\x07\x20\x26\x10\xe4\x02\x20\x07\x20\x0a\x29\x03\x00\x10\xcd\x01\x20\x07\x20\x15\x29\x03\x00\x10\xcd\x01\x20\x07\x20\x11\x29\x03\x00\x10\xcd\x01\x20\x14\x41\x00\x48\x0d\x29\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x2c\x0b\x20\x14\x41\x68\x6a\x22\x0a\x29\x03\x00\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x21\x2c\x02\x40\x02\x40\x20\x07\x41\x10\x6a\x28\x02\x00\x28\x02\x8c\x01\x22\x15\x0d\x00\x41\x00\x21\x15\x0c\x01\x0b\x20\x15\x28\x02\x28\x41\x01\x71\x21\x15\x0b\x02\x40\x02\x40\x20\x2c\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x02\x40\x20\x15\x45\x0d\x00\x20\x07\x20\x14\x41\x70\x6a\x29\x03\x00\x10\xa3\x03\x22\x0a\x45\x0d\x2a\x20\x07\x20\x0a\x10\xf8\x02\x20\x07\x20\x0a\x10\xe4\x02\x0c\x2a\x0b\x20\x0a\x20\x1a\x29\x03\x00\x10\xc0\x01\x22\x2a\x37\x03\x00\x41\x80\x80\x02\x21\x15\x0c\x01\x0b\x41\x80\x80\x06\x41\x80\x80\x02\x20\x15\x1b\x21\x15\x0b\x20\x07\x20\x2a\x20\x14\x41\x70\x6a\x29\x03\x00\x20\x14\x41\x78\x6a\x29\x03\x00\x20\x15\x10\xba\x03\x21\x14\x20\x07\x20\x0a\x29\x03\x00\x10\xcd\x01\x20\x14\x41\x00\x48\x0d\x28\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x2b\x0b\x20\x07\x20\x14\x41\x68\x6a\x22\x0a\x29\x03\x00\x20\x14\x41\x70\x6a\x29\x03\x00\x20\x14\x41\x78\x6a\x29\x03\x00\x41\x80\x80\x02\x10\xba\x03\x21\x14\x20\x07\x20\x0a\x29\x03\x00\x10\xcd\x01\x20\x14\x41\x00\x48\x0d\x27\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x2a\x0b\x20\x07\x20\x14\x41\x78\x6a\x22\x11\x29\x03\x00\x10\xa3\x03\x22\x0a\x45\x0d\x25\x20\x07\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x20\x0a\x20\x14\x41\x68\x6a\x22\x26\x29\x03\x00\x41\x00\x10\xb4\x01\x21\x2a\x20\x07\x20\x0a\x10\xe4\x02\x20\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x25\x20\x07\x20\x11\x29\x03\x00\x10\xcd\x01\x20\x07\x20\x15\x29\x03\x00\x10\xcd\x01\x20\x07\x20\x26\x29\x03\x00\x10\xcd\x01\x20\x26\x20\x2a\x37\x03\x00\x20\x15\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x29\x0b\x20\x14\x41\x78\x6a\x29\x03\x00\x21\x2a\x02\x40\x20\x14\x41\x70\x6a\x29\x03\x00\x22\x2c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x07\x20\x2a\x10\xa3\x03\x22\x0a\x45\x0d\x25\x20\x07\x20\x0a\x10\xf8\x02\x20\x07\x20\x0a\x10\xe4\x02\x0c\x25\x0b\x20\x07\x20\x2c\x20\x2a\x10\xc0\x01\x10\xbb\x03\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x24\x20\x14\x20\x2a\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x28\x0b\x20\x14\x41\x78\x6a\x22\x0a\x20\x07\x20\x14\x41\x70\x6a\x29\x03\x00\x20\x0a\x29\x03\x00\x10\xbb\x03\x22\x2a\x37\x03\x00\x20\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x23\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x27\x0b\x20\x07\x20\x14\x41\x70\x6a\x22\x15\x29\x03\x00\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x10\xbb\x03\x21\x2a\x20\x07\x20\x15\x29\x03\x00\x10\xcd\x01\x20\x15\x20\x2a\x37\x03\x00\x20\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x23\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x26\x0b\x20\x06\x41\x05\x6a\x21\x11\x20\x14\x41\x78\x6a\x22\x27\x29\x03\x00\x21\x2f\x20\x14\x41\x70\x6a\x21\x15\x20\x06\x28\x00\x00\x21\x28\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x06\x2d\x00\x04\x41\x01\x71\x45\x0d\x00\x42\x80\x80\x80\x80\x20\x21\x2e\x02\x40\x20\x15\x29\x03\x00\x22\x2d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x20\x52\x0d\x00\x20\x07\x29\x03\x30\x10\xc0\x01\x21\x2d\x0c\x02\x0b\x02\x40\x02\x40\x20\x2d\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x2d\xa7\x2d\x00\x05\x41\x10\x71\x0d\x01\x0b\x20\x07\x41\xd3\xc7\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\x30\x21\x2c\x42\x80\x80\x80\x80\x30\x21\x2a\x42\x80\x80\x80\x80\x30\x21\x2e\x0c\x05\x0b\x20\x07\x20\x2d\x41\x3b\x20\x2d\x41\x00\x10\xb4\x01\x22\x2e\x42\x80\x80\x80\x80\x70\x83\x22\x2a\x42\x80\x80\x80\x80\x20\x51\x0d\x01\x42\x80\x80\x80\x80\x30\x21\x2c\x20\x2a\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x20\x2e\x42\xff\xff\xff\xff\x6f\x56\x0d\x01\x20\x07\x41\xf4\xc7\x01\x41\x00\x10\xb2\x02\x0c\x02\x0b\x20\x07\x28\x02\x28\x29\x03\x08\x10\xc0\x01\x21\x2e\x20\x07\x29\x03\x30\x10\xc0\x01\x21\x2d\x0b\x20\x07\x20\x2e\x10\xbd\x01\x22\x2c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x2a\x0c\x01\x0b\x20\x2f\xa7\x22\x0a\x2d\x00\x11\x41\x30\x71\x0d\x02\x20\x07\x20\x2d\x41\x0d\x10\xc6\x01\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x2f\x20\x07\x20\x2a\x20\x0a\x20\x0c\x20\x0e\x10\xbc\x03\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x07\x20\x2a\x20\x2c\x10\xbd\x03\x02\x40\x20\x2a\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x2a\xa7\x22\x29\x20\x29\x2d\x00\x05\x41\x10\x72\x3a\x00\x05\x0b\x20\x07\x20\x2a\x41\x30\x20\x0a\x33\x01\x2c\x41\x01\x10\xc4\x01\x1a\x02\x40\x02\x40\x20\x26\x41\xd7\x00\x47\x0d\x00\x20\x07\x20\x2a\x20\x14\x41\x68\x6a\x29\x03\x00\x10\xbe\x03\x41\x00\x4e\x0d\x01\x0c\x02\x0b\x20\x07\x20\x2a\x20\x28\x10\xbf\x03\x41\x00\x48\x0d\x01\x0b\x20\x07\x20\x2c\x41\x3c\x20\x2a\x10\xc0\x01\x22\x2a\x41\x83\x80\x01\x10\xc4\x01\x41\x00\x48\x0d\x00\x20\x07\x20\x2a\x41\x3b\x20\x2c\x10\xc0\x01\x22\x2c\x41\x80\x80\x01\x10\xc4\x01\x41\x7f\x4a\x0d\x01\x0b\x20\x07\x20\x2d\x10\xcd\x01\x20\x07\x20\x2e\x10\xcd\x01\x20\x07\x20\x2f\x10\xcd\x01\x20\x07\x20\x2c\x10\xcd\x01\x20\x07\x20\x2a\x10\xcd\x01\x20\x27\x42\x80\x80\x80\x80\x30\x37\x03\x00\x20\x15\x42\x80\x80\x80\x80\x30\x37\x03\x00\x0c\x0f\x0b\x20\x07\x20\x2e\x10\xcd\x01\x20\x07\x20\x2d\x10\xcd\x01\x20\x27\x20\x2c\x37\x03\x00\x20\x15\x20\x2a\x37\x03\x00\x20\x11\x21\x15\x20\x06\x41\x06\x6a\x21\x06\x0c\x26\x0b\x41\x9f\xc8\x01\x41\xae\xb7\x01\x41\xe0\xfc\x00\x41\xbe\xc8\x01\x10\x4a\x00\x0b\x02\x40\x02\x40\x20\x26\x41\xd5\x00\x47\x0d\x00\x20\x07\x20\x14\x41\x70\x6a\x29\x03\x00\x10\xa3\x03\x22\x0a\x0d\x01\x0c\x22\x0b\x20\x06\x28\x00\x00\x21\x0a\x20\x06\x41\x04\x6a\x21\x06\x0b\x20\x14\x41\x68\x41\x70\x20\x26\x41\xd5\x00\x46\x1b\x6a\x29\x03\x00\x21\x2d\x02\x40\x02\x40\x20\x06\x2d\x00\x00\x22\x28\x41\x03\x71\x22\x15\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x2e\x41\x83\xce\x01\x21\x15\x20\x14\x41\x78\x6a\x29\x03\x00\x22\x2c\x21\x2f\x42\x80\x80\x80\x80\x30\x21\x30\x0c\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x2f\x20\x14\x41\x78\x6a\x29\x03\x00\x22\x2c\x42\x80\x80\x80\x80\x30\x20\x15\x41\x01\x46\x22\x15\x1b\x21\x30\x42\x80\x80\x80\x80\x30\x20\x2c\x20\x15\x1b\x21\x2e\x41\x81\x9a\x01\x41\x81\xaa\x01\x20\x15\x1b\x21\x15\x0b\x20\x07\x20\x0a\x10\xc0\x03\x21\x2a\x02\x40\x02\x40\x20\x15\x41\x80\x10\x71\x45\x0d\x00\x20\x07\x41\xc8\xc7\x01\x20\x2a\x41\xd2\xc7\x01\x10\xc1\x03\x21\x2a\x0c\x01\x0b\x20\x15\x41\x80\x20\x71\x45\x0d\x00\x20\x07\x41\xcd\xc7\x01\x20\x2a\x41\xd2\xc7\x01\x10\xc1\x03\x21\x2a\x0b\x20\x14\x41\x78\x6a\x21\x11\x41\x7f\x21\x27\x02\x40\x20\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x07\x20\x2c\x41\x36\x20\x2a\x41\x01\x10\xc4\x01\x41\x00\x48\x0d\x00\x20\x07\x20\x2c\x20\x2d\x10\xbd\x03\x20\x07\x20\x2d\x20\x0a\x20\x2f\x20\x30\x20\x2e\x20\x28\x41\x04\x71\x20\x15\x72\x10\xcc\x01\x21\x27\x0b\x20\x07\x20\x11\x29\x03\x00\x10\xcd\x01\x02\x40\x20\x26\x41\xd5\x00\x47\x0d\x00\x20\x07\x20\x0a\x10\xe4\x02\x20\x07\x20\x14\x41\x70\x6a\x29\x03\x00\x10\xcd\x01\x0b\x20\x06\x41\x01\x6a\x21\x11\x20\x14\x41\x70\x41\x78\x20\x26\x41\xd5\x00\x46\x1b\x6a\x21\x0a\x20\x27\x41\x00\x48\x0d\x2b\x20\x0a\x21\x14\x20\x11\x21\x15\x20\x06\x41\x02\x6a\x21\x06\x0c\x24\x0b\x20\x07\x20\x14\x41\x78\x6a\x29\x03\x00\x20\x14\x41\x70\x6a\x29\x03\x00\x10\xbd\x03\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x23\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x20\x52\x0d\x01\x0b\x20\x07\x20\x14\x41\x70\x6a\x29\x03\x00\x20\x2a\x41\x01\x10\xc2\x03\x41\x00\x48\x0d\x1f\x0b\x20\x07\x20\x2a\x10\xcd\x01\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x22\x0b\x20\x07\x20\x14\x41\x78\x6a\x29\x03\x00\x20\x14\x41\x70\x6a\x29\x03\x00\x10\xbe\x03\x41\x00\x48\x0d\x1d\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x21\x0b\x20\x06\x41\x04\x6a\x21\x11\x20\x07\x20\x14\x41\x78\x6a\x29\x03\x00\x20\x06\x28\x00\x00\x10\xbf\x03\x41\x00\x48\x0d\x08\x20\x11\x21\x15\x20\x06\x41\x05\x6a\x21\x06\x0c\x20\x0b\x20\x06\x41\x04\x6a\x21\x11\x20\x07\x20\x14\x41\x70\x6a\x29\x03\x00\x20\x06\x28\x00\x00\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x41\x87\x80\x01\x10\xc4\x01\x41\x00\x48\x0d\x26\x20\x0a\x21\x14\x20\x11\x21\x15\x20\x06\x41\x05\x6a\x21\x06\x0c\x1f\x0b\x20\x14\x41\x78\x6a\x29\x03\x00\x21\x2a\x20\x14\x41\x70\x6a\x21\x0a\x02\x40\x02\x40\x02\x40\x20\x14\x41\x68\x6a\x29\x03\x00\x22\x2c\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x07\x10\x8a\x03\x0c\x01\x0b\x02\x40\x20\x0a\x29\x03\x00\x22\x2d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x80\x7f\x51\x0d\x00\x20\x07\x10\xc3\x03\x0c\x01\x0b\x20\x07\x41\x10\x6a\x28\x02\x00\x20\x2d\x10\x88\x03\x21\x14\x20\x2c\xa7\x22\x11\x28\x02\x10\x22\x26\x20\x14\x20\x26\x28\x02\x18\x71\x41\x7f\x73\x41\x02\x74\x6a\x28\x02\x00\x21\x15\x02\x40\x03\x40\x20\x15\x45\x0d\x01\x02\x40\x20\x26\x20\x15\x41\x7f\x6a\x41\x03\x74\x6a\x22\x15\x41\x34\x6a\x28\x02\x00\x20\x14\x46\x0d\x00\x20\x15\x41\x30\x6a\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x21\x15\x0c\x01\x0b\x0b\x20\x07\x20\x14\x41\xa0\xc7\x01\x10\xf1\x02\x0c\x01\x0b\x20\x07\x20\x11\x20\x14\x41\x07\x10\xff\x02\x22\x14\x0d\x01\x0b\x20\x07\x20\x2a\x10\xcd\x01\x20\x07\x20\x0a\x29\x03\x00\x10\xcd\x01\x0c\x1c\x0b\x20\x14\x20\x2a\x37\x03\x00\x20\x07\x20\x0a\x29\x03\x00\x10\xcd\x01\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x1e\x0b\x20\x14\x41\x70\x6a\x29\x03\x00\x21\x2a\x20\x14\x41\x78\x6a\x21\x15\x02\x40\x02\x40\x02\x40\x20\x14\x41\x68\x6a\x22\x0a\x29\x03\x00\x22\x2c\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x07\x10\x8a\x03\x0c\x01\x0b\x02\x40\x20\x15\x29\x03\x00\x22\x2d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x80\x7f\x51\x0d\x00\x20\x07\x10\xc3\x03\x0c\x01\x0b\x20\x07\x41\x10\x6a\x28\x02\x00\x20\x2d\x10\x88\x03\x21\x14\x20\x2c\xa7\x22\x27\x28\x02\x10\x22\x11\x20\x14\x20\x11\x28\x02\x18\x71\x41\x7f\x73\x41\x02\x74\x6a\x28\x02\x00\x21\x26\x02\x40\x03\x40\x20\x26\x45\x0d\x01\x20\x11\x20\x26\x41\x7f\x6a\x41\x03\x74\x22\x26\x6a\x22\x28\x41\x34\x6a\x28\x02\x00\x20\x14\x46\x0d\x03\x20\x28\x41\x30\x6a\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x21\x26\x0c\x00\x0b\x00\x0b\x20\x07\x20\x14\x10\xc4\x03\x0b\x20\x07\x20\x2a\x10\xcd\x01\x20\x07\x20\x0a\x29\x03\x00\x10\xcd\x01\x20\x07\x20\x15\x29\x03\x00\x10\xcd\x01\x0c\x1b\x0b\x20\x07\x20\x27\x28\x02\x14\x20\x26\x6a\x20\x2a\x10\x98\x03\x20\x07\x20\x0a\x29\x03\x00\x10\xcd\x01\x20\x07\x20\x15\x29\x03\x00\x10\xcd\x01\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x1d\x0b\x20\x14\x41\x78\x6a\x21\x0a\x02\x40\x02\x40\x20\x14\x41\x70\x6a\x22\x14\x29\x03\x00\x22\x2a\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x07\x10\x8a\x03\x42\x80\x80\x80\x80\xe0\x00\x21\x2a\x0c\x01\x0b\x02\x40\x20\x0a\x29\x03\x00\x22\x2c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x80\x7f\x51\x0d\x00\x20\x07\x10\xc3\x03\x42\x80\x80\x80\x80\xe0\x00\x21\x2a\x0c\x01\x0b\x20\x07\x41\x10\x6a\x28\x02\x00\x20\x2c\x10\x88\x03\x21\x15\x20\x2a\xa7\x22\x27\x28\x02\x10\x22\x11\x20\x15\x20\x11\x28\x02\x18\x71\x41\x7f\x73\x41\x02\x74\x6a\x28\x02\x00\x21\x26\x02\x40\x02\x40\x03\x40\x20\x26\x45\x0d\x01\x20\x11\x20\x26\x41\x7f\x6a\x41\x03\x74\x22\x26\x6a\x22\x28\x41\x34\x6a\x28\x02\x00\x20\x15\x46\x0d\x02\x20\x28\x41\x30\x6a\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x21\x26\x0c\x00\x0b\x00\x0b\x20\x07\x20\x15\x10\xc4\x03\x42\x80\x80\x80\x80\xe0\x00\x21\x2a\x0c\x01\x0b\x20\x27\x28\x02\x14\x20\x26\x6a\x29\x03\x00\x10\xc0\x01\x21\x2a\x0b\x20\x07\x20\x0a\x29\x03\x00\x10\xcd\x01\x20\x07\x20\x14\x29\x03\x00\x10\xcd\x01\x20\x14\x20\x2a\x37\x03\x00\x20\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x19\x20\x0a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x1c\x0b\x20\x06\x41\x04\x6a\x21\x11\x20\x07\x20\x06\x28\x00\x00\x10\x89\x03\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x14\x20\x2a\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x11\x21\x15\x20\x06\x41\x05\x6a\x21\x06\x0c\x1b\x0b\x20\x07\x20\x14\x41\x70\x6a\x22\x0a\x29\x03\x00\x20\x06\x28\x00\x00\x20\x14\x41\x78\x6a\x29\x03\x00\x41\x80\x80\x02\x10\x9f\x03\x21\x14\x20\x07\x20\x0a\x29\x03\x00\x10\xcd\x01\x20\x06\x41\x04\x6a\x21\x11\x20\x14\x41\x00\x48\x0d\x21\x20\x0a\x21\x14\x20\x11\x21\x15\x20\x06\x41\x05\x6a\x21\x06\x0c\x1a\x0b\x20\x06\x41\x04\x6a\x21\x11\x20\x07\x20\x14\x41\x78\x6a\x29\x03\x00\x22\x2a\x20\x06\x28\x00\x00\x20\x2a\x41\x00\x10\xb4\x01\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x14\x20\x2a\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x11\x21\x15\x20\x06\x41\x05\x6a\x21\x06\x0c\x19\x0b\x20\x06\x41\x04\x6a\x21\x11\x20\x07\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x20\x06\x28\x00\x00\x20\x2a\x41\x00\x10\xb4\x01\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x07\x20\x0a\x29\x03\x00\x10\xcd\x01\x20\x0a\x20\x2a\x37\x03\x00\x20\x11\x21\x15\x20\x06\x41\x05\x6a\x21\x06\x0c\x18\x0b\x20\x14\x21\x0a\x0c\x1e\x0b\x02\x40\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x42\x20\x88\xa7\x41\x03\x4b\x0d\x00\x20\x2a\xa7\x41\x00\x47\x21\x15\x0c\x01\x0b\x20\x07\x20\x2a\x10\x9a\x03\x21\x15\x0b\x20\x0a\x20\x15\x45\xad\x42\x80\x80\x80\x80\x10\x84\x37\x03\x00\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x16\x0b\x20\x06\x41\x01\x6a\x21\x15\x42\x81\x80\x80\x80\x10\x21\x2a\x02\x40\x20\x07\x20\x14\x41\x60\x6a\x22\x0a\x29\x03\x00\x22\x2c\x41\x17\x41\x06\x20\x06\x2d\x00\x00\x22\x26\x41\x01\x71\x1b\x20\x2c\x41\x00\x10\xb4\x01\x22\x2d\x42\x80\x80\x80\x80\x70\x83\x22\x2c\x42\x80\x80\x80\x80\x20\x51\x0d\x00\x20\x2c\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x2c\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x0f\x20\x0a\x29\x03\x00\x21\x2a\x02\x40\x02\x40\x20\x26\x41\x02\x71\x45\x0d\x00\x20\x07\x20\x2d\x20\x2a\x41\x00\x41\x00\x10\xef\x02\x21\x2a\x0c\x01\x0b\x20\x07\x20\x2d\x20\x2a\x41\x01\x20\x14\x41\x78\x6a\x10\xef\x02\x21\x2a\x0b\x20\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x0f\x20\x07\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x10\xcd\x01\x20\x0a\x20\x2a\x37\x03\x00\x42\x80\x80\x80\x80\x10\x21\x2a\x0b\x20\x14\x20\x2a\x37\x03\x00\x20\x06\x41\x02\x6a\x21\x06\x20\x14\x41\x08\x6a\x21\x14\x0c\x15\x0b\x20\x07\x20\x14\x41\x68\x6a\x29\x03\x00\x20\x14\x41\x60\x6a\x29\x03\x00\x41\x01\x20\x14\x41\x78\x6a\x22\x0a\x10\xb5\x01\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x10\x20\x07\x20\x0a\x29\x03\x00\x10\xcd\x01\x20\x0a\x20\x2a\x37\x03\x00\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x14\x0b\x20\x14\x41\x60\x6a\x21\x0a\x20\x14\x41\x78\x6a\x29\x03\x00\x21\x2c\x02\x40\x03\x40\x20\x0a\x41\x18\x6a\x22\x14\x20\x10\x4d\x0d\x01\x20\x0a\x41\x10\x6a\x29\x03\x00\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xd0\x00\x51\x0d\x01\x20\x07\x20\x2a\x10\xcd\x01\x20\x0a\x41\x78\x6a\x21\x0a\x0c\x00\x0b\x00\x0b\x02\x40\x20\x14\x20\x19\x4f\x0d\x00\x20\x07\x41\x8a\xc7\x01\x41\x00\x10\xc2\x02\x20\x07\x20\x2c\x10\xcd\x01\x20\x0a\x41\x18\x6a\x21\x0a\x0c\x11\x0b\x20\x0a\x29\x03\x00\x21\x2a\x20\x0a\x20\x2c\x37\x03\x00\x20\x0a\x41\x18\x6a\x20\x0a\x41\x10\x6a\x22\x14\x29\x03\x00\x37\x03\x00\x20\x0a\x41\x08\x6a\x22\x15\x29\x03\x00\x21\x2c\x20\x15\x20\x2a\x37\x03\x00\x20\x14\x20\x2c\x37\x03\x00\x20\x0a\x41\x20\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x13\x0b\x20\x07\x20\x14\x41\x70\x6a\x22\x0a\x29\x03\x00\x10\xcd\x01\x02\x40\x20\x14\x41\x68\x6a\x22\x14\x29\x03\x00\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x07\x20\x2a\x41\x00\x10\xfc\x02\x0d\x10\x20\x07\x20\x14\x29\x03\x00\x10\xcd\x01\x0b\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x12\x0b\x02\x40\x20\x14\x41\x78\x6a\x29\x03\x00\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x07\x41\xeb\xc6\x01\x41\x00\x10\xb2\x02\x0c\x0e\x0b\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x11\x0b\x02\x40\x20\x14\x41\x78\x6a\x22\x0a\x29\x03\x00\x22\x2a\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x07\x41\xeb\xc6\x01\x41\x00\x10\xb2\x02\x0c\x0d\x0b\x20\x07\x20\x2a\x20\x08\x41\x80\x01\x6a\x10\xc5\x03\x22\x2c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x0c\x20\x07\x20\x2a\x10\xcd\x01\x20\x0a\x20\x2c\x37\x03\x00\x20\x14\x20\x08\x28\x02\x80\x01\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x10\x0b\x20\x07\x20\x14\x41\x01\x10\xc6\x03\x0d\x0b\x20\x14\x42\x80\x80\x80\x80\xd0\x00\x37\x03\x08\x20\x14\x41\x10\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x0f\x0b\x20\x06\x2d\x00\x00\x21\x26\x41\x01\x21\x0a\x20\x08\x41\x01\x36\x02\x80\x01\x20\x06\x41\x01\x6a\x21\x15\x42\x80\x80\x80\x80\x30\x21\x2a\x02\x40\x20\x14\x41\x7d\x20\x26\x6b\x41\x03\x74\x6a\x22\x11\x29\x03\x00\x22\x2c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x07\x20\x2c\x20\x14\x41\x7e\x20\x26\x6b\x41\x03\x74\x6a\x29\x03\x00\x20\x08\x41\x80\x01\x6a\x10\xb7\x03\x22\x2a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x41\x7f\x21\x0a\x20\x08\x41\x7f\x36\x02\x80\x01\x0c\x01\x0b\x20\x08\x28\x02\x80\x01\x22\x0a\x45\x0d\x01\x0b\x20\x07\x20\x11\x29\x03\x00\x10\xcd\x01\x20\x11\x42\x80\x80\x80\x80\x30\x37\x03\x00\x20\x0a\x41\x00\x48\x0d\x09\x20\x07\x20\x2a\x10\xcd\x01\x42\x80\x80\x80\x80\x30\x21\x2a\x0c\x01\x0b\x41\x00\x21\x0a\x0b\x20\x14\x20\x2a\x37\x03\x00\x20\x14\x20\x0a\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x37\x03\x08\x20\x06\x41\x02\x6a\x21\x06\x20\x14\x41\x10\x6a\x21\x14\x0c\x0e\x0b\x20\x07\x20\x14\x41\x00\x10\xc6\x03\x0d\x09\x20\x14\x42\x80\x80\x80\x80\xd0\x00\x37\x03\x08\x20\x14\x41\x10\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x0d\x0b\x42\x81\x80\x80\x80\x10\x21\x2a\x42\x80\x80\x80\x80\x30\x21\x2c\x02\x40\x20\x14\x41\x78\x6a\x29\x03\x00\x22\x2d\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x2d\xa7\x22\x11\x2f\x01\x06\x41\x11\x47\x0d\x00\x20\x11\x28\x02\x20\x21\x0a\x03\x40\x02\x40\x02\x40\x20\x0a\x28\x02\x08\x45\x0d\x00\x20\x0a\x28\x02\x10\x22\x15\x20\x0a\x28\x02\x0c\x4f\x0d\x03\x20\x0a\x20\x15\x41\x01\x6a\x36\x02\x10\x20\x15\x41\x80\x80\x80\x80\x78\x72\x21\x15\x0c\x01\x0b\x20\x0a\x28\x02\x10\x22\x15\x20\x11\x28\x02\x10\x22\x26\x28\x02\x20\x4f\x0d\x02\x20\x0a\x20\x15\x41\x01\x6a\x36\x02\x10\x20\x26\x20\x15\x41\x03\x74\x6a\x22\x26\x41\x34\x6a\x28\x02\x00\x22\x15\x45\x0d\x01\x20\x26\x41\x33\x6a\x2d\x00\x00\x41\x10\x71\x45\x0d\x01\x0b\x20\x07\x20\x0a\x29\x03\x00\x20\x15\x10\x96\x03\x22\x26\x41\x00\x48\x0d\x0a\x20\x26\x45\x0d\x00\x0b\x20\x07\x20\x15\x10\xdd\x01\x21\x2c\x42\x80\x80\x80\x80\x10\x21\x2a\x0b\x20\x14\x20\x2a\x37\x03\x08\x20\x14\x20\x2c\x37\x03\x00\x20\x14\x41\x10\x6a\x21\x14\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x0c\x0b\x20\x2a\x21\x2c\x0c\x02\x0b\x20\x07\x20\x2c\x10\xcd\x01\x0b\x20\x07\x20\x2a\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x2c\x0b\x20\x26\x20\x2c\x37\x03\x00\x20\x2c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x04\x20\x06\x21\x15\x20\x06\x41\x01\x6a\x21\x06\x0c\x08\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x27\x41\x80\x01\x71\x45\x0d\x00\x20\x26\x45\x0d\x01\x20\x26\x41\x03\x6a\x2d\x00\x00\x41\x04\x71\x45\x0d\x04\x0c\x01\x0b\x02\x40\x20\x26\x0d\x00\x20\x29\x2d\x00\x05\x41\x01\x71\x0d\x01\x0c\x02\x0b\x20\x27\x41\xc0\x00\x71\x45\x0d\x00\x20\x26\x28\x02\x00\x22\x26\x41\x80\x80\x80\x20\x71\x0d\x00\x20\x26\x41\x80\x80\x80\x80\x7c\x71\x41\x80\x80\x80\x80\x04\x46\x0d\x01\x20\x26\x41\x80\x80\x80\xc0\x01\x71\x41\x80\x80\x80\xc0\x01\x47\x0d\x01\x0b\x20\x18\x28\x02\x00\x28\x02\x10\x22\x11\x20\x11\x28\x02\x18\x20\x0a\x71\x41\x7f\x73\x41\x02\x74\x6a\x28\x02\x00\x21\x26\x03\x40\x20\x26\x45\x0d\x02\x20\x11\x20\x26\x41\x7f\x6a\x41\x03\x74\x6a\x22\x26\x41\x34\x6a\x28\x02\x00\x20\x0a\x46\x0d\x03\x20\x26\x41\x30\x6a\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x21\x26\x0c\x00\x0b\x00\x0b\x20\x07\x20\x0a\x41\x99\xc6\x01\x10\xf1\x02\x0c\x02\x0b\x20\x06\x41\x06\x6a\x21\x06\x0c\x08\x0b\x20\x07\x20\x0a\x10\x8b\x03\x0b\x20\x14\x21\x0a\x0b\x20\x15\x21\x11\x0c\x0c\x0b\x20\x07\x10\x8a\x03\x0b\x20\x14\x21\x0a\x0b\x20\x06\x21\x11\x0c\x09\x0b\x20\x27\x41\x28\x6a\x20\x04\x36\x02\x00\x20\x27\x41\x24\x6a\x20\x28\x36\x02\x00\x20\x07\x20\x2a\x41\xd1\x01\x20\x07\x29\x03\xa8\x01\x10\xc0\x01\x41\x03\x10\xc4\x01\x1a\x20\x07\x20\x2a\x41\xce\x00\x42\x80\x80\x80\x80\x30\x20\x07\x29\x03\xb0\x01\x22\x2c\x20\x2c\x41\x80\x30\x10\xcc\x01\x1a\x20\x14\x20\x2a\x37\x03\x00\x20\x14\x41\x08\x6a\x21\x14\x0b\x20\x06\x41\x02\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x41\x00\x21\x06\x0c\x06\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x2a\x20\x0a\x21\x14\x20\x0d\x2d\x00\x11\x41\x30\x71\x45\x0d\x01\x0b\x20\x0e\x20\x0a\x36\x02\x2c\x20\x0e\x20\x11\x36\x02\x20\x0c\x01\x0b\x20\x14\x21\x06\x02\x40\x20\x0e\x41\x1c\x6a\x28\x02\x00\x20\x0e\x41\x18\x6a\x46\x0d\x00\x20\x09\x20\x0e\x10\xc7\x03\x0b\x03\x40\x20\x13\x20\x06\x4f\x0d\x01\x20\x07\x20\x13\x29\x03\x00\x10\xcd\x01\x20\x13\x41\x08\x6a\x21\x13\x0c\x00\x0b\x00\x0b\x20\x09\x20\x0e\x28\x02\x00\x36\x02\x8c\x01\x0c\x03\x0b\x20\x14\x21\x0a\x20\x15\x21\x11\x0b\x41\x01\x21\x06\x0c\x00\x0b\x00\x0b\x20\x08\x41\xc0\x01\x6a\x24\x00\x20\x2a\x0b\x2c\x01\x02\x7f\x20\x00\x20\x00\x28\x02\xec\x01\x22\x01\x41\x7f\x6a\x36\x02\xec\x01\x41\x00\x21\x02\x02\x40\x20\x01\x41\x01\x4a\x0d\x00\x20\x00\x10\xc8\x03\x21\x02\x0b\x20\x02\x0b\x0d\x00\x20\x00\x41\x98\x9d\x03\x41\x00\x10\xc2\x02\x0b\xea\x01\x02\x03\x7e\x02\x7f\x02\x40\x02\x40\x20\x02\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x03\x41\x00\x21\x06\x0c\x01\x0b\x20\x00\x28\x02\x10\x22\x07\x29\x03\x80\x01\x21\x03\x20\x07\x42\x80\x80\x80\x80\x20\x37\x03\x80\x01\x41\x7f\x21\x06\x0b\x02\x40\x02\x40\x20\x00\x20\x01\x41\x06\x20\x01\x41\x00\x10\xb4\x01\x22\x04\x42\x80\x80\x80\x80\x70\x83\x22\x05\x42\x80\x80\x80\x80\x20\x51\x0d\x00\x20\x05\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x41\x7f\x21\x07\x20\x05\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x04\x20\x01\x41\x00\x41\x00\x10\xef\x02\x21\x01\x02\x40\x02\x40\x20\x02\x45\x0d\x00\x20\x06\x21\x07\x0c\x01\x0b\x41\x7f\x21\x07\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x06\x21\x07\x20\x01\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x41\x7f\x21\x07\x0b\x20\x00\x20\x01\x10\xcd\x01\x0c\x01\x0b\x20\x06\x21\x07\x0b\x02\x40\x20\x02\x45\x0d\x00\x20\x00\x20\x03\x10\xc9\x02\x0b\x20\x07\x0b\x9d\x02\x02\x01\x7f\x01\x7e\x02\x40\x02\x40\x02\x40\x20\x00\x20\x01\xa7\x22\x04\x2f\x00\x11\x41\x03\x76\x41\x06\x71\x41\xac\xe7\x01\x6a\x2f\x01\x00\x10\xc9\x03\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x01\x10\xcd\x01\x0c\x01\x0b\x02\x40\x20\x00\x20\x05\x20\x04\x20\x02\x20\x03\x10\xbc\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x01\x20\x04\x28\x02\x1c\x22\x02\x41\x2f\x20\x02\x1b\x20\x04\x2f\x01\x2c\x10\xca\x03\x02\x40\x20\x04\x2f\x00\x11\x22\x04\x41\x10\x71\x45\x0d\x00\x20\x00\x20\x00\x28\x02\x28\x41\xc8\x03\x41\xf8\x02\x20\x04\x41\x30\x71\x41\x30\x46\x1b\x6a\x29\x03\x00\x10\xbd\x01\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x01\x41\x3b\x20\x05\x41\x02\x10\xc4\x01\x1a\x20\x01\x0f\x0b\x20\x04\x41\x01\x71\x45\x0d\x02\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x04\x20\x04\x2d\x00\x05\x41\x10\x72\x3a\x00\x05\x0b\x20\x00\x20\x01\x41\x3b\x41\x00\x41\x00\x41\x02\x10\xcb\x03\x1a\x20\x01\x0f\x0b\x20\x00\x20\x01\x10\xcd\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x01\x0b\xf8\x01\x02\x01\x7f\x01\x7e\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x41\x07\x20\x01\x42\x20\x88\xa7\x22\x02\x20\x02\x41\x0b\x6a\x41\x11\x4b\x1b\x41\x0b\x6a\x22\x02\x41\x12\x4b\x0d\x00\x20\x02\x0e\x13\x04\x02\x03\x08\x06\x00\x00\x00\x00\x00\x01\x05\x07\x00\x00\x00\x00\x01\x05\x04\x0b\x20\x00\x41\xfe\xe6\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x01\x10\xc0\x01\x0f\x0b\x20\x00\x41\x21\x10\xc9\x03\x21\x03\x0c\x06\x0b\x20\x00\x41\x22\x10\xc9\x03\x21\x03\x0c\x05\x0b\x20\x00\x41\x24\x10\xc9\x03\x21\x03\x0c\x04\x0b\x20\x00\x41\x04\x10\xc9\x03\x21\x03\x0c\x03\x0b\x20\x00\x20\x00\x41\x05\x10\xc9\x03\x22\x03\x41\x30\x20\x01\xa7\x29\x02\x04\x42\xff\xff\xff\xff\x07\x83\x41\x00\x10\xc4\x01\x1a\x0c\x02\x0b\x20\x00\x41\x06\x10\xc9\x03\x21\x03\x0c\x01\x0b\x20\x00\x41\x07\x10\xc9\x03\x21\x03\x0b\x02\x40\x20\x03\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x03\x20\x01\x10\xc0\x01\x10\xd7\x01\x0b\x20\x03\x0b\x83\x04\x01\x0a\x7f\x20\x01\x41\x10\x6a\x21\x04\x02\x40\x02\x40\x20\x01\x28\x02\x10\x22\x05\x2d\x00\x10\x45\x0d\x00\x20\x00\x28\x02\x10\x22\x06\x28\x02\xd4\x01\x20\x05\x28\x02\x14\x20\x02\x6a\x41\x81\x80\xdc\xf1\x79\x6c\x20\x03\x6a\x41\x81\x80\xdc\xf1\x79\x6c\x22\x07\x41\x20\x20\x06\x28\x02\xc8\x01\x6b\x76\x41\x02\x74\x6a\x21\x08\x02\x40\x03\x40\x20\x08\x28\x02\x00\x22\x09\x45\x0d\x01\x02\x40\x02\x40\x20\x09\x28\x02\x14\x20\x07\x47\x0d\x00\x20\x09\x28\x02\x2c\x20\x05\x28\x02\x2c\x47\x0d\x00\x20\x09\x28\x02\x20\x20\x05\x28\x02\x20\x22\x0a\x41\x01\x6a\x22\x0b\x47\x0d\x00\x41\x00\x21\x08\x02\x40\x03\x40\x20\x0b\x41\x7f\x6a\x22\x0b\x45\x0d\x01\x20\x09\x20\x08\x6a\x22\x0c\x41\x34\x6a\x28\x02\x00\x20\x05\x20\x08\x6a\x22\x0d\x41\x34\x6a\x28\x02\x00\x47\x0d\x02\x20\x08\x41\x08\x6a\x21\x08\x20\x0d\x41\x30\x6a\x28\x02\x00\x20\x0c\x41\x30\x6a\x28\x02\x00\x73\x41\xff\xff\xff\x1f\x4d\x0d\x00\x0c\x02\x0b\x00\x0b\x20\x09\x20\x0a\x41\x03\x74\x6a\x22\x08\x41\x34\x6a\x28\x02\x00\x20\x02\x47\x0d\x00\x20\x08\x41\x30\x6a\x28\x02\x00\x41\x1a\x76\x20\x03\x46\x0d\x01\x0b\x20\x09\x41\x28\x6a\x21\x08\x0c\x01\x0b\x0b\x02\x40\x20\x09\x28\x02\x1c\x22\x08\x20\x05\x28\x02\x1c\x46\x0d\x00\x20\x00\x20\x01\x28\x02\x14\x20\x08\x41\x03\x74\x10\xcc\x03\x22\x08\x45\x0d\x03\x20\x01\x20\x08\x36\x02\x14\x20\x00\x28\x02\x10\x21\x06\x0b\x20\x01\x20\x09\x36\x02\x10\x20\x09\x20\x09\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x20\x06\x20\x05\x10\xd9\x02\x20\x09\x28\x02\x20\x41\x03\x74\x20\x01\x28\x02\x14\x6a\x41\x78\x6a\x0f\x0b\x20\x05\x28\x02\x00\x41\x01\x46\x0d\x00\x20\x00\x20\x05\x10\xcd\x03\x22\x05\x45\x0d\x01\x20\x05\x41\x01\x3a\x00\x10\x20\x00\x28\x02\x10\x20\x05\x10\xce\x03\x20\x00\x28\x02\x10\x20\x04\x28\x02\x00\x10\xd9\x02\x20\x04\x20\x05\x36\x02\x00\x0b\x02\x40\x20\x05\x28\x02\x00\x41\x01\x47\x0d\x00\x41\x00\x21\x08\x02\x40\x20\x00\x20\x04\x20\x01\x20\x02\x20\x03\x10\xc8\x01\x0d\x00\x20\x01\x28\x02\x10\x28\x02\x20\x41\x03\x74\x20\x01\x28\x02\x14\x6a\x41\x78\x6a\x21\x08\x0b\x20\x08\x0f\x0b\x41\xd1\xe6\x01\x41\xae\xb7\x01\x41\xe2\x3e\x41\xf1\xe6\x01\x10\x4a\x00\x0b\x41\x00\x0b\x5b\x01\x01\x7e\x02\x40\x02\x40\x20\x02\x41\x00\x48\x0d\x00\x20\x02\xad\x21\x05\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x02\xb8\xbd\x22\x05\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x05\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x05\x0b\x20\x00\x20\x01\x20\x05\x20\x03\x20\x04\x10\xb8\x03\x0b\xe4\x01\x01\x03\x7f\x20\x01\x41\x1c\x6a\x21\x04\x20\x01\x41\x18\x6a\x21\x05\x02\x40\x03\x40\x20\x04\x28\x02\x00\x22\x04\x20\x05\x46\x0d\x01\x02\x40\x20\x04\x41\x7e\x6a\x2f\x01\x00\x20\x02\x47\x0d\x00\x20\x04\x41\x78\x6a\x22\x06\x2d\x00\x05\x41\x01\x76\x41\x01\x71\x20\x03\x47\x0d\x00\x20\x06\x20\x06\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x20\x06\x0f\x0b\x20\x04\x41\x04\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x02\x40\x20\x00\x41\x20\x10\xc0\x02\x22\x04\x0d\x00\x41\x00\x0f\x0b\x20\x04\x41\x01\x36\x02\x00\x20\x04\x20\x02\x3b\x01\x06\x20\x04\x20\x04\x2d\x00\x05\x41\xfc\x01\x71\x20\x03\x41\x01\x74\x41\x02\x71\x72\x3a\x00\x05\x20\x04\x20\x01\x28\x02\x18\x22\x06\x36\x02\x08\x20\x06\x20\x04\x41\x08\x6a\x22\x00\x36\x02\x04\x20\x01\x20\x00\x36\x02\x18\x20\x04\x20\x05\x36\x02\x0c\x20\x04\x42\x80\x80\x80\x80\x30\x37\x03\x18\x20\x04\x20\x01\x41\x10\x41\x14\x20\x03\x1b\x6a\x28\x02\x00\x20\x02\x41\x03\x74\x6a\x36\x02\x10\x20\x04\x0b\x5a\x02\x02\x7f\x01\x7e\x41\x00\x21\x01\x02\x40\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x22\x02\x45\x0d\x00\x20\x02\x29\x03\x08\x22\x03\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x03\xa7\x22\x02\x2f\x01\x06\x10\xc6\x02\x45\x0d\x00\x20\x02\x28\x02\x20\x22\x02\x41\x12\x6a\x2d\x00\x00\x41\x04\x71\x45\x0d\x00\x20\x00\x20\x02\x28\x02\x40\x10\xd9\x03\x21\x01\x0b\x20\x01\x0b\x48\x01\x01\x7f\x20\x00\x41\xf8\x01\x6a\x21\x02\x20\x00\x41\xf4\x01\x6a\x21\x00\x03\x7f\x02\x40\x20\x02\x28\x02\x00\x22\x02\x20\x00\x47\x0d\x00\x41\x00\x0f\x0b\x02\x40\x20\x02\x41\x7c\x6a\x28\x02\x00\x20\x01\x47\x0d\x00\x20\x02\x41\x78\x6a\x0f\x0b\x20\x02\x41\x04\x6a\x21\x02\x0c\x00\x0b\x0b\x58\x01\x02\x7e\x02\x40\x02\x40\x20\x01\x29\x03\x68\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x03\x20\x00\x42\x80\x80\x80\x80\x20\x10\xbd\x01\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x01\x20\x02\x37\x03\x68\x0b\x20\x02\x10\xc0\x01\x21\x03\x0b\x20\x03\x0b\x1f\x01\x01\x7f\x20\x00\x28\x02\x24\x22\x01\x20\x01\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x20\x00\x20\x01\x41\x02\x10\xca\x02\x0b\xb5\x02\x02\x02\x7e\x02\x7f\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x02\x40\x20\x00\x10\xfa\x02\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x02\x40\x20\x01\xa7\x22\x08\x2d\x00\x05\x41\x10\x71\x0d\x00\x20\x00\x41\xff\xe4\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x05\x41\x01\x72\x21\x05\x20\x08\x2f\x01\x06\x22\x09\x41\x0d\x46\x0d\x02\x20\x00\x28\x02\x10\x28\x02\x44\x20\x09\x41\x18\x6c\x6a\x28\x02\x10\x22\x08\x0d\x01\x0b\x20\x00\x41\xca\xc3\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x00\x20\x01\x20\x02\x20\x03\x20\x04\x20\x05\x20\x08\x11\x15\x00\x0f\x0b\x02\x40\x20\x08\x28\x02\x20\x2d\x00\x11\x41\x04\x71\x45\x0d\x00\x20\x00\x20\x01\x42\x80\x80\x80\x80\x30\x20\x02\x20\x03\x20\x04\x20\x05\x10\xf9\x02\x0f\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x20\x00\x20\x02\x41\x01\x10\xda\x03\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x02\x40\x20\x00\x20\x01\x20\x07\x20\x02\x20\x03\x20\x04\x20\x05\x10\xf9\x02\x22\x01\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0b\x20\x00\x20\x07\x10\xcd\x01\x20\x01\x0f\x0b\x20\x00\x20\x01\x10\xcd\x01\x20\x07\x21\x06\x0b\x20\x06\x0b\xb7\x01\x02\x02\x7f\x03\x7e\x23\x00\x41\x10\x6b\x22\x05\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x02\x40\x20\x00\x20\x01\x10\xdb\x03\x0d\x00\x20\x03\x29\x03\x08\x21\x08\x20\x03\x29\x03\x00\x21\x09\x02\x40\x20\x04\x41\x02\x46\x0d\x00\x20\x08\x42\x80\x80\x80\x80\x60\x83\x42\x80\x80\x80\x80\x20\x52\x0d\x00\x20\x00\x20\x01\x20\x09\x41\x00\x41\x00\x10\xb5\x01\x21\x07\x0c\x01\x0b\x20\x00\x20\x05\x41\x0c\x6a\x20\x08\x10\x8f\x03\x22\x03\x45\x0d\x00\x20\x05\x28\x02\x0c\x21\x06\x02\x40\x02\x40\x20\x04\x41\x01\x71\x45\x0d\x00\x20\x00\x20\x01\x20\x09\x20\x06\x20\x03\x10\xdc\x03\x21\x07\x0c\x01\x0b\x20\x00\x20\x01\x20\x09\x20\x06\x20\x03\x10\xb5\x01\x21\x07\x0b\x20\x00\x20\x03\x20\x06\x10\x90\x03\x0b\x20\x05\x41\x10\x6a\x24\x00\x20\x07\x0b\x0a\x00\x20\x00\x20\x01\xa7\x10\xdd\x03\x0b\x6b\x01\x01\x7f\x02\x40\x02\x40\x20\x01\x41\x7f\x4c\x0d\x00\x20\x00\x28\x02\x10\x22\x02\x28\x02\x2c\x20\x01\x4d\x0d\x01\x20\x02\x28\x02\x38\x20\x01\x41\x02\x74\x6a\x28\x02\x00\x22\x01\xad\x42\x80\x80\x80\x80\x90\x7f\x84\x10\xc0\x01\x1a\x20\x00\x20\x01\x41\x04\x10\xde\x03\x0f\x0b\x41\xb7\xe4\x01\x41\xae\xb7\x01\x41\xc1\x17\x41\xd4\xe4\x01\x10\x4a\x00\x0b\x41\xe9\xe4\x01\x41\xae\xb7\x01\x41\xc2\x17\x41\xd4\xe4\x01\x10\x4a\x00\x0b\x0d\x00\x20\x00\x41\x9c\xe1\x01\x41\x00\x10\xb2\x02\x0b\x0d\x00\x20\x00\x20\x01\x41\xa1\xe4\x01\x10\xdf\x03\x0b\x26\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x20\x03\x20\x02\x36\x02\x0c\x20\x00\x41\x02\x20\x01\x20\x02\x10\xc3\x02\x20\x03\x41\x10\x6a\x24\x00\x0b\x13\x00\x20\x00\x20\x01\x10\xc0\x01\x20\x02\x10\xc0\x01\x41\x01\x10\xe0\x03\x0b\x9d\x01\x01\x03\x7f\x23\x00\x41\x10\x6b\x22\x05\x24\x00\x02\x40\x02\x40\x20\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x90\x7f\x51\x0d\x00\x20\x02\x10\xc0\x01\x21\x02\x0c\x01\x0b\x02\x40\x20\x00\x20\x05\x41\x0c\x6a\x20\x02\x10\xe1\x03\x22\x06\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x02\x0c\x01\x0b\x02\x40\x02\x40\x20\x00\x28\x02\x80\x02\x22\x07\x0d\x00\x20\x00\x41\xe4\xe3\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x02\x0c\x01\x0b\x20\x00\x20\x01\x20\x06\x20\x05\x28\x02\x0c\x41\xdc\xe3\x01\x20\x03\x20\x04\x20\x07\x11\x48\x00\x21\x02\x0b\x20\x00\x20\x06\x10\xcf\x02\x0b\x20\x05\x41\x10\x6a\x24\x00\x20\x02\x0b\xd6\x02\x02\x05\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x02\x40\x02\x40\x20\x02\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x41\x00\x21\x04\x20\x00\x41\xbc\xe3\x01\x41\x00\x10\xb2\x02\x0c\x01\x0b\x41\x00\x21\x04\x20\x00\x20\x03\x41\x0c\x6a\x20\x02\x10\xb6\x03\x0d\x00\x02\x40\x20\x03\x28\x02\x0c\x22\x05\x41\x81\x80\x04\x49\x0d\x00\x41\x00\x21\x04\x20\x00\x41\xc9\xe3\x01\x41\x00\x10\xc2\x02\x0c\x01\x0b\x20\x00\x20\x05\x41\x03\x74\x41\x08\x20\x05\x1b\x10\xe2\x03\x22\x06\x45\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\xa7\x22\x07\x2f\x01\x06\x22\x04\x41\x08\x46\x0d\x00\x20\x04\x41\x02\x47\x0d\x01\x0b\x20\x07\x2d\x00\x05\x41\x08\x71\x45\x0d\x00\x20\x05\x20\x07\x41\x28\x6a\x28\x02\x00\x46\x0d\x01\x0b\x41\x00\x21\x04\x20\x06\x21\x07\x03\x40\x20\x05\x20\x04\x46\x0d\x02\x02\x40\x20\x00\x20\x02\x20\x04\x10\xf6\x02\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x06\x20\x04\x10\x90\x03\x41\x00\x21\x04\x0c\x04\x0b\x20\x07\x20\x08\x37\x03\x00\x20\x07\x41\x08\x6a\x21\x07\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x41\x00\x21\x04\x20\x05\x21\x00\x03\x40\x20\x00\x45\x0d\x01\x20\x06\x20\x04\x6a\x20\x07\x28\x02\x24\x20\x04\x6a\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x00\x41\x7f\x6a\x21\x00\x20\x04\x41\x08\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x01\x20\x05\x36\x02\x00\x20\x06\x21\x04\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x04\x0b\x42\x01\x01\x7f\x20\x01\x21\x03\x02\x40\x03\x40\x20\x02\x45\x0d\x01\x20\x00\x20\x03\x29\x03\x00\x10\xcd\x01\x20\x02\x41\x7f\x6a\x21\x02\x20\x03\x41\x08\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x10\x22\x02\x41\x10\x6a\x20\x01\x20\x02\x28\x02\x04\x11\x00\x00\x0b\x97\x01\x01\x01\x7f\x02\x40\x02\x40\x02\x40\x20\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x90\x7f\x52\x0d\x00\x20\x03\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x90\x7f\x51\x0d\x01\x0b\x20\x00\x41\xac\xe3\x01\x41\x00\x10\xb2\x02\x0c\x01\x0b\x20\x00\x20\x01\x41\x12\x10\xda\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x01\xa7\x22\x04\x20\x02\x3e\x02\x20\x20\x04\x41\x24\x6a\x20\x03\x3e\x02\x00\x20\x00\x20\x01\x41\xd5\x00\x42\x00\x41\x02\x10\xc4\x01\x1a\x20\x01\x0f\x0b\x20\x00\x20\x03\x10\xcd\x01\x20\x00\x20\x02\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x0b\xf9\x02\x02\x03\x7f\x02\x7e\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x02\x40\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x02\x40\x20\x01\xa7\x22\x03\x2f\x01\x06\x41\x30\x47\x0d\x00\x02\x40\x20\x00\x20\x02\x41\x08\x6a\x20\x01\x41\xdf\x00\x10\xe3\x03\x22\x03\x45\x0d\x00\x02\x40\x20\x02\x29\x03\x08\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x20\x03\x29\x03\x00\x10\x92\x03\x21\x01\x0c\x05\x0b\x20\x00\x20\x01\x20\x03\x29\x03\x08\x41\x01\x20\x03\x10\xef\x02\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x02\x40\x20\x05\x42\x20\x88\xa7\x41\x01\x6a\x22\x04\x41\x03\x4b\x0d\x00\x02\x40\x20\x04\x0e\x04\x00\x01\x01\x00\x00\x0b\x02\x40\x20\x00\x20\x03\x29\x03\x00\x10\xe4\x03\x22\x04\x41\x7f\x4a\x0d\x00\x20\x00\x20\x05\x10\xcd\x01\x0c\x02\x0b\x20\x04\x0d\x04\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x02\x40\x20\x00\x20\x03\x29\x03\x00\x10\x92\x03\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x05\x10\xcd\x01\x0c\x06\x0b\x20\x00\x20\x06\x10\xcd\x01\x20\x06\xa7\x20\x05\xa7\x46\x0d\x04\x0b\x20\x00\x20\x05\x10\xcd\x01\x20\x00\x41\x9d\xdf\x01\x41\x00\x10\xb2\x02\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0c\x03\x0b\x02\x40\x20\x03\x28\x02\x10\x28\x02\x2c\x22\x00\x0d\x00\x42\x80\x80\x80\x80\x20\x21\x01\x0c\x03\x0b\x20\x00\xad\x42\x80\x80\x80\x80\x70\x84\x10\xc0\x01\x21\x01\x0c\x02\x0b\x20\x00\x20\x01\x10\xf3\x02\x10\xc0\x01\x21\x01\x0c\x01\x0b\x20\x05\x21\x01\x0b\x20\x02\x41\x10\x6a\x24\x00\x20\x01\x0b\x0f\x00\x20\x00\x20\x01\x42\x80\x80\x80\x80\x30\x10\xe5\x03\x0b\xf0\x02\x02\x04\x7f\x02\x7e\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x02\x40\x02\x40\x02\x40\x20\x02\x29\x03\x10\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x90\x7f\x51\x0d\x00\x41\x00\x21\x04\x20\x00\x41\xb0\xe2\x01\x41\x00\x10\xb2\x02\x0c\x01\x0b\x20\x02\x29\x03\x18\x21\x08\x02\x40\x20\x00\x20\x07\x10\xce\x02\x22\x04\x0d\x00\x41\x00\x21\x04\x0c\x01\x0b\x20\x00\x20\x08\x10\xce\x02\x22\x05\x45\x0d\x00\x02\x40\x02\x40\x20\x00\x20\x04\x20\x05\x10\xe6\x03\x22\x06\x45\x0d\x00\x02\x40\x20\x00\x20\x06\x10\xe7\x03\x41\x7f\x4a\x0d\x00\x20\x00\x41\x01\x10\xe2\x02\x0c\x01\x0b\x20\x00\x20\x06\xad\x42\x80\x80\x80\x80\x50\x84\x10\xc0\x01\x10\xe8\x03\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0b\x20\x00\x20\x05\x10\xcf\x02\x0c\x01\x0b\x20\x00\x20\x07\x10\xcd\x01\x20\x00\x20\x05\x10\xcf\x02\x20\x03\x20\x00\x20\x06\x10\xe9\x03\x22\x07\x37\x03\x00\x20\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x00\x20\x02\x29\x03\x00\x42\x80\x80\x80\x80\x30\x41\x01\x20\x03\x10\xb5\x01\x10\xcd\x01\x20\x00\x20\x03\x29\x03\x00\x10\xcd\x01\x0c\x01\x0b\x20\x00\x28\x02\x10\x22\x05\x29\x03\x80\x01\x21\x07\x20\x05\x42\x80\x80\x80\x80\x20\x37\x03\x80\x01\x20\x03\x20\x07\x37\x03\x08\x20\x00\x20\x00\x20\x02\x29\x03\x08\x42\x80\x80\x80\x80\x30\x41\x01\x20\x03\x41\x08\x6a\x10\xb5\x01\x10\xcd\x01\x20\x00\x20\x03\x29\x03\x08\x10\xcd\x01\x0b\x20\x00\x20\x04\x10\xcf\x02\x20\x03\x41\x10\x6a\x24\x00\x42\x80\x80\x80\x80\x30\x0b\x98\x01\x01\x02\x7f\x20\x00\x28\x02\x10\x21\x04\x02\x40\x20\x00\x20\x02\x41\x03\x74\x41\x18\x6a\x10\xc0\x02\x22\x05\x45\x0d\x00\x20\x05\x20\x02\x36\x02\x10\x20\x05\x20\x01\x36\x02\x0c\x20\x05\x20\x00\x36\x02\x08\x41\x00\x21\x00\x41\x00\x21\x01\x02\x40\x03\x40\x20\x01\x20\x02\x4e\x0d\x01\x20\x05\x20\x00\x6a\x41\x18\x6a\x20\x03\x20\x00\x6a\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x00\x41\x08\x6a\x21\x00\x20\x01\x41\x01\x6a\x21\x01\x0c\x00\x0b\x00\x0b\x20\x04\x28\x02\xa0\x01\x22\x00\x20\x05\x36\x02\x04\x20\x05\x20\x00\x36\x02\x00\x20\x05\x20\x04\x41\xa0\x01\x6a\x36\x02\x04\x20\x04\x20\x05\x36\x02\xa0\x01\x0b\x0b\xd3\x01\x01\x02\x7f\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x21\x03\x03\x40\x02\x40\x20\x03\x2d\x00\x05\x41\x04\x71\x45\x0d\x00\x20\x00\x28\x02\x10\x28\x02\x44\x20\x03\x2f\x01\x06\x41\x18\x6c\x6a\x28\x02\x14\x22\x04\x45\x0d\x00\x20\x04\x28\x02\x10\x45\x0d\x00\x20\x00\x20\x03\xad\x42\x80\x80\x80\x80\x70\x84\x10\xc0\x01\x22\x01\x20\x02\x20\x04\x28\x02\x10\x11\x13\x00\x21\x03\x20\x00\x20\x01\x10\xcd\x01\x20\x03\x0f\x0b\x20\x03\xad\x42\x80\x80\x80\x80\x70\x84\x10\xc0\x01\x21\x01\x20\x00\x41\x00\x20\x03\x20\x02\x10\xea\x03\x21\x04\x20\x00\x20\x01\x10\xcd\x01\x20\x04\x0d\x02\x02\x40\x20\x03\x2f\x01\x06\x41\x6b\x6a\x41\xff\xff\x03\x71\x41\x0a\x4b\x0d\x00\x20\x00\x20\x02\x10\xf7\x02\x22\x04\x45\x0d\x00\x20\x04\x41\x1f\x75\x0f\x0b\x20\x03\x28\x02\x10\x28\x02\x2c\x22\x03\x0d\x00\x0b\x0b\x41\x00\x21\x04\x0b\x20\x04\x0b\x8e\x02\x01\x06\x7f\x20\x00\x28\x02\xc8\x01\x22\x04\x28\x02\x10\x22\x05\x20\x05\x28\x02\x18\x20\x01\x71\x41\x7f\x73\x41\x02\x74\x6a\x28\x02\x00\x21\x06\x02\x40\x03\x40\x20\x06\x45\x0d\x01\x20\x05\x20\x06\x41\x7f\x6a\x22\x07\x41\x03\x74\x6a\x22\x06\x41\x30\x6a\x21\x08\x02\x40\x20\x06\x41\x34\x6a\x22\x09\x28\x02\x00\x20\x01\x46\x0d\x00\x20\x08\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x21\x06\x0c\x01\x0b\x0b\x20\x04\x28\x02\x14\x20\x07\x41\x03\x74\x6a\x21\x06\x02\x40\x20\x03\x41\x01\x46\x0d\x00\x02\x40\x20\x06\x35\x02\x04\x42\x20\x86\x42\x80\x80\x80\x80\xc0\x00\x52\x0d\x00\x20\x00\x20\x02\x10\xcd\x01\x20\x00\x20\x09\x28\x02\x00\x10\xf4\x02\x41\x7f\x0f\x0b\x20\x08\x41\x03\x6a\x2d\x00\x00\x41\x08\x71\x0d\x00\x20\x00\x20\x02\x10\xcd\x01\x20\x00\x20\x01\x41\xa6\xc5\x01\x10\xf1\x02\x41\x7f\x0f\x0b\x20\x00\x20\x06\x20\x02\x10\x98\x03\x41\x00\x0f\x0b\x02\x40\x02\x40\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x22\x05\x45\x0d\x00\x41\x80\x80\x06\x21\x06\x20\x05\x2d\x00\x28\x41\x01\x71\x0d\x01\x0b\x41\x80\x80\x02\x21\x06\x0b\x20\x00\x20\x00\x29\x03\xc0\x01\x20\x01\x20\x02\x20\x06\x10\x9f\x03\x0b\x19\x01\x01\x7e\x20\x01\x29\x03\x00\x21\x03\x20\x01\x20\x02\x37\x03\x00\x20\x00\x20\x03\x10\xcd\x01\x0b\x52\x00\x02\x40\x02\x40\x02\x40\x20\x03\x45\x0d\x00\x20\x01\x28\x02\x24\x20\x02\x41\x03\x74\x6a\x41\x04\x6a\x21\x01\x0c\x01\x0b\x02\x40\x20\x01\x28\x02\x20\x22\x03\x0d\x00\x41\x00\x21\x01\x0c\x02\x0b\x20\x03\x20\x01\x2f\x01\x28\x20\x02\x6a\x41\x04\x74\x6a\x21\x01\x0b\x20\x01\x28\x02\x00\x21\x01\x0b\x20\x00\x20\x01\x10\xf4\x02\x0b\x81\x02\x03\x02\x7f\x01\x7e\x01\x7c\x02\x40\x02\x40\x20\x01\x42\x20\x88\xa7\x41\x0b\x6a\x22\x02\x41\x11\x4b\x0d\x00\x41\x7f\x21\x03\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x0e\x12\x04\x03\x03\x06\x02\x06\x06\x06\x06\x06\x05\x00\x01\x01\x01\x06\x06\x07\x04\x0b\x20\x01\xa7\x41\x00\x47\x0f\x0b\x20\x01\xa7\x0f\x0b\x20\x01\xa7\x29\x02\x04\x21\x04\x20\x00\x20\x01\x10\xcd\x01\x20\x04\x42\xff\xff\xff\xff\x07\x83\x42\x00\x52\x0f\x0b\x20\x01\xa7\x41\x0c\x6a\x28\x02\x00\x21\x02\x20\x00\x20\x01\x10\xcd\x01\x20\x02\x41\x81\x80\x80\x80\x78\x6a\x41\x01\x4b\x0f\x0b\x20\x01\xa7\x41\x0c\x6a\x28\x02\x00\x21\x02\x20\x00\x20\x01\x10\xcd\x01\x20\x02\x41\x81\x80\x80\x80\x78\x6a\x41\x01\x4b\x0f\x0b\x20\x01\xa7\x2d\x00\x05\x21\x02\x20\x00\x20\x01\x10\xcd\x01\x20\x02\x41\x07\x76\x41\x01\x73\x0f\x0b\x02\x40\x20\x02\x41\x12\x49\x0d\x00\x20\x01\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\x22\x05\x44\x00\x00\x00\x00\x00\x00\x00\x00\x62\x20\x05\x20\x05\x61\x71\x0f\x0b\x20\x00\x20\x01\x10\xcd\x01\x41\x01\x21\x03\x0b\x20\x03\x0b\x16\x01\x01\x7e\x20\x00\x20\x01\x10\xfe\x02\x21\x02\x20\x00\x20\x01\x10\xcd\x01\x20\x02\x0b\x16\x01\x01\x7e\x20\x00\x20\x01\x10\x92\x03\x21\x02\x20\x00\x20\x01\x10\xcd\x01\x20\x02\x0b\xcc\x0b\x01\x12\x7f\x23\x00\x41\x30\x6b\x22\x05\x24\x00\x41\x00\x21\x06\x20\x01\x41\x00\x36\x02\x00\x20\x02\x41\x00\x36\x02\x00\x20\x05\x41\x00\x36\x02\x2c\x20\x05\x41\x00\x36\x02\x28\x20\x04\x41\x30\x71\x21\x07\x20\x04\x41\x10\x71\x21\x08\x20\x03\x28\x02\x10\x21\x09\x41\x00\x21\x0a\x41\x00\x21\x0b\x41\x00\x21\x0c\x41\x00\x21\x0d\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x03\x40\x20\x0d\x20\x09\x28\x02\x20\x4e\x0d\x01\x02\x40\x20\x09\x20\x06\x6a\x22\x0e\x41\x34\x6a\x28\x02\x00\x22\x0f\x45\x0d\x00\x20\x0e\x41\x30\x6a\x22\x10\x28\x02\x00\x21\x11\x20\x00\x20\x0f\x10\xa8\x04\x21\x12\x02\x40\x20\x08\x45\x0d\x00\x20\x11\x41\x80\x80\x80\x80\x01\x71\x45\x0d\x01\x0b\x20\x04\x20\x12\x76\x41\x01\x71\x45\x0d\x00\x02\x40\x20\x07\x45\x0d\x00\x20\x10\x28\x02\x00\x41\x80\x80\x80\x80\x7c\x71\x41\x80\x80\x80\x80\x78\x47\x0d\x00\x20\x03\x28\x02\x14\x20\x06\x6a\x28\x02\x00\x28\x02\x10\x35\x02\x04\x42\x20\x86\x42\x80\x80\x80\x80\xc0\x00\x52\x0d\x00\x20\x00\x20\x0e\x41\x34\x6a\x28\x02\x00\x10\xf4\x02\x41\x7f\x21\x0d\x0c\x04\x0b\x02\x40\x20\x00\x20\x05\x41\x24\x6a\x20\x0f\x10\x8e\x04\x45\x0d\x00\x20\x0a\x41\x01\x6a\x21\x0a\x0c\x01\x0b\x02\x40\x20\x12\x0d\x00\x20\x0b\x41\x01\x6a\x21\x0b\x0c\x01\x0b\x20\x0c\x41\x01\x6a\x21\x0c\x0b\x20\x06\x41\x08\x6a\x21\x06\x20\x0d\x41\x01\x6a\x21\x0d\x0c\x00\x0b\x00\x0b\x41\x00\x21\x0d\x02\x40\x20\x03\x2d\x00\x05\x22\x06\x41\x04\x71\x45\x0d\x00\x02\x40\x20\x06\x41\x08\x71\x45\x0d\x00\x20\x04\x41\x01\x71\x45\x0d\x01\x20\x03\x41\x28\x6a\x28\x02\x00\x20\x0a\x6a\x21\x0a\x0c\x01\x0b\x02\x40\x20\x03\x2f\x01\x06\x22\x06\x41\x05\x47\x0d\x00\x20\x04\x41\x01\x71\x45\x0d\x01\x20\x03\xad\x42\x80\x80\x80\x80\x70\x84\x10\xa9\x04\x20\x0a\x6a\x21\x0a\x0c\x01\x0b\x20\x00\x28\x02\x10\x28\x02\x44\x20\x06\x41\x18\x6c\x6a\x28\x02\x14\x22\x06\x45\x0d\x00\x20\x06\x28\x02\x04\x22\x06\x45\x0d\x00\x41\x7f\x21\x0d\x20\x00\x20\x05\x41\x2c\x6a\x20\x05\x41\x28\x6a\x20\x03\xad\x42\x80\x80\x80\x80\x70\x84\x20\x06\x11\x22\x00\x0d\x01\x41\x04\x21\x06\x20\x04\x41\x04\x76\x41\x7f\x73\x41\x01\x71\x21\x0e\x41\x00\x21\x0d\x41\x00\x21\x09\x03\x40\x20\x09\x20\x05\x28\x02\x28\x4f\x0d\x01\x02\x40\x02\x40\x20\x04\x20\x00\x20\x05\x28\x02\x2c\x20\x06\x6a\x28\x02\x00\x22\x0f\x10\xa8\x04\x76\x41\x01\x71\x45\x0d\x00\x02\x40\x02\x40\x20\x07\x0d\x00\x41\x00\x21\x0f\x0c\x01\x0b\x20\x00\x20\x05\x20\x03\x20\x0f\x10\xea\x03\x22\x0f\x41\x00\x48\x0d\x02\x02\x40\x02\x40\x20\x0f\x0d\x00\x41\x00\x21\x0f\x0c\x01\x0b\x20\x05\x28\x02\x00\x21\x0f\x20\x00\x20\x05\x10\x81\x04\x20\x0f\x41\x02\x76\x41\x01\x71\x21\x0f\x0b\x20\x05\x28\x02\x2c\x20\x06\x6a\x41\x7c\x6a\x20\x0f\x36\x02\x00\x0b\x20\x0e\x20\x0f\x72\x20\x0d\x6a\x21\x0d\x0b\x20\x06\x41\x08\x6a\x21\x06\x20\x09\x41\x01\x6a\x21\x09\x0c\x01\x0b\x0b\x20\x00\x20\x05\x28\x02\x2c\x20\x05\x28\x02\x28\x10\x9e\x03\x41\x7f\x21\x0d\x0c\x01\x0b\x02\x40\x20\x00\x20\x0a\x20\x0b\x6a\x22\x13\x20\x0c\x6a\x20\x0d\x6a\x22\x14\x41\x01\x20\x14\x41\x01\x4a\x1b\x41\x03\x74\x10\xc0\x02\x22\x15\x0d\x00\x20\x00\x20\x05\x28\x02\x2c\x20\x05\x28\x02\x28\x10\x9e\x03\x41\x7f\x21\x0d\x0c\x01\x0b\x20\x03\x28\x02\x10\x22\x0e\x41\x30\x6a\x21\x0d\x41\x00\x21\x12\x20\x0a\x21\x07\x20\x13\x21\x10\x41\x01\x21\x16\x41\x00\x21\x06\x02\x40\x03\x40\x20\x06\x20\x0e\x28\x02\x20\x4e\x0d\x01\x02\x40\x20\x0d\x41\x04\x6a\x28\x02\x00\x22\x09\x45\x0d\x00\x20\x0d\x28\x02\x00\x21\x0f\x20\x00\x20\x09\x10\xa8\x04\x21\x11\x20\x0f\x41\x80\x80\x80\x80\x01\x71\x21\x0f\x02\x40\x20\x08\x45\x0d\x00\x20\x0f\x45\x0d\x01\x0b\x20\x04\x20\x11\x76\x41\x01\x71\x45\x0d\x00\x20\x0f\x41\x1c\x76\x21\x0f\x02\x40\x02\x40\x20\x00\x20\x05\x41\x24\x6a\x20\x09\x10\x8e\x04\x45\x0d\x00\x20\x12\x41\x01\x6a\x21\x11\x41\x00\x21\x16\x20\x07\x21\x0c\x20\x10\x21\x0b\x0c\x01\x0b\x02\x40\x20\x11\x0d\x00\x20\x07\x41\x01\x6a\x21\x0c\x20\x12\x21\x11\x20\x10\x21\x0b\x20\x07\x21\x12\x0c\x01\x0b\x20\x10\x41\x01\x6a\x21\x0b\x20\x12\x21\x11\x20\x07\x21\x0c\x20\x10\x21\x12\x0b\x20\x00\x20\x09\x10\xd9\x03\x21\x09\x20\x15\x20\x12\x41\x03\x74\x6a\x22\x12\x20\x0f\x36\x02\x00\x20\x12\x20\x09\x36\x02\x04\x20\x11\x21\x12\x20\x0c\x21\x07\x20\x0b\x21\x10\x0b\x20\x0d\x41\x08\x6a\x21\x0d\x20\x06\x41\x01\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x02\x40\x20\x03\x2d\x00\x05\x22\x0d\x41\x04\x71\x45\x0d\x00\x02\x40\x02\x40\x20\x0d\x41\x08\x71\x45\x0d\x00\x20\x04\x41\x01\x71\x45\x0d\x02\x20\x03\x41\x28\x6a\x28\x02\x00\x21\x09\x0c\x01\x0b\x02\x40\x20\x03\x2f\x01\x06\x41\x05\x46\x0d\x00\x41\x00\x21\x0d\x41\x04\x21\x06\x02\x40\x03\x40\x20\x0d\x20\x05\x28\x02\x28\x4f\x0d\x01\x20\x05\x28\x02\x2c\x20\x06\x6a\x22\x0f\x41\x7c\x6a\x28\x02\x00\x21\x09\x20\x00\x20\x0f\x28\x02\x00\x22\x0f\x10\xa8\x04\x21\x0e\x02\x40\x02\x40\x02\x40\x20\x08\x45\x0d\x00\x20\x09\x45\x0d\x01\x0b\x20\x04\x20\x0e\x76\x41\x01\x71\x45\x0d\x00\x20\x15\x20\x10\x41\x03\x74\x6a\x22\x0e\x20\x09\x36\x02\x00\x20\x0e\x20\x0f\x36\x02\x04\x20\x10\x41\x01\x6a\x21\x10\x0c\x01\x0b\x20\x00\x20\x0f\x10\xe4\x02\x0b\x20\x06\x41\x08\x6a\x21\x06\x20\x0d\x41\x01\x6a\x21\x0d\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x10\x22\x0d\x41\x10\x6a\x20\x05\x28\x02\x2c\x20\x0d\x28\x02\x04\x11\x00\x00\x0c\x02\x0b\x20\x04\x41\x01\x71\x45\x0d\x01\x20\x03\xad\x42\x80\x80\x80\x80\x70\x84\x10\xa9\x04\x21\x09\x0b\x20\x15\x20\x12\x41\x03\x74\x6a\x21\x06\x41\x00\x21\x0d\x02\x40\x03\x40\x20\x0d\x20\x09\x4e\x0d\x01\x20\x06\x41\x01\x36\x02\x00\x20\x06\x41\x04\x6a\x20\x0d\x41\x80\x80\x80\x80\x78\x72\x36\x02\x00\x20\x06\x41\x08\x6a\x21\x06\x20\x0d\x41\x01\x6a\x21\x0d\x0c\x00\x0b\x00\x0b\x20\x12\x20\x0d\x6a\x21\x12\x0b\x20\x12\x20\x0a\x47\x0d\x01\x20\x07\x20\x13\x47\x0d\x02\x20\x10\x20\x14\x47\x0d\x03\x02\x40\x20\x0a\x45\x0d\x00\x20\x16\x0d\x00\x20\x15\x20\x0a\x41\x08\x41\xf3\x00\x20\x00\x10\xab\x04\x0b\x20\x02\x20\x14\x36\x02\x00\x20\x01\x20\x15\x36\x02\x00\x41\x00\x21\x0d\x0b\x20\x05\x41\x30\x6a\x24\x00\x20\x0d\x0f\x0b\x41\xd4\xda\x01\x41\xae\xb7\x01\x41\xe0\x3b\x41\xf0\xda\x01\x10\x4a\x00\x0b\x41\x8f\xdb\x01\x41\xae\xb7\x01\x41\xe1\x3b\x41\xf0\xda\x01\x10\x4a\x00\x0b\x41\xbc\xdb\x01\x41\xae\xb7\x01\x41\xe2\x3b\x41\xf0\xda\x01\x10\x4a\x00\x0b\x4d\x01\x01\x7f\x02\x40\x20\x01\x45\x0d\x00\x20\x01\x41\x04\x6a\x21\x03\x02\x40\x03\x40\x20\x02\x45\x0d\x01\x20\x00\x20\x03\x28\x02\x00\x10\xe4\x02\x20\x02\x41\x7f\x6a\x21\x02\x20\x03\x41\x08\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x10\x22\x02\x41\x10\x6a\x20\x01\x20\x02\x28\x02\x04\x11\x00\x00\x0b\x0b\xdc\x0b\x02\x07\x7f\x01\x7e\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x42\x20\x88\xa7\x41\x01\x6a\x22\x06\x41\x04\x4b\x0d\x00\x02\x40\x02\x40\x20\x06\x0e\x05\x03\x02\x02\x00\x01\x03\x0b\x20\x00\x20\x03\x10\xcd\x01\x20\x00\x20\x02\x41\x89\xe0\x01\x10\xf1\x02\x41\x7f\x21\x07\x0c\x08\x0b\x20\x00\x20\x03\x10\xcd\x01\x20\x00\x20\x02\x41\xaa\xe0\x01\x10\xf1\x02\x41\x7f\x21\x07\x0c\x07\x0b\x20\x00\x20\x01\x10\xf3\x02\xa7\x21\x06\x41\x00\x21\x08\x41\x00\x21\x07\x0c\x01\x0b\x20\x01\xa7\x21\x06\x02\x40\x03\x40\x20\x06\x28\x02\x10\x22\x09\x20\x09\x28\x02\x18\x20\x02\x71\x41\x7f\x73\x41\x02\x74\x6a\x28\x02\x00\x21\x07\x03\x40\x02\x40\x20\x07\x0d\x00\x20\x06\x21\x08\x41\x01\x21\x07\x0c\x04\x0b\x20\x09\x20\x07\x41\x7f\x6a\x41\x03\x74\x22\x0a\x6a\x22\x0b\x41\x30\x6a\x21\x07\x02\x40\x20\x0b\x41\x34\x6a\x28\x02\x00\x20\x02\x46\x0d\x00\x20\x07\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x21\x07\x0c\x01\x0b\x0b\x20\x06\x28\x02\x14\x20\x0a\x6a\x21\x09\x02\x40\x20\x07\x28\x02\x00\x22\x0b\x41\x80\x80\x80\xc0\x7e\x71\x41\x80\x80\x80\xc0\x00\x47\x0d\x00\x20\x00\x20\x09\x20\x03\x10\x98\x03\x0c\x04\x0b\x02\x40\x02\x40\x20\x0b\x41\x80\x80\x80\x80\x02\x71\x45\x0d\x00\x20\x06\x2f\x01\x06\x41\x02\x47\x0d\x01\x20\x02\x41\x30\x47\x0d\x03\x20\x00\x20\x06\x20\x03\x20\x04\x10\xd7\x03\x21\x07\x0c\x09\x0b\x02\x40\x20\x0b\x41\x1a\x76\x41\x30\x71\x22\x0b\x41\x30\x46\x0d\x00\x02\x40\x20\x0b\x41\x20\x46\x0d\x00\x20\x0b\x41\x10\x47\x0d\x07\x20\x00\x20\x09\x28\x02\x04\x20\x01\x20\x03\x20\x04\x10\xec\x03\x21\x07\x0c\x0a\x0b\x20\x06\x2f\x01\x06\x41\x0b\x46\x0d\x06\x20\x00\x20\x09\x28\x02\x00\x28\x02\x10\x20\x03\x10\x98\x03\x0c\x05\x0b\x20\x00\x20\x06\x20\x02\x20\x09\x20\x07\x10\xf5\x02\x45\x0d\x01\x0c\x07\x0b\x0b\x41\xd0\xe0\x01\x41\xae\xb7\x01\x41\xa5\xc2\x00\x41\xee\xe0\x01\x10\x4a\x00\x0b\x41\x85\xe1\x01\x41\xae\xb7\x01\x41\xa6\xc2\x00\x41\xee\xe0\x01\x10\x4a\x00\x0b\x03\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x07\x0e\x02\x00\x01\x01\x0b\x20\x06\x45\x0d\x01\x02\x40\x03\x40\x20\x06\x28\x02\x10\x22\x09\x20\x09\x28\x02\x18\x20\x02\x71\x41\x7f\x73\x41\x02\x74\x6a\x28\x02\x00\x21\x07\x03\x40\x20\x07\x45\x0d\x02\x20\x09\x20\x07\x41\x7f\x6a\x41\x03\x74\x22\x0a\x6a\x22\x07\x41\x30\x6a\x21\x0b\x02\x40\x20\x07\x41\x34\x6a\x28\x02\x00\x20\x02\x46\x0d\x00\x20\x0b\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x21\x07\x0c\x01\x0b\x0b\x20\x06\x28\x02\x14\x20\x0a\x6a\x21\x09\x02\x40\x02\x40\x20\x0b\x28\x02\x00\x22\x0a\x41\x1a\x76\x41\x30\x71\x22\x07\x41\x30\x46\x0d\x00\x20\x07\x41\x10\x47\x0d\x01\x20\x00\x20\x09\x28\x02\x04\x20\x01\x20\x03\x20\x04\x10\xec\x03\x21\x07\x0c\x0c\x0b\x41\x7f\x21\x07\x20\x00\x20\x06\x20\x02\x20\x09\x20\x0b\x10\xf5\x02\x45\x0d\x01\x0c\x0b\x0b\x0b\x20\x0a\x41\x80\x80\x80\xc0\x00\x71\x45\x0d\x06\x0b\x41\x01\x21\x07\x0c\x03\x0b\x02\x40\x02\x40\x20\x06\x2d\x00\x05\x22\x07\x41\x04\x71\x45\x0d\x00\x02\x40\x20\x07\x41\x08\x71\x45\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x02\x41\x7f\x4a\x0d\x00\x20\x02\x41\xff\xff\xff\xff\x07\x71\x22\x07\x20\x06\x41\x28\x6a\x28\x02\x00\x4f\x0d\x01\x20\x08\x20\x06\x47\x0d\x06\x20\x00\x20\x01\x20\x07\xad\x20\x03\x20\x04\x10\xba\x03\x21\x07\x0c\x0d\x0b\x20\x06\x2f\x01\x06\x41\x6b\x6a\x41\xff\xff\x03\x71\x41\x0a\x4b\x0d\x03\x20\x00\x20\x02\x10\xf7\x02\x22\x09\x45\x0d\x03\x41\x7f\x21\x07\x20\x09\x41\x7f\x4a\x0d\x01\x0c\x0a\x0b\x20\x06\x2f\x01\x06\x41\x6b\x6a\x41\xff\xff\x03\x71\x41\x0b\x4f\x0d\x02\x0b\x20\x00\x20\x00\x20\x03\x10\xed\x03\x22\x01\x10\xcd\x01\x41\x7f\x21\x07\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x0a\x20\x00\x20\x04\x41\xb9\xde\x01\x41\x00\x10\xd5\x03\x21\x07\x0c\x0a\x0b\x20\x00\x28\x02\x10\x28\x02\x44\x20\x06\x2f\x01\x06\x41\x18\x6c\x6a\x28\x02\x14\x22\x07\x45\x0d\x00\x02\x40\x20\x07\x28\x02\x18\x45\x0d\x00\x20\x00\x20\x06\xad\x42\x80\x80\x80\x80\x70\x84\x10\xc0\x01\x22\x0c\x20\x02\x20\x03\x20\x01\x20\x04\x20\x07\x28\x02\x18\x11\x30\x00\x21\x07\x20\x00\x20\x0c\x10\xcd\x01\x0c\x08\x0b\x20\x07\x28\x02\x00\x45\x0d\x00\x20\x00\x20\x05\x20\x06\xad\x42\x80\x80\x80\x80\x70\x84\x10\xc0\x01\x22\x0c\x20\x02\x20\x07\x28\x02\x00\x11\x17\x00\x21\x07\x20\x00\x20\x0c\x10\xcd\x01\x20\x07\x41\x7f\x4c\x0d\x07\x20\x07\x0d\x01\x0b\x20\x06\x28\x02\x10\x28\x02\x2c\x21\x06\x0c\x02\x0b\x02\x40\x20\x05\x2d\x00\x00\x41\x10\x71\x45\x0d\x00\x20\x00\x41\x00\x20\x05\x29\x03\x18\x22\x0c\xa7\x20\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x1b\x20\x01\x20\x03\x20\x04\x10\xec\x03\x21\x07\x20\x00\x20\x05\x29\x03\x10\x10\xcd\x01\x20\x00\x20\x05\x29\x03\x18\x10\xcd\x01\x0c\x08\x0b\x20\x00\x20\x05\x29\x03\x08\x10\xcd\x01\x20\x05\x2d\x00\x00\x41\x02\x71\x45\x0d\x04\x20\x08\x20\x06\x47\x0d\x00\x20\x00\x20\x01\x20\x02\x20\x03\x42\x80\x80\x80\x80\x30\x42\x80\x80\x80\x80\x30\x41\x80\xc0\x00\x10\xcc\x01\x21\x07\x0c\x05\x0b\x02\x40\x20\x04\x41\x80\x80\x04\x71\x45\x0d\x00\x20\x00\x20\x03\x10\xcd\x01\x20\x00\x20\x02\x10\xf8\x02\x41\x7f\x21\x07\x0c\x07\x0b\x02\x40\x20\x08\x0d\x00\x20\x00\x20\x03\x10\xcd\x01\x20\x00\x20\x04\x41\x9c\xe1\x01\x41\x00\x10\xd5\x03\x21\x07\x0c\x07\x0b\x02\x40\x20\x08\x2d\x00\x05\x22\x06\x41\x01\x71\x0d\x00\x20\x00\x20\x03\x10\xcd\x01\x20\x00\x20\x04\x41\xad\xdd\x01\x41\x00\x10\xd5\x03\x21\x07\x0c\x07\x0b\x02\x40\x20\x06\x41\x04\x71\x45\x0d\x00\x02\x40\x20\x02\x41\x7f\x4a\x0d\x00\x20\x06\x41\x08\x71\x45\x0d\x00\x20\x08\x2f\x01\x06\x41\xff\xff\x03\x71\x41\x02\x47\x0d\x00\x20\x02\x41\xff\xff\xff\xff\x07\x71\x20\x08\x41\x28\x6a\x28\x02\x00\x47\x0d\x00\x20\x00\x20\x08\x20\x03\x20\x04\x10\xee\x03\x21\x07\x0c\x08\x0b\x20\x00\x20\x08\x20\x02\x20\x03\x42\x80\x80\x80\x80\x30\x42\x80\x80\x80\x80\x30\x20\x04\x41\x87\xce\x00\x72\x10\xd6\x03\x21\x07\x0c\x05\x0b\x20\x00\x20\x08\x20\x02\x41\x07\x10\xff\x02\x22\x06\x45\x0d\x05\x20\x06\x20\x03\x37\x03\x00\x0c\x02\x0b\x41\x00\x21\x07\x0c\x00\x0b\x00\x0b\x41\x01\x21\x07\x0c\x03\x0b\x20\x00\x20\x03\x10\xcd\x01\x20\x00\x20\x04\x20\x02\x10\xef\x03\x21\x07\x0c\x02\x0b\x20\x00\x20\x03\x10\xcd\x01\x0c\x01\x0b\x20\x00\x20\x03\x10\xcd\x01\x41\x7f\x21\x07\x0b\x20\x05\x41\x20\x6a\x24\x00\x20\x07\x0b\xa1\x01\x01\x02\x7f\x02\x40\x02\x40\x41\x07\x20\x01\x42\x20\x88\xa7\x22\x02\x20\x02\x41\x0b\x6a\x41\x11\x4b\x1b\x41\x0b\x6a\x22\x02\x41\x12\x4b\x0d\x00\x41\x8b\x01\x21\x03\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x0e\x13\x01\x0b\x00\x09\x04\x0a\x0a\x0a\x0a\x0a\x05\x02\x03\x08\x06\x0a\x0a\x0a\x02\x01\x0b\x41\x8c\x01\x0f\x0b\x41\x8d\x01\x0f\x0b\x41\xc6\x00\x0f\x0b\x41\xc7\x00\x0f\x0b\x41\xc8\x00\x0f\x0b\x20\x01\xa7\x2c\x00\x05\x41\x00\x4e\x0d\x01\x0b\x41\xc5\x00\x0f\x0b\x41\x1b\x21\x03\x20\x00\x20\x01\x10\xf0\x02\x0d\x03\x0b\x41\xc9\x00\x0f\x0b\x41\xca\x00\x0f\x0b\x41\xcc\x00\x21\x03\x0b\x20\x03\x0b\x80\x01\x01\x01\x7f\x41\x7f\x21\x04\x02\x40\x20\x00\x20\x01\x10\xfe\x02\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x10\x8d\x04\x21\x04\x20\x00\x20\x01\x10\xcd\x01\x20\x04\x0d\x00\x02\x40\x20\x03\x41\x80\x80\x01\x71\x0d\x00\x41\x00\x21\x04\x20\x03\x41\x80\x80\x02\x71\x45\x0d\x01\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x22\x02\x45\x0d\x01\x20\x02\x2d\x00\x28\x41\x01\x71\x45\x0d\x01\x0b\x20\x00\x41\xc0\xd1\x01\x41\x00\x10\xb2\x02\x41\x7f\x21\x04\x0b\x20\x04\x0b\x0b\x00\x20\x00\x20\x01\x41\x01\x10\xe9\x02\x0b\x8f\x01\x02\x01\x7f\x01\x7e\x02\x40\x02\x40\x20\x01\x42\x20\x88\xa7\x22\x02\x41\x78\x46\x0d\x00\x20\x02\x0d\x01\x20\x01\xa7\x22\x02\x41\x00\x48\x0d\x01\x20\x02\x41\x80\x80\x80\x80\x78\x72\x0f\x0b\x20\x00\x20\x00\x28\x02\x10\x20\x01\xa7\x10\xdd\x03\x10\xd9\x03\x0f\x0b\x02\x40\x20\x00\x20\x01\x10\xa2\x03\x22\x03\x42\x80\x80\x80\x80\x70\x83\x22\x01\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x41\x00\x0f\x0b\x02\x40\x20\x01\x42\x80\x80\x80\x80\x80\x7f\x52\x0d\x00\x20\x00\x41\x10\x6a\x28\x02\x00\x20\x03\x10\x88\x03\x0f\x0b\x20\x00\x41\x10\x6a\x28\x02\x00\x20\x03\xa7\x10\xf1\x03\x0b\xb1\x01\x02\x02\x7f\x02\x7e\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x20\x03\x20\x01\x37\x03\x08\x02\x40\x02\x40\x02\x40\x20\x02\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x02\x40\x20\x00\x20\x02\x41\xd9\x01\x20\x02\x41\x00\x10\xb4\x01\x22\x05\x42\x80\x80\x80\x80\x70\x83\x22\x06\x42\x80\x80\x80\x80\x20\x51\x0d\x00\x20\x06\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x41\x7f\x21\x04\x20\x06\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x00\x20\x00\x20\x05\x20\x02\x41\x01\x20\x03\x41\x08\x6a\x10\xef\x02\x10\x9a\x03\x21\x04\x0c\x03\x0b\x20\x00\x20\x02\x10\xf0\x02\x0d\x01\x0b\x20\x00\x41\xd9\xd2\x01\x41\x00\x10\xb2\x02\x41\x7f\x21\x04\x0c\x01\x0b\x20\x00\x20\x01\x20\x02\x10\x8c\x04\x21\x04\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x04\x0b\x2b\x01\x01\x7f\x20\x01\x41\x70\x6a\x22\x03\x20\x00\x20\x03\x29\x03\x00\x20\x01\x41\x78\x6a\x29\x03\x00\x10\x8b\x04\x20\x02\x47\xad\x42\x80\x80\x80\x80\x10\x84\x37\x03\x00\x0b\xe9\x0a\x03\x08\x7f\x02\x7e\x02\x7c\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x41\xaa\x01\x41\xa9\x01\x20\x02\x1b\x21\x04\x20\x01\x41\x78\x6a\x22\x05\x29\x03\x00\x21\x0b\x20\x01\x41\x70\x6a\x22\x06\x29\x03\x00\x21\x0c\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x03\x40\x41\x07\x20\x0b\x42\x20\x88\xa7\x22\x01\x20\x01\x41\x0b\x6a\x41\x11\x4b\x1b\x22\x07\x41\x79\x46\x21\x08\x02\x40\x03\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x41\x07\x20\x0c\x42\x20\x88\xa7\x22\x01\x20\x01\x41\x0b\x6a\x41\x11\x4b\x1b\x22\x01\x41\x0b\x6a\x22\x09\x41\x12\x4b\x0d\x00\x41\x01\x20\x09\x74\x41\x87\x90\x10\x71\x45\x0d\x00\x20\x07\x41\x0b\x6a\x22\x09\x41\x12\x4b\x0d\x00\x41\x01\x20\x09\x74\x41\x87\x90\x10\x71\x45\x0d\x00\x02\x40\x20\x01\x20\x07\x72\x0d\x00\x20\x0c\xa7\x20\x0b\xa7\x46\x21\x09\x0c\x12\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x41\x07\x47\x0d\x00\x02\x40\x20\x07\x45\x0d\x00\x20\x07\x41\x07\x47\x0d\x04\x0b\x20\x0c\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\x21\x0d\x20\x07\x41\x07\x46\x0d\x01\x20\x0b\xa7\xb7\x21\x0e\x0c\x02\x0b\x20\x07\x41\x07\x47\x0d\x02\x20\x01\x0d\x02\x20\x0c\xa7\xb7\x21\x0d\x0b\x20\x0b\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\x21\x0e\x0b\x20\x0d\x20\x0e\x61\x21\x09\x0c\x12\x0b\x02\x40\x02\x40\x20\x07\x41\x75\x46\x0d\x00\x20\x01\x41\x75\x47\x0d\x01\x0b\x20\x00\x41\xa9\x01\x20\x0c\x20\x0b\x20\x00\x28\x02\x10\x41\xdc\x02\x6a\x28\x02\x00\x11\x21\x00\x22\x09\x41\x00\x4e\x0d\x12\x0c\x13\x0b\x20\x00\x28\x02\x10\x21\x09\x02\x40\x20\x07\x41\x77\x46\x0d\x00\x20\x01\x41\x77\x47\x0d\x02\x0b\x20\x00\x41\xa9\x01\x20\x0c\x20\x0b\x20\x09\x41\xc0\x02\x6a\x28\x02\x00\x11\x21\x00\x22\x09\x41\x00\x4e\x0d\x11\x0c\x12\x0b\x02\x40\x20\x01\x20\x07\x47\x0d\x00\x02\x40\x20\x07\x41\x7f\x47\x0d\x00\x20\x00\x20\x03\x41\x08\x6a\x20\x0c\x20\x0b\x20\x04\x41\x00\x41\x02\x10\x83\x04\x22\x01\x45\x0d\x00\x20\x00\x20\x0c\x10\xcd\x01\x20\x00\x20\x0b\x10\xcd\x01\x20\x01\x41\x00\x48\x0d\x13\x20\x06\x20\x03\x29\x03\x08\x37\x03\x00\x41\x00\x21\x01\x0c\x14\x0b\x20\x00\x20\x0c\x20\x0b\x41\x00\x10\xe0\x03\x21\x09\x0c\x11\x0b\x41\x01\x21\x09\x20\x07\x41\x03\x46\x20\x01\x41\x02\x46\x71\x0d\x10\x20\x07\x41\x02\x46\x20\x01\x41\x03\x46\x71\x0d\x10\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x41\x79\x47\x0d\x00\x41\x79\x21\x0a\x02\x40\x20\x07\x41\x0b\x6a\x22\x09\x41\x0c\x4d\x0d\x00\x20\x07\x41\x07\x47\x0d\x04\x0c\x0f\x0b\x41\x79\x21\x01\x20\x09\x0e\x0d\x0e\x0e\x0e\x03\x09\x03\x03\x03\x03\x03\x03\x0e\x01\x0e\x0b\x02\x40\x20\x07\x41\x79\x47\x0d\x00\x20\x01\x41\x01\x6a\x22\x09\x41\x08\x4d\x0d\x05\x20\x01\x41\x0b\x6a\x41\x03\x4f\x0d\x06\x0c\x0c\x0b\x20\x01\x41\x01\x46\x0d\x09\x20\x07\x41\x01\x47\x0d\x01\x0b\x20\x0b\x42\xff\xff\xff\xff\x0f\x83\x21\x0b\x0c\x0b\x0b\x20\x01\x21\x0a\x20\x01\x41\x7f\x47\x0d\x00\x41\x7f\x21\x01\x20\x07\x41\x0b\x6a\x22\x09\x41\x12\x4b\x0d\x05\x20\x07\x21\x0a\x41\x01\x20\x09\x74\x41\x9f\x90\x10\x71\x0d\x04\x0c\x06\x0b\x20\x0a\x21\x01\x20\x07\x41\x7f\x47\x0d\x04\x41\x7f\x21\x0a\x20\x01\x41\x0b\x6a\x22\x07\x41\x12\x4b\x0d\x05\x41\x01\x20\x07\x74\x41\x9f\x90\x10\x71\x45\x0d\x05\x0c\x03\x0b\x20\x00\x41\xa9\x01\x20\x0c\x20\x0b\x20\x09\x41\xa4\x02\x6a\x28\x02\x00\x11\x21\x00\x22\x09\x41\x00\x4e\x0d\x0f\x0c\x10\x0b\x20\x09\x0e\x09\x01\x06\x04\x00\x00\x00\x00\x00\x06\x01\x0b\x41\x79\x21\x0a\x0c\x02\x0b\x02\x40\x20\x00\x20\x03\x41\x08\x6a\x20\x0c\x20\x0b\x20\x04\x41\x00\x41\x02\x10\x83\x04\x22\x07\x45\x0d\x00\x20\x00\x20\x0c\x10\xcd\x01\x20\x00\x20\x0b\x10\xcd\x01\x41\x00\x21\x01\x20\x07\x41\x00\x48\x0d\x0e\x20\x06\x20\x03\x29\x03\x08\x37\x03\x00\x0c\x0f\x0b\x20\x00\x20\x0c\x41\x02\x10\xed\x02\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x08\x20\x00\x20\x0b\x41\x02\x10\xed\x02\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x05\x0c\x0a\x0b\x20\x07\x21\x0a\x0b\x02\x40\x02\x40\x20\x0c\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x41\x01\x21\x09\x20\x0a\x41\x01\x72\x41\x03\x47\x0d\x00\x20\x0c\xa7\x2c\x00\x05\x41\x00\x48\x0d\x01\x0b\x41\x00\x21\x07\x02\x40\x20\x0b\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x0b\xa7\x2c\x00\x05\x41\x00\x48\x21\x07\x0b\x20\x01\x41\x01\x72\x41\x03\x46\x20\x07\x71\x21\x09\x0b\x20\x00\x20\x0c\x10\xcd\x01\x20\x00\x20\x0b\x10\xcd\x01\x0c\x0a\x0b\x20\x0c\x42\xff\xff\xff\xff\x0f\x83\x21\x0c\x0c\x00\x0b\x00\x0b\x0b\x20\x01\x41\x76\x46\x21\x07\x41\x01\x21\x08\x41\x00\x21\x01\x41\x00\x21\x09\x0c\x01\x0b\x20\x07\x41\x76\x46\x21\x01\x41\x01\x21\x09\x41\x00\x21\x07\x0b\x02\x40\x02\x40\x20\x01\x0d\x00\x20\x07\x45\x0d\x01\x0b\x02\x40\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x22\x01\x45\x0d\x00\x20\x01\x2d\x00\x28\x41\x04\x71\x0d\x01\x0b\x02\x40\x02\x40\x20\x09\x45\x0d\x00\x20\x00\x20\x0c\x10\x8a\x04\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x7e\x52\x0d\x01\x0b\x20\x08\x45\x0d\x05\x20\x00\x20\x0b\x10\x8a\x04\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x7e\x51\x0d\x05\x0b\x20\x00\x20\x0c\x10\xcd\x01\x20\x00\x20\x0b\x10\xcd\x01\x41\x00\x21\x09\x0c\x05\x0b\x20\x00\x20\x0c\x10\xac\x03\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0b\x20\x00\x20\x0b\x10\xcd\x01\x0c\x04\x0b\x20\x00\x20\x0b\x10\xac\x03\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0b\x20\x00\x20\x0c\x10\xcd\x01\x0c\x02\x0b\x20\x00\x20\x0c\x20\x0b\x10\x8b\x04\x21\x09\x0b\x20\x06\x20\x09\x20\x02\x47\xad\x42\x80\x80\x80\x80\x10\x84\x37\x03\x00\x41\x00\x21\x01\x0c\x01\x0b\x20\x05\x42\x80\x80\x80\x80\x30\x37\x03\x00\x20\x06\x42\x80\x80\x80\x80\x30\x37\x03\x00\x41\x7f\x21\x01\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x01\x0b\xa0\x08\x03\x05\x7f\x02\x7e\x02\x7c\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x41\x07\x20\x01\x41\x78\x6a\x22\x04\x29\x03\x00\x22\x08\x42\x20\x88\xa7\x22\x05\x20\x05\x41\x0b\x6a\x41\x11\x4b\x1b\x21\x05\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x41\x07\x20\x01\x41\x70\x6a\x22\x06\x29\x03\x00\x22\x09\x42\x20\x88\xa7\x22\x01\x20\x01\x41\x0b\x6a\x41\x11\x4b\x1b\x22\x01\x41\x7f\x47\x0d\x00\x20\x05\x41\x01\x72\x41\x03\x47\x0d\x01\x0b\x20\x01\x41\x01\x72\x41\x03\x46\x0d\x01\x20\x05\x41\x7f\x47\x0d\x01\x0b\x20\x00\x20\x03\x41\x08\x6a\x20\x09\x20\x08\x20\x02\x41\x00\x41\x01\x10\x83\x04\x22\x01\x45\x0d\x00\x20\x00\x20\x09\x10\xcd\x01\x20\x00\x20\x08\x10\xcd\x01\x20\x01\x41\x00\x48\x0d\x01\x20\x06\x20\x03\x29\x03\x08\x37\x03\x00\x41\x00\x21\x00\x0c\x02\x0b\x02\x40\x20\x00\x20\x09\x41\x01\x10\xed\x02\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x08\x10\xcd\x01\x0c\x01\x0b\x02\x40\x20\x00\x20\x08\x41\x01\x10\xed\x02\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x41\x07\x20\x08\x42\x20\x88\xa7\x22\x01\x20\x01\x41\x0b\x6a\x41\x11\x4b\x1b\x21\x01\x02\x40\x02\x40\x41\x07\x20\x09\x42\x20\x88\xa7\x22\x05\x20\x05\x41\x0b\x6a\x41\x11\x4b\x1b\x22\x05\x41\x79\x47\x0d\x00\x20\x01\x41\x79\x47\x0d\x00\x20\x09\xa7\x20\x08\xa7\x10\x89\x04\x21\x01\x02\x40\x02\x40\x20\x02\x41\xdd\x7e\x6a\x22\x05\x41\x02\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x05\x0e\x03\x00\x01\x02\x00\x0b\x20\x01\x41\x1f\x76\x21\x01\x0c\x03\x0b\x20\x01\x41\x01\x48\x21\x01\x0c\x02\x0b\x20\x01\x41\x00\x4a\x21\x01\x0c\x01\x0b\x20\x01\x41\x7f\x4a\x21\x01\x0b\x20\x00\x20\x09\x10\xcd\x01\x20\x00\x20\x08\x10\xcd\x01\x0c\x01\x0b\x02\x40\x02\x40\x20\x05\x41\x07\x4b\x0d\x00\x41\x01\x20\x05\x74\x41\x87\x01\x71\x45\x0d\x00\x20\x01\x41\x07\x4b\x0d\x00\x41\x01\x20\x01\x74\x41\x87\x01\x71\x0d\x01\x0b\x02\x40\x02\x40\x02\x40\x20\x05\x41\x76\x46\x20\x01\x41\x79\x46\x71\x0d\x00\x20\x05\x41\x79\x46\x20\x01\x41\x76\x46\x71\x45\x0d\x01\x0b\x02\x40\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x22\x07\x45\x0d\x00\x20\x07\x2d\x00\x28\x41\x04\x71\x0d\x01\x0b\x02\x40\x02\x40\x20\x05\x41\x79\x47\x0d\x00\x20\x00\x20\x09\x10\x8a\x04\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x7e\x52\x0d\x01\x0b\x20\x01\x41\x79\x47\x0d\x02\x20\x00\x20\x08\x10\x8a\x04\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x7e\x51\x0d\x02\x0b\x20\x00\x20\x09\x10\xcd\x01\x20\x00\x20\x08\x10\xcd\x01\x41\x00\x21\x01\x0c\x03\x0b\x02\x40\x20\x00\x20\x09\x10\xac\x03\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x08\x10\xcd\x01\x0c\x05\x0b\x20\x00\x20\x08\x10\xac\x03\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x0b\x02\x40\x02\x40\x41\x07\x20\x08\x42\x20\x88\xa7\x22\x01\x20\x01\x41\x0b\x6a\x41\x11\x4b\x1b\x22\x01\x41\x75\x46\x0d\x00\x41\x07\x20\x09\x42\x20\x88\xa7\x22\x05\x20\x05\x41\x0b\x6a\x41\x11\x4b\x1b\x22\x05\x41\x75\x47\x0d\x01\x0b\x20\x00\x20\x02\x20\x09\x20\x08\x20\x00\x28\x02\x10\x41\xdc\x02\x6a\x28\x02\x00\x11\x21\x00\x22\x01\x41\x00\x48\x0d\x04\x0c\x02\x0b\x02\x40\x02\x40\x20\x01\x41\x77\x46\x0d\x00\x20\x05\x41\x77\x47\x0d\x01\x0b\x20\x00\x20\x02\x20\x09\x20\x08\x20\x00\x28\x02\x10\x41\xc0\x02\x6a\x28\x02\x00\x11\x21\x00\x22\x01\x41\x00\x48\x0d\x04\x0c\x02\x0b\x02\x40\x20\x01\x41\x76\x46\x0d\x00\x20\x05\x41\x76\x47\x0d\x01\x0b\x20\x00\x20\x02\x20\x09\x20\x08\x20\x00\x28\x02\x10\x41\xa4\x02\x6a\x28\x02\x00\x11\x21\x00\x22\x01\x41\x00\x48\x0d\x03\x0c\x01\x0b\x20\x08\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\x20\x08\xa7\xb7\x20\x01\x41\x07\x46\x1b\x21\x0a\x20\x09\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\x20\x09\xa7\xb7\x20\x05\x41\x07\x46\x1b\x21\x0b\x02\x40\x20\x02\x41\xdd\x7e\x6a\x22\x00\x41\x02\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x00\x0e\x03\x00\x01\x02\x00\x0b\x20\x0b\x20\x0a\x63\x21\x01\x0c\x03\x0b\x20\x0b\x20\x0a\x65\x21\x01\x0c\x02\x0b\x20\x0b\x20\x0a\x64\x21\x01\x0c\x01\x0b\x20\x0b\x20\x0a\x66\x21\x01\x0b\x41\x00\x21\x00\x20\x06\x20\x01\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x37\x03\x00\x0c\x02\x0b\x20\x00\x20\x09\x10\xcd\x01\x0b\x20\x04\x42\x80\x80\x80\x80\x30\x37\x03\x00\x20\x06\x42\x80\x80\x80\x80\x30\x37\x03\x00\x41\x7f\x21\x00\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x00\x0b\xef\x04\x02\x05\x7f\x02\x7e\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x41\x07\x20\x01\x41\x78\x6a\x22\x04\x29\x03\x00\x22\x08\x42\x20\x88\xa7\x22\x05\x20\x05\x41\x0b\x6a\x41\x11\x4b\x1b\x21\x05\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x41\x07\x20\x01\x41\x70\x6a\x22\x01\x29\x03\x00\x22\x09\x42\x20\x88\xa7\x22\x06\x20\x06\x41\x0b\x6a\x41\x11\x4b\x1b\x22\x06\x41\x7f\x47\x0d\x00\x20\x05\x41\x01\x72\x41\x03\x47\x0d\x01\x0b\x20\x06\x41\x01\x72\x41\x03\x46\x0d\x01\x20\x05\x41\x7f\x47\x0d\x01\x0b\x20\x00\x20\x03\x41\x08\x6a\x20\x09\x20\x08\x20\x02\x41\x01\x41\x00\x10\x83\x04\x22\x05\x45\x0d\x00\x20\x00\x20\x09\x10\xcd\x01\x20\x00\x20\x08\x10\xcd\x01\x20\x05\x41\x00\x48\x0d\x01\x20\x01\x20\x03\x29\x03\x08\x37\x03\x00\x0c\x02\x0b\x02\x40\x20\x00\x20\x09\x10\xac\x03\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x08\x10\xcd\x01\x0c\x01\x0b\x02\x40\x20\x00\x20\x08\x10\xac\x03\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x09\x10\xcd\x01\x0c\x01\x0b\x02\x40\x02\x40\x02\x40\x20\x00\x28\x02\x10\x22\x06\x28\x02\x8c\x01\x22\x05\x45\x0d\x00\x20\x05\x2d\x00\x28\x41\x04\x71\x0d\x01\x0b\x20\x08\x42\x20\x88\xa7\x21\x05\x02\x40\x20\x09\x42\x20\x88\xa7\x22\x07\x41\x76\x46\x0d\x00\x20\x05\x41\x76\x47\x0d\x02\x0b\x20\x07\x20\x05\x46\x0d\x00\x20\x00\x20\x09\x10\xcd\x01\x20\x00\x20\x08\x10\xcd\x01\x20\x00\x41\xfb\xd6\x01\x41\x00\x10\xb2\x02\x0c\x02\x0b\x20\x00\x20\x02\x20\x01\x20\x09\x20\x08\x20\x06\x41\xa0\x02\x6a\x28\x02\x00\x11\x1e\x00\x0d\x01\x0c\x02\x0b\x02\x40\x20\x00\x20\x03\x41\x04\x6a\x20\x09\x10\xfa\x03\x45\x0d\x00\x20\x00\x20\x08\x10\xcd\x01\x0c\x01\x0b\x20\x00\x20\x03\x20\x08\x10\xfa\x03\x0d\x00\x02\x40\x02\x40\x20\x02\x41\xd3\x7e\x6a\x22\x00\x41\x02\x4d\x0d\x00\x02\x40\x02\x40\x20\x02\x41\xe0\x7e\x6a\x22\x00\x41\x01\x4b\x0d\x00\x02\x40\x20\x00\x0e\x02\x02\x00\x02\x0b\x20\x03\x28\x02\x04\x20\x03\x28\x02\x00\x41\x1f\x71\x75\x21\x00\x0c\x03\x0b\x10\x40\x00\x0b\x20\x03\x28\x02\x04\x20\x03\x28\x02\x00\x41\x1f\x71\x74\x21\x00\x0c\x01\x0b\x02\x40\x02\x40\x02\x40\x20\x00\x0e\x03\x02\x00\x01\x02\x0b\x20\x03\x28\x02\x00\x20\x03\x28\x02\x04\x73\x21\x00\x0c\x02\x0b\x20\x03\x28\x02\x00\x20\x03\x28\x02\x04\x72\x21\x00\x0c\x01\x0b\x20\x03\x28\x02\x00\x20\x03\x28\x02\x04\x71\x21\x00\x0b\x20\x01\x20\x00\xad\x37\x03\x00\x0c\x01\x0b\x20\x04\x42\x80\x80\x80\x80\x30\x37\x03\x00\x20\x01\x42\x80\x80\x80\x80\x30\x37\x03\x00\x41\x7f\x21\x00\x0c\x01\x0b\x41\x00\x21\x00\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x00\x0b\xed\x02\x02\x03\x7f\x04\x7e\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x20\x01\x41\x78\x6a\x22\x03\x29\x03\x00\x21\x05\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x20\x01\x41\x70\x6a\x22\x01\x29\x03\x00\x10\xac\x03\x22\x06\x42\x80\x80\x80\x80\x70\x83\x22\x07\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x05\x10\xcd\x01\x0c\x01\x0b\x02\x40\x20\x00\x20\x05\x10\xac\x03\x22\x05\x42\x80\x80\x80\x80\x70\x83\x22\x08\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x06\x10\xcd\x01\x0c\x01\x0b\x02\x40\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x22\x04\x45\x0d\x00\x20\x04\x2d\x00\x28\x41\x04\x71\x0d\x02\x0b\x02\x40\x20\x07\x42\x80\x80\x80\x80\xe0\x7e\x51\x0d\x00\x20\x08\x42\x80\x80\x80\x80\xe0\x7e\x52\x0d\x02\x0b\x20\x00\x41\xcf\xd5\x01\x41\x00\x10\xb2\x02\x20\x00\x20\x06\x10\xcd\x01\x20\x00\x20\x05\x10\xcd\x01\x0b\x20\x03\x42\x80\x80\x80\x80\x30\x37\x03\x00\x20\x01\x42\x80\x80\x80\x80\x30\x37\x03\x00\x41\x7f\x21\x00\x0c\x01\x0b\x20\x00\x20\x02\x41\x0c\x6a\x20\x06\x10\xfa\x03\x1a\x20\x00\x20\x02\x41\x08\x6a\x20\x05\x10\xfa\x03\x1a\x02\x40\x02\x40\x20\x02\x28\x02\x0c\x20\x02\x28\x02\x08\x41\x1f\x71\x76\x22\x00\x41\x00\x48\x0d\x00\x20\x00\xad\x21\x05\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x00\xb8\xbd\x22\x05\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x05\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x05\x0b\x20\x01\x20\x05\x37\x03\x00\x41\x00\x21\x00\x0b\x20\x02\x41\x10\x6a\x24\x00\x20\x00\x0b\x94\x02\x02\x03\x7f\x02\x7e\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x41\x78\x6a\x22\x01\x29\x03\x00\x22\x05\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x00\x20\x02\x41\x08\x6a\x20\x05\x41\x95\x01\x10\x87\x04\x22\x03\x41\x00\x48\x0d\x01\x20\x03\x45\x0d\x00\x20\x00\x20\x05\x10\xcd\x01\x20\x01\x20\x02\x29\x03\x08\x37\x03\x00\x0c\x02\x0b\x02\x40\x20\x00\x20\x05\x10\xac\x03\x22\x06\x42\x80\x80\x80\x80\x70\x83\x22\x05\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x02\x40\x20\x00\x28\x02\x10\x22\x04\x28\x02\x8c\x01\x22\x03\x0d\x00\x41\x00\x21\x03\x0c\x01\x0b\x20\x03\x2d\x00\x28\x41\x04\x71\x41\x02\x76\x21\x03\x0b\x02\x40\x02\x40\x20\x05\x42\x80\x80\x80\x80\xe0\x7e\x51\x0d\x00\x20\x03\x45\x0d\x01\x0b\x20\x00\x20\x01\x41\x95\x01\x20\x06\x20\x04\x41\x9c\x02\x6a\x28\x02\x00\x11\x22\x00\x0d\x01\x0c\x03\x0b\x20\x00\x20\x02\x41\x04\x6a\x20\x06\x10\xfa\x03\x0d\x00\x20\x01\x20\x02\x35\x02\x04\x42\xff\xff\xff\xff\x0f\x85\x37\x03\x00\x0c\x02\x0b\x20\x01\x42\x80\x80\x80\x80\x30\x37\x03\x00\x0b\x41\x7f\x21\x00\x0c\x01\x0b\x41\x00\x21\x00\x0b\x20\x02\x41\x10\x6a\x24\x00\x20\x00\x0b\x93\x05\x03\x03\x7f\x02\x7e\x01\x7c\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x41\x78\x6a\x22\x01\x29\x03\x00\x22\x06\x42\x20\x88\xa7\x41\x0b\x6a\x41\x11\x4b\x0d\x00\x02\x40\x20\x06\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x00\x20\x03\x41\x08\x6a\x20\x06\x20\x02\x10\x87\x04\x22\x04\x41\x00\x48\x0d\x08\x20\x04\x45\x0d\x00\x20\x00\x20\x06\x10\xcd\x01\x20\x01\x20\x03\x29\x03\x08\x37\x03\x00\x0c\x06\x0b\x20\x00\x20\x06\x10\xac\x03\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x06\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x06\x42\x20\x88\xa7\x22\x05\x41\x0b\x6a\x22\x04\x41\x02\x4d\x0d\x00\x20\x05\x0d\x07\x20\x02\x41\xf4\x7e\x6a\x22\x00\x41\x03\x4b\x0d\x08\x20\x06\x42\x20\x86\x22\x07\x42\x20\x87\x21\x06\x20\x00\x0e\x04\x01\x03\x02\x02\x01\x0b\x20\x04\x0e\x03\x05\x03\x04\x05\x0b\x02\x40\x20\x07\x42\x00\x52\x0d\x00\x20\x01\x42\x80\x80\x80\x80\xc0\xfe\xff\x03\x37\x03\x00\x0c\x0b\x0b\x42\x00\x20\x06\x7d\x21\x06\x0c\x01\x0b\x20\x06\x20\x02\x41\x01\x74\x41\xe3\x7d\x6a\xac\x7c\x21\x06\x0b\x02\x40\x02\x40\x20\x06\x42\x80\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x06\x42\xff\xff\xff\xff\x0f\x83\x21\x06\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x06\xb9\xbd\x22\x06\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x06\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x06\x0b\x20\x01\x20\x06\x37\x03\x00\x0c\x08\x0b\x20\x00\x28\x02\x10\x21\x05\x0c\x06\x0b\x20\x00\x20\x01\x20\x02\x20\x06\x20\x00\x28\x02\x10\x41\xb8\x02\x6a\x28\x02\x00\x11\x22\x00\x45\x0d\x06\x0c\x07\x0b\x20\x00\x20\x01\x20\x02\x20\x06\x20\x00\x28\x02\x10\x41\xd4\x02\x6a\x28\x02\x00\x11\x22\x00\x45\x0d\x05\x0c\x06\x0b\x02\x40\x20\x00\x28\x02\x10\x22\x05\x28\x02\x8c\x01\x22\x04\x45\x0d\x00\x20\x04\x2d\x00\x28\x41\x04\x71\x0d\x04\x0b\x20\x02\x41\xf4\x7e\x6a\x22\x00\x41\x03\x4b\x0d\x00\x20\x06\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\x21\x08\x02\x40\x20\x00\x0e\x04\x00\x03\x02\x02\x00\x0b\x20\x08\x9a\x21\x08\x0c\x02\x0b\x10\x40\x00\x0b\x20\x02\x41\x01\x74\x41\xe3\x7d\x6a\xb7\x20\x08\xa0\x21\x08\x0b\x20\x01\x42\x80\x80\x80\x80\xc0\x7e\x20\x08\xbd\x22\x06\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x06\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x37\x03\x00\x0c\x01\x0b\x20\x00\x20\x01\x20\x02\x20\x06\x20\x05\x41\x9c\x02\x6a\x28\x02\x00\x11\x22\x00\x0d\x01\x0b\x41\x00\x21\x00\x0c\x02\x0b\x20\x01\x42\x80\x80\x80\x80\x30\x37\x03\x00\x0b\x41\x7f\x21\x00\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x00\x0b\x0b\x00\x20\x00\x20\x01\x41\x01\x10\x88\x04\x0b\xf2\x0d\x03\x06\x7f\x04\x7e\x03\x7c\x23\x00\x41\x20\x6b\x22\x03\x24\x00\x41\x07\x20\x01\x41\x78\x6a\x22\x04\x29\x03\x00\x22\x09\x42\x20\x88\xa7\x22\x05\x20\x05\x41\x0b\x6a\x41\x11\x4b\x1b\x21\x05\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x41\x07\x20\x01\x41\x70\x6a\x22\x01\x29\x03\x00\x22\x0a\x42\x20\x88\xa7\x22\x06\x20\x06\x41\x0b\x6a\x41\x11\x4b\x1b\x22\x06\x41\x07\x47\x0d\x00\x20\x05\x41\x07\x47\x0d\x00\x20\x03\x20\x09\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\x37\x03\x08\x20\x03\x20\x0a\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\x37\x03\x10\x0c\x01\x0b\x02\x40\x02\x40\x02\x40\x20\x06\x41\x7f\x47\x0d\x00\x20\x05\x41\x01\x72\x41\x03\x47\x0d\x01\x0b\x20\x06\x41\x01\x72\x41\x03\x46\x0d\x01\x20\x05\x41\x7f\x47\x0d\x01\x0b\x20\x00\x20\x03\x41\x18\x6a\x20\x0a\x20\x09\x20\x02\x41\x01\x41\x00\x10\x83\x04\x22\x05\x45\x0d\x00\x20\x00\x20\x0a\x10\xcd\x01\x20\x00\x20\x09\x10\xcd\x01\x20\x05\x41\x00\x48\x0d\x07\x20\x01\x20\x03\x29\x03\x18\x37\x03\x00\x0c\x04\x0b\x20\x00\x20\x0a\x10\xac\x03\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x05\x02\x40\x20\x00\x20\x09\x10\xac\x03\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x0a\x10\xcd\x01\x0c\x07\x0b\x02\x40\x41\x07\x20\x09\x42\x20\x88\xa7\x22\x05\x20\x05\x41\x0b\x6a\x41\x11\x4b\x1b\x22\x06\x41\x07\x20\x0a\x42\x20\x88\xa7\x22\x05\x20\x05\x41\x0b\x6a\x41\x11\x4b\x1b\x22\x05\x72\x0d\x00\x20\x09\xa7\x21\x07\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x41\xe6\x7e\x6a\x22\x05\x41\x05\x4d\x0d\x00\x20\x02\x41\xb2\x01\x46\x0d\x01\x0c\x0e\x0b\x20\x0a\xa7\x21\x08\x02\x40\x02\x40\x20\x05\x0e\x06\x00\x01\x03\x0f\x05\x04\x00\x0b\x20\x09\x42\x20\x86\x42\x20\x87\x20\x0a\x42\x20\x86\x42\x20\x87\x7e\x21\x0b\x02\x40\x20\x00\x28\x02\x10\x22\x06\x28\x02\x8c\x01\x22\x05\x45\x0d\x00\x20\x0b\x42\xff\xff\xff\xff\xff\xff\xff\x0f\x7c\x42\xff\xff\xff\xff\xff\xff\xff\x1f\x54\x0d\x00\x20\x05\x28\x02\x28\x41\x04\x71\x0d\x0d\x0b\x42\x00\x21\x0c\x20\x0b\x42\x00\x52\x0d\x05\x20\x09\x20\x0a\x84\xa7\x41\x7f\x4a\x0d\x06\x20\x01\x42\x80\x80\x80\x80\xc0\xfe\xff\x03\x37\x03\x00\x0c\x0d\x0b\x02\x40\x20\x00\x28\x02\x10\x22\x06\x28\x02\x8c\x01\x22\x05\x45\x0d\x00\x20\x05\x2d\x00\x28\x41\x04\x71\x0d\x0c\x0b\x20\x01\x42\x80\x80\x80\x80\xc0\x7e\x20\x08\xb7\x20\x07\xb7\xa3\xbd\x22\x0a\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x0a\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x37\x03\x00\x0c\x0c\x0b\x20\x07\x45\x0d\x09\x20\x0a\x42\x20\x86\x42\x20\x87\x20\x09\x42\x20\x86\x42\x20\x87\x22\x0a\x81\x22\x0b\x42\x7f\x55\x0d\x03\x02\x40\x20\x07\x41\x7f\x4a\x0d\x00\x20\x0b\x20\x0a\x7d\x21\x0b\x0c\x04\x0b\x20\x0b\x20\x0a\x7c\x21\x0b\x0c\x03\x0b\x02\x40\x02\x40\x20\x08\x41\x00\x48\x0d\x00\x20\x07\x41\x00\x4a\x0d\x01\x0b\x20\x08\xb7\x20\x07\xb7\x10\xa5\x01\x22\x0d\xbd\x21\x0a\x02\x40\x02\x40\x20\x0d\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x0d\xaa\x21\x00\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x00\x0b\x02\x40\x02\x40\x20\x0a\x20\x00\xb7\xbd\x52\x0d\x00\x20\x00\xad\x21\x0a\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x0a\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x0a\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x0a\x0b\x20\x01\x20\x0a\x37\x03\x00\x0c\x0b\x0b\x20\x0a\x42\x20\x86\x42\x20\x87\x20\x09\x42\x20\x86\x42\x20\x87\x81\x21\x0b\x0c\x02\x0b\x02\x40\x20\x00\x28\x02\x10\x22\x06\x28\x02\x8c\x01\x22\x05\x45\x0d\x00\x20\x05\x2d\x00\x28\x41\x04\x71\x0d\x09\x0b\x20\x08\xb7\x22\x0d\x20\x07\xb7\x22\x0e\x10\xa9\x01\x22\x0f\x44\x00\x00\x00\x00\x00\x00\xf8\x7f\x20\x0e\x99\x44\x00\x00\x00\x00\x00\x00\xf0\x7f\x63\x1b\x20\x0f\x20\x0d\x99\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x61\x1b\x22\x0d\xbd\x21\x0a\x02\x40\x02\x40\x20\x0d\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x0d\xaa\x21\x00\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x00\x0b\x02\x40\x02\x40\x20\x0a\x20\x00\xb7\xbd\x52\x0d\x00\x20\x00\xad\x21\x0a\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x0a\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x0a\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x0a\x0b\x20\x01\x20\x0a\x37\x03\x00\x0c\x09\x0b\x20\x0a\x42\x20\x86\x42\x20\x87\x20\x09\x42\x20\x86\x42\x20\x87\x7d\x21\x0b\x0b\x20\x0b\x42\x80\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x56\x0d\x01\x20\x0b\x21\x0c\x0b\x20\x0c\x42\xff\xff\xff\xff\x0f\x83\x21\x0a\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x0b\xb9\xbd\x22\x0a\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x0a\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x0a\x0b\x20\x01\x20\x0a\x37\x03\x00\x0c\x04\x0b\x02\x40\x02\x40\x20\x05\x41\x75\x46\x0d\x00\x20\x06\x41\x75\x47\x0d\x01\x0b\x20\x00\x20\x02\x20\x01\x20\x0a\x20\x09\x20\x00\x28\x02\x10\x41\xd8\x02\x6a\x28\x02\x00\x11\x1e\x00\x0d\x07\x0c\x04\x0b\x02\x40\x02\x40\x20\x05\x41\x77\x46\x0d\x00\x20\x06\x41\x77\x47\x0d\x01\x0b\x20\x00\x20\x02\x20\x01\x20\x0a\x20\x09\x20\x00\x28\x02\x10\x41\xbc\x02\x6a\x28\x02\x00\x11\x1e\x00\x45\x0d\x04\x0c\x07\x0b\x02\x40\x02\x40\x20\x05\x41\x76\x46\x0d\x00\x20\x06\x41\x76\x47\x0d\x01\x0b\x20\x00\x28\x02\x10\x21\x06\x0c\x03\x0b\x20\x00\x20\x03\x41\x10\x6a\x20\x0a\x10\xf8\x03\x0d\x05\x20\x00\x20\x03\x41\x08\x6a\x20\x09\x10\xf8\x03\x0d\x06\x0b\x02\x40\x20\x00\x28\x02\x10\x22\x06\x28\x02\x8c\x01\x22\x05\x45\x0d\x00\x20\x05\x2d\x00\x28\x41\x04\x71\x45\x0d\x00\x20\x03\x2b\x03\x10\x10\x84\x04\x45\x0d\x00\x20\x03\x2b\x03\x08\x10\x84\x04\x0d\x02\x0b\x02\x40\x02\x40\x20\x02\x41\xe6\x7e\x6a\x22\x00\x41\x05\x4d\x0d\x00\x20\x02\x41\xb2\x01\x47\x0d\x05\x20\x03\x20\x03\x2b\x03\x08\x99\x22\x0e\x39\x03\x08\x20\x03\x2b\x03\x10\x20\x0e\x10\xa5\x01\x22\x0d\x44\x00\x00\x00\x00\x00\x00\x00\x00\x63\x41\x01\x73\x0d\x01\x20\x0e\x20\x0d\xa0\x21\x0d\x0c\x01\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x0e\x06\x00\x01\x02\x09\x04\x03\x00\x0b\x20\x03\x2b\x03\x10\x20\x03\x2b\x03\x08\xa2\x21\x0d\x0c\x04\x0b\x20\x03\x2b\x03\x10\x20\x03\x2b\x03\x08\xa3\x21\x0d\x0c\x03\x0b\x20\x03\x2b\x03\x10\x20\x03\x2b\x03\x08\x10\xa5\x01\x21\x0d\x0c\x02\x0b\x20\x03\x2b\x03\x10\x22\x0d\x20\x03\x2b\x03\x08\x22\x0e\x10\xa9\x01\x22\x0f\x44\x00\x00\x00\x00\x00\x00\xf8\x7f\x20\x0e\x99\x44\x00\x00\x00\x00\x00\x00\xf0\x7f\x63\x1b\x20\x0f\x20\x0d\x99\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x61\x1b\x21\x0d\x0c\x01\x0b\x20\x03\x2b\x03\x10\x20\x03\x2b\x03\x08\xa1\x21\x0d\x0b\x20\x01\x42\x80\x80\x80\x80\xc0\x7e\x20\x0d\xbd\x22\x0a\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x0a\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x37\x03\x00\x0c\x02\x0b\x20\x00\x41\x02\x10\x86\x04\x0c\x04\x0b\x20\x00\x20\x02\x20\x01\x20\x0a\x20\x09\x20\x06\x41\xa0\x02\x6a\x28\x02\x00\x11\x1e\x00\x0d\x03\x0b\x41\x00\x21\x00\x0c\x03\x0b\x10\x40\x00\x0b\x20\x00\x20\x09\x10\xcd\x01\x0b\x20\x04\x42\x80\x80\x80\x80\x30\x37\x03\x00\x20\x01\x42\x80\x80\x80\x80\x30\x37\x03\x00\x41\x7f\x21\x00\x0b\x20\x03\x41\x20\x6a\x24\x00\x20\x00\x0b\x87\x05\x02\x02\x7e\x06\x7f\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x90\x7f\x51\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x03\x20\x00\x20\x01\x10\xf2\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x0b\x02\x40\x20\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x90\x7f\x51\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x03\x20\x00\x20\x02\x10\xf2\x03\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x21\x02\x0c\x01\x0b\x02\x40\x20\x02\xa7\x22\x05\x29\x02\x04\x22\x03\x42\xff\xff\xff\xff\x07\x83\x50\x0d\x00\x20\x01\xa7\x22\x06\x29\x02\x04\x21\x04\x02\x40\x20\x06\x28\x02\x00\x41\x01\x47\x0d\x00\x20\x04\x20\x03\x85\xa7\x41\x00\x48\x0d\x00\x20\x06\x20\x00\x28\x02\x10\x28\x02\x0c\x11\x04\x00\x20\x05\x29\x02\x04\x22\x03\xa7\x22\x07\x41\xff\xff\xff\xff\x07\x71\x22\x08\x20\x06\x29\x02\x04\x22\x04\xa7\x22\x09\x41\xff\xff\xff\xff\x07\x71\x22\x0a\x6a\x20\x07\x41\x1f\x76\x74\x20\x09\x41\x1f\x76\x22\x09\x6b\x41\x11\x6a\x49\x0d\x00\x02\x40\x20\x09\x45\x0d\x00\x20\x06\x20\x0a\x41\x01\x74\x6a\x41\x10\x6a\x20\x05\x41\x10\x6a\x20\x07\x41\x01\x74\x10\x70\x1a\x20\x06\x20\x05\x29\x02\x04\x20\x04\x7c\x42\xff\xff\xff\xff\x07\x83\x20\x04\x42\x80\x80\x80\x80\x78\x83\x84\x37\x02\x04\x0c\x02\x0b\x20\x06\x41\x10\x6a\x22\x07\x20\x0a\x6a\x20\x05\x41\x10\x6a\x20\x08\x10\x70\x1a\x20\x06\x20\x05\x29\x02\x04\x20\x04\x7c\x42\xff\xff\xff\xff\x07\x83\x22\x03\x20\x04\x42\x80\x80\x80\x80\x78\x83\x84\x37\x02\x04\x20\x07\x20\x03\xa7\x6a\x41\x00\x3a\x00\x00\x0c\x01\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x20\x03\xa7\x41\xff\xff\xff\xff\x07\x71\x20\x04\xa7\x41\xff\xff\xff\xff\x07\x71\x6a\x22\x07\x41\x80\x80\x80\x80\x04\x49\x0d\x00\x20\x00\x41\xe9\xd7\x01\x41\x00\x10\xc2\x02\x0c\x01\x0b\x20\x00\x20\x07\x20\x03\x20\x04\x84\xa7\x41\x1f\x76\x22\x0a\x10\xe7\x02\x22\x09\x0d\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x03\x0c\x01\x0b\x20\x09\x41\x10\x6a\x21\x08\x02\x40\x02\x40\x20\x0a\x0d\x00\x20\x08\x20\x06\x41\x10\x6a\x20\x06\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x10\x70\x22\x0a\x20\x06\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x6a\x20\x05\x41\x10\x6a\x20\x05\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x10\x70\x1a\x20\x0a\x20\x07\x6a\x41\x00\x3a\x00\x00\x0c\x01\x0b\x20\x08\x20\x06\x20\x06\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x10\x85\x04\x20\x09\x20\x06\x28\x02\x04\x41\x01\x74\x6a\x41\x10\x6a\x20\x05\x20\x05\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x10\x85\x04\x0b\x20\x09\xad\x42\x80\x80\x80\x80\x90\x7f\x84\x21\x03\x0b\x20\x00\x20\x01\x10\xcd\x01\x0c\x01\x0b\x20\x01\x21\x03\x0b\x20\x00\x20\x02\x10\xcd\x01\x20\x03\x0b\xd1\x08\x02\x05\x7f\x02\x7e\x23\x00\x41\x20\x6b\x22\x02\x24\x00\x41\x07\x20\x01\x41\x78\x6a\x22\x03\x29\x03\x00\x22\x07\x42\x20\x88\xa7\x22\x04\x20\x04\x41\x0b\x6a\x41\x11\x4b\x1b\x21\x04\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x41\x07\x20\x01\x41\x70\x6a\x22\x05\x29\x03\x00\x22\x08\x42\x20\x88\xa7\x22\x01\x20\x01\x41\x0b\x6a\x41\x11\x4b\x1b\x22\x01\x41\x07\x47\x0d\x00\x20\x04\x41\x07\x47\x0d\x00\x20\x05\x42\x80\x80\x80\x80\xc0\x7e\x20\x08\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\x20\x07\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\xa0\xbd\x22\x08\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x08\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x37\x03\x00\x0c\x01\x0b\x02\x40\x02\x40\x20\x01\x41\x7f\x46\x0d\x00\x20\x04\x41\x7f\x47\x0d\x01\x0b\x02\x40\x02\x40\x02\x40\x20\x01\x41\x7f\x47\x0d\x00\x20\x04\x41\x07\x6a\x22\x06\x41\x0a\x4b\x0d\x01\x41\x01\x20\x06\x74\x41\x81\x0c\x71\x45\x0d\x01\x0b\x20\x04\x41\x7f\x47\x0d\x01\x20\x01\x41\x07\x6a\x22\x01\x41\x0a\x4b\x0d\x00\x41\x01\x20\x01\x74\x41\x81\x0c\x71\x0d\x01\x0b\x20\x00\x20\x02\x41\x18\x6a\x20\x08\x20\x07\x41\x9d\x01\x41\x00\x41\x02\x10\x83\x04\x22\x01\x45\x0d\x00\x20\x00\x20\x08\x10\xcd\x01\x20\x00\x20\x07\x10\xcd\x01\x20\x01\x41\x00\x48\x0d\x04\x20\x05\x20\x02\x29\x03\x18\x37\x03\x00\x0c\x02\x0b\x20\x00\x20\x08\x41\x02\x10\xed\x02\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x02\x40\x20\x00\x20\x07\x41\x02\x10\xed\x02\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x08\x10\xcd\x01\x0c\x04\x0b\x41\x07\x20\x07\x42\x20\x88\xa7\x22\x01\x20\x01\x41\x0b\x6a\x41\x11\x4b\x1b\x21\x04\x41\x07\x20\x08\x42\x20\x88\xa7\x22\x01\x20\x01\x41\x0b\x6a\x41\x11\x4b\x1b\x21\x01\x0b\x02\x40\x02\x40\x20\x04\x41\x79\x46\x0d\x00\x20\x01\x41\x79\x47\x0d\x01\x0b\x20\x05\x20\x00\x20\x08\x20\x07\x10\xae\x03\x22\x08\x37\x03\x00\x41\x00\x21\x01\x20\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x0c\x04\x0b\x20\x00\x20\x08\x10\xac\x03\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x02\x40\x20\x00\x20\x07\x10\xac\x03\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x08\x10\xcd\x01\x0c\x03\x0b\x02\x40\x41\x07\x20\x07\x42\x20\x88\xa7\x22\x01\x20\x01\x41\x0b\x6a\x41\x11\x4b\x1b\x22\x04\x41\x07\x20\x08\x42\x20\x88\xa7\x22\x01\x20\x01\x41\x0b\x6a\x41\x11\x4b\x1b\x22\x01\x72\x0d\x00\x02\x40\x02\x40\x20\x07\x42\x20\x86\x42\x20\x87\x20\x08\x42\x20\x86\x42\x20\x87\x7c\x22\x08\x42\x80\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x08\x42\xff\xff\xff\xff\x0f\x83\x21\x08\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x08\xb9\xbd\x22\x08\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x08\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x08\x0b\x20\x05\x20\x08\x37\x03\x00\x0c\x01\x0b\x02\x40\x02\x40\x20\x01\x41\x75\x46\x0d\x00\x20\x04\x41\x75\x47\x0d\x01\x0b\x20\x00\x41\x9d\x01\x20\x05\x20\x08\x20\x07\x20\x00\x28\x02\x10\x41\xd8\x02\x6a\x28\x02\x00\x11\x1e\x00\x0d\x03\x0c\x01\x0b\x02\x40\x02\x40\x20\x01\x41\x77\x46\x0d\x00\x20\x04\x41\x77\x47\x0d\x01\x0b\x20\x00\x41\x9d\x01\x20\x05\x20\x08\x20\x07\x20\x00\x28\x02\x10\x41\xbc\x02\x6a\x28\x02\x00\x11\x1e\x00\x45\x0d\x01\x0c\x03\x0b\x02\x40\x02\x40\x02\x40\x20\x01\x41\x76\x46\x0d\x00\x20\x04\x41\x76\x47\x0d\x01\x0b\x20\x00\x28\x02\x10\x21\x01\x0c\x01\x0b\x02\x40\x20\x00\x20\x02\x41\x10\x6a\x20\x08\x10\xf8\x03\x45\x0d\x00\x20\x00\x20\x07\x10\xcd\x01\x0c\x04\x0b\x20\x00\x20\x02\x41\x08\x6a\x20\x07\x10\xf8\x03\x0d\x03\x02\x40\x20\x00\x28\x02\x10\x22\x01\x28\x02\x8c\x01\x22\x04\x45\x0d\x00\x20\x04\x2d\x00\x28\x41\x04\x71\x45\x0d\x00\x20\x02\x2b\x03\x10\x10\x84\x04\x45\x0d\x00\x20\x02\x2b\x03\x08\x10\x84\x04\x0d\x01\x0b\x20\x05\x42\x80\x80\x80\x80\xc0\x7e\x20\x02\x2b\x03\x10\x20\x02\x2b\x03\x08\xa0\xbd\x22\x08\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x08\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x37\x03\x00\x0c\x01\x0b\x20\x00\x41\x9d\x01\x20\x05\x20\x08\x20\x07\x20\x01\x41\xa0\x02\x6a\x28\x02\x00\x11\x1e\x00\x0d\x02\x0b\x41\x00\x21\x01\x0c\x02\x0b\x20\x00\x20\x07\x10\xcd\x01\x0b\x20\x03\x42\x80\x80\x80\x80\x30\x37\x03\x00\x20\x05\x42\x80\x80\x80\x80\x30\x37\x03\x00\x41\x7f\x21\x01\x0b\x20\x02\x41\x20\x6a\x24\x00\x20\x01\x0b\xa1\x03\x01\x09\x7f\x23\x00\x41\x30\x6b\x22\x05\x24\x00\x41\x00\x21\x06\x02\x40\x20\x02\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x41\x13\x21\x07\x02\x40\x20\x02\xa7\x22\x08\x2d\x00\x05\x41\x04\x71\x45\x0d\x00\x20\x00\x28\x02\x10\x28\x02\x44\x20\x08\x2f\x01\x06\x41\x18\x6c\x6a\x28\x02\x14\x22\x06\x45\x0d\x00\x41\x03\x41\x13\x20\x06\x28\x02\x04\x1b\x21\x07\x0b\x41\x7f\x21\x06\x20\x00\x20\x05\x41\x2c\x6a\x20\x05\x41\x28\x6a\x20\x08\x20\x07\x10\x9d\x03\x0d\x00\x20\x03\xa7\x41\x00\x20\x03\x42\xff\xff\xff\xff\x6f\x56\x1b\x21\x09\x20\x05\x28\x02\x2c\x22\x0a\x41\x04\x6a\x21\x06\x20\x07\x41\x10\x71\x21\x0b\x20\x05\x28\x02\x28\x22\x0c\x21\x07\x02\x40\x02\x40\x03\x40\x20\x07\x45\x0d\x01\x02\x40\x02\x40\x20\x09\x45\x0d\x00\x20\x00\x41\x00\x20\x09\x20\x06\x28\x02\x00\x10\xea\x03\x22\x0d\x45\x0d\x00\x20\x0d\x41\x00\x4e\x0d\x01\x0c\x04\x0b\x02\x40\x20\x0b\x0d\x00\x20\x00\x20\x05\x41\x08\x6a\x20\x08\x20\x06\x28\x02\x00\x10\xea\x03\x22\x0d\x41\x00\x48\x0d\x04\x20\x0d\x45\x0d\x01\x20\x05\x28\x02\x08\x21\x0d\x20\x00\x20\x05\x41\x08\x6a\x10\x81\x04\x20\x0d\x41\x04\x71\x45\x0d\x01\x0b\x20\x00\x20\x02\x20\x06\x28\x02\x00\x20\x02\x41\x00\x10\xb4\x01\x22\x03\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x06\x28\x02\x00\x21\x0d\x02\x40\x02\x40\x20\x04\x45\x0d\x00\x20\x00\x20\x01\x20\x0d\x20\x03\x10\x82\x04\x21\x0d\x0c\x01\x0b\x20\x00\x20\x01\x20\x0d\x20\x03\x41\x07\x10\xc4\x01\x21\x0d\x0b\x20\x0d\x41\x00\x48\x0d\x03\x0b\x20\x07\x41\x7f\x6a\x21\x07\x20\x06\x41\x08\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x20\x00\x20\x0a\x20\x0c\x10\x9e\x03\x41\x00\x21\x06\x0c\x01\x0b\x20\x00\x20\x0a\x20\x0c\x10\x9e\x03\x41\x7f\x21\x06\x0b\x20\x05\x41\x30\x6a\x24\x00\x20\x06\x0b\xb7\x01\x02\x01\x7f\x01\x7e\x02\x40\x02\x40\x20\x04\x41\x04\x71\x45\x0d\x00\x20\x00\x20\x01\x10\xfc\x03\x21\x01\x41\x2d\x21\x05\x0c\x01\x0b\x20\x00\x20\x01\x10\xfe\x02\x21\x01\x41\x2c\x21\x05\x0b\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x05\x10\xc9\x03\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x00\x41\x10\x10\xc0\x02\x22\x05\x45\x0d\x00\x20\x05\x41\x00\x36\x02\x0c\x20\x05\x20\x04\x41\x03\x71\x36\x02\x08\x20\x05\x20\x01\x37\x03\x00\x20\x06\x42\x80\x80\x80\x80\x70\x54\x0d\x02\x20\x06\xa7\x20\x05\x36\x02\x20\x0c\x02\x0b\x20\x00\x20\x06\x10\xcd\x01\x0b\x20\x00\x20\x01\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x06\x0b\x3f\x01\x02\x7f\x41\x00\x21\x03\x02\x40\x20\x00\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x00\xa7\x22\x04\x2f\x01\x06\x41\x0c\x47\x0d\x00\x20\x04\x41\x24\x6a\x28\x02\x00\x20\x01\x47\x0d\x00\x20\x04\x41\x2a\x6a\x2e\x01\x00\x20\x02\x46\x21\x03\x0b\x20\x03\x0b\xa5\x03\x01\x03\x7e\x02\x40\x02\x40\x02\x40\x20\x02\x45\x0d\x00\x02\x40\x20\x00\x20\x01\x41\xdc\x01\x20\x01\x41\x00\x10\xb4\x01\x22\x03\x42\x80\x80\x80\x80\x70\x83\x22\x04\x42\x80\x80\x80\x80\x20\x51\x0d\x00\x20\x04\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x04\x42\x80\x80\x80\x80\x30\x52\x0d\x02\x0b\x20\x00\x20\x01\x41\xd1\x01\x20\x01\x41\x00\x10\xb4\x01\x22\x03\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x20\x00\x20\x01\x20\x03\x10\xfd\x03\x21\x01\x20\x00\x20\x03\x10\xcd\x01\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x0f\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x03\x02\x40\x20\x00\x20\x01\x41\xea\x00\x20\x01\x41\x00\x10\xb4\x01\x22\x04\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x00\x41\x37\x10\xc9\x03\x22\x03\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x04\x10\xcd\x01\x0c\x01\x0b\x02\x40\x20\x00\x41\x10\x10\xe2\x03\x22\x02\x0d\x00\x20\x00\x20\x03\x10\xcd\x01\x20\x00\x20\x04\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x03\x0c\x01\x0b\x20\x01\x10\xc0\x01\x21\x05\x20\x02\x20\x04\x37\x03\x08\x20\x02\x20\x05\x37\x03\x00\x20\x03\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x03\xa7\x20\x02\x36\x02\x20\x0b\x20\x00\x20\x01\x10\xcd\x01\x20\x03\x0f\x0b\x20\x00\x20\x01\x41\xd1\x01\x20\x01\x41\x00\x10\xb4\x01\x22\x03\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x0b\x02\x40\x20\x00\x20\x03\x10\xf0\x02\x0d\x00\x20\x00\x20\x03\x10\xcd\x01\x20\x00\x41\x9e\xdc\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x00\x20\x01\x20\x03\x10\xfd\x03\x21\x01\x20\x00\x20\x03\x10\xcd\x01\x20\x01\x21\x03\x0b\x20\x03\x0b\xf9\x03\x02\x04\x7f\x02\x7e\x23\x00\x41\x20\x6b\x22\x06\x24\x00\x02\x40\x02\x40\x20\x00\x20\x01\x41\x2c\x10\xfe\x03\x22\x07\x45\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x01\x02\x40\x02\x40\x20\x07\x29\x03\x00\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x0a\xa7\x22\x08\x2f\x01\x06\x41\x6b\x6a\x41\xff\xff\x03\x71\x41\x0a\x4b\x0d\x00\x20\x08\x28\x02\x20\x28\x02\x0c\x28\x02\x20\x2d\x00\x04\x45\x0d\x01\x20\x00\x10\xff\x03\x0c\x05\x0b\x20\x00\x20\x06\x41\x1c\x6a\x20\x0a\x10\xb6\x03\x0d\x04\x20\x06\x28\x02\x1c\x21\x09\x0c\x01\x0b\x20\x06\x20\x08\x41\x28\x6a\x28\x02\x00\x22\x09\x36\x02\x1c\x0b\x20\x07\x28\x02\x0c\x22\x08\x20\x09\x49\x0d\x01\x20\x00\x20\x07\x29\x03\x00\x10\xcd\x01\x20\x07\x42\x80\x80\x80\x80\x30\x37\x03\x00\x0b\x20\x04\x41\x01\x36\x02\x00\x0c\x02\x0b\x20\x07\x20\x08\x41\x01\x6a\x36\x02\x0c\x20\x04\x41\x00\x36\x02\x00\x02\x40\x20\x07\x28\x02\x08\x0d\x00\x02\x40\x20\x08\x41\x00\x48\x0d\x00\x20\x08\xad\x21\x01\x0c\x03\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x08\xb8\xbd\x22\x01\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x01\x0c\x02\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x20\x00\x20\x07\x29\x03\x00\x20\x08\x10\xf6\x02\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x02\x40\x20\x07\x28\x02\x08\x41\x01\x47\x0d\x00\x20\x0a\x21\x01\x0c\x02\x0b\x02\x40\x02\x40\x20\x08\x41\x00\x48\x0d\x00\x20\x08\xad\x21\x0b\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x08\xb8\xbd\x22\x01\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x0b\x0b\x20\x06\x20\x0a\x37\x03\x08\x20\x06\x20\x0b\x37\x03\x00\x20\x00\x41\x02\x20\x06\x10\x80\x04\x21\x01\x20\x00\x20\x0a\x10\xcd\x01\x20\x00\x20\x0b\x10\xcd\x01\x0c\x01\x0b\x20\x04\x41\x00\x36\x02\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x06\x41\x20\x6a\x24\x00\x20\x01\x0b\x4e\x01\x02\x7f\x41\x00\x21\x03\x02\x40\x20\x00\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x00\xa7\x22\x04\x2f\x01\x06\x41\x02\x47\x0d\x00\x20\x04\x2d\x00\x05\x41\x08\x71\x45\x0d\x00\x20\x02\x20\x04\x41\x28\x6a\x28\x02\x00\x36\x02\x00\x20\x01\x20\x04\x41\x24\x6a\x28\x02\x00\x36\x02\x00\x41\x01\x21\x03\x0b\x20\x03\x0b\x38\x00\x02\x40\x20\x00\x20\x02\x41\x30\x20\x02\x41\x00\x10\xb4\x01\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x41\x00\x36\x02\x00\x41\x7f\x0f\x0b\x20\x00\x20\x01\x20\x02\x10\xfa\x03\x0b\xcd\x01\x02\x02\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x02\x40\x02\x40\x20\x00\x20\x01\x20\x02\x41\x00\x41\x00\x20\x04\x41\x0c\x6a\x10\xeb\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x04\x28\x02\x0c\x22\x05\x41\x02\x46\x0d\x00\x20\x03\x20\x05\x36\x02\x00\x20\x01\x21\x06\x0c\x02\x0b\x20\x00\x20\x01\x41\xe9\x00\x20\x01\x41\x00\x10\xb4\x01\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x03\x20\x00\x20\x02\x10\x9a\x03\x22\x05\x36\x02\x00\x42\x80\x80\x80\x80\x30\x21\x06\x02\x40\x20\x05\x0d\x00\x20\x00\x20\x01\x41\xc0\x00\x20\x01\x41\x00\x10\xb4\x01\x21\x06\x0b\x20\x00\x20\x01\x10\xcd\x01\x0c\x01\x0b\x20\x00\x20\x01\x10\xcd\x01\x20\x03\x41\x00\x36\x02\x00\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x06\x0b\x3d\x01\x01\x7f\x20\x00\x20\x02\x10\xa3\x03\x21\x05\x20\x00\x20\x02\x10\xcd\x01\x02\x40\x20\x05\x0d\x00\x20\x00\x20\x03\x10\xcd\x01\x41\x7f\x0f\x0b\x20\x00\x20\x01\x20\x05\x20\x03\x20\x04\x10\xc4\x01\x21\x04\x20\x00\x20\x05\x10\xe4\x02\x20\x04\x0b\xa9\x04\x02\x03\x7f\x01\x7e\x23\x00\x41\x20\x6b\x22\x06\x24\x00\x20\x01\x10\xc0\x01\x21\x01\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x03\x40\x02\x40\x02\x40\x02\x40\x20\x01\xa7\x22\x07\x2d\x00\x05\x41\x04\x71\x45\x0d\x00\x20\x00\x28\x02\x10\x28\x02\x44\x20\x07\x2f\x01\x06\x41\x18\x6c\x6a\x28\x02\x14\x22\x08\x45\x0d\x00\x20\x08\x28\x02\x18\x22\x08\x45\x0d\x00\x20\x00\x20\x01\x20\x02\x20\x03\x20\x04\x20\x05\x20\x08\x11\x30\x00\x21\x07\x0c\x01\x0b\x20\x00\x20\x06\x20\x07\x20\x02\x10\xea\x03\x22\x07\x41\x7f\x4a\x0d\x01\x0b\x20\x00\x20\x01\x10\xcd\x01\x0c\x05\x0b\x02\x40\x02\x40\x20\x07\x45\x0d\x00\x02\x40\x20\x06\x2d\x00\x00\x41\x10\x71\x45\x0d\x00\x20\x00\x41\x00\x20\x06\x29\x03\x18\x22\x09\xa7\x20\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x1b\x20\x04\x20\x03\x20\x05\x10\xec\x03\x21\x07\x20\x00\x20\x06\x29\x03\x10\x10\xcd\x01\x20\x00\x20\x06\x29\x03\x18\x10\xcd\x01\x20\x00\x20\x01\x10\xcd\x01\x0c\x08\x0b\x20\x00\x20\x06\x29\x03\x08\x10\xcd\x01\x20\x06\x2d\x00\x00\x41\x02\x71\x0d\x01\x20\x00\x20\x01\x10\xcd\x01\x0c\x03\x0b\x20\x00\x20\x01\x10\x9c\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x20\x52\x0d\x01\x0b\x0b\x20\x00\x20\x01\x10\xcd\x01\x02\x40\x20\x04\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x20\x03\x10\xcd\x01\x20\x00\x20\x05\x41\xd4\xdc\x01\x41\x00\x10\xd5\x03\x21\x07\x0c\x05\x0b\x20\x00\x20\x06\x20\x04\xa7\x22\x08\x20\x02\x10\xea\x03\x22\x07\x41\x7f\x4c\x0d\x03\x20\x07\x45\x0d\x02\x02\x40\x20\x06\x2d\x00\x00\x41\x10\x71\x45\x0d\x00\x20\x00\x20\x06\x29\x03\x10\x10\xcd\x01\x20\x00\x20\x06\x29\x03\x18\x10\xcd\x01\x20\x00\x20\x03\x10\xcd\x01\x20\x00\x20\x05\x41\xee\xdc\x01\x41\x00\x10\xd5\x03\x21\x07\x0c\x05\x0b\x20\x00\x20\x06\x29\x03\x08\x10\xcd\x01\x20\x06\x2d\x00\x00\x41\x02\x71\x45\x0d\x00\x20\x08\x2f\x01\x06\x41\x0b\x47\x0d\x01\x0b\x20\x00\x20\x03\x10\xcd\x01\x20\x00\x20\x05\x20\x02\x10\xef\x03\x21\x07\x0c\x03\x0b\x20\x00\x20\x04\x20\x02\x20\x03\x42\x80\x80\x80\x80\x30\x42\x80\x80\x80\x80\x30\x41\x80\xc0\x00\x10\xcc\x01\x21\x07\x0c\x01\x0b\x20\x00\x20\x08\x20\x02\x20\x03\x42\x80\x80\x80\x80\x30\x42\x80\x80\x80\x80\x30\x20\x05\x41\x87\xce\x00\x72\x10\xd6\x03\x21\x07\x0b\x20\x00\x20\x03\x10\xcd\x01\x0b\x20\x06\x41\x20\x6a\x24\x00\x20\x07\x0b\x9e\x06\x01\x05\x7f\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x02\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x01\xa7\x22\x06\x2f\x01\x06\x41\x7e\x6a\x22\x07\x41\x1d\x4b\x0d\x00\x20\x02\xa7\x21\x08\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x07\x0e\x1e\x00\x0a\x0a\x0a\x0a\x0a\x09\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x07\x06\x06\x05\x05\x04\x04\x03\x03\x02\x01\x00\x0b\x20\x06\x41\x28\x6a\x28\x02\x00\x22\x07\x20\x08\x4b\x0d\x0b\x20\x07\x20\x08\x47\x0d\x09\x20\x06\x2d\x00\x05\x41\x09\x71\x41\x09\x47\x0d\x09\x20\x06\x28\x02\x10\x21\x08\x03\x40\x02\x40\x02\x40\x20\x08\x28\x02\x2c\x22\x07\x45\x0d\x00\x20\x07\x2f\x01\x06\x41\x7f\x6a\x22\x09\x41\x01\x4b\x0d\x0c\x20\x07\x28\x02\x10\x21\x08\x02\x40\x20\x09\x0e\x02\x00\x02\x00\x0b\x20\x08\x2d\x00\x11\x45\x0d\x02\x0c\x0c\x0b\x20\x00\x20\x06\x20\x03\x20\x04\x10\xee\x03\x21\x07\x0c\x0f\x0b\x20\x07\x2d\x00\x05\x41\x08\x71\x0d\x00\x0c\x0a\x0b\x00\x0b\x41\x7f\x21\x07\x20\x00\x20\x05\x41\x18\x6a\x20\x03\x10\xf8\x03\x0d\x0c\x20\x06\x41\x28\x6a\x28\x02\x00\x20\x08\x4d\x0d\x06\x20\x06\x41\x24\x6a\x28\x02\x00\x20\x08\x41\x03\x74\x6a\x20\x05\x29\x03\x18\x37\x03\x00\x0c\x0b\x0b\x41\x7f\x21\x07\x20\x00\x20\x05\x41\x18\x6a\x20\x03\x10\xf8\x03\x0d\x0b\x20\x06\x41\x28\x6a\x28\x02\x00\x20\x08\x4d\x0d\x05\x20\x06\x41\x24\x6a\x28\x02\x00\x20\x08\x41\x02\x74\x6a\x20\x05\x2b\x03\x18\xb6\x38\x02\x00\x0c\x0a\x0b\x20\x00\x20\x05\x41\x08\x6a\x20\x03\x10\xf9\x03\x0d\x07\x20\x06\x41\x28\x6a\x28\x02\x00\x20\x08\x4d\x0d\x04\x20\x06\x41\x24\x6a\x28\x02\x00\x20\x08\x41\x03\x74\x6a\x20\x05\x29\x03\x08\x37\x03\x00\x0c\x09\x0b\x41\x7f\x21\x07\x20\x00\x20\x05\x41\x14\x6a\x20\x03\x10\xfa\x03\x0d\x09\x20\x06\x41\x28\x6a\x28\x02\x00\x20\x08\x4d\x0d\x03\x20\x06\x41\x24\x6a\x28\x02\x00\x20\x08\x41\x02\x74\x6a\x20\x05\x28\x02\x14\x36\x02\x00\x0c\x08\x0b\x41\x7f\x21\x07\x20\x00\x20\x05\x41\x14\x6a\x20\x03\x10\xfa\x03\x0d\x08\x20\x06\x41\x28\x6a\x28\x02\x00\x20\x08\x4d\x0d\x02\x41\x01\x21\x07\x20\x06\x41\x24\x6a\x28\x02\x00\x20\x08\x41\x01\x74\x6a\x20\x05\x28\x02\x14\x3b\x01\x00\x0c\x08\x0b\x41\x7f\x21\x07\x20\x00\x20\x05\x41\x14\x6a\x20\x03\x10\xfa\x03\x0d\x07\x20\x06\x41\x28\x6a\x28\x02\x00\x20\x08\x4d\x0d\x01\x20\x06\x41\x24\x6a\x28\x02\x00\x20\x08\x6a\x20\x05\x28\x02\x14\x3a\x00\x00\x0c\x06\x0b\x41\x7f\x21\x07\x20\x00\x20\x05\x41\x14\x6a\x20\x03\x10\xfb\x03\x0d\x06\x20\x06\x41\x28\x6a\x28\x02\x00\x20\x08\x4d\x0d\x00\x20\x06\x41\x24\x6a\x28\x02\x00\x20\x08\x6a\x20\x05\x28\x02\x14\x3a\x00\x00\x0c\x05\x0b\x20\x00\x20\x04\x41\xb9\xde\x01\x41\x00\x10\xd5\x03\x21\x07\x0c\x05\x0b\x20\x06\x41\x28\x6a\x28\x02\x00\x20\x08\x4d\x0d\x00\x20\x00\x20\x06\x41\x24\x6a\x28\x02\x00\x20\x08\x41\x03\x74\x6a\x20\x03\x10\x98\x03\x0c\x03\x0b\x20\x00\x20\x02\x10\xa3\x03\x21\x06\x20\x00\x20\x02\x10\xcd\x01\x02\x40\x20\x06\x0d\x00\x20\x00\x20\x03\x10\xcd\x01\x0c\x01\x0b\x20\x00\x20\x01\x20\x06\x20\x03\x20\x04\x10\x9f\x03\x21\x07\x20\x00\x20\x06\x10\xe4\x02\x0c\x03\x0b\x41\x7f\x21\x07\x0c\x02\x0b\x20\x00\x20\x06\x41\x24\x6a\x28\x02\x00\x20\x08\x41\x03\x74\x6a\x20\x03\x10\x98\x03\x0b\x41\x01\x21\x07\x0b\x20\x05\x41\x20\x6a\x24\x00\x20\x07\x0b\x98\x04\x01\x03\x7f\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x02\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x01\xa7\x22\x03\x41\x28\x6a\x28\x02\x00\x20\x02\xa7\x22\x04\x4d\x0d\x00\x20\x03\x2f\x01\x06\x41\x7e\x6a\x22\x05\x41\x1d\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x05\x0e\x1e\x00\x0b\x0b\x0b\x0b\x0b\x00\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x02\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x00\x0b\x20\x03\x28\x02\x24\x20\x04\x41\x03\x74\x6a\x29\x03\x00\x10\xc0\x01\x0f\x0b\x20\x03\x28\x02\x24\x20\x04\x6a\x30\x00\x00\x42\xff\xff\xff\xff\x0f\x83\x0f\x0b\x20\x03\x28\x02\x24\x20\x04\x6a\x31\x00\x00\x0f\x0b\x20\x03\x28\x02\x24\x20\x04\x41\x01\x74\x6a\x32\x01\x00\x42\xff\xff\xff\xff\x0f\x83\x0f\x0b\x20\x03\x28\x02\x24\x20\x04\x41\x01\x74\x6a\x33\x01\x00\x0f\x0b\x20\x03\x28\x02\x24\x20\x04\x41\x02\x74\x6a\x35\x02\x00\x0f\x0b\x02\x40\x20\x03\x28\x02\x24\x20\x04\x41\x02\x74\x6a\x28\x02\x00\x22\x03\x41\x00\x48\x0d\x00\x20\x03\xad\x0f\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x03\xb8\xbd\x22\x01\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x0f\x0b\x20\x00\x20\x03\x28\x02\x24\x20\x04\x41\x03\x74\x6a\x29\x03\x00\x10\xf7\x03\x0f\x0b\x20\x00\x20\x03\x28\x02\x24\x20\x04\x41\x03\x74\x6a\x29\x03\x00\x10\xb4\x02\x0f\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x03\x28\x02\x24\x20\x04\x41\x02\x74\x6a\x2a\x02\x00\xbb\xbd\x22\x01\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x0f\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x03\x28\x02\x24\x20\x04\x41\x03\x74\x6a\x29\x03\x00\x22\x01\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x0f\x0b\x20\x00\x20\x02\x10\xa3\x03\x21\x03\x20\x00\x20\x02\x10\xcd\x01\x02\x40\x20\x03\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x00\x20\x01\x20\x03\x20\x01\x41\x00\x10\xb4\x01\x21\x01\x20\x00\x20\x03\x10\xe4\x02\x20\x01\x0b\xd8\x01\x01\x05\x7f\x20\x01\xa7\x22\x05\x20\x02\x36\x02\x20\x20\x05\x41\x24\x6a\x42\x00\x37\x02\x00\x02\x40\x20\x02\x28\x02\x3c\x22\x06\x45\x0d\x00\x02\x40\x20\x00\x20\x06\x41\x02\x74\x10\xe2\x03\x22\x06\x45\x0d\x00\x20\x05\x20\x06\x36\x02\x24\x41\x00\x21\x07\x41\x00\x21\x05\x03\x40\x20\x05\x20\x02\x28\x02\x3c\x4e\x0d\x02\x20\x02\x28\x02\x24\x20\x07\x6a\x22\x08\x41\x02\x6a\x2f\x01\x00\x21\x09\x02\x40\x02\x40\x20\x08\x2d\x00\x00\x22\x08\x41\x01\x71\x45\x0d\x00\x20\x00\x20\x04\x20\x09\x20\x08\x41\x01\x76\x41\x01\x71\x10\x81\x03\x22\x08\x0d\x01\x0c\x03\x0b\x20\x03\x20\x09\x41\x02\x74\x6a\x28\x02\x00\x22\x08\x20\x08\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x0b\x20\x06\x20\x08\x36\x02\x00\x20\x06\x41\x04\x6a\x21\x06\x20\x07\x41\x08\x6a\x21\x07\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x00\x20\x01\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x01\x0b\x6e\x01\x02\x7f\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x03\x2f\x01\x06\x10\xc6\x02\x45\x0d\x00\x20\x03\x28\x02\x20\x2d\x00\x11\x41\x08\x71\x45\x0d\x00\x02\x40\x20\x03\x41\x28\x6a\x28\x02\x00\x22\x04\x45\x0d\x00\x20\x00\x20\x04\xad\x42\x80\x80\x80\x80\x70\x84\x10\xcd\x01\x0b\x41\x00\x21\x00\x02\x40\x20\x02\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x02\x10\xc0\x01\xa7\x21\x00\x0b\x20\x03\x20\x00\x36\x02\x28\x0b\x0b\x67\x01\x02\x7f\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\x10\xf0\x03\x0d\x00\x41\x7f\x21\x03\x20\x00\x20\x02\x10\xa3\x03\x22\x04\x45\x0d\x01\x20\x00\x20\x04\x10\xc0\x03\x21\x02\x20\x00\x20\x04\x10\xe4\x02\x20\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x01\x41\x36\x20\x02\x41\x01\x10\xc4\x01\x41\x00\x48\x0d\x01\x0b\x41\x00\x21\x03\x0b\x20\x03\x0b\x38\x00\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x02\x45\x0d\x00\x20\x01\x10\xf0\x03\x0d\x00\x20\x00\x20\x01\x41\x36\x20\x00\x20\x02\x10\xc5\x01\x41\x01\x10\xc4\x01\x41\x00\x4e\x0d\x00\x41\x7f\x0f\x0b\x41\x00\x0b\x84\x01\x01\x02\x7e\x20\x00\x20\x01\x10\xc5\x01\x21\x02\x02\x40\x20\x01\x41\x00\x48\x0d\x00\x20\x00\x28\x02\x10\x28\x02\x38\x20\x01\x41\x02\x74\x6a\x28\x02\x00\x29\x02\x04\x22\x03\xa7\x41\x80\x80\x80\x80\x78\x46\x0d\x00\x20\x03\x42\x80\x80\x80\x80\x80\x80\x80\x80\x40\x83\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x51\x20\x03\x42\xff\xff\xff\xff\xff\xff\xff\xff\xbf\x7f\x56\x20\x03\x42\x80\x80\x80\x80\xf0\xff\xff\xff\x3f\x83\x50\x71\x72\x45\x0d\x00\x20\x00\x41\x84\xdf\x01\x20\x02\x41\x86\xdf\x01\x10\xc1\x03\x21\x02\x0b\x20\x02\x0b\xd2\x01\x01\x05\x7f\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x02\x40\x20\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x90\x7f\x51\x0d\x00\x20\x00\x20\x02\x10\xf2\x03\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x0b\x20\x00\x20\x04\x41\x08\x6a\x20\x01\x10\x71\x22\x05\x20\x03\x10\x71\x22\x06\x6a\x20\x02\xa7\x22\x07\x28\x02\x04\x22\x08\x41\xff\xff\xff\xff\x07\x71\x6a\x20\x08\x41\x1f\x76\x10\xf3\x03\x0d\x00\x20\x04\x41\x08\x6a\x20\x01\x20\x05\x10\xf4\x03\x1a\x20\x04\x41\x08\x6a\x20\x07\x41\x00\x20\x07\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x10\xf5\x03\x1a\x20\x04\x41\x08\x6a\x20\x03\x20\x06\x10\xf4\x03\x1a\x20\x00\x20\x02\x10\xcd\x01\x20\x04\x41\x08\x6a\x10\xf6\x03\x21\x02\x0c\x01\x0b\x20\x00\x20\x02\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x02\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x02\x0b\xaf\x04\x02\x05\x7f\x01\x7e\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x20\x01\x42\x20\x88\xa7\x21\x05\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x03\x45\x0d\x00\x20\x05\x41\x7e\x71\x41\x02\x47\x0d\x01\x0c\x02\x0b\x20\x05\x41\x7f\x47\x0d\x01\x0b\x20\x02\x42\x20\x88\xa7\x41\x01\x6a\x22\x06\x41\x03\x4b\x0d\x00\x41\x00\x21\x07\x02\x40\x02\x40\x20\x06\x0e\x04\x00\x02\x02\x01\x00\x0b\x20\x02\xa7\x21\x07\x0b\x41\x01\x21\x06\x02\x40\x20\x05\x41\x7f\x46\x0d\x00\x20\x03\x0d\x03\x0b\x02\x40\x02\x40\x20\x01\xa7\x22\x08\x2f\x01\x06\x41\x30\x47\x0d\x00\x20\x00\x20\x04\x41\x18\x6a\x20\x01\x41\xe0\x00\x10\xe3\x03\x22\x05\x45\x0d\x03\x20\x05\x29\x03\x00\x21\x01\x02\x40\x20\x04\x29\x03\x18\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x20\x01\x20\x02\x20\x03\x10\xc2\x03\x21\x06\x0c\x05\x0b\x20\x04\x20\x02\x37\x03\x08\x20\x04\x20\x01\x37\x03\x00\x20\x00\x20\x09\x20\x05\x29\x03\x08\x41\x02\x20\x04\x10\xef\x02\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x02\x40\x20\x00\x20\x01\x10\x9a\x03\x0d\x00\x20\x03\x45\x0d\x02\x20\x00\x41\x88\xdf\x01\x41\x00\x10\xb2\x02\x0c\x04\x0b\x20\x00\x20\x05\x29\x03\x00\x10\xe4\x03\x22\x03\x41\x00\x48\x0d\x03\x41\x01\x21\x06\x20\x03\x0d\x04\x20\x00\x20\x05\x29\x03\x00\x10\x92\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x00\x20\x01\x10\xcd\x01\x20\x02\xa7\x20\x01\xa7\x46\x0d\x04\x20\x00\x41\x9d\xdf\x01\x41\x00\x10\xb2\x02\x0c\x03\x0b\x20\x08\x28\x02\x10\x28\x02\x2c\x20\x07\x46\x0d\x03\x02\x40\x20\x08\x2d\x00\x05\x41\x01\x71\x0d\x00\x20\x03\x45\x0d\x01\x20\x00\x41\xad\xdd\x01\x41\x00\x10\xb2\x02\x0c\x03\x0b\x02\x40\x20\x07\x45\x0d\x00\x20\x07\x21\x05\x03\x40\x02\x40\x20\x05\x20\x08\x47\x0d\x00\x20\x03\x45\x0d\x03\x20\x00\x41\xbb\xdf\x01\x41\x00\x10\xb2\x02\x0c\x05\x0b\x20\x05\x28\x02\x10\x28\x02\x2c\x22\x05\x0d\x00\x0b\x20\x02\x10\xc0\x01\x1a\x0b\x41\x7f\x21\x06\x20\x00\x20\x08\x41\x00\x10\xd1\x03\x0d\x03\x02\x40\x20\x08\x28\x02\x10\x22\x05\x28\x02\x2c\x22\x03\x45\x0d\x00\x20\x00\x20\x03\xad\x42\x80\x80\x80\x80\x70\x84\x10\xcd\x01\x0b\x20\x05\x20\x07\x36\x02\x2c\x41\x01\x21\x06\x0c\x03\x0b\x41\x00\x21\x06\x0c\x02\x0b\x20\x00\x10\x8a\x03\x0b\x41\x7f\x21\x06\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x06\x0b\x0d\x00\x20\x00\x41\xfc\xdf\x01\x41\x00\x10\xb2\x02\x0b\x0d\x00\x20\x00\x20\x01\x41\xd4\xdf\x01\x10\xf1\x02\x0b\x6d\x02\x01\x7e\x01\x7f\x02\x40\x02\x40\x20\x00\x20\x01\x41\xe9\x00\x20\x01\x41\x00\x10\xb4\x01\x22\x03\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x03\x10\x9a\x03\x21\x04\x20\x00\x20\x01\x41\xc0\x00\x20\x01\x41\x00\x10\xb4\x01\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0b\x41\x00\x21\x04\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x02\x20\x04\x36\x02\x00\x20\x01\x0b\x6f\x02\x02\x7f\x02\x7e\x41\x7f\x21\x03\x02\x40\x20\x00\x20\x01\x41\x78\x6a\x22\x04\x29\x03\x00\x22\x05\x20\x02\x10\xb3\x03\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x05\x10\xcd\x01\x20\x04\x20\x06\x37\x03\x00\x20\x00\x20\x06\x41\xea\x00\x20\x06\x41\x00\x10\xb4\x01\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x01\x20\x06\x37\x03\x00\x41\x00\x21\x03\x0b\x20\x03\x0b\xd3\x01\x02\x05\x7f\x01\x7e\x20\x00\x41\xd0\x00\x6a\x21\x02\x20\x01\x41\x18\x6a\x21\x03\x20\x01\x41\x1c\x6a\x28\x02\x00\x21\x00\x02\x40\x03\x40\x20\x00\x20\x03\x46\x0d\x01\x20\x00\x41\x78\x6a\x21\x04\x20\x00\x28\x02\x04\x21\x05\x02\x40\x20\x01\x41\x10\x41\x14\x20\x00\x41\x7d\x6a\x2d\x00\x00\x22\x06\x41\x02\x71\x1b\x6a\x28\x02\x00\x20\x00\x41\x7e\x6a\x2f\x01\x00\x41\x03\x74\x6a\x29\x03\x00\x22\x07\x42\x20\x88\xa7\x41\x75\x49\x0d\x00\x20\x07\xa7\x22\x06\x20\x06\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x20\x04\x2d\x00\x05\x21\x06\x0b\x20\x04\x20\x06\x41\x01\x72\x3a\x00\x05\x20\x00\x41\x7c\x6a\x41\x03\x3a\x00\x00\x20\x02\x28\x02\x00\x22\x04\x20\x00\x36\x02\x04\x20\x00\x20\x04\x36\x02\x00\x20\x00\x20\x07\x37\x03\x10\x20\x00\x20\x00\x41\x10\x6a\x36\x02\x08\x20\x00\x20\x02\x36\x02\x04\x20\x02\x20\x00\x36\x02\x00\x20\x05\x21\x00\x0c\x00\x0b\x00\x0b\x0b\x76\x02\x03\x7f\x01\x7e\x20\x00\x41\x90\xce\x00\x36\x02\xec\x01\x41\x00\x21\x01\x02\x40\x20\x00\x28\x02\x10\x22\x02\x28\x02\x90\x01\x22\x03\x45\x0d\x00\x20\x02\x20\x02\x28\x02\x94\x01\x20\x03\x11\x03\x00\x45\x0d\x00\x20\x00\x41\xb4\xe7\x01\x41\x00\x10\xc2\x02\x41\x7f\x21\x01\x20\x00\x28\x02\x10\x29\x03\x80\x01\x22\x04\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x04\xa7\x22\x00\x2f\x01\x06\x41\x03\x47\x0d\x00\x20\x00\x20\x00\x2d\x00\x05\x41\x20\x72\x3a\x00\x05\x0b\x20\x01\x0b\x17\x00\x20\x00\x20\x00\x28\x02\x28\x20\x01\x41\x03\x74\x6a\x29\x03\x00\x20\x01\x10\xc6\x01\x0b\x24\x00\x20\x00\x20\x01\x41\x30\x20\x03\xad\x41\x01\x10\xc4\x01\x1a\x20\x00\x20\x01\x41\x36\x20\x00\x20\x02\x10\xc5\x01\x41\x01\x10\xc4\x01\x1a\x0b\xd3\x01\x01\x03\x7f\x41\x00\x21\x06\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x07\x28\x02\x10\x22\x08\x20\x08\x28\x02\x18\x20\x02\x71\x41\x7f\x73\x41\x02\x74\x6a\x28\x02\x00\x21\x06\x02\x40\x03\x40\x20\x06\x45\x0d\x01\x02\x40\x20\x08\x20\x06\x41\x7f\x6a\x41\x03\x74\x6a\x22\x06\x41\x34\x6a\x28\x02\x00\x20\x02\x46\x0d\x00\x20\x06\x41\x30\x6a\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x21\x06\x0c\x01\x0b\x0b\x10\x40\x00\x0b\x02\x40\x20\x00\x20\x07\x20\x02\x20\x05\x41\x07\x71\x41\x30\x72\x10\xff\x02\x22\x02\x0d\x00\x41\x7f\x0f\x0b\x41\x01\x21\x06\x20\x00\x20\x00\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x20\x02\x20\x00\x36\x02\x00\x20\x00\x41\x03\x71\x0d\x01\x20\x02\x20\x04\x36\x02\x04\x20\x02\x20\x00\x20\x03\x72\x36\x02\x00\x0b\x20\x06\x0f\x0b\x41\x96\xd8\x01\x41\xae\xb7\x01\x41\xf4\xc8\x00\x41\xb9\xd8\x01\x10\x4a\x00\x0b\x2f\x01\x01\x7f\x20\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x01\x20\x02\x20\x03\x28\x02\x08\x11\x01\x00\x21\x01\x02\x40\x20\x02\x45\x0d\x00\x20\x01\x0d\x00\x20\x00\x10\xc1\x02\x0b\x20\x01\x0b\xee\x01\x01\x05\x7f\x02\x40\x02\x40\x20\x00\x20\x01\x28\x02\x18\x22\x02\x41\x01\x6a\x41\x02\x74\x22\x03\x20\x01\x28\x02\x1c\x41\x03\x74\x6a\x41\x30\x6a\x22\x04\x10\xc0\x02\x22\x05\x0d\x00\x41\x00\x21\x03\x0c\x01\x0b\x20\x05\x20\x01\x20\x01\x28\x02\x18\x41\x7f\x73\x41\x02\x74\x6a\x20\x04\x10\x70\x21\x05\x20\x00\x28\x02\x10\x21\x04\x20\x05\x20\x03\x6a\x22\x03\x41\x02\x3a\x00\x04\x20\x04\x28\x02\x50\x22\x01\x20\x03\x41\x08\x6a\x22\x06\x36\x02\x04\x20\x03\x20\x01\x36\x02\x08\x20\x03\x41\x01\x36\x02\x00\x41\x00\x21\x01\x20\x03\x41\x00\x3a\x00\x10\x20\x03\x20\x04\x41\xd0\x00\x6a\x36\x02\x0c\x20\x04\x20\x06\x36\x02\x50\x02\x40\x20\x03\x28\x02\x2c\x22\x04\x45\x0d\x00\x20\x04\xad\x42\x80\x80\x80\x80\x70\x84\x10\xc0\x01\x1a\x0b\x20\x02\x41\x02\x74\x20\x05\x6a\x41\x38\x6a\x21\x04\x03\x40\x20\x01\x20\x03\x28\x02\x20\x4f\x0d\x01\x20\x00\x20\x04\x28\x02\x00\x10\xd9\x03\x1a\x20\x04\x41\x08\x6a\x21\x04\x20\x01\x41\x01\x6a\x21\x01\x0c\x00\x0b\x00\x0b\x20\x03\x0b\x3d\x01\x01\x7f\x20\x01\x20\x00\x28\x02\xd4\x01\x20\x01\x28\x02\x14\x41\x20\x20\x00\x28\x02\xc8\x01\x6b\x76\x41\x02\x74\x6a\x22\x02\x28\x02\x00\x36\x02\x28\x20\x00\x20\x00\x28\x02\xd0\x01\x41\x01\x6a\x36\x02\xd0\x01\x20\x02\x20\x01\x36\x02\x00\x0b\xc8\x03\x02\x02\x7f\x01\x7c\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x42\x20\x88\xa7\x22\x05\x41\x03\x49\x0d\x00\x20\x05\x41\x0a\x6a\x41\x02\x4f\x0d\x01\x20\x04\x41\x1c\x6a\x20\x02\xa7\x41\x04\x6a\x22\x03\x41\x01\x10\xa5\x04\x20\x04\x42\x00\x37\x02\x14\x20\x04\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x0c\x20\x04\x20\x00\x28\x02\xd8\x01\x36\x02\x08\x20\x04\x41\x08\x6a\x20\x04\x28\x02\x1c\x22\x05\xad\x10\xb9\x02\x1a\x20\x04\x41\x08\x6a\x20\x03\x10\x92\x04\x21\x03\x20\x04\x41\x08\x6a\x10\xd7\x02\x20\x00\x20\x02\x10\xcd\x01\x20\x03\x45\x0d\x02\x0c\x04\x0b\x20\x02\xa7\x22\x05\x41\x00\x48\x0d\x01\x20\x04\x20\x05\x36\x02\x1c\x0c\x03\x0b\x02\x40\x20\x05\x41\x0b\x6a\x41\x12\x49\x0d\x00\x02\x40\x02\x40\x20\x02\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\x22\x06\x44\x00\x00\x00\x00\x00\x00\xf0\x41\x63\x20\x06\x44\x00\x00\x00\x00\x00\x00\x00\x00\x66\x71\x45\x0d\x00\x20\x06\xab\x21\x05\x0c\x01\x0b\x41\x00\x21\x05\x0b\x20\x04\x20\x05\x36\x02\x1c\x20\x06\x20\x05\xb8\x61\x0d\x03\x0c\x01\x0b\x02\x40\x20\x03\x45\x0d\x00\x41\x7f\x21\x05\x20\x00\x20\x02\x10\xed\x03\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x04\x20\x00\x20\x04\x41\x1c\x6a\x20\x02\x41\x01\x10\xcf\x03\x0d\x04\x20\x04\x28\x02\x1c\x21\x05\x0c\x03\x0b\x02\x40\x20\x00\x20\x04\x41\x1c\x6a\x20\x02\x10\xc9\x04\x45\x0d\x00\x20\x00\x20\x02\x10\xcd\x01\x0c\x02\x0b\x41\x7f\x21\x05\x20\x00\x20\x02\x10\xed\x03\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x00\x20\x04\x41\x04\x6a\x20\x02\x41\x00\x10\xcf\x03\x0d\x03\x20\x04\x28\x02\x04\x22\x05\x20\x04\x28\x02\x1c\x46\x0d\x02\x0b\x20\x00\x41\xbb\xe1\x01\x41\x00\x10\xa6\x04\x0b\x41\x7f\x21\x05\x0c\x01\x0b\x20\x01\x20\x05\x36\x02\x00\x41\x00\x21\x05\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x05\x0b\x82\x01\x01\x03\x7f\x02\x40\x02\x40\x20\x00\x41\x01\x71\x0d\x00\x41\x00\x21\x02\x20\x01\x41\x81\x02\x71\x41\x81\x02\x46\x0d\x01\x02\x40\x20\x01\x41\x80\x08\x71\x45\x0d\x00\x20\x01\x20\x00\x73\x41\x04\x71\x0d\x02\x0b\x20\x01\x41\x80\xf4\x00\x71\x45\x0d\x00\x41\x00\x21\x02\x20\x00\x41\x30\x71\x22\x03\x41\x10\x46\x20\x01\x41\x80\x30\x71\x22\x04\x41\x00\x47\x73\x0d\x01\x20\x01\x41\x82\x04\x71\x41\x82\x04\x47\x0d\x00\x20\x00\x41\x02\x71\x0d\x00\x20\x03\x41\x10\x46\x0d\x00\x20\x04\x45\x0d\x01\x0b\x41\x01\x21\x02\x0b\x20\x02\x0b\x9e\x01\x01\x02\x7f\x02\x40\x20\x01\x28\x02\x10\x22\x03\x2d\x00\x10\x0d\x00\x41\x00\x0f\x0b\x02\x40\x02\x40\x20\x03\x28\x02\x00\x41\x01\x46\x0d\x00\x02\x40\x02\x40\x20\x02\x0d\x00\x41\x00\x21\x04\x0c\x01\x0b\x20\x02\x28\x02\x00\x20\x03\x6b\x41\x50\x6a\x41\x03\x75\x21\x04\x0b\x02\x40\x20\x00\x20\x03\x10\xcd\x03\x22\x03\x0d\x00\x41\x7f\x0f\x0b\x20\x00\x28\x02\x10\x20\x01\x28\x02\x10\x10\xd9\x02\x20\x01\x20\x03\x36\x02\x10\x41\x00\x21\x01\x20\x02\x45\x0d\x01\x20\x02\x20\x03\x20\x04\x41\x03\x74\x6a\x41\x30\x6a\x36\x02\x00\x41\x00\x0f\x0b\x20\x00\x28\x02\x10\x20\x03\x10\xe0\x02\x41\x00\x21\x01\x20\x03\x41\x00\x3a\x00\x10\x0b\x20\x01\x0b\xc4\x01\x01\x04\x7f\x41\x7f\x21\x02\x02\x40\x20\x00\x20\x01\x41\x00\x10\xd1\x03\x0d\x00\x02\x40\x20\x01\x28\x02\x10\x22\x03\x28\x02\x20\x20\x01\x41\x28\x6a\x28\x02\x00\x22\x04\x6a\x22\x05\x20\x03\x28\x02\x1c\x4d\x0d\x00\x20\x00\x20\x01\x41\x10\x6a\x20\x01\x20\x05\x10\x90\x04\x0d\x01\x0b\x20\x01\x28\x02\x24\x21\x03\x41\x00\x21\x02\x02\x40\x03\x40\x20\x04\x20\x02\x46\x0d\x01\x20\x00\x20\x01\x20\x02\x41\x80\x80\x80\x80\x78\x72\x41\x07\x10\xff\x02\x20\x03\x29\x03\x00\x37\x03\x00\x20\x02\x41\x01\x6a\x21\x02\x20\x03\x41\x08\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x10\x22\x02\x41\x10\x6a\x20\x01\x28\x02\x24\x20\x02\x28\x02\x04\x11\x00\x00\x41\x00\x21\x02\x20\x01\x41\x00\x36\x02\x28\x20\x01\x42\x00\x37\x03\x20\x20\x01\x20\x01\x2d\x00\x05\x41\xf7\x01\x71\x3a\x00\x05\x0b\x20\x02\x0b\x93\x04\x02\x05\x7f\x02\x7e\x02\x40\x20\x01\x41\x7f\x4a\x0d\x00\x20\x01\x41\xff\xff\xff\xff\x07\x71\xad\x0f\x0b\x02\x40\x02\x40\x20\x00\x28\x02\x10\x22\x02\x28\x02\x2c\x20\x01\x4d\x0d\x00\x02\x40\x02\x40\x20\x02\x28\x02\x38\x20\x01\x41\x02\x74\x6a\x28\x02\x00\x22\x01\x29\x02\x04\x22\x07\x42\x80\x80\x80\x80\x80\x80\x80\x80\x40\x83\x42\x80\x80\x80\x80\x80\x80\x80\x80\xc0\x00\x52\x0d\x00\x20\x07\xa7\x22\x03\x41\xff\xff\xff\xff\x07\x71\x21\x02\x02\x40\x02\x40\x20\x03\x41\x7f\x4a\x0d\x00\x20\x02\x45\x0d\x02\x20\x01\x41\x10\x6a\x22\x04\x21\x05\x02\x40\x20\x04\x2f\x01\x00\x22\x03\x41\x2d\x47\x0d\x00\x20\x01\x41\x12\x6a\x22\x05\x2f\x01\x00\x21\x03\x20\x02\x41\x02\x47\x0d\x00\x42\x80\x80\x80\x80\xc0\xfe\xff\x03\x21\x07\x20\x03\x41\xff\xff\x03\x71\x41\x30\x46\x0d\x04\x0b\x20\x03\x41\xff\xff\x03\x71\x22\x03\x41\x50\x6a\x41\x0a\x49\x0d\x01\x20\x03\x41\xc9\x00\x47\x0d\x02\x20\x04\x20\x02\x41\x01\x74\x6a\x20\x05\x6b\x41\x10\x47\x0d\x02\x20\x05\x41\x02\x6a\x41\x8c\xde\x01\x41\x0e\x10\x6b\x45\x0d\x01\x0c\x02\x0b\x20\x01\x41\x10\x6a\x22\x03\x20\x02\x6a\x22\x05\x20\x03\x4d\x0d\x01\x02\x40\x20\x03\x2d\x00\x00\x22\x04\x41\x2d\x47\x0d\x00\x20\x03\x41\x01\x6a\x21\x06\x20\x03\x2d\x00\x01\x21\x04\x02\x40\x20\x02\x41\x02\x46\x0d\x00\x20\x06\x21\x03\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\xfe\xff\x03\x21\x07\x20\x06\x21\x03\x20\x04\x41\xff\x01\x71\x41\x30\x46\x0d\x03\x0b\x20\x04\x41\xff\x01\x71\x22\x02\x41\x50\x6a\x41\x0a\x49\x0d\x00\x20\x02\x41\xc9\x00\x47\x0d\x01\x20\x05\x20\x03\x6b\x41\x08\x47\x0d\x01\x20\x03\x41\x01\x6a\x41\x9a\xde\x01\x41\x07\x10\x6b\x0d\x01\x0b\x20\x00\x20\x01\xad\x42\x80\x80\x80\x80\x90\x7f\x84\x10\xc0\x01\x10\xed\x03\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x02\x40\x20\x00\x20\x07\x10\xe6\x02\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x07\x10\xcd\x01\x20\x08\x0f\x0b\x20\x01\x20\x08\xa7\x10\x89\x04\x21\x01\x20\x00\x20\x08\x10\xcd\x01\x20\x01\x45\x0d\x03\x20\x00\x20\x07\x10\xcd\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x07\x0b\x20\x07\x0f\x0b\x41\xad\xc2\x01\x41\xae\xb7\x01\x41\xcc\x18\x41\xf5\xdd\x01\x10\x4a\x00\x0b\x20\x07\x0b\x72\x02\x03\x7f\x02\x7c\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x02\x40\x02\x40\x20\x01\x42\x20\x88\xa7\x22\x03\x45\x0d\x00\x41\x00\x21\x04\x20\x03\x41\x0b\x6a\x41\x12\x49\x0d\x01\x0b\x02\x40\x20\x00\x20\x02\x41\x08\x6a\x20\x01\x10\xdf\x04\x45\x0d\x00\x41\x7f\x21\x04\x0c\x01\x0b\x20\x02\x2b\x03\x08\x22\x05\x99\x22\x06\x44\x00\x00\x00\x00\x00\x00\xf0\x7f\x62\x20\x06\x20\x06\x61\x71\x20\x05\x9c\x20\x05\x61\x71\x21\x04\x0b\x20\x02\x41\x10\x6a\x24\x00\x20\x04\x0b\x62\x01\x02\x7f\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x01\x41\x80\x80\x01\x71\x0d\x00\x41\x00\x21\x05\x20\x01\x41\x80\x80\x02\x71\x45\x0d\x01\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x22\x01\x45\x0d\x01\x20\x01\x2d\x00\x28\x41\x01\x71\x45\x0d\x01\x0b\x20\x04\x20\x03\x36\x02\x0c\x20\x00\x41\x04\x20\x02\x20\x03\x10\xc3\x02\x41\x7f\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\xdf\x05\x02\x03\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x07\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x2d\x00\x05\x22\x08\x41\x04\x71\x45\x0d\x00\x02\x40\x20\x01\x2f\x01\x06\x22\x09\x41\x02\x47\x0d\x00\x02\x40\x02\x40\x20\x08\x41\x08\x71\x45\x0d\x00\x02\x40\x02\x40\x20\x02\x41\x7f\x4a\x0d\x00\x20\x07\x20\x02\x41\xff\xff\xff\xff\x07\x71\x22\x09\x36\x02\x0c\x20\x09\x20\x01\x41\x28\x6a\x28\x02\x00\x47\x0d\x01\x20\x08\x41\x01\x71\x45\x0d\x06\x20\x06\x41\x80\x30\x71\x0d\x01\x20\x06\x20\x06\x41\x08\x76\x71\x41\x07\x71\x41\x07\x47\x0d\x01\x20\x00\x20\x01\x20\x03\x10\xc0\x01\x20\x06\x10\xee\x03\x21\x08\x0c\x09\x0b\x20\x00\x20\x07\x41\x0c\x6a\x20\x02\x10\x8e\x04\x45\x0d\x04\x0b\x41\x7f\x21\x08\x20\x00\x20\x01\x10\xd2\x03\x45\x0d\x01\x0c\x07\x0b\x20\x00\x20\x07\x41\x0c\x6a\x20\x02\x10\x8e\x04\x45\x0d\x02\x0b\x20\x00\x20\x07\x41\x08\x6a\x20\x01\x28\x02\x14\x22\x09\x29\x03\x00\x10\xc9\x04\x1a\x20\x07\x28\x02\x0c\x41\x01\x6a\x22\x08\x20\x07\x28\x02\x08\x4d\x0d\x01\x02\x40\x20\x01\x28\x02\x10\x41\x33\x6a\x2d\x00\x00\x41\x08\x71\x0d\x00\x20\x00\x20\x06\x41\x30\x10\xef\x03\x21\x08\x0c\x06\x0b\x20\x07\x20\x08\x36\x02\x08\x02\x40\x02\x40\x20\x08\x41\x00\x48\x0d\x00\x20\x08\xad\x21\x0a\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x08\xb8\xbd\x22\x0a\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x0a\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x0a\x0b\x20\x00\x20\x09\x20\x0a\x10\x98\x03\x0c\x01\x0b\x02\x40\x20\x09\x41\x6b\x6a\x41\xff\xff\x03\x71\x41\x0a\x4b\x0d\x00\x20\x00\x20\x02\x10\xf7\x02\x22\x08\x45\x0d\x01\x20\x08\x41\x00\x48\x0d\x04\x20\x00\x20\x06\x41\x82\xdd\x01\x41\x00\x10\xd5\x03\x21\x08\x0c\x05\x0b\x20\x06\x41\x80\x80\x08\x71\x0d\x00\x20\x00\x28\x02\x10\x28\x02\x44\x20\x09\x41\x18\x6c\x6a\x28\x02\x14\x22\x08\x45\x0d\x00\x20\x01\xad\x42\x80\x80\x80\x80\x70\x84\x21\x0a\x02\x40\x20\x08\x28\x02\x0c\x22\x08\x45\x0d\x00\x20\x00\x20\x0a\x20\x02\x20\x03\x20\x04\x20\x05\x20\x06\x20\x08\x11\x2c\x00\x21\x08\x0c\x05\x0b\x20\x00\x20\x0a\x10\xe4\x03\x22\x08\x41\x00\x48\x0d\x03\x20\x08\x45\x0d\x01\x0b\x20\x01\x2d\x00\x05\x41\x01\x71\x0d\x01\x0b\x20\x00\x20\x06\x41\xad\xdd\x01\x41\x00\x10\xd5\x03\x21\x08\x0c\x02\x0b\x20\x00\x20\x01\x20\x02\x20\x06\x41\x05\x71\x41\x10\x72\x20\x06\x41\x07\x71\x20\x06\x41\x80\x30\x71\x22\x08\x1b\x10\xff\x02\x22\x01\x45\x0d\x00\x02\x40\x20\x08\x45\x0d\x00\x20\x01\x41\x00\x36\x02\x00\x02\x40\x20\x06\x41\x80\x10\x71\x45\x0d\x00\x20\x00\x20\x04\x10\xf0\x02\x45\x0d\x00\x20\x01\x20\x04\x10\xc0\x01\x3e\x02\x00\x0b\x20\x01\x41\x00\x36\x02\x04\x41\x01\x21\x08\x20\x06\x41\x80\x20\x71\x45\x0d\x02\x20\x00\x20\x05\x10\xf0\x02\x45\x0d\x02\x20\x01\x20\x05\x10\xc0\x01\x3e\x02\x04\x0c\x02\x0b\x02\x40\x02\x40\x20\x06\x41\x80\xc0\x00\x71\x45\x0d\x00\x20\x01\x20\x03\x10\xc0\x01\x37\x03\x00\x0c\x01\x0b\x20\x01\x42\x80\x80\x80\x80\x30\x37\x03\x00\x0b\x41\x01\x21\x08\x0c\x01\x0b\x41\x7f\x21\x08\x0b\x20\x07\x41\x10\x6a\x24\x00\x20\x08\x0b\x80\x06\x01\x08\x7f\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x41\x7f\x21\x05\x02\x40\x20\x00\x20\x04\x41\x0c\x6a\x20\x02\x41\x00\x10\xcf\x03\x0d\x00\x02\x40\x20\x01\x28\x02\x10\x41\x33\x6a\x2d\x00\x00\x41\x08\x71\x0d\x00\x20\x00\x20\x03\x41\x30\x10\xef\x03\x21\x05\x0c\x01\x0b\x02\x40\x20\x01\x2d\x00\x05\x41\x08\x71\x45\x0d\x00\x02\x40\x20\x04\x28\x02\x0c\x22\x06\x20\x01\x41\x28\x6a\x28\x02\x00\x22\x07\x4f\x0d\x00\x20\x06\x41\x03\x74\x21\x03\x20\x06\x21\x05\x02\x40\x03\x40\x20\x05\x20\x07\x4f\x0d\x01\x20\x00\x20\x01\x28\x02\x24\x20\x03\x6a\x29\x03\x00\x10\xcd\x01\x20\x03\x41\x08\x6a\x21\x03\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x01\x20\x06\x36\x02\x28\x0b\x02\x40\x02\x40\x20\x06\x41\x00\x48\x0d\x00\x20\x06\xad\x21\x02\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x06\xb8\xbd\x22\x02\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x02\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x02\x0b\x20\x01\x28\x02\x14\x20\x02\x37\x03\x00\x41\x01\x21\x05\x0c\x01\x0b\x20\x00\x20\x04\x41\x04\x6a\x20\x01\x28\x02\x14\x29\x03\x00\x10\xc9\x04\x1a\x02\x40\x02\x40\x02\x40\x20\x04\x28\x02\x04\x22\x07\x20\x04\x28\x02\x0c\x22\x08\x4d\x0d\x00\x02\x40\x20\x07\x20\x08\x6b\x20\x01\x28\x02\x10\x22\x09\x28\x02\x20\x22\x05\x4b\x0d\x00\x03\x40\x20\x07\x20\x08\x4d\x0d\x03\x20\x00\x20\x01\x20\x00\x20\x07\x41\x7f\x6a\x22\x0a\x10\xd2\x04\x22\x05\x10\x8d\x04\x21\x06\x20\x00\x20\x05\x10\xe4\x02\x20\x06\x45\x0d\x03\x20\x0a\x21\x07\x0c\x00\x0b\x00\x0b\x20\x04\x20\x08\x36\x02\x04\x41\x00\x21\x0b\x20\x08\x21\x07\x20\x09\x41\x30\x6a\x22\x06\x21\x0a\x03\x40\x02\x40\x20\x0b\x20\x05\x48\x0d\x00\x20\x04\x20\x07\x36\x02\x04\x41\x00\x21\x0a\x41\x30\x21\x0b\x03\x40\x20\x0a\x20\x05\x4e\x0d\x05\x02\x40\x20\x06\x28\x02\x04\x22\x05\x45\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x05\x10\x8e\x04\x45\x0d\x00\x20\x04\x28\x02\x08\x20\x07\x49\x0d\x00\x20\x00\x20\x01\x20\x06\x28\x02\x04\x10\x8d\x04\x1a\x20\x01\x28\x02\x10\x22\x09\x20\x0b\x6a\x21\x06\x0b\x20\x0b\x41\x08\x6a\x21\x0b\x20\x06\x41\x08\x6a\x21\x06\x20\x0a\x41\x01\x6a\x21\x0a\x20\x09\x28\x02\x20\x21\x05\x0c\x00\x0b\x00\x0b\x02\x40\x20\x0a\x41\x04\x6a\x28\x02\x00\x22\x05\x45\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x05\x10\x8e\x04\x45\x0d\x00\x20\x04\x28\x02\x08\x22\x05\x20\x07\x49\x0d\x00\x20\x07\x20\x05\x41\x01\x6a\x20\x0a\x41\x03\x6a\x2d\x00\x00\x41\x04\x71\x1b\x21\x07\x0b\x20\x0a\x41\x08\x6a\x21\x0a\x20\x0b\x41\x01\x6a\x21\x0b\x20\x09\x28\x02\x20\x21\x05\x0c\x00\x0b\x00\x0b\x20\x04\x20\x08\x36\x02\x04\x20\x08\x21\x07\x0c\x01\x0b\x20\x04\x20\x07\x36\x02\x04\x0b\x20\x01\x28\x02\x14\x21\x05\x02\x40\x02\x40\x20\x07\x41\x00\x48\x0d\x00\x20\x07\xad\x21\x02\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x07\xb8\xbd\x22\x02\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x02\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x02\x0b\x20\x00\x20\x05\x20\x02\x10\x98\x03\x41\x01\x21\x05\x20\x07\x20\x08\x4d\x0d\x00\x20\x00\x20\x03\x41\xaa\xe1\x01\x41\x00\x10\xd5\x03\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x4b\x01\x01\x7f\x41\x00\x21\x04\x02\x40\x20\x02\x28\x02\x00\x28\x02\x00\x41\x1a\x76\x20\x03\x46\x0d\x00\x41\x7f\x21\x04\x20\x00\x20\x01\x20\x02\x10\xd1\x03\x0d\x00\x20\x02\x28\x02\x00\x22\x02\x20\x02\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x20\x03\x41\x1a\x74\x72\x36\x02\x00\x41\x00\x21\x04\x0b\x20\x04\x0b\x2d\x00\x02\x40\x20\x01\x41\xde\x01\x48\x0d\x00\x20\x00\x28\x02\x10\x28\x02\x38\x20\x01\x41\x02\x74\x6a\x28\x02\x00\x22\x00\x20\x00\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x0b\x20\x01\x0b\x94\x01\x02\x01\x7f\x01\x7e\x20\x00\x21\x03\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x02\x40\x20\x00\x20\x01\x41\x3b\x20\x01\x41\x00\x10\xb4\x01\x22\x04\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x04\x0f\x0b\x20\x04\x42\xff\xff\xff\xff\x6f\x56\x0d\x01\x20\x00\x20\x04\x10\xcd\x01\x20\x00\x20\x01\x10\xdd\x04\x22\x03\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x03\x28\x02\x28\x20\x02\x41\x03\x74\x6a\x29\x03\x00\x10\xc0\x01\x21\x04\x0b\x20\x00\x20\x04\x20\x02\x10\xc6\x01\x21\x01\x20\x00\x20\x04\x10\xcd\x01\x20\x01\x0b\x25\x01\x01\x7f\x41\x00\x21\x02\x02\x40\x20\x00\x20\x01\x10\xf0\x02\x0d\x00\x20\x00\x41\xca\xc3\x01\x41\x00\x10\xb2\x02\x41\x7f\x21\x02\x0b\x20\x02\x0b\x11\x00\x20\x00\x20\x01\x20\x02\x20\x03\x20\x04\x41\x02\x10\x86\x03\x0b\x84\x01\x02\x01\x7e\x02\x7f\x02\x40\x02\x40\x20\x01\x29\x02\x04\x22\x02\x42\xff\xff\xff\xff\xff\xff\xff\xff\xbf\x7f\x58\x0d\x00\x20\x01\x28\x02\x0c\x21\x00\x0c\x01\x0b\x20\x00\x28\x02\x34\x20\x02\x42\x20\x88\xa7\x20\x00\x28\x02\x24\x41\x7f\x6a\x71\x41\x02\x74\x6a\x21\x03\x20\x00\x28\x02\x38\x21\x04\x03\x40\x20\x04\x20\x03\x28\x02\x00\x22\x00\x41\x02\x74\x6a\x28\x02\x00\x22\x03\x20\x01\x46\x0d\x01\x20\x03\x41\x0c\x6a\x21\x03\x20\x00\x0d\x00\x0b\x41\xcd\xc1\x01\x41\xae\xb7\x01\x41\xeb\x14\x41\x90\xd9\x01\x10\x4a\x00\x0b\x20\x00\x0b\x3c\x01\x01\x7f\x02\x40\x20\x00\x28\x02\x10\x22\x03\x20\x01\x20\x02\x10\xb7\x04\x22\x01\x0d\x00\x20\x00\x10\xc1\x02\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x03\x28\x02\x38\x20\x01\x41\x02\x74\x6a\x35\x02\x00\x42\x80\x80\x80\x80\x80\x7f\x84\x0b\x36\x01\x01\x7f\x23\x00\x41\xd0\x00\x6b\x22\x03\x24\x00\x20\x03\x20\x00\x41\x10\x6a\x28\x02\x00\x20\x03\x41\x10\x6a\x20\x01\x10\xdc\x01\x36\x02\x00\x20\x00\x20\x02\x20\x03\x10\xc5\x04\x20\x03\x41\xd0\x00\x6a\x24\x00\x0b\x8c\x06\x02\x08\x7f\x02\x7c\x23\x00\x41\x30\x6b\x22\x04\x24\x00\x41\x00\x21\x05\x02\x40\x02\x40\x41\x07\x20\x01\x42\x20\x88\xa7\x22\x06\x20\x06\x41\x0b\x6a\x41\x11\x4b\x1b\x22\x07\x41\x0b\x6a\x22\x08\x41\x12\x4b\x0d\x00\x41\x07\x20\x02\x42\x20\x88\xa7\x22\x06\x20\x06\x41\x0b\x6a\x41\x11\x4b\x1b\x21\x06\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x08\x0e\x13\x0a\x08\x09\x03\x02\x0b\x0b\x0b\x0b\x0b\x04\x05\x00\x01\x01\x0b\x0b\x0b\x06\x0a\x0b\x20\x06\x41\x01\x47\x0d\x0a\x20\x01\xa7\x20\x02\xa7\x46\x21\x05\x0c\x0b\x0b\x20\x07\x20\x06\x46\x21\x05\x0c\x09\x0b\x20\x06\x41\x79\x47\x0d\x08\x20\x01\xa7\x20\x02\xa7\x10\x89\x04\x45\x21\x05\x0c\x08\x0b\x20\x01\xa7\x20\x02\xa7\x46\x20\x06\x41\x78\x46\x71\x21\x05\x0c\x07\x0b\x20\x06\x41\x7f\x47\x0d\x06\x20\x01\xa7\x20\x02\xa7\x46\x21\x05\x0c\x06\x0b\x20\x01\xa7\xb7\x21\x0c\x02\x40\x20\x06\x41\x07\x46\x0d\x00\x20\x06\x0d\x06\x20\x02\xa7\xb7\x21\x0d\x0c\x02\x0b\x20\x02\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\x21\x0d\x0c\x01\x0b\x20\x01\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\x21\x0c\x02\x40\x20\x06\x45\x0d\x00\x20\x06\x41\x07\x47\x0d\x05\x20\x02\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\x21\x0d\x0c\x01\x0b\x20\x02\xa7\xb7\x21\x0d\x0b\x02\x40\x02\x40\x20\x03\x45\x0d\x00\x02\x40\x20\x0c\x20\x0c\x61\x20\x0d\x20\x0d\x61\x22\x00\x71\x0d\x00\x20\x00\x20\x0c\x20\x0c\x62\x73\x21\x05\x0c\x07\x0b\x20\x03\x41\x02\x47\x0d\x01\x0b\x20\x0c\x20\x0d\x61\x21\x05\x0c\x05\x0b\x20\x0c\xbd\x20\x0d\xbd\x51\x21\x05\x0c\x04\x0b\x41\x00\x21\x05\x20\x06\x41\x76\x47\x0d\x02\x20\x00\x20\x04\x41\x18\x6a\x20\x01\x10\x91\x04\x22\x06\x20\x00\x20\x04\x20\x02\x10\x91\x04\x22\x08\x10\x92\x04\x21\x05\x02\x40\x20\x06\x20\x04\x41\x18\x6a\x47\x0d\x00\x20\x04\x41\x18\x6a\x10\xd7\x02\x0b\x20\x08\x20\x04\x47\x0d\x02\x20\x04\x10\xd7\x02\x0c\x02\x0b\x20\x06\x41\x77\x47\x0d\x01\x20\x02\xa7\x22\x07\x41\x04\x6a\x21\x06\x20\x01\xa7\x22\x09\x41\x04\x6a\x21\x08\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x03\x41\x02\x4b\x0d\x00\x02\x40\x20\x03\x0e\x03\x07\x01\x00\x07\x0b\x20\x09\x41\x0c\x6a\x28\x02\x00\x22\x05\x41\x80\x80\x80\x80\x78\x47\x0d\x01\x41\x01\x21\x05\x20\x07\x41\x0c\x6a\x28\x02\x00\x41\x80\x80\x80\x80\x78\x46\x0d\x08\x20\x07\x41\x0c\x6a\x28\x02\x00\x21\x03\x41\x80\x80\x80\x80\x78\x21\x05\x41\x00\x21\x0a\x0c\x02\x0b\x20\x09\x41\x0c\x6a\x28\x02\x00\x21\x05\x0b\x20\x07\x41\x0c\x6a\x28\x02\x00\x21\x03\x20\x05\x41\xff\xff\xff\xff\x07\x46\x22\x0a\x0d\x01\x0b\x20\x03\x41\xff\xff\xff\xff\x07\x47\x21\x0b\x41\xff\xff\xff\xff\x07\x21\x03\x20\x0b\x0d\x01\x0b\x41\x00\x41\x01\x41\x7f\x20\x0a\x1b\x20\x05\x20\x03\x46\x1b\x21\x05\x0c\x01\x0b\x41\x01\x21\x05\x20\x09\x41\x08\x6a\x28\x02\x00\x22\x03\x20\x07\x41\x08\x6a\x28\x02\x00\x47\x0d\x00\x41\x00\x20\x08\x20\x06\x10\x93\x04\x22\x05\x6b\x20\x05\x20\x03\x1b\x21\x05\x0b\x20\x05\x45\x21\x05\x0c\x02\x0b\x20\x08\x20\x06\x10\x92\x04\x21\x05\x0c\x01\x0b\x20\x06\x41\x75\x47\x0d\x00\x20\x01\xa7\x41\x04\x6a\x20\x02\xa7\x41\x04\x6a\x10\xbc\x02\x45\x21\x05\x0b\x20\x00\x20\x01\x10\xcd\x01\x20\x00\x20\x02\x10\xcd\x01\x0b\x20\x04\x41\x30\x6a\x24\x00\x20\x05\x0b\x0d\x00\x20\x00\x20\x01\x20\x02\x41\x00\x10\xb0\x02\x0b\x30\x01\x01\x7f\x02\x40\x20\x00\x28\x02\x10\x22\x02\x41\x10\x6a\x20\x01\x20\x02\x28\x02\x00\x11\x03\x00\x22\x02\x45\x0d\x00\x20\x02\x41\x00\x20\x01\x10\x74\x0f\x0b\x20\x00\x10\xc1\x02\x20\x02\x0b\xb0\x01\x02\x03\x7f\x01\x7e\x23\x00\x21\x04\x41\x00\x21\x05\x02\x40\x20\x02\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x02\xa7\x22\x06\x2f\x01\x06\x41\x30\x47\x0d\x00\x20\x06\x28\x02\x20\x21\x05\x0b\x02\x40\x02\x40\x20\x00\x28\x02\x10\x28\x02\x78\x20\x04\x4d\x0d\x00\x20\x00\x10\xfb\x02\x41\x00\x21\x06\x0c\x01\x0b\x02\x40\x20\x05\x2d\x00\x11\x45\x0d\x00\x20\x00\x10\xcb\x04\x41\x00\x21\x06\x0c\x01\x0b\x41\x00\x21\x06\x20\x00\x20\x05\x29\x03\x08\x22\x02\x20\x03\x20\x02\x41\x00\x10\xb4\x01\x22\x02\x42\x80\x80\x80\x80\x70\x83\x22\x07\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x01\x42\x80\x80\x80\x80\x30\x20\x02\x20\x07\x42\x80\x80\x80\x80\x20\x51\x1b\x37\x03\x00\x20\x05\x21\x06\x0b\x20\x04\x24\x00\x20\x06\x0b\xe5\x01\x01\x03\x7f\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x5a\x0d\x00\x41\x00\x21\x03\x0c\x01\x0b\x02\x40\x20\x01\xa7\x22\x03\x2f\x01\x06\x41\x30\x47\x0d\x00\x41\x7f\x21\x03\x20\x00\x20\x02\x41\x08\x6a\x20\x01\x41\xe1\x00\x10\xe3\x03\x22\x04\x45\x0d\x01\x02\x40\x20\x02\x29\x03\x08\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x20\x04\x29\x03\x00\x10\xe4\x03\x21\x03\x0c\x02\x0b\x20\x00\x20\x01\x20\x04\x29\x03\x08\x41\x01\x20\x04\x10\xef\x02\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x01\x10\x9a\x03\x21\x03\x02\x40\x20\x00\x20\x04\x29\x03\x00\x10\xe4\x03\x22\x04\x41\x00\x4e\x0d\x00\x20\x04\x21\x03\x0c\x02\x0b\x20\x03\x20\x04\x46\x0d\x01\x20\x00\x41\xc6\xdd\x01\x41\x00\x10\xb2\x02\x41\x7f\x21\x03\x0c\x01\x0b\x20\x03\x2d\x00\x05\x41\x01\x71\x21\x03\x0b\x20\x02\x41\x10\x6a\x24\x00\x20\x03\x0b\xea\x02\x02\x06\x7f\x02\x7e\x23\x00\x41\x20\x6b\x22\x03\x24\x00\x20\x03\x42\x80\x80\x80\x80\x30\x37\x03\x18\x20\x03\x42\x80\x80\x80\x80\x30\x37\x03\x10\x20\x03\x20\x00\x41\xf4\x00\x41\x02\x41\x00\x41\x02\x20\x03\x41\x10\x6a\x10\xda\x04\x22\x09\x37\x03\x08\x02\x40\x20\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x02\x40\x20\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x20\x02\x41\x01\x20\x03\x41\x08\x6a\x10\xf3\x01\x21\x02\x0c\x01\x0b\x20\x00\x20\x02\x41\x01\x20\x03\x41\x08\x6a\x10\xdb\x04\x21\x02\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x09\x02\x40\x02\x40\x20\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x41\x00\x21\x04\x02\x40\x20\x03\x29\x03\x08\x22\x0a\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x0a\xa7\x22\x05\x2f\x01\x06\x41\x0f\x47\x0d\x00\x20\x05\x28\x02\x20\x21\x04\x0b\x20\x04\x41\x08\x6a\x21\x06\x41\x08\x21\x05\x03\x40\x02\x40\x20\x05\x41\x08\x6a\x22\x07\x41\x20\x47\x0d\x00\x41\x00\x21\x05\x02\x40\x03\x40\x20\x05\x41\x10\x46\x0d\x01\x20\x01\x20\x05\x6a\x20\x06\x20\x05\x6a\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x05\x41\x08\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x03\x29\x03\x08\x21\x0a\x20\x02\x21\x09\x0c\x03\x0b\x20\x04\x20\x05\x6a\x21\x08\x20\x07\x21\x05\x20\x00\x20\x08\x29\x03\x00\x10\xdb\x03\x45\x0d\x00\x0b\x0b\x20\x00\x20\x03\x29\x03\x08\x10\xcd\x01\x20\x02\x21\x0a\x0b\x20\x00\x20\x0a\x10\xcd\x01\x0b\x20\x03\x41\x20\x6a\x24\x00\x20\x09\x0b\x84\x04\x01\x05\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x28\x02\x10\x22\x04\x28\x02\xa8\x01\x22\x05\x0d\x00\x02\x40\x20\x02\x2d\x00\x00\x41\x2e\x46\x0d\x00\x20\x00\x20\x02\x20\x02\x10\x71\x10\xd3\x04\x21\x02\x0c\x02\x0b\x20\x01\x41\x2f\x10\x6e\x21\x06\x41\x00\x21\x05\x20\x00\x20\x02\x10\x71\x20\x06\x20\x01\x6b\x41\x00\x20\x06\x1b\x22\x06\x6a\x41\x02\x6a\x10\xc0\x02\x22\x07\x45\x0d\x04\x20\x07\x20\x01\x20\x06\x10\x70\x22\x01\x20\x06\x6a\x41\x00\x3a\x00\x00\x02\x40\x02\x40\x03\x40\x20\x02\x2d\x00\x00\x41\x2e\x47\x0d\x01\x20\x02\x2d\x00\x01\x41\x52\x6a\x22\x06\x41\x01\x4b\x0d\x01\x41\x02\x21\x05\x02\x40\x02\x40\x20\x06\x0e\x02\x00\x01\x00\x0b\x20\x02\x2d\x00\x02\x41\x2f\x47\x0d\x02\x20\x01\x2d\x00\x00\x45\x0d\x03\x20\x01\x41\x2f\x10\x6e\x22\x05\x41\x01\x6a\x20\x01\x20\x05\x1b\x22\x05\x41\xed\xe2\x01\x10\x77\x45\x0d\x02\x20\x05\x41\xef\xe2\x01\x10\x77\x45\x0d\x02\x20\x05\x41\x7f\x6a\x20\x05\x20\x05\x20\x01\x4b\x1b\x41\x00\x3a\x00\x00\x41\x03\x21\x05\x0b\x20\x02\x20\x05\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x20\x01\x2d\x00\x00\x45\x0d\x00\x20\x01\x20\x01\x10\x71\x6a\x41\x2f\x3b\x00\x00\x0b\x20\x01\x20\x02\x10\x79\x21\x02\x0c\x02\x0b\x20\x00\x20\x01\x20\x02\x20\x04\x28\x02\xb0\x01\x20\x05\x11\x07\x00\x21\x02\x0b\x20\x02\x45\x0d\x01\x0b\x02\x40\x20\x00\x20\x02\x10\xb3\x01\x22\x01\x0d\x00\x20\x00\x28\x02\x10\x22\x00\x41\x10\x6a\x20\x02\x20\x00\x28\x02\x04\x11\x00\x00\x0c\x01\x0b\x02\x40\x20\x00\x20\x01\x10\x83\x03\x22\x05\x45\x0d\x00\x20\x00\x28\x02\x10\x22\x06\x41\x10\x6a\x20\x02\x20\x06\x28\x02\x04\x11\x00\x00\x20\x00\x20\x01\x10\xe4\x02\x0c\x02\x0b\x20\x00\x20\x01\x10\xe4\x02\x02\x40\x20\x04\x28\x02\xac\x01\x22\x05\x0d\x00\x20\x03\x20\x02\x36\x02\x00\x20\x00\x41\xf2\xe2\x01\x20\x03\x10\x8c\x03\x20\x00\x28\x02\x10\x22\x00\x41\x10\x6a\x20\x02\x20\x00\x28\x02\x04\x11\x00\x00\x0c\x01\x0b\x20\x00\x20\x02\x20\x04\x28\x02\xb0\x01\x20\x05\x11\x01\x00\x21\x05\x20\x00\x28\x02\x10\x22\x00\x41\x10\x6a\x20\x02\x20\x00\x28\x02\x04\x11\x00\x00\x0c\x01\x0b\x41\x00\x21\x05\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x05\x0b\xc6\x01\x02\x07\x7f\x01\x7e\x41\x00\x21\x02\x02\x40\x20\x01\x29\x02\x54\x22\x09\x42\x38\x86\x42\x38\x87\xa7\x0d\x00\x20\x01\x20\x09\x42\x80\x7e\x83\x42\x01\x84\x37\x02\x54\x41\x7f\x21\x03\x41\x00\x21\x04\x03\x40\x02\x40\x20\x03\x41\x01\x6a\x22\x03\x20\x01\x28\x02\x14\x48\x0d\x00\x41\x00\x0f\x0b\x20\x01\x28\x02\x10\x20\x04\x6a\x22\x05\x28\x02\x00\x21\x06\x41\x7f\x21\x02\x20\x00\x20\x01\x28\x02\x04\x10\xd2\x02\x22\x07\x45\x0d\x01\x02\x40\x20\x00\x20\x06\x10\xd2\x02\x22\x08\x0d\x00\x20\x00\x20\x07\x10\xcf\x02\x41\x7f\x0f\x0b\x20\x00\x20\x07\x20\x08\x10\xe6\x03\x21\x06\x20\x00\x20\x07\x10\xcf\x02\x20\x00\x20\x08\x10\xcf\x02\x20\x06\x45\x0d\x01\x20\x04\x41\x08\x6a\x21\x04\x20\x05\x41\x04\x6a\x20\x06\x36\x02\x00\x41\x7f\x21\x02\x20\x00\x20\x06\x10\xe7\x03\x41\x7f\x4a\x0d\x00\x0b\x0b\x20\x02\x0b\x13\x00\x20\x00\x20\x01\x20\x00\x29\x03\xc0\x01\x41\x00\x41\x00\x10\xd4\x04\x0b\xe3\x05\x02\x09\x7f\x02\x7e\x23\x00\x41\x20\x6b\x22\x02\x24\x00\x02\x40\x02\x40\x20\x01\x29\x03\x40\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x0c\x20\x00\x41\x0b\x10\xc9\x03\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x02\x41\x08\x6a\x41\x10\x6a\x42\x00\x37\x03\x00\x20\x02\x41\x08\x6a\x41\x08\x6a\x42\x00\x37\x03\x00\x20\x02\x42\x00\x37\x03\x08\x20\x00\x20\x02\x41\x08\x6a\x20\x01\x41\x00\x10\xbf\x04\x21\x03\x20\x00\x28\x02\x10\x22\x04\x41\x10\x6a\x20\x02\x28\x02\x08\x20\x04\x28\x02\x04\x11\x00\x00\x02\x40\x02\x40\x02\x40\x20\x03\x45\x0d\x00\x20\x02\x28\x02\x14\x21\x05\x0c\x01\x0b\x20\x0b\xa7\x21\x06\x20\x02\x28\x02\x1c\x21\x07\x20\x02\x28\x02\x14\x22\x05\x21\x03\x41\x00\x21\x08\x02\x40\x02\x40\x03\x40\x20\x08\x20\x07\x4e\x0d\x01\x02\x40\x02\x40\x02\x40\x02\x40\x20\x03\x41\x08\x6a\x22\x09\x28\x02\x00\x22\x04\x45\x0d\x00\x20\x02\x20\x01\x36\x02\x00\x20\x02\x20\x04\x36\x02\x04\x0c\x01\x0b\x20\x00\x20\x02\x20\x02\x41\x04\x6a\x20\x01\x20\x03\x28\x02\x00\x10\xc0\x04\x22\x04\x41\x03\x4b\x0d\x05\x02\x40\x20\x04\x0e\x04\x00\x06\x06\x02\x00\x0b\x20\x02\x28\x02\x04\x21\x04\x0b\x02\x40\x20\x04\x28\x02\x0c\x41\xfd\x00\x47\x0d\x00\x20\x03\x41\x04\x6a\x41\x02\x36\x02\x00\x20\x09\x20\x02\x28\x02\x00\x28\x02\x10\x20\x04\x28\x02\x00\x41\x03\x74\x6a\x28\x02\x04\x36\x02\x00\x0c\x02\x0b\x20\x03\x41\x04\x6a\x41\x01\x36\x02\x00\x02\x40\x20\x04\x28\x02\x04\x22\x0a\x45\x0d\x00\x20\x09\x20\x0a\x36\x02\x00\x0c\x02\x0b\x20\x09\x20\x02\x28\x02\x00\x28\x02\x48\x41\x24\x6a\x28\x02\x00\x20\x04\x28\x02\x00\x41\x02\x74\x6a\x28\x02\x00\x36\x02\x00\x0c\x01\x0b\x20\x03\x41\x04\x6a\x41\x00\x36\x02\x00\x0b\x20\x03\x41\x0c\x6a\x21\x03\x20\x08\x41\x01\x6a\x21\x08\x0c\x00\x0b\x00\x0b\x20\x05\x20\x07\x41\x0c\x41\xf5\x00\x20\x00\x10\xab\x04\x20\x05\x21\x03\x41\x00\x21\x04\x03\x40\x20\x04\x20\x07\x4e\x0d\x03\x02\x40\x20\x03\x41\x04\x6a\x28\x02\x00\x41\x7f\x6a\x22\x08\x41\x01\x4b\x0d\x00\x02\x40\x02\x40\x20\x08\x0e\x02\x00\x01\x00\x0b\x20\x03\x41\x08\x6a\x28\x02\x00\x21\x08\x20\x00\x20\x06\x20\x03\x28\x02\x00\x41\x26\x10\xff\x02\x22\x09\x45\x0d\x04\x20\x08\x20\x08\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x20\x09\x20\x08\x36\x02\x00\x0c\x01\x0b\x20\x00\x20\x0b\x20\x03\x28\x02\x00\x41\x01\x20\x03\x41\x08\x6a\x28\x02\x00\x41\x06\x10\xcb\x03\x41\x00\x48\x0d\x03\x0b\x20\x03\x41\x0c\x6a\x21\x03\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x00\x20\x04\x20\x01\x20\x03\x28\x02\x00\x10\xc2\x04\x0b\x20\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x05\x20\x03\x28\x02\x04\x11\x00\x00\x20\x00\x20\x0b\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x0c\x0c\x02\x0b\x20\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x05\x20\x03\x28\x02\x04\x11\x00\x00\x20\x00\x20\x0b\x41\xd7\x01\x20\x00\x41\xfe\x00\x10\xc5\x01\x41\x00\x10\xc4\x01\x1a\x20\x06\x20\x06\x2d\x00\x05\x41\xfe\x01\x71\x3a\x00\x05\x20\x01\x20\x0b\x37\x03\x40\x0b\x20\x0b\x10\xc0\x01\x21\x0c\x0b\x20\x02\x41\x20\x6a\x24\x00\x20\x0c\x0b\xdb\x04\x02\x04\x7f\x01\x7e\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x03\x40\x20\x02\x28\x02\x10\x22\x04\x20\x04\x28\x02\x18\x20\x03\x71\x41\x7f\x73\x41\x02\x74\x6a\x28\x02\x00\x21\x05\x03\x40\x20\x05\x45\x0d\x03\x20\x04\x20\x05\x41\x7f\x6a\x41\x03\x74\x22\x06\x6a\x22\x07\x41\x30\x6a\x21\x05\x02\x40\x20\x07\x41\x34\x6a\x28\x02\x00\x20\x03\x46\x0d\x00\x20\x05\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x21\x05\x0c\x01\x0b\x0b\x20\x02\x28\x02\x14\x20\x06\x6a\x21\x07\x20\x05\x28\x02\x00\x21\x04\x20\x01\x45\x0d\x01\x20\x01\x42\x80\x80\x80\x80\x30\x37\x03\x18\x20\x01\x42\x80\x80\x80\x80\x30\x37\x03\x10\x20\x01\x42\x80\x80\x80\x80\x30\x37\x03\x08\x20\x01\x20\x04\x41\x1a\x76\x41\x07\x71\x22\x04\x36\x02\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x05\x28\x02\x00\x41\x1e\x76\x0e\x04\x03\x00\x01\x02\x03\x0b\x20\x01\x20\x04\x41\x10\x72\x36\x02\x00\x02\x40\x20\x07\x28\x02\x00\x22\x02\x45\x0d\x00\x20\x01\x20\x02\xad\x42\x80\x80\x80\x80\x70\x84\x10\xc0\x01\x37\x03\x10\x0b\x41\x01\x21\x05\x20\x07\x28\x02\x04\x22\x02\x45\x0d\x06\x20\x01\x20\x02\xad\x42\x80\x80\x80\x80\x70\x84\x10\xc0\x01\x37\x03\x18\x41\x01\x0f\x0b\x20\x07\x28\x02\x00\x28\x02\x10\x29\x03\x00\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xc0\x00\x51\x0d\x06\x20\x01\x20\x08\x10\xc0\x01\x37\x03\x08\x41\x01\x0f\x0b\x20\x00\x20\x02\x20\x03\x20\x07\x20\x05\x10\xf5\x02\x45\x0d\x01\x0c\x06\x0b\x0b\x20\x01\x20\x07\x29\x03\x00\x10\xc0\x01\x37\x03\x08\x41\x01\x0f\x0b\x41\x01\x21\x05\x20\x04\x41\x80\x80\x80\x80\x7c\x71\x41\x80\x80\x80\x80\x78\x47\x0d\x01\x20\x07\x28\x02\x00\x28\x02\x10\x35\x02\x04\x42\x20\x86\x42\x80\x80\x80\x80\xc0\x00\x51\x0d\x02\x0c\x01\x0b\x41\x00\x21\x05\x20\x02\x2d\x00\x05\x22\x04\x41\x04\x71\x45\x0d\x00\x02\x40\x20\x04\x41\x08\x71\x45\x0d\x00\x20\x03\x41\x7f\x4a\x0d\x01\x20\x03\x41\xff\xff\xff\xff\x07\x71\x22\x03\x20\x02\x41\x28\x6a\x28\x02\x00\x22\x04\x49\x21\x05\x20\x03\x20\x04\x4f\x0d\x01\x20\x01\x45\x0d\x01\x20\x01\x42\x80\x80\x80\x80\x30\x37\x03\x18\x20\x01\x42\x80\x80\x80\x80\x30\x37\x03\x10\x20\x01\x41\x07\x36\x02\x00\x20\x01\x20\x00\x20\x02\xad\x42\x80\x80\x80\x80\x70\x84\x20\x03\x10\xf6\x02\x37\x03\x08\x41\x01\x0f\x0b\x20\x00\x28\x02\x10\x28\x02\x44\x20\x02\x2f\x01\x06\x41\x18\x6c\x6a\x28\x02\x14\x22\x04\x45\x0d\x00\x20\x04\x28\x02\x00\x22\x04\x45\x0d\x00\x20\x00\x20\x01\x20\x02\xad\x42\x80\x80\x80\x80\x70\x84\x20\x03\x20\x04\x11\x17\x00\x21\x05\x0b\x20\x05\x0f\x0b\x20\x00\x20\x03\x10\xf4\x02\x0b\x41\x7f\x0b\xda\x01\x02\x02\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x06\x24\x00\x02\x40\x02\x40\x20\x02\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x02\xa7\x22\x07\x2f\x01\x06\x41\x0c\x47\x0d\x00\x20\x07\x41\x29\x6a\x2d\x00\x00\x41\x0c\x47\x0d\x00\x02\x40\x20\x03\x0d\x00\x20\x06\x42\x80\x80\x80\x80\x30\x37\x03\x08\x20\x06\x41\x08\x6a\x21\x04\x0b\x20\x00\x20\x01\x20\x03\x20\x04\x20\x05\x20\x07\x41\x2a\x6a\x2e\x01\x00\x20\x07\x28\x02\x24\x11\x12\x00\x21\x08\x0c\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x02\x40\x02\x40\x20\x00\x20\x02\x20\x01\x20\x03\x20\x04\x10\xb5\x01\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x02\x42\xff\xff\xff\xff\x6f\x56\x0d\x01\x20\x00\x20\x02\x10\xcd\x01\x20\x00\x41\xeb\xc6\x01\x41\x00\x10\xb2\x02\x0b\x20\x05\x41\x00\x36\x02\x00\x0c\x01\x0b\x20\x05\x41\x02\x36\x02\x00\x20\x02\x21\x08\x0b\x20\x06\x41\x10\x6a\x24\x00\x20\x08\x0b\xbc\x01\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x05\x24\x00\x20\x05\x20\x03\x37\x03\x08\x02\x40\x02\x40\x20\x01\x45\x0d\x00\x20\x00\x20\x01\xad\x42\x80\x80\x80\x80\x70\x84\x10\xc0\x01\x20\x02\x41\x01\x20\x05\x41\x08\x6a\x10\xef\x02\x21\x03\x20\x00\x20\x05\x29\x03\x08\x10\xcd\x01\x41\x7f\x21\x01\x20\x03\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x03\x10\xcd\x01\x41\x01\x21\x01\x0c\x01\x0b\x20\x00\x20\x03\x10\xcd\x01\x02\x40\x20\x04\x41\x80\x80\x01\x71\x0d\x00\x41\x00\x21\x01\x20\x04\x41\x80\x80\x02\x71\x45\x0d\x01\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x22\x04\x45\x0d\x01\x20\x04\x2d\x00\x28\x41\x01\x71\x45\x0d\x01\x0b\x20\x00\x41\xa2\xde\x01\x41\x00\x10\xb2\x02\x41\x7f\x21\x01\x0b\x20\x05\x41\x10\x6a\x24\x00\x20\x01\x0b\x0b\x00\x20\x00\x20\x01\x41\x00\x10\x88\x04\x0b\x9d\x01\x02\x03\x7f\x01\x7e\x20\x01\x41\x28\x6a\x28\x02\x00\x22\x04\x41\x01\x6a\x21\x05\x02\x40\x20\x01\x28\x02\x14\x22\x06\x29\x03\x00\x22\x07\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x05\x20\x07\xa7\x4d\x0d\x00\x02\x40\x20\x01\x28\x02\x10\x41\x33\x6a\x2d\x00\x00\x41\x08\x71\x0d\x00\x20\x00\x20\x02\x10\xcd\x01\x20\x00\x20\x03\x41\x30\x10\xef\x03\x0f\x0b\x20\x06\x20\x05\xad\x37\x03\x00\x0b\x02\x40\x20\x05\x20\x01\x28\x02\x20\x4d\x0d\x00\x20\x00\x20\x01\x20\x05\x10\xca\x04\x45\x0d\x00\x20\x00\x20\x02\x10\xcd\x01\x41\x7f\x0f\x0b\x20\x01\x28\x02\x24\x20\x04\x41\x03\x74\x6a\x20\x02\x37\x03\x00\x20\x01\x20\x05\x36\x02\x28\x41\x01\x0b\x4b\x01\x01\x7f\x02\x40\x02\x40\x20\x01\x41\x80\x80\x01\x71\x0d\x00\x41\x00\x21\x03\x20\x01\x41\x80\x80\x02\x71\x45\x0d\x01\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x22\x01\x45\x0d\x01\x20\x01\x2d\x00\x28\x41\x01\x71\x45\x0d\x01\x0b\x20\x00\x20\x02\x41\xa6\xc5\x01\x10\xf1\x02\x41\x7f\x21\x03\x0b\x20\x03\x0b\xaa\x01\x01\x05\x7f\x20\x00\xa7\x22\x01\x28\x02\x10\x22\x02\x20\x02\x28\x02\x18\x41\x7f\x73\x41\x02\x74\x41\xa4\x7e\x72\x6a\x28\x02\x00\x21\x03\x03\x40\x02\x40\x20\x03\x0d\x00\x41\x00\x0f\x0b\x20\x02\x20\x03\x41\x7f\x6a\x22\x04\x41\x03\x74\x6a\x22\x03\x41\x30\x6a\x28\x02\x00\x21\x05\x02\x40\x20\x03\x41\x34\x6a\x28\x02\x00\x41\x36\x46\x0d\x00\x20\x05\x41\xff\xff\xff\x1f\x71\x21\x03\x0c\x01\x0b\x0b\x41\x01\x21\x03\x02\x40\x20\x05\x41\xff\xff\xff\xff\x03\x4b\x0d\x00\x20\x01\x28\x02\x14\x20\x04\x41\x03\x74\x6a\x29\x03\x00\x22\x00\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x90\x7f\x52\x0d\x00\x20\x00\xa7\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x41\x00\x47\x21\x03\x0b\x20\x03\x0b\x54\x01\x02\x7f\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x02\x40\x02\x40\x20\x02\x41\x0c\x6a\x20\x01\x10\x8f\x04\x45\x0d\x00\x20\x02\x28\x02\x0c\x22\x03\x41\x00\x48\x0d\x00\x20\x00\x20\x01\x10\xb6\x04\x20\x03\x41\x80\x80\x80\x80\x78\x72\x21\x01\x0c\x01\x0b\x20\x00\x20\x01\x41\x01\x10\xb7\x04\x21\x01\x0b\x20\x02\x41\x10\x6a\x24\x00\x20\x01\x0b\x16\x01\x01\x7e\x20\x00\x20\x01\x10\xe6\x02\x21\x02\x20\x00\x20\x01\x10\xcd\x01\x20\x02\x0b\x56\x01\x01\x7f\x20\x01\x20\x02\x36\x02\x0c\x20\x01\x20\x00\x36\x02\x00\x41\x00\x21\x04\x20\x01\x41\x00\x36\x02\x14\x20\x01\x20\x03\x36\x02\x10\x20\x01\x41\x00\x36\x02\x08\x20\x01\x20\x00\x20\x02\x20\x03\x10\xe7\x02\x22\x03\x36\x02\x04\x02\x40\x20\x03\x0d\x00\x41\x7f\x21\x04\x20\x01\x41\x7f\x36\x02\x14\x20\x01\x41\x00\x36\x02\x0c\x0b\x20\x04\x0b\x98\x01\x01\x02\x7f\x02\x40\x02\x40\x20\x00\x28\x02\x08\x20\x02\x6a\x22\x03\x20\x00\x28\x02\x0c\x4c\x0d\x00\x41\x7f\x21\x04\x20\x00\x20\x03\x41\x00\x10\xba\x04\x0d\x01\x0b\x02\x40\x02\x40\x20\x00\x28\x02\x10\x45\x0d\x00\x41\x00\x21\x04\x03\x40\x20\x04\x20\x02\x4e\x0d\x02\x20\x00\x28\x02\x04\x20\x04\x20\x00\x28\x02\x08\x6a\x41\x01\x74\x6a\x41\x10\x6a\x20\x01\x20\x04\x6a\x2d\x00\x00\x3b\x01\x00\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x04\x20\x00\x28\x02\x08\x6a\x41\x10\x6a\x20\x01\x20\x02\x10\x70\x1a\x0b\x20\x00\x20\x00\x28\x02\x08\x20\x02\x6a\x36\x02\x08\x41\x00\x21\x04\x0b\x20\x04\x0b\xc0\x02\x01\x05\x7f\x41\x00\x21\x04\x02\x40\x20\x03\x20\x02\x4d\x0d\x00\x02\x40\x20\x01\x28\x02\x04\x41\x7f\x4a\x0d\x00\x20\x03\x20\x02\x6b\x21\x05\x41\x00\x21\x06\x20\x01\x20\x02\x41\x01\x74\x6a\x41\x10\x6a\x22\x07\x21\x04\x41\x00\x21\x03\x02\x40\x03\x40\x20\x03\x20\x05\x4e\x0d\x01\x20\x03\x41\x01\x6a\x21\x03\x20\x06\x20\x04\x2f\x01\x00\x72\x21\x06\x20\x04\x41\x02\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x02\x40\x02\x40\x20\x00\x28\x02\x08\x20\x05\x6a\x22\x03\x20\x00\x28\x02\x0c\x22\x08\x4c\x0d\x00\x41\x7f\x21\x04\x20\x00\x20\x03\x20\x06\x10\xba\x04\x45\x0d\x01\x0c\x03\x0b\x20\x06\x41\x80\x02\x48\x0d\x00\x20\x00\x28\x02\x10\x0d\x00\x41\x7f\x21\x04\x20\x00\x20\x08\x10\xbc\x04\x0d\x02\x0b\x02\x40\x02\x40\x20\x00\x28\x02\x10\x0d\x00\x41\x10\x21\x03\x20\x01\x20\x02\x41\x01\x74\x6a\x41\x10\x6a\x21\x04\x03\x40\x20\x03\x41\x70\x6a\x20\x05\x4e\x0d\x02\x20\x00\x28\x02\x04\x20\x00\x28\x02\x08\x6a\x20\x03\x6a\x20\x04\x2d\x00\x00\x3a\x00\x00\x20\x03\x41\x01\x6a\x21\x03\x20\x04\x41\x02\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x04\x20\x00\x28\x02\x08\x41\x01\x74\x6a\x41\x10\x6a\x20\x07\x20\x05\x41\x01\x74\x10\x70\x1a\x0b\x20\x00\x20\x00\x28\x02\x08\x20\x05\x6a\x36\x02\x08\x41\x00\x0f\x0b\x20\x00\x20\x01\x20\x02\x6a\x41\x10\x6a\x20\x03\x20\x02\x6b\x10\xf4\x03\x21\x04\x0b\x20\x04\x0b\x8c\x02\x02\x01\x7e\x04\x7f\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x02\x40\x20\x00\x28\x02\x14\x0d\x00\x20\x00\x28\x02\x04\x21\x02\x02\x40\x20\x00\x28\x02\x08\x22\x03\x0d\x00\x20\x00\x28\x02\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x02\x20\x03\x28\x02\x04\x11\x00\x00\x20\x00\x41\x00\x36\x02\x04\x20\x00\x28\x02\x00\x41\x2f\x10\xc5\x01\x0f\x0b\x02\x40\x20\x03\x20\x00\x28\x02\x0c\x4e\x0d\x00\x02\x40\x20\x00\x28\x02\x00\x28\x02\x10\x22\x04\x41\x10\x6a\x20\x02\x20\x03\x20\x00\x28\x02\x10\x22\x05\x74\x20\x05\x6b\x41\x11\x6a\x20\x04\x28\x02\x08\x11\x01\x00\x22\x02\x0d\x00\x20\x00\x28\x02\x04\x21\x02\x0b\x20\x00\x20\x02\x36\x02\x04\x0b\x02\x40\x20\x00\x28\x02\x10\x22\x03\x0d\x00\x20\x02\x20\x00\x28\x02\x08\x6a\x41\x10\x6a\x41\x00\x3a\x00\x00\x20\x00\x28\x02\x10\x21\x03\x0b\x20\x02\x20\x02\x29\x02\x04\x42\xff\xff\xff\xff\x77\x83\x20\x03\x41\x1f\x74\xad\x84\x22\x01\x37\x02\x04\x20\x02\x20\x01\x42\x80\x80\x80\x80\x78\x83\x20\x00\x35\x02\x08\x42\xff\xff\xff\xff\x07\x83\x84\x37\x02\x04\x20\x00\x41\x00\x36\x02\x04\x20\x02\xad\x42\x80\x80\x80\x80\x90\x7f\x84\x21\x01\x0b\x20\x01\x0b\xce\x01\x02\x01\x7f\x01\x7e\x02\x40\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x22\x02\x45\x0d\x00\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\x0f\x7c\x42\xfe\xff\xff\xff\xff\xff\xff\x1f\x56\x0d\x00\x20\x02\x28\x02\x28\x41\x04\x71\x45\x0d\x00\x02\x40\x20\x01\x42\x80\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x01\x42\xff\xff\xff\xff\x0f\x83\x0f\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x01\xb9\xbd\x22\x01\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x0f\x0b\x02\x40\x20\x00\x10\xb8\x02\x22\x03\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x03\xa7\x41\x04\x6a\x20\x01\x10\x95\x04\x45\x0d\x00\x20\x00\x20\x03\x10\xcd\x01\x20\x00\x10\xc1\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x03\x0b\x20\x03\x0b\x95\x02\x02\x02\x7f\x01\x7c\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x02\x40\x02\x40\x02\x40\x20\x02\x42\x20\x88\xa7\x22\x04\x41\x02\x4b\x0d\x00\x20\x01\x20\x02\xa7\xb7\x39\x03\x00\x0c\x01\x0b\x02\x40\x20\x04\x41\x0b\x6a\x41\x12\x49\x0d\x00\x20\x01\x20\x02\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\x37\x03\x00\x0c\x01\x0b\x02\x40\x20\x00\x20\x02\x10\xed\x03\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x42\x80\x80\x80\x80\x80\x80\x80\xfc\xff\x00\x37\x03\x00\x41\x7f\x21\x01\x0c\x02\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x41\x07\x20\x02\x42\x20\x88\xa7\x22\x04\x20\x04\x41\x0b\x6a\x41\x11\x4b\x1b\x22\x04\x41\x0a\x6a\x41\x02\x49\x0d\x00\x20\x04\x41\x07\x46\x0d\x02\x20\x04\x0d\x01\x20\x03\x20\x02\xa7\xb7\x22\x05\x39\x03\x08\x20\x05\xbd\x21\x02\x0c\x03\x0b\x20\x02\xa7\x41\x04\x6a\x20\x03\x41\x08\x6a\x10\xa7\x04\x20\x00\x20\x02\x10\xcd\x01\x20\x03\x29\x03\x08\x21\x02\x0c\x02\x0b\x10\x40\x00\x0b\x20\x03\x20\x02\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\x22\x02\x37\x03\x08\x0b\x20\x01\x20\x02\x37\x03\x00\x0b\x41\x00\x21\x01\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x01\x0b\x53\x01\x02\x7f\x23\x00\x41\x20\x6b\x22\x03\x24\x00\x02\x40\x02\x40\x20\x00\x20\x03\x41\x08\x6a\x20\x02\x10\xce\x04\x22\x04\x0d\x00\x20\x01\x42\x00\x37\x03\x00\x41\x7f\x21\x00\x0c\x01\x0b\x20\x01\x20\x04\x41\x01\x10\xcf\x04\x1a\x20\x00\x20\x04\x20\x03\x41\x08\x6a\x10\xd0\x04\x41\x00\x21\x00\x0b\x20\x03\x41\x20\x6a\x24\x00\x20\x00\x0b\xd3\x02\x02\x02\x7f\x01\x7c\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x02\x40\x02\x40\x03\x40\x02\x40\x02\x40\x41\x07\x20\x02\x42\x20\x88\xa7\x22\x04\x20\x04\x41\x0b\x6a\x41\x11\x4b\x1b\x22\x04\x41\x07\x4d\x0d\x00\x20\x04\x41\x77\x47\x0d\x01\x20\x03\x41\x0c\x6a\x20\x02\xa7\x41\x04\x6a\x41\x01\x10\xa5\x04\x20\x00\x20\x02\x10\xcd\x01\x41\x00\x21\x00\x20\x03\x28\x02\x0c\x21\x04\x0c\x04\x0b\x02\x40\x02\x40\x20\x04\x0e\x08\x00\x00\x00\x00\x02\x02\x02\x01\x00\x0b\x20\x02\xa7\x21\x04\x0c\x03\x0b\x02\x40\x20\x02\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\x22\x02\x42\x34\x88\xa7\x41\xff\x0f\x71\x22\x04\x41\x9d\x08\x4b\x0d\x00\x02\x40\x20\x02\xbf\x22\x05\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x05\xaa\x21\x04\x0c\x04\x0b\x41\x80\x80\x80\x80\x78\x21\x04\x0c\x03\x0b\x02\x40\x20\x04\x41\xd2\x08\x4b\x0d\x00\x41\x00\x21\x00\x20\x03\x41\x00\x20\x02\x42\xff\xff\xff\xff\xff\xff\xff\x07\x83\x42\x80\x80\x80\x80\x80\x80\x80\x08\x84\x20\x04\x41\xed\x77\x6a\xad\x86\x42\x20\x88\xa7\x22\x04\x6b\x20\x04\x20\x02\x42\x00\x53\x1b\x22\x04\x36\x02\x0c\x0c\x04\x0b\x41\x00\x21\x04\x0c\x02\x0b\x20\x00\x20\x02\x10\xed\x03\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x0b\x41\x7f\x21\x00\x41\x00\x21\x04\x0c\x01\x0b\x20\x03\x20\x04\x36\x02\x0c\x41\x00\x21\x00\x0b\x20\x01\x20\x04\x36\x02\x00\x20\x03\x41\x10\x6a\x24\x00\x20\x00\x0b\xf7\x02\x02\x02\x7f\x01\x7c\x23\x00\x41\x20\x6b\x22\x03\x24\x00\x02\x40\x02\x40\x02\x40\x03\x40\x02\x40\x02\x40\x02\x40\x02\x40\x41\x07\x20\x02\x42\x20\x88\xa7\x22\x04\x20\x04\x41\x0b\x6a\x41\x11\x4b\x1b\x22\x04\x41\x07\x4d\x0d\x00\x20\x04\x41\x77\x47\x0d\x03\x20\x03\x42\x00\x37\x02\x14\x20\x03\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x0c\x20\x03\x20\x00\x28\x02\xd8\x01\x36\x02\x08\x20\x03\x41\x08\x6a\x20\x02\xa7\x41\x04\x6a\x10\xcc\x04\x1a\x20\x03\x41\x08\x6a\x41\x00\x10\xcd\x04\x1a\x20\x03\x41\x1c\x6a\x20\x03\x41\x08\x6a\x41\x00\x10\xa5\x04\x20\x03\x41\x08\x6a\x10\xd7\x02\x20\x00\x20\x02\x10\xcd\x01\x20\x03\x28\x02\x1c\x21\x04\x0c\x01\x0b\x02\x40\x20\x04\x0e\x08\x00\x00\x00\x00\x03\x03\x03\x02\x00\x0b\x20\x03\x20\x02\xa7\x22\x04\x36\x02\x1c\x0b\x41\x00\x21\x00\x20\x03\x20\x04\x41\xff\x01\x20\x04\x41\xff\x01\x48\x1b\x22\x04\x41\x00\x20\x04\x41\x00\x4a\x1b\x22\x04\x36\x02\x1c\x0c\x05\x0b\x20\x02\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\x22\x05\x20\x05\x62\x0d\x02\x20\x05\x44\x00\x00\x00\x00\x00\x00\x00\x00\x63\x41\x01\x73\x45\x0d\x02\x02\x40\x20\x05\x44\x00\x00\x00\x00\x00\xe0\x6f\x40\x64\x41\x01\x73\x0d\x00\x41\xff\x01\x21\x04\x0c\x04\x0b\x20\x05\x10\xaa\x01\x21\x04\x0c\x03\x0b\x20\x00\x20\x02\x10\xed\x03\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x0b\x41\x7f\x21\x00\x41\x00\x21\x04\x0c\x02\x0b\x41\x00\x21\x04\x0b\x20\x03\x20\x04\x36\x02\x1c\x41\x00\x21\x00\x0b\x20\x01\x20\x04\x36\x02\x00\x20\x03\x41\x20\x6a\x24\x00\x20\x00\x0b\x2d\x00\x02\x40\x20\x01\x42\x20\x88\xa7\x41\x01\x72\x41\x03\x47\x0d\x00\x20\x00\x41\xb4\xdc\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x00\x20\x01\x10\xe6\x02\x0b\x46\x00\x02\x40\x20\x00\x20\x02\x20\x01\x41\x00\x41\x00\x10\xb5\x01\x22\x02\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x02\x10\xcd\x01\x20\x00\x10\x8a\x03\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x02\x0b\x38\x01\x01\x7f\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x03\x2f\x01\x06\x20\x02\x47\x0d\x00\x20\x03\x28\x02\x20\x22\x03\x0d\x01\x0b\x20\x00\x20\x02\x10\xa4\x04\x41\x00\x21\x03\x0b\x20\x03\x0b\x0d\x00\x20\x00\x41\x86\xdc\x01\x41\x00\x10\xb2\x02\x0b\x70\x01\x03\x7e\x02\x40\x20\x00\x10\x85\x03\x22\x03\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x01\xac\x21\x04\x42\x00\x21\x05\x03\x40\x02\x40\x20\x05\x20\x04\x53\x0d\x00\x20\x03\x0f\x0b\x20\x00\x20\x03\x20\x05\x20\x02\x29\x03\x00\x10\xc0\x01\x41\x00\x10\xc8\x04\x21\x01\x20\x02\x41\x08\x6a\x21\x02\x20\x05\x42\x01\x7c\x21\x05\x20\x01\x41\x7f\x4a\x0d\x00\x0b\x20\x00\x20\x03\x10\xcd\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x0b\x20\x00\x20\x00\x20\x01\x29\x03\x10\x10\xcd\x01\x20\x00\x20\x01\x29\x03\x18\x10\xcd\x01\x20\x00\x20\x01\x29\x03\x08\x10\xcd\x01\x0b\x11\x00\x20\x00\x20\x01\x20\x02\x20\x03\x41\x80\x80\x01\x10\x9f\x03\x0b\x8f\x06\x02\x06\x7f\x03\x7e\x23\x00\x41\x20\x6b\x22\x07\x24\x00\x41\x00\x21\x08\x02\x40\x20\x00\x2f\x01\xe8\x01\x41\x80\x02\x49\x0d\x00\x41\x00\x21\x08\x42\x80\x80\x80\x80\x30\x21\x0d\x20\x00\x20\x02\x41\xdd\x01\x20\x02\x41\x00\x10\xb4\x01\x22\x0e\x42\x80\x80\x80\x80\x70\x83\x22\x0f\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x02\x40\x20\x0f\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x0e\x41\x25\x10\xfe\x03\x22\x08\x45\x0d\x00\x20\x00\x20\x03\x41\xdd\x01\x20\x03\x41\x00\x10\xb4\x01\x22\x0d\x42\x80\x80\x80\x80\x70\x83\x22\x0f\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x0f\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x20\x0e\x10\xcd\x01\x41\x00\x21\x08\x0c\x02\x0b\x20\x00\x20\x0d\x41\x25\x10\xfe\x03\x22\x09\x45\x0d\x00\x02\x40\x20\x08\x28\x02\x04\x45\x0d\x00\x20\x09\x28\x02\x04\x45\x0d\x00\x20\x00\x20\x0e\x10\xcd\x01\x20\x00\x20\x0d\x10\xcd\x01\x41\x00\x21\x08\x0c\x02\x0b\x20\x04\x10\x99\x04\x21\x0a\x02\x40\x02\x40\x20\x08\x28\x02\x00\x22\x0b\x20\x09\x28\x02\x00\x22\x0c\x47\x0d\x00\x20\x08\x20\x0a\x41\x02\x74\x6a\x41\x08\x6a\x28\x02\x00\x21\x0b\x0c\x01\x0b\x02\x40\x20\x0b\x20\x0c\x4d\x0d\x00\x20\x08\x41\xd4\x00\x6a\x20\x0c\x20\x0a\x10\x9a\x04\x21\x0b\x0c\x01\x0b\x20\x09\x41\xdc\x00\x6a\x20\x0b\x20\x0a\x10\x9a\x04\x21\x0b\x0b\x02\x40\x20\x0b\x0d\x00\x20\x07\x20\x0a\x41\x02\x74\x41\xb0\xd3\x01\x6a\x36\x02\x00\x20\x00\x41\xfc\xd3\x01\x20\x07\x10\xb2\x02\x0c\x01\x0b\x02\x40\x02\x40\x20\x08\x28\x02\x04\x45\x0d\x00\x02\x40\x02\x40\x20\x05\x45\x0d\x00\x20\x00\x20\x02\x10\x9b\x04\x21\x02\x0c\x01\x0b\x20\x00\x20\x02\x20\x06\x10\xeb\x02\x21\x02\x0b\x20\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0c\x02\x0b\x20\x02\x10\xc0\x01\x21\x02\x0b\x02\x40\x02\x40\x20\x09\x28\x02\x04\x45\x0d\x00\x02\x40\x02\x40\x20\x05\x45\x0d\x00\x20\x00\x20\x03\x10\x9b\x04\x21\x03\x0c\x01\x0b\x20\x00\x20\x03\x20\x06\x10\xeb\x02\x21\x03\x0b\x20\x03\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x20\x00\x20\x02\x10\xcd\x01\x0c\x02\x0b\x20\x03\x10\xc0\x01\x21\x03\x0b\x20\x0b\xad\x42\x80\x80\x80\x80\x70\x84\x10\xc0\x01\x21\x0f\x20\x07\x20\x02\x20\x03\x20\x04\x41\x01\x72\x41\xa5\x01\x46\x20\x0a\x41\x0d\x46\x71\x22\x08\x1b\x37\x03\x18\x20\x07\x20\x03\x20\x02\x20\x08\x1b\x37\x03\x10\x20\x00\x20\x0f\x42\x80\x80\x80\x80\x30\x41\x02\x20\x07\x41\x10\x6a\x10\xef\x02\x21\x0f\x20\x00\x20\x02\x10\xcd\x01\x20\x00\x20\x03\x10\xcd\x01\x20\x0f\x42\x80\x80\x80\x80\x70\x83\x22\x02\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x02\x40\x20\x0a\x41\x0c\x47\x0d\x00\x20\x00\x20\x0f\x10\x9a\x03\x20\x04\x41\xaa\x01\x46\x47\xad\x42\x80\x80\x80\x80\x10\x84\x21\x03\x0c\x01\x0b\x02\x40\x20\x0a\x41\x0d\x46\x0d\x00\x20\x0f\x21\x03\x0c\x01\x0b\x42\x80\x80\x80\x80\x10\x21\x03\x20\x02\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x0f\x10\x9a\x03\x20\x04\x41\x02\x72\x41\xa6\x01\x46\x47\xad\x42\x80\x80\x80\x80\x10\x84\x21\x03\x0b\x20\x00\x20\x0e\x10\xcd\x01\x20\x00\x20\x0d\x10\xcd\x01\x20\x01\x20\x03\x37\x03\x00\x41\x01\x21\x08\x0c\x01\x0b\x20\x00\x20\x0e\x10\xcd\x01\x20\x00\x20\x0d\x10\xcd\x01\x20\x01\x42\x80\x80\x80\x80\x30\x37\x03\x00\x41\x7f\x21\x08\x0b\x20\x07\x41\x20\x6a\x24\x00\x20\x08\x0b\x2d\x01\x01\x7c\x20\x00\x99\x22\x01\x44\xff\xff\xff\xff\xff\xff\x3f\x43\x65\x20\x01\x44\x00\x00\x00\x00\x00\x00\xf0\x7f\x62\x20\x01\x20\x01\x61\x71\x20\x00\x9c\x20\x00\x61\x71\x71\x0b\x58\x01\x01\x7f\x02\x40\x02\x40\x20\x01\x28\x02\x04\x41\x7f\x4a\x0d\x00\x20\x00\x20\x01\x41\x10\x6a\x20\x02\x41\x01\x74\x10\x70\x1a\x0c\x01\x0b\x20\x01\x41\x10\x6a\x21\x03\x41\x00\x21\x01\x03\x40\x20\x01\x20\x02\x4e\x0d\x01\x20\x00\x20\x03\x20\x01\x6a\x2d\x00\x00\x3b\x01\x00\x20\x00\x41\x02\x6a\x21\x00\x20\x01\x41\x01\x6a\x21\x01\x0c\x00\x0b\x00\x0b\x0b\x51\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x02\x40\x02\x40\x20\x01\x41\x20\x71\x45\x0d\x00\x20\x00\x10\xc1\x02\x0c\x01\x0b\x20\x02\x41\xd5\xd7\x01\x41\xc3\xd7\x01\x41\xb2\xd7\x01\x20\x01\x41\x01\x71\x1b\x20\x01\x41\x02\x71\x1b\x36\x02\x00\x20\x00\x41\xe6\xd7\x01\x20\x02\x10\xa6\x04\x0b\x20\x02\x41\x10\x6a\x24\x00\x0b\x98\x02\x02\x03\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x04\x20\x02\x37\x03\x08\x41\x00\x21\x05\x02\x40\x20\x00\x2f\x01\xe8\x01\x41\x80\x02\x49\x0d\x00\x41\x00\x21\x05\x20\x00\x20\x02\x41\xdd\x01\x20\x02\x41\x00\x10\xb4\x01\x22\x02\x42\x80\x80\x80\x80\x70\x83\x22\x07\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x02\x40\x20\x07\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x02\x41\x25\x10\xfe\x03\x22\x06\x45\x0d\x00\x02\x40\x20\x06\x28\x02\x04\x45\x0d\x00\x20\x00\x20\x02\x10\xcd\x01\x0c\x02\x0b\x02\x40\x20\x06\x20\x03\x10\x99\x04\x41\x02\x74\x22\x05\x6a\x41\x08\x6a\x28\x02\x00\x22\x03\x0d\x00\x20\x04\x20\x05\x41\xb0\xd3\x01\x6a\x36\x02\x00\x20\x00\x41\x98\xd7\x01\x20\x04\x10\xb2\x02\x0c\x01\x0b\x41\x01\x21\x05\x20\x00\x20\x03\xad\x42\x80\x80\x80\x80\x70\x84\x10\xc0\x01\x42\x80\x80\x80\x80\x30\x41\x01\x20\x04\x41\x08\x6a\x10\xef\x02\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x02\x10\xcd\x01\x20\x01\x20\x07\x37\x03\x00\x0c\x01\x0b\x20\x00\x20\x02\x10\xcd\x01\x20\x01\x42\x80\x80\x80\x80\x30\x37\x03\x00\x41\x7f\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\xc1\x03\x02\x03\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x03\x40\x41\x07\x20\x01\x22\x06\x42\x20\x88\xa7\x22\x04\x20\x04\x41\x0b\x6a\x41\x11\x4b\x1b\x41\x0b\x6a\x22\x04\x41\x12\x4b\x0d\x03\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x04\x0e\x13\x00\x01\x02\x07\x05\x09\x09\x09\x09\x09\x04\x0b\x03\x03\x0a\x09\x09\x0b\x0b\x00\x0b\x20\x02\x41\x01\x46\x0d\x0a\x20\x00\x20\x06\x10\xcd\x01\x20\x00\x41\xf5\xd5\x01\x41\x00\x10\xb2\x02\x0c\x07\x0b\x20\x02\x41\x01\x46\x0d\x09\x20\x00\x20\x06\x10\xcd\x01\x20\x00\x41\x99\xd6\x01\x41\x00\x10\xb2\x02\x0c\x06\x0b\x20\x02\x41\x01\x46\x0d\x08\x20\x00\x20\x06\x10\xcd\x01\x20\x00\x41\xb9\xd6\x01\x41\x00\x10\xb2\x02\x0c\x05\x0b\x20\x06\x42\xff\xff\xff\xff\x0f\x83\x21\x06\x0c\x07\x0b\x20\x00\x20\x06\x41\x01\x10\xed\x02\x21\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0c\x06\x0b\x0b\x20\x00\x20\x03\x41\x08\x6a\x20\x06\x10\xe1\x03\x21\x04\x20\x00\x20\x06\x10\xcd\x01\x20\x04\x45\x0d\x01\x20\x03\x20\x04\x20\x04\x10\x9c\x04\x22\x02\x6a\x22\x05\x36\x02\x0c\x42\x00\x21\x06\x02\x40\x20\x02\x20\x03\x28\x02\x08\x46\x0d\x00\x20\x00\x20\x05\x20\x03\x41\x0c\x6a\x41\x00\x41\x04\x10\x9d\x04\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x03\x20\x03\x28\x02\x0c\x10\x9c\x04\x20\x03\x28\x02\x0c\x6a\x22\x02\x36\x02\x0c\x20\x02\x20\x04\x6b\x20\x03\x28\x02\x08\x46\x0d\x00\x20\x00\x20\x06\x10\xcd\x01\x42\x80\x80\x80\x80\xc0\x7e\x21\x06\x0b\x20\x00\x20\x04\x10\xcf\x02\x0c\x04\x0b\x20\x00\x20\x06\x10\xcd\x01\x20\x00\x41\xdb\xd6\x01\x41\x00\x10\xb2\x02\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x0c\x02\x0b\x20\x00\x20\x06\x10\xcd\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x21\x06\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x06\x0b\x48\x01\x03\x7f\x02\x40\x20\x00\x20\x01\x20\x00\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x22\x02\x20\x01\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x22\x03\x20\x02\x20\x03\x49\x22\x04\x1b\x10\x94\x04\x22\x00\x0d\x00\x41\x00\x41\x7f\x41\x01\x20\x04\x1b\x20\x02\x20\x03\x46\x1b\x0f\x0b\x20\x00\x0b\xff\x01\x01\x04\x7f\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x20\x00\x20\x02\x41\x08\x6a\x20\x01\x10\xe1\x03\x21\x03\x20\x00\x20\x01\x10\xcd\x01\x02\x40\x02\x40\x20\x03\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0c\x01\x0b\x20\x02\x20\x03\x20\x03\x10\x9c\x04\x22\x04\x6a\x22\x05\x36\x02\x0c\x02\x40\x02\x40\x20\x04\x20\x02\x28\x02\x08\x47\x0d\x00\x20\x00\x42\x00\x10\xf7\x03\x21\x01\x0c\x01\x0b\x02\x40\x02\x40\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x22\x04\x45\x0d\x00\x20\x04\x2d\x00\x28\x41\x04\x71\x45\x0d\x00\x20\x00\x20\x05\x20\x02\x41\x0c\x6a\x41\x00\x41\x85\x05\x10\x9d\x04\x21\x01\x0c\x01\x0b\x20\x00\x20\x05\x20\x02\x41\x0c\x6a\x41\x00\x41\x85\x01\x10\x9d\x04\x21\x01\x0b\x20\x02\x20\x02\x28\x02\x0c\x10\x9c\x04\x20\x02\x28\x02\x0c\x6a\x22\x04\x36\x02\x0c\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x04\x20\x03\x6b\x20\x02\x28\x02\x08\x46\x0d\x00\x20\x00\x20\x01\x10\xcd\x01\x42\x80\x80\x80\x80\xc0\x7e\x21\x01\x0b\x20\x00\x20\x03\x10\xcf\x02\x0b\x20\x02\x41\x10\x6a\x24\x00\x20\x01\x0b\x0d\x00\x20\x00\x20\x01\x20\x02\x41\x00\x10\xe0\x03\x0b\xae\x02\x02\x03\x7f\x01\x7e\x41\x00\x21\x03\x02\x40\x20\x00\x20\x02\x10\xf0\x02\x45\x0d\x00\x02\x40\x20\x02\xa7\x22\x04\x2f\x01\x06\x41\x0e\x47\x0d\x00\x20\x00\x20\x01\x20\x04\x28\x02\x20\x29\x03\x00\x10\xa4\x03\x0f\x0b\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x02\x40\x02\x40\x20\x00\x20\x02\x41\x3b\x20\x02\x41\x00\x10\xb4\x01\x22\x02\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x41\x7f\x21\x03\x20\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x41\xfc\xd2\x01\x41\x00\x10\xb2\x02\x0c\x01\x0b\x20\x01\xa7\x21\x04\x20\x02\xa7\x21\x05\x02\x40\x03\x40\x02\x40\x20\x04\x28\x02\x10\x28\x02\x2c\x22\x03\x0d\x00\x41\x00\x21\x03\x20\x04\x2f\x01\x06\x41\x30\x47\x0d\x03\x20\x04\xad\x42\x80\x80\x80\x80\x70\x84\x10\xc0\x01\x21\x01\x02\x40\x03\x40\x20\x00\x20\x01\x10\x9c\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x22\x06\x42\x80\x80\x80\x80\x20\x51\x0d\x05\x20\x06\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x02\x40\x20\x05\x20\x01\xa7\x47\x0d\x00\x20\x00\x20\x01\x10\xcd\x01\x0c\x05\x0b\x20\x00\x10\xfa\x02\x45\x0d\x00\x0b\x20\x00\x20\x01\x10\xcd\x01\x0b\x41\x7f\x21\x03\x0c\x03\x0b\x20\x03\x21\x04\x20\x03\x20\x05\x47\x0d\x00\x0b\x0b\x41\x01\x21\x03\x0b\x20\x00\x20\x02\x10\xcd\x01\x0b\x20\x03\x0b\xb9\x09\x01\x0d\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x03\x40\x20\x01\x28\x02\x10\x22\x04\x20\x04\x28\x02\x18\x20\x02\x71\x41\x7f\x73\x22\x05\x41\x02\x74\x6a\x28\x02\x00\x21\x06\x41\x00\x21\x07\x02\x40\x03\x40\x20\x06\x45\x0d\x01\x20\x03\x20\x04\x20\x06\x41\x7f\x6a\x22\x08\x41\x03\x74\x6a\x22\x06\x41\x30\x6a\x22\x09\x36\x02\x0c\x20\x09\x28\x02\x00\x21\x0a\x02\x40\x20\x06\x41\x34\x6a\x28\x02\x00\x20\x02\x47\x0d\x00\x41\x00\x21\x06\x20\x0a\x41\x80\x80\x80\x20\x71\x45\x0d\x09\x41\x7f\x21\x06\x20\x00\x20\x01\x20\x03\x41\x0c\x6a\x10\xd1\x03\x0d\x09\x20\x03\x28\x02\x0c\x22\x09\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x21\x06\x20\x01\x28\x02\x10\x21\x02\x02\x40\x02\x40\x20\x07\x45\x0d\x00\x20\x02\x20\x07\x20\x04\x6b\x41\x50\x6a\x41\x03\x75\x41\x00\x20\x07\x1b\x41\x03\x74\x6a\x41\x30\x6a\x22\x04\x20\x04\x28\x02\x00\x41\x80\x80\x80\x60\x71\x20\x06\x72\x36\x02\x00\x20\x03\x28\x02\x0c\x21\x09\x0c\x01\x0b\x20\x02\x20\x05\x41\x02\x74\x6a\x20\x06\x36\x02\x00\x0b\x41\x01\x21\x06\x20\x02\x20\x02\x28\x02\x24\x41\x01\x6a\x36\x02\x24\x20\x00\x28\x02\x10\x20\x01\x28\x02\x14\x20\x08\x41\x03\x74\x6a\x22\x04\x20\x09\x28\x02\x00\x41\x1a\x76\x10\xd8\x02\x20\x00\x20\x03\x28\x02\x0c\x28\x02\x04\x10\xe4\x02\x20\x03\x28\x02\x0c\x22\x09\x20\x09\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x36\x02\x00\x20\x03\x28\x02\x0c\x41\x00\x36\x02\x04\x20\x04\x42\x80\x80\x80\x80\x30\x37\x03\x00\x20\x02\x28\x02\x24\x22\x04\x41\x08\x48\x0d\x09\x41\x01\x21\x06\x20\x04\x20\x02\x28\x02\x20\x41\x01\x76\x49\x0d\x09\x20\x01\x28\x02\x10\x22\x0b\x2d\x00\x10\x0d\x05\x20\x0b\x28\x02\x20\x20\x0b\x28\x02\x24\x6b\x22\x04\x41\x02\x20\x04\x41\x02\x4a\x1b\x22\x08\x20\x0b\x28\x02\x1c\x4b\x0d\x06\x20\x0b\x28\x02\x18\x41\x01\x6a\x21\x04\x03\x40\x20\x04\x22\x02\x41\x01\x76\x22\x04\x20\x08\x4f\x0d\x00\x0b\x20\x00\x20\x08\x41\x03\x74\x22\x0c\x20\x02\x41\x02\x74\x22\x04\x6a\x41\x30\x6a\x10\xc0\x02\x22\x06\x45\x0d\x08\x20\x02\x41\x7f\x6a\x21\x0d\x20\x0b\x41\x0c\x6a\x22\x02\x28\x02\x00\x22\x09\x20\x0b\x28\x02\x08\x22\x0a\x36\x02\x00\x20\x0a\x20\x09\x36\x02\x04\x41\x00\x21\x07\x20\x0b\x41\x00\x36\x02\x08\x20\x02\x41\x00\x36\x02\x00\x20\x06\x20\x04\x6a\x20\x0b\x41\x30\x10\x70\x22\x0a\x20\x00\x28\x02\x10\x22\x02\x28\x02\x50\x22\x09\x36\x02\x08\x20\x09\x20\x0a\x41\x08\x6a\x22\x05\x36\x02\x04\x20\x02\x20\x05\x36\x02\x50\x20\x0a\x41\x0c\x6a\x20\x02\x41\xd0\x00\x6a\x36\x02\x00\x20\x06\x41\x00\x20\x04\x10\x74\x1a\x20\x0b\x41\x30\x6a\x21\x02\x20\x0a\x41\x30\x6a\x21\x04\x20\x01\x28\x02\x14\x22\x0e\x21\x09\x41\x00\x21\x06\x02\x40\x03\x40\x20\x06\x20\x0a\x28\x02\x20\x22\x05\x4f\x0d\x01\x02\x40\x20\x02\x41\x04\x6a\x22\x05\x28\x02\x00\x22\x0f\x45\x0d\x00\x20\x04\x20\x0f\x36\x02\x04\x20\x04\x20\x04\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x20\x02\x28\x02\x00\x41\x80\x80\x80\x60\x71\x22\x0f\x72\x36\x02\x00\x20\x04\x20\x0a\x20\x05\x28\x02\x00\x20\x0d\x71\x41\x7f\x73\x41\x02\x74\x6a\x22\x05\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x20\x0f\x72\x36\x02\x00\x20\x05\x20\x07\x41\x01\x6a\x22\x0f\x36\x02\x00\x20\x0e\x20\x07\x41\x03\x74\x6a\x20\x09\x29\x03\x00\x37\x03\x00\x20\x04\x41\x08\x6a\x21\x04\x20\x0f\x21\x07\x0b\x20\x09\x41\x08\x6a\x21\x09\x20\x06\x41\x01\x6a\x21\x06\x20\x02\x41\x08\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x20\x07\x20\x05\x20\x0a\x28\x02\x24\x6b\x47\x0d\x07\x20\x0a\x20\x0d\x36\x02\x18\x20\x0a\x41\x00\x36\x02\x24\x20\x0a\x20\x08\x36\x02\x1c\x20\x0a\x20\x07\x36\x02\x20\x20\x01\x20\x0a\x36\x02\x10\x20\x00\x28\x02\x10\x22\x04\x41\x10\x6a\x20\x0b\x20\x0b\x28\x02\x18\x41\x7f\x73\x41\x02\x74\x6a\x20\x04\x28\x02\x04\x11\x00\x00\x41\x01\x21\x06\x20\x00\x20\x01\x28\x02\x14\x20\x0c\x10\xcc\x03\x22\x04\x45\x0d\x09\x20\x01\x20\x04\x36\x02\x14\x0c\x09\x0b\x20\x0a\x41\xff\xff\xff\x1f\x71\x21\x06\x20\x09\x21\x07\x0c\x00\x0b\x00\x0b\x41\x01\x21\x06\x20\x01\x2d\x00\x05\x22\x04\x41\x04\x71\x45\x0d\x06\x20\x04\x41\x08\x71\x45\x0d\x01\x20\x00\x20\x03\x41\x08\x6a\x20\x02\x10\x8e\x04\x45\x0d\x06\x20\x03\x28\x02\x08\x22\x04\x20\x01\x28\x02\x28\x22\x09\x4f\x0d\x06\x02\x40\x20\x01\x2f\x01\x06\x22\x06\x41\x08\x46\x0d\x00\x20\x06\x41\x02\x46\x0d\x00\x41\x00\x21\x06\x0c\x07\x0b\x02\x40\x20\x04\x20\x09\x41\x7f\x6a\x47\x0d\x00\x20\x00\x20\x01\x41\x24\x6a\x28\x02\x00\x20\x04\x41\x03\x74\x6a\x29\x03\x00\x10\xcd\x01\x20\x01\x20\x04\x36\x02\x28\x0c\x06\x0b\x20\x00\x20\x01\x10\xd2\x03\x45\x0d\x00\x0b\x41\x7f\x21\x06\x0c\x05\x0b\x20\x00\x28\x02\x10\x28\x02\x44\x20\x01\x2f\x01\x06\x41\x18\x6c\x6a\x28\x02\x14\x22\x04\x45\x0d\x04\x20\x04\x28\x02\x08\x22\x04\x45\x0d\x04\x20\x00\x20\x01\xad\x42\x80\x80\x80\x80\x70\x84\x20\x02\x20\x04\x11\x13\x00\x21\x06\x0c\x04\x0b\x41\xda\xd1\x01\x41\xae\xb7\x01\x41\xc3\x23\x41\xe9\xd1\x01\x10\x4a\x00\x0b\x41\xfc\xd1\x01\x41\xae\xb7\x01\x41\xc7\x23\x41\xe9\xd1\x01\x10\x4a\x00\x0b\x41\x96\xd2\x01\x41\xae\xb7\x01\x41\xec\x23\x41\xe9\xd1\x01\x10\x4a\x00\x0b\x41\x01\x21\x06\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x06\x0b\xba\x01\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x02\x40\x02\x40\x02\x40\x20\x02\x41\x7f\x4a\x0d\x00\x20\x01\x20\x02\x41\xff\xff\xff\xff\x07\x71\x36\x02\x00\x41\x01\x21\x02\x0c\x01\x0b\x20\x00\x28\x02\x10\x22\x00\x28\x02\x2c\x20\x02\x4d\x0d\x01\x02\x40\x02\x40\x20\x00\x28\x02\x38\x20\x02\x41\x02\x74\x6a\x28\x02\x00\x22\x02\x29\x02\x04\x42\x80\x80\x80\x80\x80\x80\x80\x80\x40\x83\x42\x80\x80\x80\x80\x80\x80\x80\x80\xc0\x00\x52\x0d\x00\x20\x03\x41\x0c\x6a\x20\x02\x10\x8f\x04\x45\x0d\x00\x41\x01\x21\x02\x20\x03\x28\x02\x0c\x22\x00\x41\x7f\x47\x0d\x01\x0b\x41\x00\x21\x00\x41\x00\x21\x02\x0b\x20\x01\x20\x00\x36\x02\x00\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x02\x0f\x0b\x41\xad\xc2\x01\x41\xae\xb7\x01\x41\xb2\x18\x41\xc5\xd2\x01\x10\x4a\x00\x0b\xe8\x01\x02\x06\x7f\x01\x7e\x02\x40\x20\x01\x28\x02\x04\x22\x02\x41\xff\xff\xff\xff\x07\x71\x22\x03\x41\x7f\x6a\x41\x09\x4b\x0d\x00\x02\x40\x02\x40\x20\x02\x41\x7f\x4a\x0d\x00\x20\x01\x2f\x01\x10\x21\x04\x0c\x01\x0b\x20\x01\x2d\x00\x10\x21\x04\x0b\x20\x04\x41\x50\x6a\x22\x05\x41\x09\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x04\x41\x30\x46\x0d\x00\x20\x01\x41\x12\x6a\x21\x06\x41\x11\x21\x04\x20\x02\x41\x7f\x4a\x21\x07\x03\x40\x20\x04\x41\x70\x6a\x20\x03\x4f\x0d\x02\x02\x40\x02\x40\x20\x07\x0d\x00\x20\x06\x2f\x01\x00\x21\x02\x0c\x01\x0b\x20\x01\x20\x04\x6a\x2d\x00\x00\x21\x02\x0b\x20\x02\x41\x50\x6a\x22\x02\x41\x09\x4b\x0d\x04\x20\x04\x41\x01\x6a\x21\x04\x20\x06\x41\x02\x6a\x21\x06\x20\x05\xad\x42\x0a\x7e\x20\x02\xad\x7c\x22\x08\xa7\x21\x05\x20\x08\x42\xff\xff\xff\xff\x0f\x56\x0d\x04\x0c\x00\x0b\x00\x0b\x41\x00\x21\x05\x20\x03\x41\x01\x47\x0d\x01\x0b\x20\x00\x20\x05\x36\x02\x00\x41\x01\x21\x05\x0b\x20\x05\x0f\x0b\x41\x00\x0b\xfc\x04\x01\x09\x7f\x20\x03\x20\x01\x28\x02\x00\x22\x04\x28\x02\x1c\x41\x03\x6c\x41\x02\x6d\x22\x05\x20\x05\x20\x03\x48\x1b\x21\x05\x02\x40\x02\x40\x20\x02\x45\x0d\x00\x20\x00\x20\x02\x28\x02\x14\x20\x05\x41\x03\x74\x10\xcc\x03\x22\x03\x45\x0d\x01\x20\x02\x20\x03\x36\x02\x14\x0b\x20\x04\x28\x02\x18\x22\x06\x41\x01\x6a\x22\x07\x21\x03\x03\x40\x20\x03\x22\x02\x41\x01\x74\x21\x03\x20\x02\x20\x05\x49\x0d\x00\x0b\x02\x40\x02\x40\x20\x02\x20\x07\x46\x0d\x00\x20\x00\x20\x05\x41\x03\x74\x20\x02\x41\x02\x74\x22\x06\x6a\x41\x30\x6a\x10\xc0\x02\x22\x08\x45\x0d\x02\x20\x04\x41\x0c\x6a\x22\x07\x28\x02\x00\x22\x03\x20\x04\x28\x02\x08\x22\x09\x36\x02\x00\x20\x09\x20\x03\x36\x02\x04\x41\x00\x21\x03\x20\x04\x41\x00\x36\x02\x08\x20\x07\x41\x00\x36\x02\x00\x20\x08\x20\x06\x6a\x22\x0a\x20\x04\x20\x04\x28\x02\x20\x41\x03\x74\x41\x30\x6a\x10\x70\x22\x07\x20\x00\x28\x02\x10\x22\x0b\x28\x02\x50\x22\x09\x36\x02\x08\x20\x09\x20\x07\x41\x08\x6a\x22\x0c\x36\x02\x04\x20\x07\x20\x02\x41\x7f\x6a\x22\x09\x36\x02\x18\x20\x0b\x20\x0c\x36\x02\x50\x20\x07\x41\x0c\x6a\x20\x0b\x41\xd0\x00\x6a\x36\x02\x00\x20\x08\x41\x00\x20\x06\x10\x74\x1a\x20\x07\x41\x30\x6a\x21\x02\x02\x40\x03\x40\x20\x03\x20\x07\x28\x02\x20\x4f\x0d\x01\x02\x40\x02\x40\x20\x02\x41\x04\x6a\x28\x02\x00\x22\x06\x0d\x00\x20\x03\x41\x01\x6a\x21\x03\x0c\x01\x0b\x20\x02\x20\x02\x28\x02\x00\x41\x80\x80\x80\x60\x71\x20\x07\x20\x06\x20\x09\x71\x41\x7f\x73\x41\x02\x74\x6a\x22\x06\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x72\x36\x02\x00\x20\x06\x20\x03\x41\x01\x6a\x22\x03\x36\x02\x00\x0b\x20\x02\x41\x08\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x10\x22\x02\x41\x10\x6a\x20\x04\x20\x04\x28\x02\x18\x41\x7f\x73\x41\x02\x74\x6a\x20\x02\x28\x02\x04\x11\x00\x00\x0c\x01\x0b\x20\x04\x41\x0c\x6a\x22\x02\x28\x02\x00\x22\x03\x20\x04\x28\x02\x08\x22\x09\x36\x02\x00\x20\x09\x20\x03\x36\x02\x04\x20\x04\x41\x00\x36\x02\x08\x20\x02\x41\x00\x36\x02\x00\x02\x40\x20\x00\x20\x04\x20\x06\x41\x7f\x73\x41\x02\x74\x6a\x20\x05\x41\x03\x74\x20\x07\x41\x02\x74\x22\x02\x6a\x41\x30\x6a\x10\xcc\x03\x22\x03\x0d\x00\x20\x04\x20\x00\x28\x02\x10\x22\x02\x28\x02\x50\x22\x03\x36\x02\x08\x20\x03\x20\x04\x41\x08\x6a\x22\x05\x36\x02\x04\x20\x02\x20\x05\x36\x02\x50\x20\x04\x20\x02\x41\xd0\x00\x6a\x36\x02\x0c\x41\x7f\x0f\x0b\x20\x03\x20\x02\x6a\x22\x0a\x20\x00\x28\x02\x10\x22\x02\x28\x02\x50\x22\x03\x36\x02\x08\x20\x03\x20\x0a\x41\x08\x6a\x22\x07\x36\x02\x04\x20\x02\x20\x07\x36\x02\x50\x20\x0a\x41\x0c\x6a\x20\x02\x41\xd0\x00\x6a\x36\x02\x00\x0b\x20\x0a\x20\x05\x36\x02\x1c\x20\x01\x20\x0a\x36\x02\x00\x41\x00\x0f\x0b\x41\x7f\x0b\xeb\x01\x01\x01\x7f\x02\x40\x02\x40\x02\x40\x41\x07\x20\x02\x42\x20\x88\xa7\x22\x03\x20\x03\x41\x0b\x6a\x41\x11\x4b\x1b\x22\x03\x41\x07\x4d\x0d\x00\x20\x03\x41\x0a\x6a\x41\x02\x4f\x0d\x01\x20\x02\xa7\x41\x04\x6a\x0f\x0b\x02\x40\x02\x40\x02\x40\x20\x03\x0e\x08\x00\x00\x00\x03\x03\x03\x03\x01\x00\x0b\x20\x01\x42\x00\x37\x02\x0c\x20\x01\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x04\x20\x01\x20\x00\x28\x02\xd8\x01\x36\x02\x00\x20\x01\x20\x02\x42\x20\x86\x42\x20\x87\x10\x95\x04\x0d\x01\x0c\x03\x0b\x20\x01\x42\x00\x37\x02\x0c\x20\x01\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x04\x20\x01\x20\x00\x28\x02\xd8\x01\x36\x02\x00\x20\x01\x20\x02\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\x10\x96\x04\x45\x0d\x02\x0b\x20\x01\x10\xd7\x02\x41\x00\x0f\x0b\x20\x01\x42\x00\x37\x02\x0c\x20\x01\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x04\x20\x01\x20\x00\x28\x02\xd8\x01\x36\x02\x00\x20\x01\x10\x97\x04\x0b\x20\x01\x0b\x0a\x00\x20\x00\x20\x01\x10\xbc\x02\x45\x0b\xdd\x01\x01\x09\x7f\x02\x40\x20\x00\x28\x02\x08\x22\x02\x20\x01\x28\x02\x08\x22\x03\x46\x0d\x00\x41\x7f\x41\x01\x20\x02\x20\x03\x48\x1b\x0f\x0b\x20\x01\x28\x02\x0c\x22\x04\x41\x7f\x6a\x21\x03\x20\x00\x28\x02\x0c\x22\x05\x41\x7f\x6a\x21\x06\x20\x04\x41\x02\x74\x41\x7c\x6a\x21\x07\x20\x05\x41\x02\x74\x41\x7c\x6a\x21\x08\x20\x05\x20\x04\x20\x05\x20\x04\x4a\x1b\x41\x7f\x6a\x21\x02\x02\x40\x03\x40\x41\x00\x21\x09\x20\x02\x41\x00\x48\x0d\x01\x41\x00\x21\x09\x41\x00\x21\x0a\x02\x40\x20\x05\x20\x06\x4d\x0d\x00\x20\x00\x28\x02\x10\x20\x08\x6a\x28\x02\x00\x21\x0a\x0b\x02\x40\x20\x04\x20\x03\x4d\x0d\x00\x20\x01\x28\x02\x10\x20\x07\x6a\x28\x02\x00\x21\x09\x0b\x20\x02\x41\x7f\x6a\x21\x02\x20\x03\x41\x7f\x6a\x21\x03\x20\x07\x41\x7c\x6a\x21\x07\x20\x06\x41\x7f\x6a\x21\x06\x20\x08\x41\x7c\x6a\x21\x08\x20\x0a\x20\x09\x46\x0d\x00\x0b\x41\x7f\x41\x01\x20\x0a\x20\x09\x49\x1b\x21\x09\x0b\x20\x09\x0b\xad\x01\x01\x03\x7f\x20\x01\x28\x02\x04\x21\x03\x02\x40\x20\x00\x28\x02\x04\x41\x00\x48\x0d\x00\x02\x40\x20\x03\x41\x00\x48\x0d\x00\x20\x00\x41\x10\x6a\x20\x01\x41\x10\x6a\x20\x02\x10\x6b\x0f\x0b\x41\x00\x20\x01\x41\x10\x6a\x20\x00\x41\x10\x6a\x20\x02\x10\x98\x04\x6b\x0f\x0b\x41\x7f\x21\x04\x02\x40\x20\x03\x41\x7f\x4a\x0d\x00\x20\x01\x41\x10\x6a\x21\x01\x20\x00\x41\x10\x6a\x21\x00\x03\x40\x02\x40\x20\x04\x41\x01\x6a\x22\x04\x20\x02\x48\x0d\x00\x41\x00\x0f\x0b\x20\x01\x2f\x01\x00\x21\x03\x20\x00\x2f\x01\x00\x21\x05\x20\x01\x41\x02\x6a\x21\x01\x20\x00\x41\x02\x6a\x21\x00\x20\x05\x20\x03\x6b\x22\x03\x45\x0d\x00\x0b\x20\x03\x0f\x0b\x20\x00\x41\x10\x6a\x20\x01\x41\x10\x6a\x20\x02\x10\x98\x04\x0b\x2b\x01\x01\x7f\x02\x40\x20\x01\x42\x7f\x55\x0d\x00\x20\x00\x42\x00\x20\x01\x7d\x10\xb9\x02\x21\x02\x20\x00\x41\x01\x36\x02\x04\x20\x02\x0f\x0b\x20\x00\x20\x01\x10\xb9\x02\x0b\xd7\x01\x02\x02\x7e\x02\x7f\x20\x01\xbd\x22\x02\x42\xff\xff\xff\xff\xff\xff\xff\x07\x83\x21\x03\x20\x02\x42\x3f\x88\xa7\x21\x04\x02\x40\x02\x40\x02\x40\x20\x02\x42\x34\x88\xa7\x41\xff\x0f\x71\x22\x05\x45\x0d\x00\x20\x05\x41\xff\x0f\x47\x0d\x01\x02\x40\x20\x03\x50\x0d\x00\x20\x00\x10\x97\x04\x41\x00\x0f\x0b\x20\x00\x20\x04\x10\xa2\x04\x41\x00\x0f\x0b\x02\x40\x20\x03\x42\x00\x52\x0d\x00\x20\x00\x20\x04\x10\x9b\x09\x41\x00\x0f\x0b\x20\x02\x42\x0c\x86\x22\x02\x20\x02\x79\x22\x03\x86\x21\x02\x41\x00\x20\x03\xa7\x6b\x21\x05\x0c\x01\x0b\x20\x03\x42\x0b\x86\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x84\x21\x02\x0b\x20\x00\x20\x05\x41\x82\x78\x6a\x36\x02\x08\x02\x40\x20\x00\x41\x02\x10\x98\x09\x0d\x00\x20\x00\x28\x02\x10\x22\x05\x20\x02\x42\x20\x88\x3e\x02\x04\x20\x05\x20\x02\x3e\x02\x00\x20\x00\x20\x04\x36\x02\x04\x41\x00\x0f\x0b\x20\x00\x10\x97\x04\x41\x20\x0b\x1a\x00\x20\x00\x41\x00\x10\x98\x09\x1a\x20\x00\x42\x80\x80\x80\x80\xf0\xff\xff\xff\xff\x00\x37\x02\x04\x0b\x43\x01\x03\x7f\x41\x00\x21\x03\x03\x40\x02\x40\x20\x03\x20\x02\x48\x0d\x00\x41\x00\x0f\x0b\x20\x01\x20\x03\x6a\x21\x04\x20\x00\x2f\x01\x00\x21\x05\x20\x00\x41\x02\x6a\x21\x00\x20\x03\x41\x01\x6a\x21\x03\x20\x05\x20\x04\x2d\x00\x00\x6b\x22\x04\x45\x0d\x00\x0b\x20\x04\x0b\x34\x00\x02\x40\x20\x00\x41\xf4\x7e\x6a\x22\x00\x41\x27\x4f\x0d\x00\x42\x8f\x80\xff\xbf\xe6\x09\x20\x00\xad\x88\x42\x01\x83\x50\x0d\x00\x20\x00\x41\x02\x74\x41\xa0\xd4\x01\x6a\x28\x02\x00\x0f\x0b\x10\x40\x00\x0b\x5f\x01\x05\x7f\x20\x00\x28\x02\x00\x21\x03\x41\x00\x21\x04\x41\x00\x21\x05\x41\x00\x21\x06\x03\x7f\x02\x40\x02\x40\x20\x06\x20\x03\x4e\x0d\x00\x20\x00\x28\x02\x04\x22\x07\x20\x05\x6a\x28\x02\x00\x20\x01\x47\x0d\x01\x20\x02\x41\x02\x74\x20\x07\x6a\x20\x05\x6a\x41\x04\x6a\x28\x02\x00\x21\x04\x0b\x20\x04\x0f\x0b\x20\x05\x41\x3c\x6a\x21\x05\x20\x06\x41\x01\x6a\x21\x06\x0c\x00\x0b\x0b\x0c\x00\x20\x00\x20\x01\x10\xc0\x01\x10\xac\x03\x0b\x75\x01\x03\x7f\x23\x00\x41\x10\x6b\x22\x01\x24\x00\x20\x00\x21\x02\x02\x40\x03\x40\x02\x40\x20\x02\x2c\x00\x00\x22\x03\x41\x00\x48\x0d\x00\x20\x03\x41\xff\x01\x71\x41\x77\x6a\x22\x03\x41\x17\x4b\x0d\x02\x41\x01\x20\x03\x74\x41\x9f\x80\x80\x04\x71\x45\x0d\x02\x20\x02\x41\x01\x6a\x21\x02\x0c\x01\x0b\x20\x02\x41\x06\x20\x01\x41\x0c\x6a\x10\x9e\x04\x10\x9f\x04\x45\x0d\x01\x20\x01\x28\x02\x0c\x21\x02\x0c\x00\x0b\x00\x0b\x20\x01\x41\x10\x6a\x24\x00\x20\x02\x20\x00\x6b\x0b\x11\x00\x20\x00\x20\x01\x20\x02\x20\x03\x20\x04\x41\x00\x10\xa0\x04\x0b\xe6\x01\x01\x05\x7f\x20\x00\x41\x01\x6a\x21\x03\x02\x40\x20\x00\x2d\x00\x00\x22\x04\x41\x18\x74\x41\x18\x75\x22\x05\x41\x00\x48\x0d\x00\x20\x02\x20\x03\x36\x02\x00\x20\x04\x0f\x0b\x41\x7f\x21\x06\x02\x40\x20\x05\x41\xc0\x00\x6a\x22\x04\x41\xff\x01\x71\x41\x3d\x4b\x0d\x00\x20\x04\x41\x18\x74\x41\x18\x75\x41\x02\x74\x41\xfc\xc1\x05\x6a\x28\x02\x00\x22\x04\x20\x01\x4e\x0d\x00\x20\x04\x41\x7f\x6a\x21\x01\x20\x04\x20\x00\x6a\x41\x01\x6a\x21\x07\x20\x05\x20\x04\x41\xf3\xc3\x05\x6a\x2d\x00\x00\x71\x21\x05\x02\x40\x03\x40\x20\x04\x45\x0d\x01\x41\x7f\x21\x06\x20\x03\x2c\x00\x00\x22\x00\x41\x7f\x4a\x0d\x02\x20\x00\x41\xff\x01\x71\x41\xbf\x01\x4b\x0d\x02\x20\x05\x41\x06\x74\x20\x00\x41\x3f\x71\x72\x21\x05\x20\x04\x41\x7f\x6a\x21\x04\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x41\x7f\x21\x06\x20\x05\x20\x01\x41\x02\x74\x41\x80\xc4\x05\x6a\x28\x02\x00\x49\x0d\x00\x20\x02\x20\x07\x36\x02\x00\x20\x05\x21\x06\x0b\x20\x06\x0b\x48\x01\x03\x7f\x41\x54\x21\x01\x02\x40\x03\x40\x41\x00\x21\x02\x20\x01\x41\x04\x6a\x22\x03\x45\x0d\x01\x20\x01\x41\xae\x9b\x03\x6a\x2f\x01\x00\x20\x00\x4a\x0d\x01\x20\x01\x41\xb0\x9b\x03\x6a\x21\x02\x20\x03\x21\x01\x20\x02\x2f\x01\x00\x20\x00\x4c\x0d\x00\x0b\x41\x01\x21\x02\x0b\x20\x02\x0b\xec\x11\x03\x0c\x7f\x03\x7e\x01\x7c\x23\x00\x41\xc0\x00\x6b\x22\x06\x24\x00\x41\xdf\x00\x41\x80\x02\x20\x04\x41\x20\x71\x1b\x21\x07\x20\x04\x41\x80\x03\x71\x21\x08\x41\x00\x21\x09\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x2d\x00\x00\x22\x0a\x41\x55\x6a\x22\x0b\x41\x02\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x0b\x0e\x03\x01\x03\x00\x01\x0b\x41\x01\x21\x09\x20\x01\x41\x01\x6a\x21\x01\x20\x04\x41\x80\x08\x71\x45\x0d\x03\x0c\x01\x0b\x20\x01\x41\x01\x6a\x21\x01\x41\x00\x21\x09\x20\x04\x41\x80\x08\x71\x45\x0d\x02\x0b\x20\x01\x2d\x00\x00\x21\x0a\x0b\x20\x0a\x41\xff\x01\x71\x41\x30\x47\x0d\x00\x02\x40\x02\x40\x20\x01\x2d\x00\x01\x22\x0a\x41\xc2\x00\x46\x0d\x00\x20\x0a\x41\x18\x74\x41\x18\x75\x21\x0b\x02\x40\x20\x0a\x41\xcf\x00\x46\x0d\x00\x02\x40\x20\x0a\x41\xf8\x00\x46\x0d\x00\x20\x0a\x41\xe2\x00\x46\x0d\x02\x20\x0a\x41\xef\x00\x46\x0d\x01\x20\x0a\x41\xd8\x00\x47\x0d\x03\x0b\x02\x40\x20\x03\x41\x6f\x71\x0d\x00\x20\x01\x41\x02\x6a\x21\x0c\x41\x10\x21\x03\x0c\x07\x0b\x20\x0a\x41\xe2\x00\x46\x0d\x01\x20\x0a\x41\xef\x00\x47\x0d\x04\x0b\x02\x40\x20\x03\x0d\x00\x20\x04\x41\x04\x71\x45\x0d\x00\x20\x01\x41\x02\x6a\x21\x0c\x41\x08\x21\x03\x0c\x06\x0b\x20\x0b\x41\xe2\x00\x47\x0d\x03\x0b\x20\x03\x0d\x02\x20\x04\x41\x04\x71\x45\x0d\x02\x41\x02\x21\x03\x20\x01\x41\x02\x6a\x21\x0c\x0c\x04\x0b\x20\x0b\x41\x30\x48\x0d\x01\x20\x04\x41\x10\x71\x45\x0d\x01\x20\x03\x0d\x01\x20\x0b\x41\x39\x4a\x0d\x01\x20\x01\x41\x01\x6a\x21\x0c\x20\x01\x41\x02\x6a\x21\x0a\x02\x40\x03\x40\x20\x0b\x41\xf8\x01\x71\x41\x30\x47\x0d\x01\x20\x0a\x2d\x00\x00\x21\x0b\x20\x0a\x41\x01\x6a\x21\x0a\x0c\x00\x0b\x00\x0b\x41\x08\x21\x03\x41\x80\x02\x21\x07\x41\x01\x21\x0d\x20\x0b\x41\xfe\x01\x71\x41\x38\x47\x0d\x04\x20\x01\x21\x0c\x0c\x02\x0b\x20\x04\x41\x01\x71\x0d\x00\x20\x04\x41\x80\x01\x71\x0d\x00\x20\x01\x41\x08\x6a\x21\x0c\x41\x00\x21\x0a\x02\x40\x03\x40\x20\x0a\x41\x08\x46\x0d\x01\x20\x01\x20\x0a\x6a\x2d\x00\x00\x20\x0a\x41\xd0\xcf\x05\x6a\x2d\x00\x00\x47\x0d\x02\x20\x0a\x41\x01\x6a\x21\x0a\x0c\x00\x0b\x00\x0b\x02\x40\x20\x08\x41\x80\x02\x47\x0d\x00\x20\x00\x10\xa1\x04\x22\x12\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x06\x20\x12\xa7\x41\x04\x6a\x20\x09\x10\xa2\x04\x0c\x06\x0b\x44\x00\x00\x00\x00\x00\x00\xf0\xff\x44\x00\x00\x00\x00\x00\x00\xf0\x7f\x20\x09\x1b\x22\x15\xbd\x21\x12\x02\x40\x02\x40\x20\x15\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x15\xaa\x21\x0a\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x0a\x0b\x02\x40\x20\x12\x20\x0a\xb7\xbd\x52\x0d\x00\x20\x0a\xad\x21\x12\x0c\x06\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x12\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x12\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x12\x0c\x05\x0b\x20\x01\x21\x0c\x41\x00\x21\x0d\x20\x03\x0d\x03\x0b\x41\x0a\x21\x03\x0c\x02\x0b\x41\x00\x21\x0d\x0b\x42\x80\x80\x80\x80\xc0\x7e\x21\x12\x20\x0c\x21\x01\x20\x0c\x2d\x00\x00\x10\xa3\x04\x20\x03\x4e\x0d\x01\x0b\x20\x01\x41\x01\x6a\x21\x0e\x41\x00\x21\x0a\x20\x03\x41\x0a\x47\x21\x0f\x02\x40\x02\x40\x03\x40\x20\x01\x20\x0a\x6a\x22\x10\x2d\x00\x00\x22\x0b\x41\x18\x74\x41\x18\x75\x21\x11\x02\x40\x20\x0b\x10\xa3\x04\x20\x03\x48\x0d\x00\x20\x07\x20\x11\x47\x0d\x02\x02\x40\x20\x0f\x0d\x00\x20\x0a\x41\x01\x47\x0d\x00\x20\x01\x2d\x00\x00\x41\x30\x46\x0d\x04\x0b\x20\x01\x20\x0a\x6a\x41\x01\x6a\x2d\x00\x00\x10\xa3\x04\x20\x03\x4e\x0d\x02\x0b\x20\x01\x20\x0a\x6a\x41\x01\x6a\x21\x0c\x20\x0a\x41\x01\x6a\x21\x0a\x0c\x00\x0b\x00\x0b\x20\x10\x21\x0e\x0b\x41\x00\x21\x0f\x02\x40\x20\x04\x41\x01\x71\x0d\x00\x41\x00\x21\x0f\x02\x40\x20\x0b\x41\x2e\x47\x0d\x00\x20\x0e\x2d\x00\x01\x21\x11\x02\x40\x20\x0e\x20\x01\x4b\x0d\x00\x41\x2e\x21\x0b\x20\x11\x10\xa3\x04\x20\x03\x4e\x0d\x01\x0b\x20\x0e\x41\x01\x6a\x21\x0c\x42\x80\x80\x80\x80\xc0\x7e\x21\x12\x20\x07\x20\x11\x41\x18\x74\x41\x18\x75\x46\x0d\x02\x20\x0e\x41\x02\x6a\x21\x0a\x20\x11\x21\x0b\x02\x40\x03\x40\x02\x40\x02\x40\x20\x0b\x41\xff\x01\x71\x10\xa3\x04\x20\x03\x4e\x0d\x00\x20\x0a\x2d\x00\x00\x21\x11\x0c\x01\x0b\x20\x07\x20\x0b\x41\x18\x74\x41\x18\x75\x47\x0d\x02\x20\x0a\x2d\x00\x00\x22\x11\x10\xa3\x04\x20\x03\x4e\x0d\x02\x0b\x20\x0a\x21\x0c\x20\x0a\x41\x01\x6a\x21\x0a\x20\x11\x21\x0b\x0c\x00\x0b\x00\x0b\x20\x0a\x41\x7f\x6a\x21\x10\x41\x01\x21\x0f\x0b\x20\x10\x20\x01\x4d\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x0b\x41\xff\x01\x71\x22\x0a\x41\xc5\x00\x46\x0d\x00\x20\x0a\x41\xd0\x00\x46\x0d\x01\x20\x0a\x41\xf0\x00\x46\x0d\x01\x20\x0a\x41\xe5\x00\x47\x0d\x03\x0b\x20\x03\x41\x0a\x46\x0d\x01\x20\x0b\x41\xff\x01\x71\x41\xd0\x00\x47\x0d\x02\x0b\x20\x03\x41\x10\x4b\x0d\x01\x41\x01\x20\x03\x74\x41\x84\x82\x04\x71\x45\x0d\x01\x0b\x41\x01\x21\x0f\x20\x10\x41\x01\x6a\x21\x0a\x02\x40\x20\x10\x2d\x00\x01\x41\x55\x6a\x22\x0b\x41\x02\x4b\x0d\x00\x02\x40\x02\x40\x20\x0b\x0e\x03\x00\x02\x01\x00\x0b\x20\x10\x41\x02\x6a\x21\x0a\x0c\x01\x0b\x20\x10\x41\x02\x6a\x21\x0a\x0b\x20\x0a\x2d\x00\x00\x41\x50\x6a\x41\x09\x4b\x0d\x00\x20\x0a\x41\x01\x6a\x21\x0c\x02\x40\x03\x40\x20\x0c\x2d\x00\x00\x22\x0a\x41\x18\x74\x41\x18\x75\x21\x0b\x02\x40\x20\x0a\x41\x50\x6a\x41\x0a\x49\x0d\x00\x20\x07\x20\x0b\x47\x0d\x02\x20\x0c\x41\x01\x6a\x2d\x00\x00\x41\x50\x6a\x41\x09\x4b\x0d\x02\x0b\x20\x0c\x41\x01\x6a\x21\x0c\x0c\x00\x0b\x00\x0b\x41\x01\x21\x0f\x20\x0c\x21\x10\x0b\x02\x40\x20\x10\x20\x01\x47\x0d\x00\x42\x80\x80\x80\x80\xc0\x7e\x21\x12\x0c\x01\x0b\x41\x00\x21\x0b\x20\x06\x21\x07\x41\x00\x21\x0e\x02\x40\x02\x40\x20\x10\x20\x01\x6b\x22\x10\x41\x02\x6a\x22\x0a\x41\xc1\x00\x49\x0d\x00\x41\x01\x21\x0e\x20\x00\x28\x02\x10\x22\x11\x41\x10\x6a\x20\x0a\x20\x11\x28\x02\x00\x11\x03\x00\x22\x07\x45\x0d\x01\x0b\x02\x40\x20\x09\x45\x0d\x00\x20\x07\x41\x2d\x3a\x00\x00\x41\x01\x21\x0b\x0b\x41\x00\x21\x0a\x02\x40\x03\x40\x20\x0a\x20\x10\x4e\x0d\x01\x02\x40\x20\x01\x20\x0a\x6a\x2d\x00\x00\x22\x11\x41\xdf\x00\x46\x0d\x00\x20\x07\x20\x0b\x6a\x20\x11\x3a\x00\x00\x20\x0b\x41\x01\x6a\x21\x0b\x0b\x20\x0a\x41\x01\x6a\x21\x0a\x0c\x00\x0b\x00\x0b\x20\x07\x20\x0b\x6a\x41\x00\x3a\x00\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x04\x41\xc0\x00\x71\x45\x0d\x00\x02\x40\x20\x0c\x2d\x00\x00\x41\x94\x7f\x6a\x22\x0a\x41\x02\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x0a\x0e\x03\x01\x02\x00\x01\x0b\x20\x0c\x41\x01\x6a\x21\x0c\x41\x80\x01\x21\x08\x0c\x05\x0b\x20\x0c\x41\x01\x6a\x21\x0c\x41\x80\x02\x21\x08\x0c\x04\x0b\x20\x0c\x41\x01\x6a\x21\x0c\x41\x80\x03\x21\x08\x0c\x03\x0b\x02\x40\x20\x04\x41\x80\x04\x71\x45\x0d\x00\x42\x80\x80\x80\x80\xc0\x7e\x21\x12\x20\x0d\x0d\x04\x20\x08\x41\x80\x01\x20\x0f\x1b\x21\x08\x0c\x03\x0b\x20\x03\x41\x0a\x47\x0d\x01\x0c\x02\x0b\x20\x08\x0d\x01\x02\x40\x20\x04\x41\x80\x04\x71\x45\x0d\x00\x42\x80\x80\x80\x80\xc0\x7e\x21\x12\x20\x0d\x0d\x03\x20\x0f\x45\x41\x07\x74\x21\x08\x0c\x02\x0b\x41\x00\x21\x08\x20\x03\x41\x0a\x46\x0d\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x21\x12\x20\x0f\x0d\x01\x0b\x02\x40\x02\x40\x20\x08\x41\x19\x77\x22\x0a\x41\x03\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x0a\x0e\x04\x00\x01\x02\x03\x00\x0b\x02\x40\x02\x40\x02\x40\x20\x03\x41\x0a\x47\x0d\x00\x20\x0f\x0d\x01\x0b\x20\x07\x41\x01\x6a\x20\x07\x20\x07\x2d\x00\x00\x22\x11\x41\x2d\x46\x1b\x21\x0a\x03\x40\x20\x0a\x2d\x00\x00\x21\x01\x20\x0a\x41\x01\x6a\x22\x0b\x21\x0a\x20\x01\x41\x30\x46\x0d\x00\x0b\x02\x40\x02\x40\x20\x03\x41\x0a\x47\x0d\x00\x42\x98\xb3\xe6\xcc\x99\xb3\xe6\xcc\x19\x21\x13\x42\x0a\x21\x14\x0c\x01\x0b\x41\x00\x20\x03\x6b\xac\x20\x03\xac\x22\x14\x80\x21\x13\x0b\x41\x00\x21\x0a\x42\x00\x21\x12\x02\x40\x03\x40\x20\x01\x41\xff\x01\x71\x22\x01\x45\x0d\x01\x20\x01\x10\xa3\x04\x22\x01\x20\x03\x4e\x0d\x01\x20\x12\x20\x12\x20\x14\x7e\x20\x01\xac\x7c\x20\x12\x20\x13\x56\x22\x01\x1b\x21\x12\x20\x0a\x20\x01\x6a\x21\x0a\x20\x0b\x2d\x00\x00\x21\x01\x20\x0b\x41\x01\x6a\x21\x0b\x0c\x00\x0b\x00\x0b\x20\x03\xb7\x20\x0a\xb7\x10\xa9\x01\x20\x12\xba\x22\x15\xa2\x20\x15\x20\x0a\x1b\x22\x15\x9a\x20\x15\x20\x11\x41\x2d\x46\x1b\x21\x15\x0c\x01\x0b\x20\x07\x41\x00\x10\x83\x01\x21\x15\x0b\x20\x15\xbd\x21\x12\x02\x40\x02\x40\x20\x15\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x15\xaa\x21\x0a\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x0a\x0b\x20\x12\x20\x0a\xb7\xbd\x52\x0d\x04\x20\x0a\xad\x21\x12\x0c\x05\x0b\x42\x80\x80\x80\x80\xc0\x7e\x21\x12\x20\x0f\x20\x0d\x72\x0d\x04\x20\x00\x20\x07\x20\x03\x20\x04\x41\x00\x20\x00\x28\x02\x10\x41\x98\x02\x6a\x28\x02\x00\x11\x26\x00\x21\x12\x0c\x04\x0b\x42\x80\x80\x80\x80\xc0\x7e\x21\x12\x20\x0d\x0d\x03\x20\x00\x20\x07\x20\x03\x20\x04\x20\x05\x20\x00\x28\x02\x10\x41\xb4\x02\x6a\x28\x02\x00\x11\x26\x00\x21\x12\x0c\x03\x0b\x42\x80\x80\x80\x80\xc0\x7e\x21\x12\x20\x03\x41\x0a\x47\x0d\x02\x20\x00\x20\x07\x41\x0a\x20\x04\x41\x00\x20\x00\x28\x02\x10\x41\xd0\x02\x6a\x28\x02\x00\x11\x26\x00\x21\x12\x0c\x02\x0b\x10\x40\x00\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x12\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x12\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x12\x0b\x20\x0e\x45\x0d\x01\x20\x00\x28\x02\x10\x22\x0a\x41\x10\x6a\x20\x07\x20\x0a\x28\x02\x04\x11\x00\x00\x0c\x01\x0b\x20\x00\x10\xc1\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x12\x0b\x02\x40\x20\x02\x45\x0d\x00\x20\x02\x20\x0c\x36\x02\x00\x0b\x20\x06\x41\xc0\x00\x6a\x24\x00\x20\x12\x0b\x4e\x01\x01\x7f\x02\x40\x20\x00\x41\x18\x10\xc0\x02\x22\x01\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x01\x41\x01\x36\x02\x00\x20\x01\x42\x00\x37\x02\x10\x20\x01\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x08\x20\x01\x20\x00\x28\x02\xd8\x01\x36\x02\x04\x20\x01\xad\x42\x80\x80\x80\x80\xf0\x7e\x84\x0b\x1c\x00\x20\x00\x41\x00\x10\x98\x09\x1a\x20\x00\x20\x01\x36\x02\x04\x20\x00\x41\xfe\xff\xff\xff\x07\x36\x02\x08\x0b\x3d\x01\x01\x7f\x02\x40\x02\x40\x20\x00\x41\x50\x6a\x22\x01\x41\x0a\x49\x0d\x00\x20\x00\x41\xbf\x7f\x6a\x41\x19\x4b\x0d\x01\x20\x00\x41\x49\x6a\x21\x01\x0b\x20\x01\x0f\x0b\x20\x00\x41\xa9\x7f\x6a\x41\x24\x20\x00\x41\x9f\x7f\x6a\x41\x1a\x49\x1b\x0b\x1c\x00\x20\x00\x20\x00\x28\x02\x10\x28\x02\x44\x20\x01\x41\x18\x6c\x6a\x28\x02\x04\x41\xbc\xd5\x01\x10\xf1\x02\x0b\xda\x01\x01\x02\x7f\x02\x40\x02\x40\x20\x01\x28\x02\x08\x22\x03\x41\xfe\xff\xff\xff\x07\x48\x0d\x00\x41\x00\x21\x04\x20\x02\x41\x01\x71\x0d\x01\x41\xff\xff\xff\xff\x07\x21\x04\x20\x03\x41\xfe\xff\xff\xff\x07\x47\x0d\x01\x20\x01\x28\x02\x04\x41\xff\xff\xff\xff\x07\x6a\x21\x04\x0c\x01\x0b\x02\x40\x20\x03\x41\x01\x4e\x0d\x00\x41\x00\x21\x04\x0c\x01\x0b\x02\x40\x20\x03\x41\x1f\x4a\x0d\x00\x41\x00\x20\x01\x28\x02\x0c\x41\x02\x74\x20\x01\x28\x02\x10\x6a\x41\x7c\x6a\x28\x02\x00\x41\x20\x20\x03\x6b\x76\x22\x04\x6b\x20\x04\x20\x01\x28\x02\x04\x1b\x21\x04\x0c\x01\x0b\x02\x40\x20\x02\x41\x01\x71\x0d\x00\x41\x80\x80\x80\x80\x78\x41\xff\xff\xff\xff\x07\x20\x01\x28\x02\x04\x1b\x21\x04\x0c\x01\x0b\x41\x00\x20\x01\x28\x02\x10\x20\x01\x28\x02\x0c\x22\x04\x20\x04\x41\x05\x74\x20\x03\x6b\x10\x92\x0a\x22\x04\x6b\x20\x04\x20\x01\x28\x02\x04\x1b\x21\x04\x0b\x20\x00\x20\x04\x36\x02\x00\x0b\x26\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x20\x03\x20\x02\x36\x02\x0c\x20\x00\x41\x01\x20\x01\x20\x02\x10\xc3\x02\x20\x03\x41\x10\x6a\x24\x00\x0b\xc8\x02\x03\x02\x7f\x01\x7c\x02\x7e\x23\x00\x41\x20\x6b\x22\x02\x24\x00\x44\x00\x00\x00\x00\x00\x00\xf8\x7f\x21\x04\x02\x40\x20\x00\x28\x02\x08\x41\xff\xff\xff\xff\x07\x46\x0d\x00\x42\x00\x21\x05\x20\x02\x42\x00\x37\x02\x14\x20\x02\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x0c\x20\x02\x20\x00\x28\x02\x00\x36\x02\x08\x20\x02\x41\x08\x6a\x20\x00\x10\xcc\x04\x1a\x02\x40\x20\x02\x28\x02\x10\x22\x00\x41\xfd\xff\xff\xff\x07\x4a\x0d\x00\x20\x02\x41\x08\x6a\x41\x35\x41\xc8\x04\x10\x9f\x09\x1a\x20\x02\x28\x02\x10\x21\x00\x0b\x02\x40\x02\x40\x20\x00\x41\xfe\xff\xff\xff\x07\x47\x0d\x00\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x21\x06\x0c\x01\x0b\x02\x40\x20\x00\x41\x80\x80\x80\x80\x78\x47\x0d\x00\x42\x00\x21\x06\x42\x00\x21\x05\x0c\x01\x0b\x20\x02\x28\x02\x18\x21\x03\x02\x40\x02\x40\x20\x02\x28\x02\x14\x41\x02\x47\x0d\x00\x20\x03\x29\x02\x00\x21\x05\x0c\x01\x0b\x20\x03\x35\x02\x00\x42\x20\x86\x21\x05\x0b\x02\x40\x20\x00\x41\x82\x78\x4a\x0d\x00\x20\x05\x41\x8e\x78\x20\x00\x6b\xad\x88\x21\x05\x42\x00\x21\x06\x0c\x01\x0b\x20\x00\x41\xfe\x07\x6a\xad\x42\x34\x86\x21\x06\x20\x05\x42\x0b\x88\x42\xff\xff\xff\xff\xff\xff\xff\x07\x83\x21\x05\x0b\x20\x05\x20\x06\x84\x20\x02\x35\x02\x0c\x42\x3f\x86\x84\xbf\x21\x04\x20\x02\x41\x08\x6a\x10\x9a\x09\x0b\x20\x01\x20\x04\x39\x03\x00\x20\x02\x41\x20\x6a\x24\x00\x0b\x77\x02\x01\x7f\x01\x7e\x41\x00\x21\x02\x02\x40\x20\x01\x41\x00\x48\x0d\x00\x02\x40\x02\x40\x20\x00\x28\x02\x10\x28\x02\x38\x20\x01\x41\x02\x74\x6a\x28\x02\x00\x29\x02\x04\x22\x03\x42\x3e\x88\xa7\x41\x7f\x6a\x22\x01\x41\x02\x4b\x0d\x00\x02\x40\x20\x01\x0e\x03\x03\x02\x00\x03\x0b\x41\x01\x21\x02\x20\x03\x42\x20\x88\xa7\x41\xff\xff\xff\xff\x03\x71\x22\x01\x41\x01\x4b\x0d\x00\x02\x40\x20\x01\x0e\x02\x03\x00\x03\x0b\x41\x02\x0f\x0b\x10\x40\x00\x0b\x41\x01\x21\x02\x0b\x20\x02\x0b\x35\x01\x01\x7f\x41\x00\x21\x01\x02\x40\x20\x00\xa7\x29\x03\x20\x22\x00\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x90\x7f\x52\x0d\x00\x20\x00\xa7\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x21\x01\x0b\x20\x01\x0b\x76\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x20\x01\x28\x02\x04\x21\x01\x20\x02\x20\x03\x41\x0c\x6a\x20\x00\x28\x02\x04\x10\x8e\x04\x21\x00\x20\x02\x20\x03\x41\x08\x6a\x20\x01\x10\x8e\x04\x21\x02\x02\x40\x02\x40\x20\x00\x45\x0d\x00\x20\x02\x0d\x01\x0b\x41\xd4\xdb\x01\x41\xae\xb7\x01\x41\x99\x3a\x41\xf9\xdb\x01\x10\x4a\x00\x0b\x20\x03\x28\x02\x08\x21\x02\x20\x03\x28\x02\x0c\x21\x00\x20\x03\x41\x10\x6a\x24\x00\x41\x7f\x20\x00\x20\x02\x47\x20\x00\x20\x02\x49\x1b\x0b\x8f\x08\x01\x0e\x7f\x23\x00\x41\xe0\x04\x6b\x22\x05\x24\x00\x20\x00\x20\x02\x10\xf2\x09\x21\x06\x20\x00\x20\x02\x41\x80\x01\x72\x10\xf2\x09\x21\x07\x02\x40\x20\x01\x41\x02\x49\x0d\x00\x20\x02\x45\x0d\x00\x20\x05\x20\x01\x36\x02\x04\x20\x05\x20\x00\x36\x02\x00\x20\x05\x41\x00\x36\x02\x08\x41\x00\x20\x02\x6b\x21\x08\x20\x05\x41\x0c\x72\x21\x09\x03\x40\x20\x09\x20\x05\x4d\x0d\x01\x20\x09\x41\x74\x6a\x22\x09\x28\x02\x08\x21\x0a\x20\x09\x28\x02\x04\x21\x0b\x20\x09\x28\x02\x00\x21\x00\x02\x40\x03\x40\x20\x0b\x41\x07\x49\x0d\x01\x02\x40\x20\x0a\x41\x32\x48\x0d\x00\x20\x00\x20\x02\x10\xf2\x09\x21\x0c\x20\x0b\x20\x02\x6c\x22\x0d\x20\x02\x6b\x21\x0e\x20\x0b\x41\x01\x76\x20\x02\x6c\x21\x0b\x02\x40\x03\x40\x20\x0b\x45\x0d\x01\x20\x0b\x20\x02\x6b\x22\x0b\x21\x0f\x03\x40\x20\x0f\x41\x01\x74\x20\x02\x6a\x22\x01\x20\x0d\x4f\x0d\x01\x02\x40\x20\x01\x20\x0e\x4f\x0d\x00\x41\x00\x20\x02\x20\x00\x20\x01\x6a\x22\x10\x20\x10\x20\x02\x6a\x20\x04\x20\x03\x11\x01\x00\x41\x00\x4a\x1b\x20\x01\x6a\x21\x01\x0b\x20\x00\x20\x0f\x6a\x22\x0f\x20\x00\x20\x01\x6a\x22\x10\x20\x04\x20\x03\x11\x01\x00\x41\x00\x4a\x0d\x01\x20\x0f\x20\x10\x20\x02\x20\x0c\x11\x06\x00\x20\x01\x21\x0f\x0c\x00\x0b\x00\x0b\x00\x0b\x03\x40\x02\x40\x20\x0d\x20\x02\x6b\x22\x0d\x0d\x00\x41\x00\x21\x0b\x0c\x04\x0b\x20\x00\x20\x00\x20\x0d\x6a\x20\x02\x20\x0c\x11\x06\x00\x20\x0d\x20\x02\x6b\x21\x0e\x41\x00\x21\x0f\x03\x40\x20\x0f\x41\x01\x74\x20\x02\x6a\x22\x01\x20\x0d\x4f\x0d\x01\x02\x40\x20\x01\x20\x0e\x4f\x0d\x00\x41\x00\x20\x02\x20\x00\x20\x01\x6a\x22\x10\x20\x10\x20\x02\x6a\x20\x04\x20\x03\x11\x01\x00\x41\x00\x4a\x1b\x20\x01\x6a\x21\x01\x0b\x20\x00\x20\x0f\x6a\x22\x0f\x20\x00\x20\x01\x6a\x22\x10\x20\x04\x20\x03\x11\x01\x00\x41\x00\x4a\x0d\x01\x20\x0f\x20\x10\x20\x02\x20\x0c\x11\x06\x00\x20\x01\x21\x0f\x0c\x00\x0b\x00\x0b\x00\x0b\x20\x00\x20\x0b\x41\x02\x76\x20\x02\x6c\x22\x0f\x6a\x22\x0c\x20\x00\x20\x0f\x41\x01\x74\x6a\x22\x01\x20\x04\x20\x03\x11\x01\x00\x21\x0d\x20\x01\x20\x00\x20\x0f\x41\x03\x6c\x6a\x22\x10\x20\x04\x20\x03\x11\x01\x00\x21\x0f\x02\x40\x02\x40\x20\x0d\x41\x7f\x4a\x0d\x00\x20\x0f\x41\x00\x48\x0d\x01\x20\x10\x20\x0c\x20\x0c\x20\x10\x20\x04\x20\x03\x11\x01\x00\x41\x00\x48\x1b\x21\x01\x0c\x01\x0b\x20\x0f\x41\x00\x4a\x0d\x00\x20\x0c\x20\x10\x20\x0c\x20\x10\x20\x04\x20\x03\x11\x01\x00\x41\x00\x48\x1b\x21\x01\x0b\x20\x0a\x41\x01\x6a\x21\x0a\x20\x00\x20\x01\x20\x02\x20\x06\x11\x06\x00\x41\x01\x21\x0d\x20\x00\x20\x0b\x20\x02\x6c\x6a\x22\x11\x21\x0f\x20\x11\x21\x12\x20\x00\x20\x02\x6a\x22\x10\x21\x01\x41\x01\x21\x0e\x03\x40\x02\x40\x02\x40\x20\x01\x20\x0f\x4f\x0d\x00\x20\x00\x20\x01\x20\x04\x20\x03\x11\x01\x00\x22\x0c\x41\x7f\x4c\x0d\x00\x20\x0c\x0d\x01\x20\x10\x20\x01\x20\x02\x20\x06\x11\x06\x00\x20\x10\x20\x02\x6a\x21\x10\x20\x0e\x41\x01\x6a\x21\x0e\x0c\x01\x0b\x02\x40\x03\x40\x20\x01\x20\x0f\x20\x08\x6a\x22\x0f\x4f\x0d\x01\x02\x40\x20\x00\x20\x0f\x20\x04\x20\x03\x11\x01\x00\x22\x0c\x41\x00\x4a\x0d\x00\x20\x0c\x0d\x01\x20\x12\x20\x08\x6a\x22\x12\x20\x0f\x20\x02\x20\x06\x11\x06\x00\x20\x0b\x41\x7f\x6a\x21\x0b\x0c\x01\x0b\x0b\x20\x01\x20\x0f\x20\x02\x20\x06\x11\x06\x00\x0c\x01\x0b\x20\x00\x20\x01\x20\x01\x20\x10\x6b\x22\x0f\x20\x10\x20\x00\x6b\x22\x0c\x20\x0c\x20\x0f\x4b\x1b\x22\x0f\x6b\x20\x0f\x20\x07\x11\x06\x00\x20\x01\x20\x11\x20\x12\x20\x01\x6b\x22\x0f\x20\x11\x20\x12\x6b\x22\x0c\x20\x0c\x20\x0f\x4b\x1b\x22\x0c\x6b\x20\x0c\x20\x07\x11\x06\x00\x20\x09\x20\x0a\x36\x02\x08\x20\x09\x20\x0d\x20\x0e\x6b\x22\x0c\x20\x0b\x20\x0d\x6b\x22\x0d\x20\x0c\x20\x0d\x4b\x22\x01\x1b\x36\x02\x04\x20\x09\x20\x00\x20\x11\x20\x0f\x6b\x22\x0f\x20\x01\x1b\x36\x02\x00\x20\x0d\x20\x0c\x20\x01\x1b\x21\x0b\x20\x0f\x20\x00\x20\x01\x1b\x21\x00\x20\x09\x41\x0c\x6a\x21\x09\x0c\x02\x0b\x20\x01\x20\x02\x6a\x21\x01\x20\x0d\x41\x01\x6a\x21\x0d\x0c\x00\x0b\x00\x0b\x00\x0b\x20\x00\x20\x0b\x20\x02\x6c\x6a\x21\x0c\x20\x00\x21\x01\x03\x40\x20\x01\x20\x02\x6a\x22\x0d\x20\x0c\x4f\x0d\x01\x02\x40\x03\x40\x20\x01\x20\x02\x6a\x22\x0f\x20\x00\x4d\x0d\x01\x20\x01\x20\x0f\x20\x04\x20\x03\x11\x01\x00\x41\x01\x48\x0d\x01\x20\x0f\x20\x01\x20\x02\x20\x06\x11\x06\x00\x20\x01\x20\x08\x6a\x21\x01\x0c\x00\x0b\x00\x0b\x20\x0d\x21\x01\x0c\x00\x0b\x00\x0b\x00\x0b\x20\x05\x41\xe0\x04\x6a\x24\x00\x0b\x50\x01\x01\x7e\x02\x40\x20\x00\x10\xc1\x01\x22\x04\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x00\x20\x04\x41\x3c\x20\x01\xad\x42\x80\x80\x80\x80\x70\x84\x10\xc0\x01\x41\x03\x10\xc4\x01\x41\x7f\x4c\x0d\x00\x20\x04\x0f\x0b\x20\x00\x20\x04\x10\xcd\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x0b\x09\x00\x20\x00\x20\x03\x10\xe9\x03\x0b\x73\x02\x01\x7f\x01\x7e\x02\x40\x02\x40\x02\x40\x20\x03\x2d\x00\x05\x22\x04\x41\x03\x4d\x0d\x00\x20\x04\x41\x08\x47\x0d\x01\x20\x00\x20\x00\x10\xc1\x01\x22\x05\x20\x03\x28\x02\x08\x20\x03\x28\x02\x0c\x10\xc2\x01\x20\x05\x0f\x0b\x02\x40\x20\x04\x0e\x04\x02\x01\x01\x00\x02\x0b\x20\x00\x20\x03\x28\x02\x08\x10\xc3\x01\x0f\x0b\x10\x40\x00\x0b\x20\x00\x20\x03\x28\x02\x0c\x20\x03\x28\x02\x00\x20\x03\x2d\x00\x08\x20\x03\x2d\x00\x09\x20\x03\x2e\x01\x06\x10\xd2\x01\x0b\x8a\x01\x01\x04\x7f\x02\x40\x20\x01\x2d\x00\x00\x41\xdb\x00\x47\x0d\x00\x20\x01\x41\x01\x6a\x22\x02\x10\x71\x41\x7f\x6a\x21\x03\x20\x00\x28\x02\x10\x28\x02\x38\x41\xc0\x06\x6a\x21\x04\x41\xd0\x01\x21\x01\x02\x40\x03\x40\x20\x01\x41\xde\x01\x46\x0d\x01\x02\x40\x20\x04\x28\x02\x00\x22\x05\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x20\x03\x47\x0d\x00\x20\x05\x41\x10\x6a\x20\x02\x20\x03\x10\x6b\x0d\x00\x20\x00\x20\x01\x10\xd9\x03\x0f\x0b\x20\x04\x41\x04\x6a\x21\x04\x20\x01\x41\x01\x6a\x21\x01\x0c\x00\x0b\x00\x0b\x10\x40\x00\x0b\x20\x00\x20\x01\x10\xb3\x01\x0b\x77\x02\x01\x7f\x01\x7e\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x0d\x00\x20\x00\x28\x02\x10\x20\x01\x41\x00\x10\xb1\x04\x21\x03\x0c\x01\x0b\x20\x01\x2c\x00\x00\x41\x50\x6a\x41\x09\x4d\x0d\x01\x20\x00\x28\x02\x10\x20\x01\x20\x02\x10\xb1\x04\x21\x03\x0b\x20\x03\x0d\x01\x0b\x41\x00\x21\x03\x20\x00\x20\x01\x20\x02\x10\xcb\x02\x22\x04\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x41\x10\x6a\x28\x02\x00\x20\x04\xa7\x10\xf1\x03\x21\x03\x0b\x20\x03\x0b\xce\x01\x02\x04\x7f\x01\x7e\x20\x01\x20\x02\x41\x01\x10\xb2\x04\x22\x03\x41\xff\xff\xff\xff\x03\x71\x21\x04\x20\x00\x28\x02\x34\x20\x00\x28\x02\x24\x41\x7f\x6a\x20\x03\x71\x41\x02\x74\x6a\x21\x03\x03\x7f\x02\x40\x20\x03\x28\x02\x00\x22\x05\x0d\x00\x41\x00\x0f\x0b\x02\x40\x20\x00\x28\x02\x38\x20\x05\x41\x02\x74\x6a\x28\x02\x00\x22\x03\x29\x02\x04\x22\x07\x42\x80\x80\x80\x80\x80\x80\x80\x80\x40\x83\x42\x80\x80\x80\x80\x80\x80\x80\x80\xc0\x00\x52\x0d\x00\x20\x07\x42\x20\x88\xa7\x41\xff\xff\xff\xff\x03\x71\x20\x04\x47\x0d\x00\x20\x07\xa7\x22\x06\x41\x00\x48\x0d\x00\x20\x06\x41\xff\xff\xff\xff\x07\x71\x20\x02\x47\x0d\x00\x20\x03\x41\x10\x6a\x20\x01\x20\x02\x10\x6b\x0d\x00\x02\x40\x20\x05\x41\xde\x01\x48\x0d\x00\x20\x03\x20\x03\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x0b\x20\x05\x0f\x0b\x20\x03\x41\x0c\x6a\x21\x03\x0c\x00\x0b\x0b\x2e\x00\x02\x40\x03\x40\x20\x01\x45\x0d\x01\x20\x01\x41\x7f\x6a\x21\x01\x20\x02\x41\x87\x02\x6c\x20\x00\x2d\x00\x00\x6a\x21\x02\x20\x00\x41\x01\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x20\x02\x0b\x0d\x00\x20\x00\x20\x01\x20\x02\x41\x00\x10\xf3\x03\x0b\x82\x01\x01\x02\x7f\x02\x40\x02\x40\x20\x00\x28\x02\x08\x22\x02\x20\x00\x28\x02\x0c\x48\x0d\x00\x41\x7f\x21\x03\x20\x00\x20\x02\x41\x01\x6a\x20\x01\x10\xba\x04\x0d\x01\x0b\x02\x40\x02\x40\x20\x00\x28\x02\x10\x45\x0d\x00\x20\x00\x20\x00\x28\x02\x08\x22\x03\x41\x01\x6a\x36\x02\x08\x20\x00\x28\x02\x04\x20\x03\x41\x01\x74\x6a\x41\x10\x6a\x20\x01\x3b\x01\x00\x0c\x01\x0b\x20\x00\x20\x00\x28\x02\x08\x22\x03\x41\x01\x6a\x36\x02\x08\x20\x03\x20\x00\x28\x02\x04\x6a\x41\x10\x6a\x20\x01\x3a\x00\x00\x0b\x41\x00\x21\x03\x0b\x20\x03\x0b\x6d\x01\x01\x7f\x02\x40\x20\x00\x28\x02\x08\x22\x02\x20\x00\x28\x02\x0c\x4e\x0d\x00\x02\x40\x20\x00\x28\x02\x10\x45\x0d\x00\x20\x00\x20\x02\x41\x01\x6a\x36\x02\x08\x20\x00\x28\x02\x04\x20\x02\x41\x01\x74\x6a\x41\x10\x6a\x20\x01\x3b\x01\x00\x41\x00\x0f\x0b\x20\x01\x41\xff\x01\x4b\x0d\x00\x20\x00\x20\x02\x41\x01\x6a\x36\x02\x08\x20\x00\x28\x02\x04\x20\x02\x6a\x41\x10\x6a\x20\x01\x3a\x00\x00\x41\x00\x0f\x0b\x20\x00\x20\x01\x10\xbb\x04\x0b\x4a\x01\x01\x7f\x20\x01\x20\x01\x28\x02\x00\x22\x02\x41\x7f\x6a\x36\x02\x00\x02\x40\x20\x02\x41\x01\x4a\x0d\x00\x02\x40\x20\x01\x29\x02\x04\x42\x80\x80\x80\x80\x80\x80\x80\x80\xc0\x00\x54\x0d\x00\x20\x00\x20\x01\x10\xd5\x02\x0f\x0b\x20\x00\x41\x10\x6a\x20\x01\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x0b\xd2\x07\x02\x01\x7e\x08\x7f\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x41\x02\x4a\x0d\x00\x02\x40\x20\x01\x29\x02\x04\x22\x03\x42\x3e\x88\xa7\x20\x02\x47\x0d\x00\x20\x00\x20\x01\x10\xdd\x03\x22\x04\x41\xdd\x01\x4a\x0d\x05\x20\x01\x20\x01\x28\x02\x00\x41\x7f\x6a\x36\x02\x00\x20\x04\x0f\x0b\x20\x00\x28\x02\x34\x20\x00\x28\x02\x24\x41\x7f\x6a\x20\x01\x20\x02\x10\xb8\x04\x41\xff\xff\xff\xff\x03\x71\x22\x05\x71\x22\x06\x41\x02\x74\x6a\x21\x04\x20\x03\xa7\x41\xff\xff\xff\xff\x07\x71\x21\x07\x03\x40\x02\x40\x20\x04\x28\x02\x00\x22\x04\x0d\x00\x20\x02\x21\x08\x0c\x03\x0b\x02\x40\x20\x00\x28\x02\x38\x20\x04\x41\x02\x74\x6a\x28\x02\x00\x22\x09\x29\x02\x04\x22\x03\x42\x20\x88\xa7\x41\xff\xff\xff\xff\x03\x71\x20\x05\x47\x0d\x00\x20\x03\x42\x3e\x88\xa7\x20\x02\x47\x0d\x00\x20\x03\xa7\x41\xff\xff\xff\xff\x07\x71\x20\x07\x47\x0d\x00\x20\x09\x20\x01\x20\x07\x10\x94\x04\x0d\x00\x20\x04\x41\xde\x01\x48\x0d\x04\x20\x09\x20\x09\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x0c\x04\x0b\x20\x09\x41\x0c\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x41\x03\x21\x08\x20\x02\x41\x03\x47\x21\x05\x41\x00\x21\x06\x0b\x02\x40\x20\x00\x28\x02\x3c\x0d\x00\x41\x00\x21\x04\x20\x00\x28\x02\x2c\x41\x03\x6c\x41\x02\x6d\x22\x09\x41\xd3\x01\x20\x09\x41\xd3\x01\x4a\x1b\x22\x07\x41\xff\xff\xff\xff\x03\x4b\x0d\x01\x20\x00\x41\x10\x6a\x22\x0a\x20\x00\x28\x02\x38\x20\x07\x41\x02\x74\x20\x00\x28\x02\x08\x11\x01\x00\x22\x02\x45\x0d\x01\x02\x40\x20\x00\x28\x02\x2c\x22\x09\x0d\x00\x02\x40\x20\x0a\x41\x10\x20\x00\x28\x02\x00\x11\x03\x00\x22\x0b\x0d\x00\x20\x0a\x20\x02\x20\x00\x28\x02\x04\x11\x00\x00\x0c\x03\x0b\x20\x0b\x42\x80\x80\x80\x80\x80\x80\x80\x80\x40\x37\x02\x04\x20\x0b\x41\x00\x36\x00\x0c\x41\x01\x21\x09\x20\x0b\x41\x01\x36\x02\x00\x20\x02\x20\x0b\x36\x02\x00\x20\x00\x20\x00\x28\x02\x28\x41\x01\x6a\x36\x02\x28\x0b\x20\x00\x20\x09\x36\x02\x3c\x20\x00\x20\x02\x36\x02\x38\x20\x00\x20\x07\x36\x02\x2c\x20\x09\x41\x02\x74\x21\x04\x20\x07\x41\x7f\x6a\x21\x0a\x20\x09\x41\x01\x74\x41\x03\x6a\x21\x02\x03\x40\x20\x09\x20\x07\x4f\x0d\x01\x20\x00\x28\x02\x38\x20\x04\x6a\x41\x01\x20\x02\x20\x0a\x20\x09\x46\x1b\x36\x02\x00\x20\x04\x41\x04\x6a\x21\x04\x20\x02\x41\x02\x6a\x21\x02\x20\x09\x41\x01\x6a\x21\x09\x0c\x00\x0b\x00\x0b\x02\x40\x02\x40\x20\x01\x45\x0d\x00\x02\x40\x20\x01\x29\x02\x04\x22\x03\x42\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x56\x0d\x00\x20\x01\x20\x03\x20\x08\xad\x42\x3e\x86\x84\x37\x02\x04\x0c\x02\x0b\x02\x40\x20\x00\x41\x10\x6a\x20\x03\xa7\x22\x04\x41\xff\xff\xff\xff\x07\x71\x20\x04\x41\x1f\x76\x22\x04\x74\x20\x04\x6b\x41\x11\x6a\x20\x00\x28\x02\x00\x11\x03\x00\x22\x04\x0d\x00\x41\x00\x21\x04\x0c\x04\x0b\x20\x04\x41\x01\x36\x02\x00\x20\x04\x20\x04\x29\x02\x04\x42\xff\xff\xff\xff\x77\x83\x20\x01\x29\x02\x04\x42\x80\x80\x80\x80\x08\x83\x84\x22\x03\x37\x02\x04\x20\x04\x20\x03\x42\x80\x80\x80\x80\x78\x83\x20\x01\x29\x02\x04\x42\xff\xff\xff\xff\x07\x83\x84\x37\x02\x04\x20\x04\x41\x10\x6a\x20\x01\x41\x10\x6a\x20\x01\x28\x02\x04\x22\x09\x41\x1f\x76\x22\x02\x41\x01\x73\x20\x09\x41\xff\xff\xff\xff\x07\x71\x20\x02\x74\x6a\x10\x70\x1a\x20\x00\x20\x01\x10\xb6\x04\x20\x04\x21\x01\x0c\x01\x0b\x02\x40\x20\x00\x41\x10\x6a\x41\x10\x20\x00\x28\x02\x00\x11\x03\x00\x22\x01\x0d\x00\x41\x00\x0f\x0b\x20\x01\x42\x81\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x00\x0b\x20\x00\x28\x02\x38\x20\x00\x28\x02\x3c\x22\x04\x41\x02\x74\x6a\x22\x09\x28\x02\x00\x21\x02\x20\x09\x20\x01\x36\x02\x00\x20\x00\x20\x02\x41\x01\x76\x36\x02\x3c\x20\x01\x20\x01\x35\x02\x04\x20\x05\xad\x42\x20\x86\x84\x20\x08\xad\x42\x3e\x86\x84\x37\x02\x04\x20\x01\x20\x04\x36\x02\x0c\x20\x00\x20\x00\x28\x02\x28\x41\x01\x6a\x36\x02\x28\x20\x08\x41\x03\x46\x0d\x02\x20\x01\x20\x00\x28\x02\x34\x20\x06\x41\x02\x74\x6a\x22\x09\x28\x02\x00\x36\x02\x0c\x20\x09\x20\x04\x36\x02\x00\x20\x00\x28\x02\x28\x20\x00\x28\x02\x30\x48\x0d\x02\x20\x00\x20\x00\x28\x02\x24\x41\x01\x74\x10\xb9\x04\x1a\x0c\x02\x0b\x20\x01\x45\x0d\x01\x0b\x20\x00\x20\x01\x10\xb6\x04\x20\x04\x0f\x0b\x20\x04\x0b\x5f\x01\x02\x7f\x02\x40\x02\x40\x20\x00\x28\x02\x04\x22\x02\x41\x7f\x4a\x0d\x00\x20\x00\x41\x10\x6a\x21\x03\x20\x02\x41\xff\xff\xff\xff\x07\x71\x21\x00\x03\x40\x20\x00\x45\x0d\x02\x20\x00\x41\x7f\x6a\x21\x00\x20\x01\x41\x87\x02\x6c\x20\x03\x2f\x01\x00\x6a\x21\x01\x20\x03\x41\x02\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x41\x10\x6a\x20\x02\x20\x01\x10\xb2\x04\x21\x01\x0b\x20\x01\x0b\x86\x02\x01\x08\x7f\x41\x7f\x21\x02\x02\x40\x20\x01\x20\x01\x41\x7f\x6a\x71\x0d\x00\x02\x40\x20\x00\x41\x10\x6a\x22\x03\x20\x01\x41\x02\x74\x22\x04\x20\x00\x28\x02\x00\x11\x03\x00\x22\x05\x45\x0d\x00\x41\x00\x21\x06\x20\x05\x41\x00\x20\x04\x10\x74\x21\x07\x20\x01\x41\xff\xff\xff\xff\x03\x6a\x41\xff\xff\xff\xff\x03\x71\x21\x08\x02\x40\x03\x40\x20\x06\x20\x00\x28\x02\x24\x4f\x0d\x01\x20\x00\x28\x02\x34\x20\x06\x41\x02\x74\x6a\x28\x02\x00\x21\x02\x02\x40\x03\x40\x20\x02\x45\x0d\x01\x20\x00\x28\x02\x38\x20\x02\x41\x02\x74\x6a\x28\x02\x00\x22\x04\x28\x02\x0c\x21\x05\x20\x04\x20\x07\x20\x08\x20\x04\x41\x08\x6a\x28\x02\x00\x71\x41\x02\x74\x6a\x22\x09\x28\x02\x00\x36\x02\x0c\x20\x09\x20\x02\x36\x02\x00\x20\x05\x21\x02\x0c\x00\x0b\x00\x0b\x20\x06\x41\x01\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x20\x03\x20\x00\x28\x02\x34\x20\x00\x28\x02\x04\x11\x00\x00\x20\x00\x20\x01\x41\x01\x74\x36\x02\x30\x20\x00\x20\x01\x36\x02\x24\x20\x00\x20\x07\x36\x02\x34\x41\x00\x21\x02\x0b\x20\x02\x0f\x0b\x41\xd3\xd8\x01\x41\xae\xb7\x01\x41\xf3\x13\x41\xfe\xd8\x01\x10\x4a\x00\x0b\xea\x01\x01\x03\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x41\x7f\x21\x04\x02\x40\x20\x00\x28\x02\x14\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x01\x41\x80\x80\x80\x80\x04\x48\x0d\x00\x20\x00\x28\x02\x00\x41\xe9\xd7\x01\x41\x00\x10\xc2\x02\x0c\x01\x0b\x20\x01\x20\x00\x28\x02\x0c\x41\x03\x6c\x41\x02\x6d\x22\x05\x20\x05\x20\x01\x48\x1b\x22\x01\x41\xff\xff\xff\xff\x03\x20\x01\x41\xff\xff\xff\xff\x03\x48\x1b\x21\x05\x20\x00\x28\x02\x10\x21\x01\x02\x40\x20\x02\x41\x80\x02\x48\x0d\x00\x20\x01\x0d\x00\x20\x00\x20\x05\x10\xbc\x04\x21\x04\x0c\x03\x0b\x20\x00\x28\x02\x00\x20\x00\x28\x02\x04\x20\x05\x20\x01\x74\x20\x01\x6b\x41\x11\x6a\x20\x03\x41\x0c\x6a\x10\xbd\x04\x22\x01\x0d\x01\x0b\x20\x00\x10\xbe\x04\x0c\x01\x0b\x20\x00\x20\x01\x36\x02\x04\x20\x00\x20\x03\x28\x02\x0c\x20\x00\x28\x02\x10\x76\x20\x05\x6a\x22\x04\x41\xff\xff\xff\xff\x03\x20\x04\x41\xff\xff\xff\xff\x03\x48\x1b\x36\x02\x0c\x41\x00\x21\x04\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x04\x0b\xc1\x01\x01\x02\x7f\x02\x40\x02\x40\x20\x00\x28\x02\x08\x22\x02\x20\x00\x28\x02\x0c\x48\x0d\x00\x41\x7f\x21\x03\x20\x00\x20\x02\x41\x01\x6a\x20\x01\x10\xba\x04\x0d\x01\x0b\x02\x40\x02\x40\x20\x00\x28\x02\x10\x45\x0d\x00\x20\x00\x20\x00\x28\x02\x08\x22\x03\x41\x01\x6a\x36\x02\x08\x20\x00\x28\x02\x04\x20\x03\x41\x01\x74\x6a\x41\x10\x6a\x20\x01\x3b\x01\x00\x0c\x01\x0b\x02\x40\x20\x01\x41\xff\x01\x4b\x0d\x00\x20\x00\x20\x00\x28\x02\x08\x22\x03\x41\x01\x6a\x36\x02\x08\x20\x03\x20\x00\x28\x02\x04\x6a\x41\x10\x6a\x20\x01\x3a\x00\x00\x0c\x01\x0b\x41\x7f\x21\x03\x20\x00\x20\x00\x28\x02\x0c\x10\xbc\x04\x0d\x01\x20\x00\x20\x00\x28\x02\x08\x22\x03\x41\x01\x6a\x36\x02\x08\x20\x00\x28\x02\x04\x20\x03\x41\x01\x74\x6a\x41\x10\x6a\x20\x01\x3b\x01\x00\x0b\x41\x00\x21\x03\x0b\x20\x03\x0b\xb2\x01\x01\x05\x7f\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x41\x7f\x21\x03\x02\x40\x20\x00\x28\x02\x14\x0d\x00\x02\x40\x20\x00\x28\x02\x00\x20\x00\x28\x02\x04\x20\x01\x41\x01\x74\x41\x10\x6a\x20\x02\x41\x0c\x6a\x10\xbd\x04\x22\x04\x0d\x00\x20\x00\x10\xbe\x04\x0c\x01\x0b\x20\x00\x28\x02\x08\x22\x03\x41\x01\x74\x20\x04\x6a\x41\x0e\x6a\x21\x05\x20\x02\x28\x02\x0c\x21\x06\x02\x40\x03\x40\x20\x03\x41\x01\x48\x0d\x01\x20\x05\x20\x04\x20\x03\x6a\x41\x0f\x6a\x2d\x00\x00\x3b\x01\x00\x20\x05\x41\x7e\x6a\x21\x05\x20\x03\x41\x7f\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x41\x01\x36\x02\x10\x20\x00\x20\x04\x36\x02\x04\x20\x00\x20\x06\x41\x01\x76\x20\x01\x6a\x36\x02\x0c\x41\x00\x21\x03\x0b\x20\x02\x41\x10\x6a\x24\x00\x20\x03\x0b\x5b\x01\x01\x7f\x20\x00\x28\x02\x10\x22\x04\x41\x10\x6a\x20\x01\x20\x02\x20\x04\x28\x02\x08\x11\x01\x00\x21\x01\x02\x40\x20\x02\x45\x0d\x00\x20\x01\x0d\x00\x20\x00\x10\xc1\x02\x20\x01\x0f\x0b\x02\x40\x20\x03\x45\x0d\x00\x20\x03\x41\x00\x20\x01\x20\x00\x28\x02\x10\x28\x02\x0c\x11\x04\x00\x22\x00\x20\x02\x6b\x22\x02\x20\x02\x20\x00\x4b\x1b\x36\x02\x00\x0b\x20\x01\x0b\x33\x01\x01\x7f\x20\x00\x28\x02\x00\x28\x02\x10\x22\x01\x41\x10\x6a\x20\x00\x28\x02\x04\x20\x01\x28\x02\x04\x11\x00\x00\x20\x00\x41\x00\x36\x02\x0c\x20\x00\x42\x00\x37\x02\x04\x20\x00\x41\x7f\x36\x02\x14\x0b\xdb\x03\x01\x0d\x7f\x20\x01\x28\x02\x08\x21\x04\x41\x00\x21\x05\x41\x7f\x21\x06\x02\x40\x02\x40\x03\x40\x20\x06\x41\x01\x6a\x22\x06\x20\x04\x4e\x0d\x01\x20\x01\x28\x02\x00\x20\x05\x6a\x21\x07\x20\x05\x41\x04\x6a\x21\x05\x20\x07\x28\x02\x00\x20\x02\x47\x0d\x00\x0b\x41\x00\x21\x08\x0c\x01\x0b\x41\x7f\x21\x08\x20\x00\x20\x01\x41\x04\x20\x01\x41\x04\x6a\x20\x04\x41\x01\x6a\x10\xc3\x04\x0d\x00\x20\x01\x20\x01\x28\x02\x08\x22\x05\x41\x01\x6a\x36\x02\x08\x20\x01\x28\x02\x00\x20\x05\x41\x02\x74\x6a\x20\x02\x36\x02\x00\x20\x01\x41\x10\x6a\x21\x09\x20\x01\x41\x0c\x6a\x21\x0a\x41\x00\x21\x0b\x03\x40\x02\x40\x20\x0b\x20\x02\x28\x02\x20\x48\x0d\x00\x41\x00\x21\x08\x41\x7f\x21\x06\x41\x00\x21\x05\x03\x40\x20\x06\x41\x01\x6a\x22\x06\x20\x02\x28\x02\x2c\x4e\x0d\x03\x20\x02\x28\x02\x28\x20\x05\x6a\x21\x07\x20\x05\x41\x04\x6a\x21\x05\x20\x00\x20\x01\x20\x02\x28\x02\x10\x20\x07\x28\x02\x00\x41\x03\x74\x6a\x28\x02\x04\x41\x01\x10\xbf\x04\x45\x0d\x00\x0b\x41\x7f\x0f\x0b\x20\x02\x28\x02\x1c\x22\x0c\x20\x0b\x41\x14\x6c\x22\x0d\x6a\x22\x0e\x28\x02\x10\x21\x07\x02\x40\x02\x40\x20\x03\x45\x0d\x00\x20\x07\x41\x16\x46\x0d\x01\x0b\x20\x0e\x41\x10\x6a\x21\x0f\x20\x01\x28\x02\x14\x21\x04\x41\x00\x21\x05\x41\x08\x21\x06\x02\x40\x02\x40\x02\x40\x02\x40\x03\x40\x20\x05\x20\x04\x4e\x0d\x01\x20\x0a\x28\x02\x00\x20\x06\x6a\x22\x10\x41\x78\x6a\x28\x02\x00\x20\x07\x46\x0d\x02\x20\x06\x41\x0c\x6a\x21\x06\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x00\x20\x0a\x41\x0c\x20\x09\x20\x04\x41\x01\x6a\x10\xc3\x04\x0d\x05\x20\x01\x20\x01\x28\x02\x14\x22\x05\x41\x01\x6a\x36\x02\x14\x20\x01\x28\x02\x0c\x20\x05\x41\x0c\x6c\x6a\x22\x05\x20\x0f\x28\x02\x00\x36\x02\x00\x02\x40\x20\x03\x0d\x00\x20\x0c\x20\x0d\x6a\x28\x02\x08\x45\x0d\x02\x0b\x20\x05\x41\x08\x6a\x21\x10\x0b\x41\x00\x21\x0e\x0c\x01\x0b\x20\x05\x41\x08\x6a\x21\x10\x0b\x20\x10\x20\x0e\x36\x02\x00\x0b\x20\x0b\x41\x01\x6a\x21\x0b\x0c\x00\x0b\x00\x0b\x20\x08\x0b\x86\x01\x01\x02\x7f\x23\x00\x41\x10\x6b\x22\x05\x24\x00\x41\x00\x21\x06\x20\x05\x41\x00\x36\x02\x08\x20\x05\x42\x00\x37\x03\x00\x20\x00\x20\x01\x20\x02\x20\x03\x20\x04\x20\x05\x10\xc4\x04\x21\x03\x41\x04\x21\x01\x02\x40\x03\x40\x20\x05\x28\x02\x00\x21\x02\x20\x06\x20\x05\x28\x02\x08\x4e\x0d\x01\x20\x00\x20\x02\x20\x01\x6a\x28\x02\x00\x10\xe4\x02\x20\x01\x41\x08\x6a\x21\x01\x20\x06\x41\x01\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x10\x22\x06\x41\x10\x6a\x20\x02\x20\x06\x28\x02\x04\x11\x00\x00\x20\x05\x41\x10\x6a\x24\x00\x20\x03\x0b\x64\x01\x02\x7e\x20\x02\x20\x00\x28\x02\x00\x10\xc5\x01\x21\x03\x20\x02\x20\x01\x28\x02\x00\x10\xc5\x01\x21\x04\x41\x00\x21\x01\x02\x40\x20\x03\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x04\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x03\xa7\x20\x04\xa7\x10\x89\x04\x21\x01\x0b\x20\x02\x20\x03\x10\xcd\x01\x20\x02\x20\x04\x10\xcd\x01\x20\x01\x0b\x8a\x01\x01\x02\x7f\x23\x00\x41\x90\x01\x6b\x22\x04\x24\x00\x41\x89\xda\x01\x21\x05\x02\x40\x02\x40\x20\x01\x41\x01\x6a\x22\x01\x41\x04\x4b\x0d\x00\x02\x40\x02\x40\x20\x01\x0e\x05\x03\x02\x02\x00\x01\x03\x0b\x41\xca\xd9\x01\x21\x05\x0c\x01\x0b\x41\xa2\xd9\x01\x21\x05\x0b\x20\x00\x41\x10\x6a\x22\x01\x28\x02\x00\x20\x04\x41\xd0\x00\x6a\x20\x03\x10\xdc\x01\x21\x03\x20\x04\x20\x01\x28\x02\x00\x20\x04\x41\x10\x6a\x20\x02\x28\x02\x04\x10\xdc\x01\x36\x02\x04\x20\x04\x20\x03\x36\x02\x00\x20\x00\x20\x05\x20\x04\x10\xc5\x04\x0b\x20\x04\x41\x90\x01\x6a\x24\x00\x0b\x26\x01\x01\x7f\x41\x00\x21\x05\x02\x40\x20\x03\x28\x02\x00\x20\x04\x4e\x0d\x00\x20\x00\x20\x01\x20\x02\x20\x03\x20\x04\x10\xc7\x04\x21\x05\x0b\x20\x05\x0b\xff\x03\x01\x05\x7f\x23\x00\x41\x10\x6b\x22\x06\x24\x00\x41\x00\x21\x07\x20\x01\x41\x00\x36\x02\x00\x20\x02\x41\x00\x36\x02\x00\x20\x05\x28\x02\x08\x21\x08\x41\x00\x21\x09\x02\x40\x02\x40\x03\x40\x20\x09\x20\x08\x4e\x0d\x01\x02\x40\x20\x05\x28\x02\x00\x20\x07\x6a\x22\x0a\x28\x02\x00\x20\x03\x47\x0d\x00\x20\x0a\x41\x04\x6a\x28\x02\x00\x20\x04\x47\x0d\x00\x41\x02\x21\x09\x0c\x03\x0b\x20\x07\x41\x08\x6a\x21\x07\x20\x09\x41\x01\x6a\x21\x09\x0c\x00\x0b\x00\x0b\x41\x7f\x21\x09\x20\x00\x20\x05\x41\x08\x20\x05\x41\x04\x6a\x20\x08\x41\x01\x6a\x10\xc3\x04\x0d\x00\x20\x05\x20\x05\x28\x02\x08\x22\x09\x41\x01\x6a\x36\x02\x08\x20\x05\x28\x02\x00\x20\x09\x41\x03\x74\x6a\x22\x09\x20\x03\x36\x02\x00\x20\x09\x20\x00\x20\x04\x10\xd9\x03\x22\x08\x36\x02\x04\x02\x40\x02\x40\x20\x03\x20\x08\x10\xc6\x04\x22\x09\x45\x0d\x00\x20\x09\x28\x02\x08\x45\x0d\x01\x20\x09\x28\x02\x0c\x22\x07\x41\xfd\x00\x46\x0d\x01\x20\x00\x20\x01\x20\x02\x20\x03\x28\x02\x10\x20\x09\x28\x02\x00\x41\x03\x74\x6a\x28\x02\x04\x20\x07\x20\x05\x10\xc4\x04\x21\x09\x0c\x02\x0b\x41\x01\x21\x09\x20\x08\x41\x16\x46\x0d\x01\x41\x00\x21\x0a\x41\x00\x21\x07\x02\x40\x03\x40\x20\x07\x20\x03\x28\x02\x2c\x4e\x0d\x01\x02\x40\x20\x00\x20\x06\x41\x0c\x6a\x20\x06\x41\x08\x6a\x20\x03\x28\x02\x10\x20\x03\x28\x02\x28\x20\x0a\x6a\x28\x02\x00\x41\x03\x74\x6a\x28\x02\x04\x20\x08\x20\x05\x10\xc4\x04\x22\x09\x41\x01\x6a\x22\x04\x41\x04\x4b\x0d\x00\x02\x40\x20\x04\x0e\x05\x05\x00\x01\x01\x05\x05\x0b\x02\x40\x20\x02\x28\x02\x00\x22\x09\x45\x0d\x00\x02\x40\x20\x01\x28\x02\x00\x20\x06\x28\x02\x0c\x47\x0d\x00\x20\x06\x28\x02\x08\x28\x02\x0c\x20\x09\x28\x02\x0c\x46\x0d\x02\x0b\x20\x01\x41\x00\x36\x02\x00\x20\x02\x41\x00\x36\x02\x00\x41\x03\x21\x09\x0c\x05\x0b\x20\x01\x20\x06\x28\x02\x0c\x36\x02\x00\x20\x02\x20\x06\x28\x02\x08\x36\x02\x00\x0b\x20\x0a\x41\x04\x6a\x21\x0a\x20\x07\x41\x01\x6a\x21\x07\x0c\x00\x0b\x00\x0b\x41\x00\x21\x09\x20\x02\x28\x02\x00\x0d\x01\x41\x01\x21\x09\x0c\x01\x0b\x20\x01\x20\x03\x36\x02\x00\x20\x02\x20\x09\x36\x02\x00\x41\x00\x21\x09\x0b\x20\x06\x41\x10\x6a\x24\x00\x20\x09\x0b\x26\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x20\x03\x20\x02\x36\x02\x0c\x20\x00\x41\x03\x20\x01\x20\x02\x10\xc3\x02\x20\x03\x41\x10\x6a\x24\x00\x0b\x51\x01\x04\x7f\x20\x00\x28\x02\x20\x21\x02\x41\x00\x21\x03\x41\x00\x21\x04\x02\x40\x03\x40\x02\x40\x20\x04\x20\x02\x48\x0d\x00\x41\x00\x21\x05\x0c\x02\x0b\x20\x00\x28\x02\x1c\x20\x03\x6a\x22\x05\x41\x10\x6a\x28\x02\x00\x20\x01\x46\x0d\x01\x20\x03\x41\x14\x6a\x21\x03\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x05\x0b\x6a\x01\x02\x7f\x23\x00\x41\x10\x6b\x22\x05\x24\x00\x02\x40\x02\x40\x20\x00\x20\x01\x28\x02\x00\x20\x04\x20\x03\x28\x02\x00\x41\x03\x6c\x41\x02\x6d\x22\x06\x20\x06\x20\x04\x48\x1b\x22\x04\x20\x02\x6c\x20\x05\x41\x0c\x6a\x10\xbd\x04\x22\x00\x0d\x00\x41\x7f\x21\x04\x0c\x01\x0b\x20\x01\x20\x00\x36\x02\x00\x20\x03\x20\x05\x28\x02\x0c\x20\x02\x6e\x20\x04\x6a\x36\x02\x00\x41\x00\x21\x04\x0b\x20\x05\x41\x10\x6a\x24\x00\x20\x04\x0b\x6d\x00\x02\x40\x02\x40\x20\x02\x42\x80\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x02\x42\xff\xff\xff\xff\x0f\x83\x21\x02\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x02\xb9\xbd\x22\x02\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x02\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x02\x0b\x20\x00\x20\x01\x20\x02\x20\x03\x20\x04\x41\x07\x72\x10\xb8\x03\x0b\x0e\x00\x20\x00\x20\x01\x20\x02\x10\xc0\x01\x10\xfa\x03\x0b\x6d\x01\x02\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x02\x40\x02\x40\x20\x00\x20\x01\x41\x24\x6a\x28\x02\x00\x20\x02\x20\x01\x28\x02\x20\x41\x03\x6c\x41\x01\x76\x22\x04\x20\x04\x20\x02\x48\x1b\x22\x02\x41\x03\x74\x20\x03\x41\x0c\x6a\x10\xbd\x04\x22\x00\x0d\x00\x41\x7f\x21\x01\x0c\x01\x0b\x20\x01\x20\x00\x36\x02\x24\x20\x01\x20\x03\x28\x02\x0c\x41\x03\x76\x20\x02\x6a\x36\x02\x20\x41\x00\x21\x01\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x01\x0b\x0d\x00\x20\x00\x41\xe7\xdd\x01\x41\x00\x10\xb2\x02\x0b\x45\x00\x02\x40\x20\x00\x20\x01\x46\x0d\x00\x02\x40\x20\x00\x20\x01\x28\x02\x0c\x10\x98\x09\x45\x0d\x00\x20\x00\x10\x97\x04\x41\x20\x0f\x0b\x20\x00\x20\x01\x29\x02\x04\x37\x02\x04\x20\x00\x28\x02\x10\x20\x01\x28\x02\x10\x20\x01\x28\x02\x0c\x41\x02\x74\x10\x70\x1a\x0b\x41\x00\x0b\x0e\x00\x20\x00\x41\x00\x20\x01\x41\x10\x72\x10\x9f\x09\x0b\xd1\x03\x02\x01\x7f\x01\x7c\x02\x40\x02\x40\x03\x40\x41\x07\x20\x02\x42\x20\x88\xa7\x22\x03\x20\x03\x41\x0b\x6a\x41\x11\x4b\x1b\x41\x0a\x6a\x22\x03\x41\x11\x4b\x0d\x01\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x03\x0e\x12\x03\x04\x08\x05\x08\x08\x08\x08\x08\x06\x00\x01\x00\x00\x08\x08\x08\x02\x03\x0b\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x22\x03\x45\x0d\x07\x20\x03\x2d\x00\x28\x41\x04\x71\x45\x0d\x07\x0b\x20\x01\x42\x00\x37\x02\x0c\x20\x01\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x04\x20\x01\x20\x00\x28\x02\xd8\x01\x36\x02\x00\x20\x01\x20\x02\x42\x20\x86\x42\x20\x87\x10\x95\x04\x1a\x20\x01\x0f\x0b\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x22\x03\x45\x0d\x05\x20\x02\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\x22\x04\x99\x44\x00\x00\x00\x00\x00\x00\xf0\x7f\x63\x41\x01\x73\x0d\x05\x20\x03\x28\x02\x28\x41\x04\x71\x45\x0d\x05\x20\x01\x42\x00\x37\x02\x0c\x20\x01\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x04\x20\x01\x20\x00\x28\x02\xd8\x01\x36\x02\x00\x20\x01\x20\x04\x9d\x10\x96\x04\x1a\x20\x01\x0f\x0b\x20\x02\xa7\x41\x04\x6a\x0f\x0b\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x22\x03\x45\x0d\x03\x20\x03\x2d\x00\x28\x41\x04\x71\x45\x0d\x03\x20\x02\xa7\x22\x03\x41\x0c\x6a\x28\x02\x00\x41\xfd\xff\xff\xff\x07\x4a\x0d\x03\x20\x01\x42\x00\x37\x02\x0c\x20\x01\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x04\x20\x01\x20\x00\x28\x02\xd8\x01\x36\x02\x00\x20\x01\x20\x03\x41\x04\x6a\x10\xcc\x04\x1a\x20\x01\x41\x01\x10\xcd\x04\x1a\x20\x00\x20\x02\x10\xcd\x01\x20\x01\x0f\x0b\x20\x00\x20\x02\x10\xd1\x04\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0c\x03\x0b\x20\x00\x20\x02\x41\x01\x10\xed\x02\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x0c\x02\x0b\x00\x0b\x20\x00\x20\x02\x10\xcd\x01\x20\x00\x41\xd4\xde\x01\x41\x00\x10\xb2\x02\x41\x00\x0f\x0b\x41\x00\x0b\xd0\x03\x02\x04\x7f\x03\x7e\x02\x40\x02\x40\x20\x01\x28\x02\x08\x22\x03\x41\xfe\xff\xff\xff\x07\x48\x0d\x00\x41\x01\x21\x04\x42\x00\x21\x07\x20\x02\x41\x01\x71\x0d\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x21\x07\x20\x03\x41\xfe\xff\xff\xff\x07\x47\x0d\x01\x20\x01\x34\x02\x04\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x7c\x21\x07\x0c\x01\x0b\x41\x00\x21\x04\x02\x40\x20\x03\x41\x01\x4e\x0d\x00\x42\x00\x21\x07\x0c\x01\x0b\x02\x40\x20\x03\x41\x3f\x4a\x0d\x00\x20\x01\x28\x02\x0c\x22\x05\x41\x02\x74\x20\x01\x28\x02\x10\x22\x06\x6a\x41\x7c\x6a\x28\x02\x00\x21\x02\x02\x40\x02\x40\x20\x03\x41\x20\x4a\x0d\x00\x20\x02\x41\x20\x20\x03\x6b\x76\xad\x21\x07\x0c\x01\x0b\x20\x02\xad\x42\x20\x86\x21\x08\x42\x00\x21\x07\x02\x40\x20\x05\x41\x02\x49\x0d\x00\x20\x05\x41\x02\x74\x20\x06\x6a\x41\x78\x6a\x35\x02\x00\x21\x07\x0b\x20\x07\x20\x08\x84\x41\xc0\x00\x20\x03\x6b\xad\x88\x21\x07\x0b\x42\x00\x20\x07\x7d\x20\x07\x20\x01\x28\x02\x04\x1b\x21\x07\x0c\x01\x0b\x02\x40\x20\x02\x41\x01\x71\x0d\x00\x02\x40\x20\x01\x28\x02\x04\x0d\x00\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x21\x07\x41\x01\x21\x04\x0c\x02\x0b\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x21\x07\x41\x01\x21\x04\x20\x03\x41\xc0\x00\x47\x0d\x01\x20\x01\x28\x02\x0c\x22\x03\x41\x02\x74\x20\x01\x28\x02\x10\x6a\x22\x01\x41\x7c\x6a\x35\x02\x00\x42\x20\x86\x21\x09\x42\x00\x21\x08\x02\x40\x20\x03\x41\x02\x49\x0d\x00\x20\x01\x41\x78\x6a\x35\x02\x00\x21\x08\x0b\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x21\x07\x20\x08\x20\x09\x84\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x52\x21\x04\x0c\x01\x0b\x20\x01\x28\x02\x10\x22\x05\x20\x01\x28\x02\x0c\x22\x02\x20\x02\x41\x05\x74\x20\x03\x6b\x22\x03\x10\x92\x0a\x21\x06\x42\x00\x20\x05\x20\x02\x20\x03\x41\x20\x6a\x10\x92\x0a\xad\x42\x20\x86\x20\x06\xad\x84\x22\x07\x7d\x20\x07\x20\x01\x28\x02\x04\x1b\x21\x07\x0b\x20\x00\x20\x07\x37\x03\x00\x20\x04\x0b\x25\x00\x02\x40\x20\x01\x20\x02\x47\x0d\x00\x20\x01\x10\xd7\x02\x0f\x0b\x20\x00\x20\x01\x41\x7c\x6a\xad\x42\x80\x80\x80\x80\xf0\x7e\x84\x10\xcd\x01\x0b\x35\x00\x02\x40\x20\x00\x20\x01\x10\x8a\x04\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xc0\x7e\x52\x0d\x00\x20\x00\x41\xed\xde\x01\x41\x00\x10\xc5\x04\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x01\x0b\x79\x02\x02\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x41\x00\x21\x03\x02\x40\x02\x40\x20\x01\x41\x00\x48\x0d\x00\x20\x01\x41\x80\x80\x80\x80\x78\x72\x21\x03\x0c\x01\x0b\x20\x02\x20\x01\x36\x02\x00\x20\x02\x41\x05\x6a\x41\x0b\x41\xaa\xc2\x01\x20\x02\x10\x5f\x1a\x20\x00\x20\x02\x41\x05\x6a\x10\xc7\x02\x22\x04\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x28\x02\x10\x20\x04\xa7\x41\x01\x10\xb7\x04\x21\x03\x0b\x20\x02\x41\x10\x6a\x24\x00\x20\x03\x0b\x26\x00\x02\x40\x20\x00\x20\x02\x41\x01\x6a\x10\xc0\x02\x22\x00\x45\x0d\x00\x20\x00\x20\x01\x20\x02\x10\x70\x20\x02\x6a\x41\x00\x3a\x00\x00\x0b\x20\x00\x0b\xa6\x01\x01\x01\x7f\x02\x40\x02\x40\x02\x40\x20\x01\x42\x20\x88\xa7\x41\x03\x6a\x22\x05\x41\x01\x4b\x0d\x00\x02\x40\x02\x40\x20\x05\x0e\x02\x01\x00\x01\x0b\x20\x00\x20\x00\x20\x01\x20\x03\x20\x04\x10\xfd\x02\x20\x02\x41\x00\x41\x00\x10\xef\x02\x0f\x0b\x20\x00\x20\x01\x10\xcd\x01\x02\x40\x20\x00\x20\x01\xa7\x22\x05\x10\xd5\x04\x41\x00\x48\x0d\x00\x20\x00\x20\x05\x10\xd6\x04\x41\x00\x48\x0d\x00\x20\x00\x20\x05\x10\xd7\x04\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x03\x0b\x20\x00\x41\x02\x10\xe2\x02\x0c\x01\x0b\x20\x00\x20\x01\x10\xcd\x01\x20\x00\x41\xd2\xe2\x01\x41\x00\x10\xb2\x02\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x01\x0b\xb1\x03\x02\x05\x7f\x02\x7e\x02\x40\x20\x01\x29\x02\x54\x42\x30\x86\x42\x38\x87\xa7\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x01\x28\x02\x50\x45\x0d\x00\x41\x08\x21\x02\x41\x00\x21\x03\x03\x40\x20\x03\x20\x01\x28\x02\x20\x4e\x0d\x02\x02\x40\x20\x01\x28\x02\x1c\x20\x02\x6a\x22\x04\x28\x02\x00\x0d\x00\x02\x40\x20\x00\x41\x00\x10\xd8\x04\x22\x05\x0d\x00\x41\x7f\x0f\x0b\x20\x04\x41\x7c\x6a\x20\x05\x36\x02\x00\x0b\x20\x02\x41\x14\x6a\x21\x02\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x01\x29\x03\x48\x21\x07\x41\x7f\x21\x05\x20\x00\x20\x00\x29\x03\x30\x41\x0d\x10\xc6\x01\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x08\xa7\x22\x03\x20\x07\xa7\x22\x05\x36\x02\x20\x20\x05\x20\x05\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x20\x03\x41\x24\x6a\x42\x00\x37\x02\x00\x02\x40\x20\x05\x28\x02\x3c\x22\x02\x45\x0d\x00\x02\x40\x20\x00\x20\x02\x41\x02\x74\x10\xe2\x03\x22\x04\x45\x0d\x00\x20\x03\x20\x04\x36\x02\x24\x41\x00\x21\x02\x41\x00\x21\x03\x03\x40\x20\x03\x20\x05\x28\x02\x3c\x4e\x0d\x02\x02\x40\x20\x05\x28\x02\x24\x20\x02\x6a\x2d\x00\x00\x22\x06\x41\x01\x71\x45\x0d\x00\x20\x00\x20\x06\x41\x03\x76\x41\x01\x71\x10\xd8\x04\x22\x06\x45\x0d\x02\x20\x04\x20\x06\x36\x02\x00\x0b\x20\x04\x41\x04\x6a\x21\x04\x20\x02\x41\x08\x6a\x21\x02\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x20\x08\x10\xcd\x01\x41\x7f\x0f\x0b\x20\x01\x20\x08\x37\x03\x48\x20\x00\x20\x07\x10\xcd\x01\x0b\x20\x01\x41\xd5\x00\x6a\x41\x01\x3a\x00\x00\x41\x04\x21\x03\x41\x7f\x21\x02\x03\x40\x20\x02\x41\x01\x6a\x22\x02\x20\x01\x28\x02\x14\x4e\x0d\x02\x20\x01\x28\x02\x10\x20\x03\x6a\x21\x04\x41\x7f\x21\x05\x20\x03\x41\x08\x6a\x21\x03\x20\x00\x20\x04\x28\x02\x00\x10\xd5\x04\x41\x7f\x4a\x0d\x00\x0b\x0b\x20\x05\x0f\x0b\x41\x00\x0b\xba\x06\x02\x07\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x41\x00\x21\x03\x02\x40\x20\x01\x29\x02\x54\x22\x09\x42\x28\x86\x42\x38\x87\xa7\x0d\x00\x20\x01\x20\x09\x42\xff\xff\x83\x78\x83\x42\x80\x80\x04\x84\x37\x02\x54\x41\x04\x21\x04\x41\x7f\x21\x05\x02\x40\x03\x40\x02\x40\x20\x05\x41\x01\x6a\x22\x05\x20\x01\x28\x02\x14\x48\x0d\x00\x41\x00\x21\x04\x41\x10\x21\x05\x02\x40\x03\x40\x20\x04\x20\x01\x28\x02\x20\x4e\x0d\x01\x02\x40\x20\x01\x28\x02\x1c\x20\x05\x6a\x22\x06\x41\x78\x6a\x28\x02\x00\x41\x01\x47\x0d\x00\x20\x06\x41\x7c\x6a\x28\x02\x00\x22\x03\x41\xfd\x00\x46\x0d\x00\x20\x00\x20\x02\x41\x08\x6a\x20\x02\x41\x0c\x6a\x20\x01\x28\x02\x10\x20\x06\x41\x70\x6a\x28\x02\x00\x41\x03\x74\x6a\x28\x02\x04\x20\x03\x10\xc0\x04\x22\x03\x45\x0d\x00\x20\x00\x20\x03\x20\x01\x20\x06\x28\x02\x00\x10\xc2\x04\x0c\x05\x0b\x20\x05\x41\x14\x6a\x21\x05\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x41\x00\x21\x03\x20\x01\x28\x02\x50\x0d\x03\x20\x01\x28\x02\x48\x41\x24\x6a\x28\x02\x00\x21\x07\x41\x00\x21\x05\x41\x00\x21\x04\x02\x40\x03\x40\x02\x40\x20\x04\x20\x01\x28\x02\x38\x48\x0d\x00\x41\x00\x21\x04\x41\x08\x21\x05\x03\x40\x20\x04\x20\x01\x28\x02\x20\x4e\x0d\x03\x02\x40\x20\x01\x28\x02\x1c\x20\x05\x6a\x22\x06\x28\x02\x00\x0d\x00\x20\x07\x20\x06\x41\x78\x6a\x28\x02\x00\x41\x02\x74\x6a\x28\x02\x00\x22\x03\x20\x03\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x20\x06\x41\x7c\x6a\x20\x03\x36\x02\x00\x0b\x20\x05\x41\x14\x6a\x21\x05\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x01\x28\x02\x10\x20\x01\x28\x02\x34\x20\x05\x6a\x22\x06\x41\x08\x6a\x28\x02\x00\x41\x03\x74\x6a\x28\x02\x04\x21\x03\x02\x40\x02\x40\x02\x40\x20\x06\x41\x04\x6a\x28\x02\x00\x22\x08\x41\xfd\x00\x47\x0d\x00\x20\x00\x20\x03\x10\xe9\x03\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0c\x07\x0b\x02\x40\x20\x00\x20\x02\x41\x08\x6a\x20\x02\x41\x0c\x6a\x20\x03\x20\x08\x10\xc0\x04\x22\x08\x45\x0d\x00\x20\x00\x20\x08\x20\x03\x20\x06\x41\x04\x6a\x28\x02\x00\x10\xc2\x04\x0c\x07\x0b\x02\x40\x02\x40\x20\x02\x28\x02\x0c\x22\x08\x28\x02\x0c\x41\xfd\x00\x47\x0d\x00\x20\x00\x20\x02\x28\x02\x08\x28\x02\x10\x20\x08\x28\x02\x00\x41\x03\x74\x6a\x28\x02\x04\x10\xe9\x03\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x08\x02\x40\x20\x00\x41\x01\x10\xd8\x04\x22\x03\x0d\x00\x20\x00\x20\x09\x10\xcd\x01\x0c\x09\x0b\x20\x00\x20\x03\x41\x18\x6a\x20\x09\x10\x98\x03\x0c\x01\x0b\x02\x40\x20\x08\x28\x02\x04\x22\x03\x0d\x00\x20\x02\x28\x02\x08\x28\x02\x48\x41\x24\x6a\x28\x02\x00\x20\x08\x28\x02\x00\x41\x02\x74\x6a\x28\x02\x00\x21\x03\x0b\x20\x03\x20\x03\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x0b\x20\x07\x20\x06\x28\x02\x00\x41\x02\x74\x6a\x20\x03\x36\x02\x00\x0c\x01\x0b\x20\x00\x20\x07\x20\x06\x28\x02\x00\x41\x02\x74\x6a\x28\x02\x00\x41\x18\x6a\x20\x09\x10\x98\x03\x0b\x20\x05\x41\x0c\x6a\x21\x05\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x41\x7f\x21\x03\x20\x00\x20\x01\x29\x03\x48\x42\x81\x80\x80\x80\x10\x41\x00\x41\x00\x10\xb5\x01\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x00\x20\x09\x10\xcd\x01\x41\x00\x21\x03\x0c\x03\x0b\x20\x01\x28\x02\x10\x20\x04\x6a\x21\x06\x41\x7f\x21\x03\x20\x04\x41\x08\x6a\x21\x04\x20\x00\x20\x06\x28\x02\x00\x10\xd6\x04\x41\x7f\x4a\x0d\x00\x0c\x02\x0b\x00\x0b\x41\x7f\x21\x03\x0b\x20\x02\x41\x10\x6a\x24\x00\x20\x03\x0b\x80\x03\x02\x02\x7e\x03\x7f\x42\x80\x80\x80\x80\x30\x21\x02\x02\x40\x02\x40\x20\x01\x29\x02\x54\x22\x03\x42\x18\x86\x42\x38\x87\xa7\x0d\x00\x02\x40\x20\x03\x42\x20\x86\x42\x38\x87\xa7\x45\x0d\x00\x20\x03\x42\x10\x86\x42\x38\x87\xa7\x45\x0d\x01\x20\x00\x20\x01\x29\x03\x60\x10\xc0\x01\x10\xc9\x02\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x01\x20\x03\x42\xff\xff\xff\xff\x8f\x60\x83\x42\x80\x80\x80\x80\x10\x84\x37\x02\x54\x41\x00\x21\x04\x41\x04\x21\x05\x02\x40\x03\x40\x20\x04\x20\x01\x28\x02\x14\x4e\x0d\x01\x02\x40\x20\x01\x28\x02\x10\x20\x05\x6a\x28\x02\x00\x22\x06\x29\x02\x54\x42\x18\x86\x42\x38\x87\xa7\x0d\x00\x20\x00\x20\x06\x10\xd7\x04\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x04\x20\x00\x20\x02\x10\xcd\x01\x0b\x20\x05\x41\x08\x6a\x21\x05\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x02\x40\x02\x40\x20\x01\x28\x02\x50\x22\x04\x45\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x42\x80\x80\x80\x80\x30\x20\x00\x20\x01\x20\x04\x11\x03\x00\x41\x00\x48\x1b\x21\x02\x0c\x01\x0b\x20\x00\x20\x01\x29\x03\x48\x42\x80\x80\x80\x80\x30\x41\x00\x41\x00\x10\xef\x02\x21\x02\x20\x01\x42\x80\x80\x80\x80\x30\x37\x03\x48\x0b\x02\x40\x20\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x41\xd9\x00\x6a\x41\x01\x3a\x00\x00\x20\x01\x20\x00\x28\x02\x10\x29\x03\x80\x01\x10\xc0\x01\x37\x03\x60\x0b\x20\x01\x20\x01\x29\x02\x54\x42\xff\xff\xff\x87\x80\x60\x83\x42\x80\x80\x80\x08\x84\x37\x02\x54\x0b\x20\x02\x0f\x0b\x20\x01\x20\x01\x29\x02\x54\x42\xff\xff\xff\xff\x8f\x60\x83\x37\x02\x54\x20\x02\x0b\x82\x01\x01\x03\x7f\x02\x40\x20\x00\x41\x20\x10\xc0\x02\x22\x02\x0d\x00\x41\x00\x0f\x0b\x20\x02\x41\x01\x36\x02\x00\x20\x02\x20\x02\x2d\x00\x05\x41\x01\x72\x3a\x00\x05\x20\x00\x28\x02\x10\x21\x00\x20\x02\x41\x03\x3a\x00\x04\x20\x00\x28\x02\x50\x22\x03\x20\x02\x41\x08\x6a\x22\x04\x36\x02\x04\x20\x02\x20\x03\x36\x02\x08\x20\x02\x42\x80\x80\x80\x80\xc0\x00\x42\x80\x80\x80\x80\x30\x20\x01\x1b\x37\x03\x18\x20\x02\x20\x02\x41\x18\x6a\x36\x02\x10\x20\x02\x20\x00\x41\xd0\x00\x6a\x36\x02\x0c\x20\x00\x20\x04\x36\x02\x50\x20\x02\x0b\x68\x02\x02\x7f\x01\x7e\x41\x00\x21\x06\x42\x80\x80\x80\x80\x30\x21\x08\x03\x7e\x02\x40\x02\x40\x20\x06\x41\x10\x46\x0d\x00\x20\x05\x20\x06\x6a\x22\x07\x35\x02\x04\x42\x20\x86\x42\x80\x80\x80\x80\x30\x51\x0d\x01\x20\x00\x41\x8d\xe3\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x0b\x20\x08\x0f\x0b\x20\x07\x20\x03\x20\x06\x6a\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x06\x41\x08\x6a\x21\x06\x0c\x00\x0b\x0b\xc6\x01\x02\x01\x7e\x01\x7f\x02\x40\x20\x00\x20\x00\x29\x03\x30\x41\x0f\x10\xc6\x01\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x00\x20\x04\x41\x03\x74\x41\x08\x6a\x10\xc0\x02\x22\x07\x0d\x00\x20\x00\x20\x06\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x07\x20\x03\x3b\x01\x06\x20\x07\x20\x04\x3a\x00\x05\x20\x07\x20\x02\x3a\x00\x04\x20\x07\x20\x01\x36\x02\x00\x41\x00\x21\x01\x41\x00\x21\x03\x02\x40\x03\x40\x20\x03\x20\x04\x4e\x0d\x01\x20\x07\x20\x01\x6a\x41\x08\x6a\x20\x05\x20\x01\x6a\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x01\x41\x08\x6a\x21\x01\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x02\x40\x20\x06\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x06\xa7\x20\x07\x36\x02\x20\x0b\x20\x00\x20\x06\x41\x2f\x20\x02\x10\xca\x03\x0b\x20\x06\x0b\x11\x00\x20\x00\x20\x01\x20\x01\x20\x02\x20\x03\x41\x02\x10\x86\x03\x0b\xeb\x01\x02\x04\x7f\x01\x7e\x02\x40\x20\x00\x41\x08\x10\xc0\x02\x22\x03\x0d\x00\x41\x7f\x0f\x0b\x20\x03\x42\x01\x37\x02\x00\x41\x32\x21\x04\x20\x01\x21\x05\x03\x7f\x02\x40\x02\x40\x02\x40\x20\x04\x41\x34\x47\x0d\x00\x41\x00\x21\x06\x0c\x01\x0b\x02\x40\x20\x00\x20\x00\x29\x03\x30\x20\x04\x10\xc6\x01\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x41\x10\x10\xc0\x02\x22\x06\x0d\x02\x20\x00\x20\x07\x10\xcd\x01\x0b\x41\x7f\x21\x06\x20\x04\x41\x32\x46\x0d\x00\x20\x00\x20\x01\x29\x03\x00\x10\xcd\x01\x0b\x20\x00\x28\x02\x10\x20\x03\x10\xde\x04\x20\x06\x0f\x0b\x20\x06\x20\x03\x36\x02\x08\x20\x03\x20\x03\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x20\x06\x20\x02\x10\xc0\x01\x37\x03\x00\x02\x40\x20\x07\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x07\xa7\x20\x06\x36\x02\x20\x0b\x20\x00\x20\x07\x41\x2f\x41\x01\x10\xca\x03\x20\x05\x20\x07\x37\x03\x00\x20\x05\x41\x08\x6a\x21\x05\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x0b\x9f\x01\x01\x03\x7f\x02\x40\x03\x40\x02\x40\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x02\x40\x20\x01\xa7\x22\x02\x2f\x01\x06\x22\x03\x41\x74\x6a\x22\x04\x41\x04\x4d\x0d\x00\x02\x40\x20\x03\x41\x30\x46\x0d\x00\x20\x03\x41\x4c\x6a\x22\x03\x41\x04\x4b\x0d\x02\x20\x03\x0e\x05\x06\x02\x02\x02\x06\x06\x0b\x20\x02\x28\x02\x20\x22\x02\x45\x0d\x01\x20\x02\x2d\x00\x11\x45\x0d\x03\x20\x00\x10\xcb\x04\x41\x00\x0f\x0b\x02\x40\x20\x04\x0e\x05\x00\x05\x02\x01\x05\x00\x0b\x20\x02\x28\x02\x20\x21\x00\x0b\x20\x00\x0f\x0b\x20\x02\x28\x02\x20\x21\x02\x0b\x20\x02\x29\x03\x00\x21\x01\x0c\x00\x0b\x00\x0b\x20\x02\x28\x02\x20\x28\x02\x30\x0b\x29\x01\x01\x7f\x20\x01\x20\x01\x28\x02\x00\x41\x7f\x6a\x22\x02\x36\x02\x00\x02\x40\x20\x02\x0d\x00\x20\x00\x41\x10\x6a\x20\x01\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x0b\x0e\x00\x20\x00\x20\x01\x20\x02\x10\xc0\x01\x10\xf8\x03\x0b\x34\x00\x02\x40\x20\x00\x20\x02\x41\x01\x10\xe7\x02\x22\x00\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x00\x41\x10\x6a\x20\x01\x20\x02\x41\x01\x74\x10\x70\x1a\x20\x00\xad\x42\x80\x80\x80\x80\x90\x7f\x84\x0b\x04\x00\x41\x00\x0b\x13\x00\x20\x00\x41\x10\x6a\x20\x01\x20\x02\x20\x00\x28\x02\x08\x11\x01\x00\x0b\x0e\x00\x20\x00\x10\xe4\x04\x42\x80\x80\x80\x80\xe0\x00\x0b\x0d\x00\x20\x00\x41\xfa\x80\x02\x41\x00\x10\xb2\x02\x0b\x09\x00\x42\x80\x80\x80\x80\xc0\x7e\x0b\x10\x00\x20\x00\x20\x03\x10\xcd\x01\x20\x00\x10\xe4\x04\x41\x7f\x0b\x17\x00\x20\x00\x20\x03\x10\xcd\x01\x20\x00\x20\x04\x10\xcd\x01\x20\x00\x10\xe4\x04\x41\x7f\x0b\x0e\x00\x20\x00\x10\xe4\x04\x42\x80\x80\x80\x80\xe0\x00\x0b\x09\x00\x20\x00\x10\xe4\x04\x41\x7f\x0b\xde\x07\x02\x08\x7f\x01\x7c\x23\x00\x41\xc0\x00\x6b\x22\x06\x24\x00\x02\x40\x02\x40\x20\x06\x22\x07\x20\x01\xa7\x22\x08\x41\x28\x6a\x2d\x00\x00\x22\x09\x41\x03\x74\x6b\x20\x00\x28\x02\x10\x22\x0a\x28\x02\x78\x4f\x0d\x00\x20\x00\x10\xfb\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0c\x01\x0b\x20\x08\x41\x29\x6a\x2d\x00\x00\x21\x0b\x20\x0a\x28\x02\x8c\x01\x21\x00\x20\x0a\x20\x07\x41\x10\x6a\x36\x02\x8c\x01\x20\x07\x20\x00\x36\x02\x10\x20\x08\x28\x02\x20\x21\x0c\x02\x40\x02\x40\x20\x00\x0d\x00\x41\x00\x21\x00\x0c\x01\x0b\x20\x00\x28\x02\x28\x41\x04\x71\x21\x00\x0b\x20\x07\x20\x01\x37\x03\x18\x20\x07\x20\x00\x36\x02\x38\x20\x07\x20\x03\x36\x02\x34\x02\x40\x02\x40\x20\x09\x20\x03\x4a\x0d\x00\x20\x04\x21\x00\x0c\x01\x0b\x20\x06\x20\x09\x41\x03\x74\x41\x0f\x6a\x41\xf0\x1f\x71\x6b\x22\x00\x24\x00\x41\x00\x21\x06\x41\x00\x21\x0d\x03\x40\x02\x40\x20\x0d\x20\x03\x48\x0d\x00\x20\x00\x20\x03\x41\x03\x74\x6a\x21\x04\x20\x03\x21\x06\x02\x40\x03\x40\x20\x06\x20\x09\x4e\x0d\x01\x20\x04\x42\x80\x80\x80\x80\x30\x37\x03\x00\x20\x04\x41\x08\x6a\x21\x04\x20\x06\x41\x01\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x20\x07\x20\x09\x36\x02\x34\x0c\x02\x0b\x20\x00\x20\x06\x6a\x20\x04\x20\x06\x6a\x29\x03\x00\x37\x03\x00\x20\x06\x41\x08\x6a\x21\x06\x20\x0d\x41\x01\x6a\x21\x0d\x0c\x00\x0b\x00\x0b\x20\x07\x20\x00\x36\x02\x20\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x0b\x41\x0c\x4b\x0d\x00\x20\x08\x28\x02\x24\x21\x06\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x0b\x0e\x0d\x0b\x02\x00\x01\x00\x01\x07\x08\x03\x04\x05\x06\x09\x0b\x0b\x20\x05\x41\x01\x71\x0d\x0a\x42\x80\x80\x80\x80\x30\x21\x02\x20\x0b\x41\x02\x47\x0d\x0a\x0c\x0b\x0b\x20\x05\x41\x01\x71\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x02\x20\x0b\x41\x03\x46\x0d\x0a\x0b\x20\x0c\x20\x02\x20\x03\x20\x00\x20\x08\x41\x2a\x6a\x2e\x01\x00\x20\x06\x11\x05\x00\x21\x01\x0c\x0b\x0b\x20\x0c\x20\x02\x20\x06\x11\x08\x00\x21\x01\x0c\x0a\x0b\x20\x0c\x20\x02\x20\x00\x29\x03\x00\x20\x06\x11\x19\x00\x21\x01\x0c\x09\x0b\x20\x0c\x20\x02\x20\x08\x41\x2a\x6a\x2e\x01\x00\x20\x06\x11\x0e\x00\x21\x01\x0c\x08\x0b\x20\x0c\x20\x02\x20\x00\x29\x03\x00\x20\x08\x41\x2a\x6a\x2e\x01\x00\x20\x06\x11\x3b\x00\x21\x01\x0c\x07\x0b\x20\x0c\x20\x07\x41\x08\x6a\x20\x00\x29\x03\x00\x10\xdf\x04\x0d\x05\x20\x07\x2b\x03\x08\x20\x06\x11\x0b\x00\x22\x0e\xbd\x21\x01\x02\x40\x02\x40\x20\x0e\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x0e\xaa\x21\x08\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x08\x0b\x02\x40\x20\x01\x20\x08\xb7\xbd\x52\x0d\x00\x20\x08\xad\x21\x01\x0c\x07\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x01\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x01\x0c\x06\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x20\x0c\x20\x07\x41\x08\x6a\x20\x00\x29\x03\x00\x10\xdf\x04\x0d\x05\x20\x0c\x20\x07\x20\x00\x29\x03\x08\x10\xdf\x04\x0d\x05\x20\x07\x2b\x03\x08\x20\x07\x2b\x03\x00\x20\x06\x11\x1d\x00\x22\x0e\xbd\x21\x01\x02\x40\x02\x40\x20\x0e\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x0e\xaa\x21\x08\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x08\x0b\x02\x40\x20\x01\x20\x08\xb7\xbd\x52\x0d\x00\x20\x08\xad\x21\x01\x0c\x06\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x01\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x01\x0c\x05\x0b\x20\x0c\x20\x02\x20\x03\x20\x00\x20\x07\x41\x08\x6a\x20\x08\x41\x2a\x6a\x2e\x01\x00\x20\x06\x11\x12\x00\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x04\x20\x07\x28\x02\x08\x22\x08\x41\x02\x46\x0d\x04\x20\x0c\x20\x01\x20\x08\x10\xeb\x04\x21\x01\x0c\x04\x0b\x10\x40\x00\x0b\x20\x0c\x20\x02\x20\x03\x20\x00\x20\x06\x11\x02\x00\x21\x01\x0c\x02\x0b\x20\x0c\x41\xaa\x80\x02\x41\x00\x10\xb2\x02\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x0a\x20\x07\x28\x02\x10\x36\x02\x8c\x01\x0b\x20\x07\x41\xc0\x00\x6a\x24\x00\x20\x01\x0b\x7f\x01\x02\x7e\x42\x80\x80\x80\x80\xe0\x00\x21\x03\x02\x40\x02\x40\x02\x40\x20\x00\x10\xc1\x01\x22\x04\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x04\x21\x03\x0c\x01\x0b\x02\x40\x20\x00\x20\x04\x41\xc0\x00\x20\x01\x41\x07\x10\xc4\x01\x41\x00\x4e\x0d\x00\x20\x04\x21\x01\x0c\x01\x0b\x20\x04\x21\x01\x20\x00\x20\x04\x41\xe9\x00\x20\x02\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x41\x07\x10\xc4\x01\x41\x7f\x4a\x0d\x01\x0b\x20\x00\x20\x01\x10\xcd\x01\x20\x03\x21\x04\x0b\x20\x04\x0b\xc7\x01\x01\x06\x7f\x23\x00\x22\x06\x21\x07\x02\x40\x20\x01\xa7\x28\x02\x20\x22\x08\x2d\x00\x04\x22\x09\x20\x03\x4c\x0d\x00\x20\x06\x20\x09\x41\x03\x74\x41\x0f\x6a\x41\xf0\x1f\x71\x6b\x22\x0a\x24\x00\x41\x00\x21\x06\x41\x00\x21\x0b\x03\x40\x02\x40\x20\x0b\x20\x03\x48\x0d\x00\x20\x0a\x20\x03\x41\x03\x74\x6a\x21\x06\x20\x03\x21\x04\x03\x40\x02\x40\x20\x04\x20\x09\x48\x0d\x00\x20\x0a\x21\x04\x0c\x04\x0b\x20\x06\x42\x80\x80\x80\x80\x30\x37\x03\x00\x20\x06\x41\x08\x6a\x21\x06\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x0a\x20\x06\x6a\x20\x04\x20\x06\x6a\x29\x03\x00\x37\x03\x00\x20\x06\x41\x08\x6a\x21\x06\x20\x0b\x41\x01\x6a\x21\x0b\x0c\x00\x0b\x00\x0b\x20\x00\x20\x02\x20\x03\x20\x04\x20\x08\x2f\x01\x06\x20\x08\x41\x08\x6a\x20\x08\x28\x02\x00\x11\x12\x00\x21\x02\x20\x07\x24\x00\x20\x02\x0b\x9b\x02\x01\x08\x7f\x02\x40\x02\x40\x23\x00\x22\x06\x22\x07\x20\x01\xa7\x28\x02\x20\x22\x08\x28\x02\x10\x22\x09\x20\x03\x6a\x22\x0a\x41\x03\x74\x22\x0b\x6b\x20\x00\x28\x02\x10\x28\x02\x78\x4f\x0d\x00\x20\x00\x10\xfb\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0c\x01\x0b\x20\x08\x41\x18\x6a\x21\x0c\x20\x06\x20\x0b\x41\x0f\x6a\x41\x70\x71\x6b\x22\x0d\x24\x00\x41\x00\x21\x06\x20\x0d\x21\x0b\x03\x40\x02\x40\x20\x06\x20\x09\x48\x0d\x00\x20\x0d\x20\x09\x41\x03\x74\x6a\x21\x0c\x41\x00\x21\x06\x02\x40\x03\x40\x20\x06\x20\x03\x4e\x0d\x01\x20\x0c\x20\x04\x29\x03\x00\x37\x03\x00\x20\x0c\x41\x08\x6a\x21\x0c\x20\x04\x41\x08\x6a\x21\x04\x20\x06\x41\x01\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x02\x40\x20\x05\x41\x01\x71\x45\x0d\x00\x20\x00\x20\x01\x20\x02\x10\x8d\x03\x21\x04\x20\x00\x20\x08\x29\x03\x00\x22\x01\x20\x01\x20\x02\x20\x04\x1b\x20\x0a\x20\x0d\x10\xdc\x03\x21\x01\x0c\x03\x0b\x20\x00\x20\x08\x29\x03\x00\x20\x08\x29\x03\x08\x20\x0a\x20\x0d\x10\xb5\x01\x21\x01\x0c\x02\x0b\x20\x0b\x20\x0c\x29\x03\x00\x37\x03\x00\x20\x0b\x41\x08\x6a\x21\x0b\x20\x0c\x41\x08\x6a\x21\x0c\x20\x06\x41\x01\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x20\x07\x24\x00\x20\x01\x0b\xbc\x01\x01\x02\x7f\x02\x40\x20\x00\x41\xc8\x00\x10\xe2\x03\x22\x06\x45\x0d\x00\x20\x06\x41\x00\x36\x02\x00\x02\x40\x02\x40\x20\x00\x20\x06\x41\x08\x6a\x22\x07\x20\x01\x20\x02\x20\x03\x20\x04\x10\xef\x04\x45\x0d\x00\x20\x06\x41\x04\x36\x02\x00\x0c\x01\x0b\x20\x00\x20\x07\x10\xf0\x04\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x02\x10\xcd\x01\x20\x00\x20\x01\x41\x2f\x10\xda\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x20\x06\x36\x02\x20\x0b\x20\x01\x0f\x0b\x20\x00\x28\x02\x10\x20\x06\x10\xf1\x04\x20\x00\x28\x02\x10\x22\x00\x41\x10\x6a\x20\x06\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x42\x80\x80\x80\x80\xe0\x00\x0b\xd4\x02\x01\x04\x7f\x20\x01\x41\x2c\x6a\x20\x01\x41\x28\x6a\x22\x06\x36\x02\x00\x20\x06\x20\x06\x36\x02\x00\x20\x01\x41\x38\x6a\x20\x02\xa7\x28\x02\x20\x22\x07\x2d\x00\x10\x36\x02\x00\x20\x01\x41\x30\x6a\x20\x07\x28\x02\x14\x36\x02\x00\x20\x01\x41\x20\x6a\x20\x00\x20\x07\x2f\x01\x28\x22\x06\x20\x04\x20\x06\x20\x04\x4a\x1b\x22\x08\x20\x07\x2f\x01\x2a\x6a\x20\x07\x2f\x01\x2e\x6a\x22\x06\x41\x01\x20\x06\x41\x01\x4b\x1b\x41\x03\x74\x10\xc0\x02\x22\x06\x36\x02\x00\x02\x40\x20\x06\x0d\x00\x41\x7f\x0f\x0b\x20\x01\x41\x18\x6a\x20\x02\x10\xc0\x01\x37\x03\x00\x20\x03\x10\xc0\x01\x21\x02\x20\x01\x41\x34\x6a\x20\x08\x36\x02\x00\x20\x01\x20\x04\x36\x02\x08\x20\x01\x20\x02\x37\x03\x00\x20\x01\x41\x24\x6a\x20\x01\x28\x02\x20\x22\x09\x20\x08\x41\x03\x74\x6a\x22\x06\x36\x02\x00\x20\x01\x41\x3c\x6a\x20\x06\x20\x07\x2f\x01\x2a\x41\x03\x74\x6a\x36\x02\x00\x41\x00\x21\x06\x41\x00\x21\x00\x02\x40\x03\x40\x20\x00\x20\x04\x4e\x0d\x01\x20\x05\x20\x06\x6a\x29\x03\x00\x10\xc0\x01\x21\x02\x20\x01\x28\x02\x20\x22\x09\x20\x06\x6a\x20\x02\x37\x03\x00\x20\x06\x41\x08\x6a\x21\x06\x20\x00\x41\x01\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x20\x09\x20\x04\x41\x03\x74\x6a\x21\x06\x20\x08\x20\x07\x2f\x01\x2a\x6a\x21\x00\x03\x7f\x02\x40\x20\x04\x20\x00\x48\x0d\x00\x41\x00\x0f\x0b\x20\x06\x42\x80\x80\x80\x80\x30\x37\x03\x00\x20\x06\x41\x08\x6a\x21\x06\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x0b\x59\x02\x01\x7f\x01\x7e\x23\x00\x21\x02\x02\x40\x02\x40\x20\x00\x28\x02\x10\x28\x02\x78\x20\x02\x22\x02\x4d\x0d\x00\x20\x00\x10\xfb\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x03\x0c\x01\x0b\x20\x00\x20\x01\xad\x20\x01\x29\x03\x00\x42\x80\x80\x80\x80\x30\x20\x01\x28\x02\x08\x20\x01\x41\x20\x6a\x28\x02\x00\x41\x04\x10\xf9\x02\x21\x03\x0b\x20\x02\x24\x00\x20\x03\x0b\x20\x00\x02\x40\x20\x01\x28\x02\x00\x41\x04\x46\x0d\x00\x20\x00\x20\x01\x41\x08\x6a\x10\xf7\x04\x20\x01\x41\x04\x36\x02\x00\x0b\x0b\x95\x01\x01\x03\x7f\x02\x40\x20\x01\x28\x02\x00\x22\x02\x41\x00\x4c\x0d\x00\x20\x01\x20\x02\x41\x7f\x6a\x22\x02\x36\x02\x00\x02\x40\x20\x02\x0d\x00\x20\x01\x2d\x00\x04\x41\xf0\x01\x71\x41\x10\x47\x0d\x00\x20\x01\x41\x0c\x6a\x22\x02\x28\x02\x00\x22\x03\x20\x01\x28\x02\x08\x22\x04\x36\x02\x00\x20\x01\x41\x00\x36\x02\x08\x20\x04\x20\x03\x36\x02\x04\x20\x01\x20\x00\x28\x02\x60\x22\x03\x36\x02\x08\x20\x03\x20\x01\x41\x08\x6a\x22\x01\x36\x02\x04\x20\x00\x20\x01\x36\x02\x60\x20\x02\x20\x00\x41\xe0\x00\x6a\x36\x02\x00\x0b\x0f\x0b\x41\xcb\xfe\x01\x41\xae\xb7\x01\x41\xc6\x2c\x41\xf7\xff\x01\x10\x4a\x00\x0b\xf4\x0a\x02\x05\x7f\x01\x7e\x02\x40\x20\x01\x2d\x00\x04\x41\x0f\x71\x22\x03\x41\x05\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x03\x0e\x06\x00\x01\x04\x02\x03\x05\x00\x0b\x20\x00\x20\x01\x28\x02\x10\x22\x04\x20\x02\x11\x00\x00\x41\x00\x21\x03\x41\x00\x21\x05\x02\x40\x03\x40\x20\x05\x20\x04\x28\x02\x20\x4e\x0d\x01\x02\x40\x20\x04\x20\x03\x6a\x22\x06\x41\x34\x6a\x28\x02\x00\x45\x0d\x00\x20\x01\x28\x02\x14\x21\x07\x02\x40\x02\x40\x02\x40\x02\x40\x20\x06\x41\x30\x6a\x28\x02\x00\x41\x1e\x76\x0e\x04\x03\x00\x01\x02\x03\x0b\x02\x40\x20\x07\x20\x03\x6a\x22\x06\x28\x02\x00\x22\x07\x45\x0d\x00\x20\x00\x20\x07\x20\x02\x11\x00\x00\x0b\x20\x06\x41\x04\x6a\x28\x02\x00\x22\x06\x45\x0d\x03\x20\x00\x20\x06\x20\x02\x11\x00\x00\x0c\x03\x0b\x20\x07\x20\x03\x6a\x28\x02\x00\x22\x06\x2d\x00\x05\x41\x01\x71\x45\x0d\x02\x20\x00\x20\x06\x20\x02\x11\x00\x00\x0c\x02\x0b\x20\x00\x20\x07\x20\x03\x6a\x28\x02\x00\x41\x7c\x71\x20\x02\x11\x00\x00\x0c\x01\x0b\x20\x07\x20\x03\x6a\x29\x03\x00\x22\x08\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x08\xa7\x20\x02\x11\x00\x00\x0b\x20\x03\x41\x08\x6a\x21\x03\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x01\x2f\x01\x06\x22\x03\x41\x01\x46\x0d\x05\x20\x00\x28\x02\x44\x20\x03\x41\x18\x6c\x6a\x28\x02\x0c\x22\x03\x45\x0d\x05\x20\x00\x20\x01\xad\x42\x80\x80\x80\x80\x70\x84\x20\x02\x20\x03\x11\x11\x00\x0f\x0b\x41\x00\x21\x05\x41\x00\x21\x03\x02\x40\x03\x40\x20\x03\x20\x01\x28\x02\x38\x4e\x0d\x01\x02\x40\x20\x01\x28\x02\x34\x20\x05\x6a\x29\x03\x00\x22\x08\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x08\xa7\x20\x02\x11\x00\x00\x0b\x20\x05\x41\x08\x6a\x21\x05\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x01\x28\x02\x30\x22\x03\x45\x0d\x04\x20\x00\x20\x03\x20\x02\x11\x00\x00\x0f\x0b\x20\x01\x2d\x00\x05\x41\x01\x71\x45\x0d\x04\x20\x01\x28\x02\x10\x29\x03\x00\x22\x08\x42\x20\x88\xa7\x41\x7e\x49\x0d\x03\x20\x00\x20\x08\xa7\x20\x02\x11\x00\x00\x0f\x0b\x02\x40\x20\x01\x28\x02\x20\x45\x0d\x00\x20\x00\x20\x01\x41\x28\x6a\x20\x02\x10\xf4\x04\x0b\x02\x40\x20\x01\x29\x03\x10\x22\x08\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x08\xa7\x20\x02\x11\x00\x00\x0b\x20\x01\x41\x18\x6a\x29\x03\x00\x22\x08\x42\x20\x88\xa7\x41\x7e\x49\x0d\x02\x20\x00\x20\x08\xa7\x20\x02\x11\x00\x00\x0f\x0b\x20\x01\x41\x2c\x6a\x28\x02\x00\x22\x03\x45\x0d\x01\x20\x00\x20\x03\x20\x02\x11\x00\x00\x0f\x0b\x20\x01\x41\xf8\x01\x6a\x21\x03\x20\x01\x41\xf4\x01\x6a\x21\x07\x02\x40\x03\x40\x20\x03\x28\x02\x00\x22\x04\x20\x07\x46\x0d\x01\x41\x00\x21\x03\x41\x08\x21\x05\x02\x40\x03\x40\x20\x03\x20\x04\x28\x02\x18\x4e\x0d\x01\x02\x40\x20\x04\x28\x02\x14\x20\x05\x6a\x22\x06\x28\x02\x00\x0d\x00\x20\x06\x41\x7c\x6a\x28\x02\x00\x22\x06\x45\x0d\x00\x20\x00\x20\x06\x20\x02\x11\x00\x00\x0b\x20\x05\x41\x14\x6a\x21\x05\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x02\x40\x20\x04\x29\x03\x38\x22\x08\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x08\xa7\x20\x02\x11\x00\x00\x0b\x02\x40\x20\x04\x29\x03\x40\x22\x08\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x08\xa7\x20\x02\x11\x00\x00\x0b\x02\x40\x20\x04\x29\x03\x58\x22\x08\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x08\xa7\x20\x02\x11\x00\x00\x0b\x02\x40\x20\x04\x29\x03\x60\x22\x08\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x08\xa7\x20\x02\x11\x00\x00\x0b\x20\x04\x41\x04\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x02\x40\x20\x01\x29\x03\xc0\x01\x22\x08\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x08\xa7\x20\x02\x11\x00\x00\x0b\x02\x40\x20\x01\x41\xc8\x01\x6a\x29\x03\x00\x22\x08\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x08\xa7\x20\x02\x11\x00\x00\x0b\x02\x40\x20\x01\x29\x03\xb0\x01\x22\x08\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x08\xa7\x20\x02\x11\x00\x00\x0b\x02\x40\x20\x01\x41\xb8\x01\x6a\x29\x03\x00\x22\x08\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x08\xa7\x20\x02\x11\x00\x00\x0b\x02\x40\x20\x01\x41\xa8\x01\x6a\x29\x03\x00\x22\x08\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x08\xa7\x20\x02\x11\x00\x00\x0b\x20\x01\x41\xd8\x00\x6a\x21\x05\x41\x00\x21\x03\x02\x40\x03\x40\x02\x40\x20\x03\x41\xc0\x00\x47\x0d\x00\x41\x00\x21\x05\x41\x00\x21\x03\x03\x40\x20\x03\x20\x00\x28\x02\x40\x4e\x0d\x03\x02\x40\x20\x01\x28\x02\x28\x20\x05\x6a\x29\x03\x00\x22\x08\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x08\xa7\x20\x02\x11\x00\x00\x0b\x20\x05\x41\x08\x6a\x21\x05\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x02\x40\x20\x05\x20\x03\x6a\x29\x03\x00\x22\x08\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x08\xa7\x20\x02\x11\x00\x00\x0b\x20\x03\x41\x08\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x02\x40\x20\x01\x41\x98\x01\x6a\x29\x03\x00\x22\x08\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x08\xa7\x20\x02\x11\x00\x00\x0b\x02\x40\x20\x01\x29\x03\xa0\x01\x22\x08\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x08\xa7\x20\x02\x11\x00\x00\x0b\x02\x40\x20\x01\x29\x03\x50\x22\x08\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x08\xa7\x20\x02\x11\x00\x00\x0b\x02\x40\x20\x01\x29\x03\x40\x22\x08\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x08\xa7\x20\x02\x11\x00\x00\x0b\x02\x40\x20\x01\x41\xc8\x00\x6a\x29\x03\x00\x22\x08\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x08\xa7\x20\x02\x11\x00\x00\x0b\x02\x40\x20\x01\x41\x38\x6a\x29\x03\x00\x22\x08\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x08\xa7\x20\x02\x11\x00\x00\x0b\x02\x40\x20\x01\x29\x03\x30\x22\x08\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x08\xa7\x20\x02\x11\x00\x00\x0b\x20\x01\x41\x24\x6a\x28\x02\x00\x22\x03\x45\x0d\x00\x20\x00\x20\x03\x20\x02\x11\x00\x00\x0b\x0f\x0b\x41\xd4\xff\x01\x41\xae\xb7\x01\x41\xa4\x2c\x41\xe9\xff\x01\x10\x4a\x00\x0b\x10\x40\x00\x0b\x95\x01\x02\x01\x7e\x02\x7f\x02\x40\x20\x01\x41\x18\x6a\x29\x03\x00\x22\x03\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x03\xa7\x20\x02\x11\x00\x00\x0b\x02\x40\x20\x01\x29\x03\x00\x22\x03\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x03\xa7\x20\x02\x11\x00\x00\x0b\x02\x40\x20\x01\x41\x3c\x6a\x28\x02\x00\x22\x04\x45\x0d\x00\x20\x01\x41\x20\x6a\x28\x02\x00\x21\x05\x03\x40\x20\x05\x20\x04\x4f\x0d\x01\x02\x40\x20\x05\x29\x03\x00\x22\x03\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x03\xa7\x20\x02\x11\x00\x00\x20\x01\x28\x02\x3c\x21\x04\x0b\x20\x05\x41\x08\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x0b\x75\x01\x03\x7f\x20\x01\x20\x01\x28\x02\x00\x22\x02\x41\x01\x6a\x36\x02\x00\x02\x40\x20\x02\x0d\x00\x20\x01\x41\x0c\x6a\x22\x02\x28\x02\x00\x22\x03\x20\x01\x28\x02\x08\x22\x04\x36\x02\x00\x20\x01\x41\x00\x36\x02\x08\x20\x04\x20\x03\x36\x02\x04\x20\x01\x20\x00\x28\x02\x50\x22\x03\x36\x02\x08\x20\x03\x20\x01\x41\x08\x6a\x22\x04\x36\x02\x04\x20\x00\x20\x04\x36\x02\x50\x20\x02\x20\x00\x41\xd0\x00\x6a\x36\x02\x00\x20\x01\x20\x01\x2d\x00\x04\x41\x0f\x71\x3a\x00\x04\x0b\x0b\x0f\x00\x20\x01\x20\x01\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x0b\x93\x01\x01\x02\x7f\x20\x00\x20\x01\x41\x10\x6a\x10\xc7\x03\x02\x40\x02\x40\x20\x01\x41\x20\x6a\x28\x02\x00\x22\x02\x45\x0d\x00\x20\x01\x41\x3c\x6a\x28\x02\x00\x22\x03\x45\x0d\x01\x02\x40\x03\x40\x20\x02\x20\x03\x4f\x0d\x01\x20\x00\x20\x02\x29\x03\x00\x10\xda\x02\x20\x02\x41\x08\x6a\x21\x02\x20\x01\x28\x02\x3c\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x41\x10\x6a\x20\x01\x28\x02\x20\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x20\x00\x20\x01\x41\x18\x6a\x29\x03\x00\x10\xda\x02\x20\x00\x20\x01\x29\x03\x00\x10\xda\x02\x0f\x0b\x41\x87\x80\x02\x41\xae\xb7\x01\x41\xc1\x94\x01\x41\x9a\x80\x02\x10\x4a\x00\x0b\x64\x01\x03\x7f\x20\x01\xa7\x28\x02\x10\x22\x03\x20\x03\x28\x02\x18\x20\x02\x71\x41\x7f\x73\x41\x02\x74\x6a\x28\x02\x00\x21\x04\x02\x40\x03\x40\x02\x40\x20\x04\x0d\x00\x41\x00\x21\x04\x0c\x02\x0b\x20\x04\x41\x03\x74\x20\x03\x6a\x22\x05\x41\x28\x6a\x21\x04\x20\x05\x41\x2c\x6a\x28\x02\x00\x20\x02\x46\x0d\x01\x20\x04\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x21\x04\x0c\x00\x0b\x00\x0b\x20\x04\x41\x00\x47\x0b\xb3\x01\x01\x03\x7f\x41\x00\x21\x04\x02\x40\x20\x03\x41\x7f\x4a\x0d\x00\x20\x02\xa7\x29\x03\x20\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x90\x7f\x52\x0d\x00\x20\x03\x41\xff\xff\xff\xff\x07\x71\x22\x03\x20\x02\xa7\x22\x05\x28\x02\x04\x22\x06\x41\xff\xff\xff\xff\x07\x71\x4f\x0d\x00\x41\x01\x21\x04\x20\x01\x45\x0d\x00\x02\x40\x02\x40\x20\x06\x41\x7f\x4a\x0d\x00\x20\x05\x20\x03\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x21\x03\x0c\x01\x0b\x20\x05\x20\x03\x6a\x41\x10\x6a\x2d\x00\x00\x21\x03\x0b\x20\x01\x41\x04\x36\x02\x00\x20\x00\x20\x03\x41\xff\xff\x03\x71\x10\xf2\x02\x21\x02\x20\x01\x42\x80\x80\x80\x80\x30\x37\x03\x18\x20\x01\x42\x80\x80\x80\x80\x30\x37\x03\x10\x20\x01\x20\x02\x37\x03\x08\x0b\x20\x04\x0b\x2c\x01\x01\x7f\x02\x40\x02\x40\x20\x02\x41\x7f\x4a\x0d\x00\x41\x00\x21\x03\x20\x02\x41\xff\xff\xff\xff\x07\x71\x20\x01\x10\xa9\x04\x49\x0d\x01\x0b\x41\x01\x21\x03\x0b\x20\x03\x0b\x88\x02\x02\x01\x7e\x04\x7f\x02\x40\x02\x40\x20\x02\x41\x7f\x4a\x0d\x00\x20\x01\xa7\x29\x03\x20\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x90\x7f\x52\x0d\x00\x20\x02\x41\xff\xff\xff\xff\x07\x71\x22\x08\x20\x07\xa7\x22\x09\x28\x02\x04\x22\x0a\x41\xff\xff\xff\xff\x07\x71\x4f\x0d\x00\x02\x40\x41\x04\x20\x06\x10\xd0\x03\x45\x0d\x00\x41\x01\x21\x02\x20\x06\x41\x80\xc0\x00\x71\x45\x0d\x02\x20\x03\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x90\x7f\x52\x0d\x00\x20\x03\xa7\x22\x0b\x29\x02\x04\x22\x01\x42\xff\xff\xff\xff\x07\x83\x42\x01\x52\x0d\x00\x02\x40\x02\x40\x20\x0a\x41\x7f\x4a\x0d\x00\x20\x09\x20\x08\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x21\x0a\x0c\x01\x0b\x20\x09\x20\x08\x6a\x41\x10\x6a\x2d\x00\x00\x21\x0a\x0b\x02\x40\x02\x40\x20\x01\xa7\x41\x7f\x4a\x0d\x00\x20\x0b\x2f\x01\x10\x21\x08\x0c\x01\x0b\x20\x0b\x2d\x00\x10\x21\x08\x0b\x20\x0a\x20\x08\x46\x0d\x02\x0b\x20\x00\x20\x06\x41\xaf\xe5\x01\x41\x00\x10\xd5\x03\x0f\x0b\x20\x00\x20\x01\x20\x02\x20\x03\x20\x04\x20\x05\x20\x06\x41\x80\x80\x08\x72\x10\xcc\x01\x21\x02\x0b\x20\x02\x0b\x6e\x01\x03\x7f\x23\x00\x41\x10\x6b\x22\x07\x24\x00\x02\x40\x02\x40\x20\x01\xa7\x22\x08\x2d\x00\x05\x41\x08\x71\x45\x0d\x00\x20\x00\x20\x07\x41\x0c\x6a\x20\x02\x10\x8e\x04\x45\x0d\x00\x20\x07\x28\x02\x0c\x20\x08\x41\x28\x6a\x28\x02\x00\x4f\x0d\x00\x41\x7f\x21\x09\x20\x00\x20\x08\x10\xd2\x03\x0d\x01\x0b\x20\x00\x20\x01\x20\x02\x20\x03\x20\x04\x20\x05\x20\x06\x41\x80\x80\x08\x72\x10\xcc\x01\x21\x09\x0b\x20\x07\x41\x10\x6a\x24\x00\x20\x09\x0b\x55\x01\x04\x7f\x20\x01\xa7\x21\x02\x41\x00\x21\x03\x41\x00\x21\x04\x02\x40\x03\x40\x20\x02\x28\x02\x24\x21\x05\x20\x04\x20\x02\x28\x02\x28\x4f\x0d\x01\x20\x00\x20\x05\x20\x03\x6a\x29\x03\x00\x10\xda\x02\x20\x03\x41\x08\x6a\x21\x03\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x00\x41\x10\x6a\x20\x05\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x55\x01\x03\x7f\x20\x01\xa7\x21\x03\x41\x00\x21\x04\x41\x00\x21\x05\x02\x40\x03\x40\x20\x05\x20\x03\x28\x02\x28\x4f\x0d\x01\x02\x40\x20\x03\x28\x02\x24\x20\x04\x6a\x29\x03\x00\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x20\x04\x41\x08\x6a\x21\x04\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x0b\x1c\x01\x01\x7f\x20\x00\x20\x01\xa7\x22\x02\x29\x03\x20\x10\xda\x02\x20\x02\x42\x80\x80\x80\x80\x30\x37\x03\x20\x0b\x20\x00\x02\x40\x20\x01\xa7\x29\x03\x20\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x0b\x17\x01\x01\x7f\x02\x40\x20\x01\xa7\x28\x02\x20\x22\x02\x45\x0d\x00\x20\x02\x10\xdd\x02\x0b\x0b\x1b\x01\x01\x7f\x02\x40\x20\x01\xa7\x28\x02\x20\x22\x03\x45\x0d\x00\x20\x00\x20\x03\x20\x02\x11\x00\x00\x0b\x0b\x91\x01\x01\x04\x7f\x02\x40\x20\x01\xa7\x22\x02\x41\x28\x6a\x28\x02\x00\x22\x03\x45\x0d\x00\x20\x00\x20\x03\xad\x42\x80\x80\x80\x80\x70\x84\x10\xda\x02\x0b\x02\x40\x20\x02\x28\x02\x20\x22\x04\x45\x0d\x00\x02\x40\x20\x02\x28\x02\x24\x22\x05\x45\x0d\x00\x41\x00\x21\x02\x20\x05\x21\x03\x02\x40\x03\x40\x20\x02\x20\x04\x28\x02\x3c\x4e\x0d\x01\x20\x00\x20\x03\x28\x02\x00\x10\xde\x02\x20\x03\x41\x04\x6a\x21\x03\x20\x02\x41\x01\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x20\x00\x41\x10\x6a\x20\x05\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x20\x00\x20\x04\xad\x42\x80\x80\x80\x80\x60\x84\x10\xda\x02\x0b\x0b\x8d\x01\x01\x04\x7f\x20\x01\xa7\x22\x03\x41\x24\x6a\x28\x02\x00\x21\x04\x20\x03\x28\x02\x20\x21\x05\x02\x40\x20\x03\x41\x28\x6a\x28\x02\x00\x22\x03\x45\x0d\x00\x20\x00\x20\x03\x20\x02\x11\x00\x00\x0b\x02\x40\x20\x05\x45\x0d\x00\x02\x40\x20\x04\x45\x0d\x00\x41\x00\x21\x03\x03\x40\x20\x03\x20\x05\x28\x02\x3c\x4e\x0d\x01\x02\x40\x20\x04\x28\x02\x00\x22\x06\x45\x0d\x00\x20\x06\x2d\x00\x05\x41\x01\x71\x45\x0d\x00\x20\x00\x20\x06\x20\x02\x11\x00\x00\x0b\x20\x04\x41\x04\x6a\x21\x04\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x20\x05\x20\x02\x11\x00\x00\x0b\x0b\x63\x01\x03\x7f\x20\x00\x20\x01\xa7\x28\x02\x20\x22\x02\x29\x03\x00\x10\xda\x02\x20\x00\x20\x02\x29\x03\x08\x10\xda\x02\x20\x02\x41\x18\x6a\x21\x03\x41\x00\x21\x04\x02\x40\x03\x40\x20\x04\x20\x02\x28\x02\x10\x4e\x0d\x01\x20\x00\x20\x03\x29\x03\x00\x10\xda\x02\x20\x03\x41\x08\x6a\x21\x03\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x00\x41\x10\x6a\x20\x02\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x8d\x01\x01\x03\x7f\x02\x40\x20\x01\xa7\x28\x02\x20\x22\x03\x29\x03\x00\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x02\x40\x20\x03\x29\x03\x08\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x20\x03\x41\x18\x6a\x21\x04\x41\x00\x21\x05\x02\x40\x03\x40\x20\x05\x20\x03\x28\x02\x10\x4e\x0d\x01\x02\x40\x20\x04\x29\x03\x00\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x20\x04\x41\x08\x6a\x21\x04\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x0b\x6e\x01\x03\x7f\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x02\x2f\x01\x06\x41\x0f\x47\x0d\x00\x20\x02\x28\x02\x20\x22\x03\x45\x0d\x00\x20\x03\x41\x08\x6a\x21\x04\x41\x00\x21\x02\x02\x40\x03\x40\x20\x02\x20\x03\x2d\x00\x05\x4f\x0d\x01\x20\x00\x20\x04\x29\x03\x00\x10\xda\x02\x20\x04\x41\x08\x6a\x21\x04\x20\x02\x41\x01\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x20\x00\x41\x10\x6a\x20\x03\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x0b\x6f\x01\x03\x7f\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x03\x2f\x01\x06\x41\x0f\x47\x0d\x00\x20\x03\x28\x02\x20\x22\x04\x45\x0d\x00\x20\x04\x41\x08\x6a\x21\x05\x41\x00\x21\x03\x03\x40\x20\x03\x20\x04\x2d\x00\x05\x4f\x0d\x01\x02\x40\x20\x05\x29\x03\x00\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x20\x05\x41\x08\x6a\x21\x05\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x0b\x23\x01\x01\x7f\x20\x00\x20\x01\xa7\x28\x02\x20\x22\x02\x29\x03\x00\x10\xda\x02\x20\x00\x41\x10\x6a\x20\x02\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x23\x00\x02\x40\x20\x01\xa7\x28\x02\x20\x29\x03\x00\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x0b\x2e\x01\x01\x7f\x20\x00\x20\x01\xa7\x22\x02\x41\x24\x6a\x35\x02\x00\x42\x80\x80\x80\x80\x90\x7f\x84\x10\xda\x02\x20\x00\x20\x02\x35\x02\x20\x42\x80\x80\x80\x80\x90\x7f\x84\x10\xda\x02\x0b\x6d\x01\x02\x7f\x02\x40\x20\x01\xa7\x28\x02\x20\x22\x02\x45\x0d\x00\x02\x40\x02\x40\x20\x02\x2d\x00\x05\x45\x0d\x00\x20\x00\x41\xbc\x01\x6a\x28\x02\x00\x22\x03\x45\x0d\x00\x20\x00\x41\xc4\x01\x6a\x28\x02\x00\x20\x02\x28\x02\x08\x20\x03\x11\x00\x00\x0c\x01\x0b\x20\x02\x28\x02\x18\x22\x03\x45\x0d\x00\x20\x00\x20\x02\x28\x02\x14\x20\x02\x28\x02\x08\x20\x03\x11\x06\x00\x0b\x20\x00\x41\x10\x6a\x20\x02\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x0b\x6c\x01\x03\x7f\x02\x40\x20\x01\xa7\x28\x02\x20\x22\x02\x45\x0d\x00\x20\x02\x28\x02\x0c\x22\x03\xad\x42\x80\x80\x80\x80\x70\x84\x21\x01\x02\x40\x20\x03\x2d\x00\x05\x41\x02\x71\x0d\x00\x20\x02\x28\x02\x04\x22\x03\x20\x02\x28\x02\x00\x22\x04\x36\x02\x00\x20\x04\x20\x03\x36\x02\x04\x20\x02\x41\x00\x36\x02\x00\x20\x02\x41\x00\x36\x02\x04\x0b\x20\x00\x20\x01\x10\xda\x02\x20\x00\x41\x10\x6a\x20\x02\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x0b\x1e\x01\x01\x7f\x02\x40\x20\x01\xa7\x28\x02\x20\x22\x03\x45\x0d\x00\x20\x00\x20\x03\x28\x02\x0c\x20\x02\x11\x00\x00\x0b\x0b\x39\x01\x02\x7f\x41\x00\x21\x02\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x03\x2f\x01\x06\x41\x23\x47\x0d\x00\x20\x03\x28\x02\x20\x21\x02\x0b\x20\x00\x41\x10\x6a\x20\x02\x20\x00\x28\x02\x04\x11\x00\x00\x0b\xe4\x02\x01\x06\x7f\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x02\x2f\x01\x06\x41\x25\x47\x0d\x00\x20\x02\x28\x02\x20\x22\x03\x45\x0d\x00\x41\x08\x21\x02\x02\x40\x03\x40\x02\x40\x20\x02\x41\xd4\x00\x47\x0d\x00\x41\x00\x21\x04\x0c\x02\x0b\x02\x40\x20\x03\x20\x02\x6a\x28\x02\x00\x22\x05\x45\x0d\x00\x20\x00\x20\x05\xad\x42\x80\x80\x80\x80\x70\x84\x10\xda\x02\x0b\x20\x02\x41\x04\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x03\x40\x02\x40\x02\x40\x20\x04\x20\x03\x28\x02\x54\x4e\x0d\x00\x20\x03\x28\x02\x58\x20\x04\x41\x3c\x6c\x6a\x21\x06\x41\x04\x21\x02\x03\x40\x20\x02\x41\x3c\x46\x0d\x02\x02\x40\x20\x06\x20\x02\x6a\x28\x02\x00\x22\x05\x45\x0d\x00\x20\x00\x20\x05\xad\x42\x80\x80\x80\x80\x70\x84\x10\xda\x02\x0b\x20\x02\x41\x04\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x20\x00\x41\x10\x6a\x22\x07\x20\x03\x28\x02\x58\x20\x00\x28\x02\x04\x11\x00\x00\x41\x00\x21\x04\x02\x40\x03\x40\x20\x04\x20\x03\x28\x02\x5c\x4e\x0d\x01\x20\x03\x28\x02\x60\x20\x04\x41\x3c\x6c\x6a\x21\x06\x41\x04\x21\x02\x02\x40\x03\x40\x20\x02\x41\x3c\x46\x0d\x01\x02\x40\x20\x06\x20\x02\x6a\x28\x02\x00\x22\x05\x45\x0d\x00\x20\x00\x20\x05\xad\x42\x80\x80\x80\x80\x70\x84\x10\xda\x02\x0b\x20\x02\x41\x04\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x07\x20\x03\x28\x02\x60\x20\x00\x28\x02\x04\x11\x00\x00\x20\x07\x20\x03\x20\x00\x28\x02\x04\x11\x00\x00\x0c\x02\x0b\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x0b\x9e\x02\x01\x05\x7f\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x03\x2f\x01\x06\x41\x25\x47\x0d\x00\x20\x03\x28\x02\x20\x22\x04\x45\x0d\x00\x41\x08\x21\x03\x02\x40\x03\x40\x02\x40\x20\x03\x41\xd4\x00\x47\x0d\x00\x41\x00\x21\x05\x0c\x02\x0b\x02\x40\x20\x04\x20\x03\x6a\x28\x02\x00\x22\x06\x45\x0d\x00\x20\x00\x20\x06\x20\x02\x11\x00\x00\x0b\x20\x03\x41\x04\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x03\x40\x02\x40\x20\x05\x20\x04\x28\x02\x54\x48\x0d\x00\x41\x00\x21\x05\x03\x40\x20\x05\x20\x04\x28\x02\x5c\x4e\x0d\x03\x20\x04\x28\x02\x60\x20\x05\x41\x3c\x6c\x6a\x21\x07\x41\x04\x21\x03\x02\x40\x03\x40\x20\x03\x41\x3c\x46\x0d\x01\x02\x40\x20\x07\x20\x03\x6a\x28\x02\x00\x22\x06\x45\x0d\x00\x20\x00\x20\x06\x20\x02\x11\x00\x00\x0b\x20\x03\x41\x04\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x04\x28\x02\x58\x20\x05\x41\x3c\x6c\x6a\x21\x07\x41\x04\x21\x03\x02\x40\x03\x40\x20\x03\x41\x3c\x46\x0d\x01\x02\x40\x20\x07\x20\x03\x6a\x28\x02\x00\x22\x06\x45\x0d\x00\x20\x00\x20\x06\x20\x02\x11\x00\x00\x0b\x20\x03\x41\x04\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x0b\xa9\x01\x01\x06\x7f\x02\x40\x20\x01\xa7\x28\x02\x20\x22\x02\x45\x0d\x00\x20\x00\x41\x10\x6a\x21\x03\x20\x02\x41\x04\x6a\x21\x04\x20\x02\x41\x08\x6a\x28\x02\x00\x21\x05\x02\x40\x03\x40\x20\x05\x20\x04\x46\x0d\x01\x20\x05\x28\x02\x04\x21\x06\x20\x05\x41\x70\x6a\x21\x07\x02\x40\x20\x05\x41\x74\x6a\x28\x02\x00\x0d\x00\x02\x40\x02\x40\x20\x02\x28\x02\x00\x45\x0d\x00\x20\x07\x10\x93\x05\x0c\x01\x0b\x20\x00\x20\x05\x29\x03\x10\x10\xda\x02\x0b\x20\x00\x20\x05\x29\x03\x18\x10\xda\x02\x0b\x20\x03\x20\x07\x20\x00\x28\x02\x04\x11\x00\x00\x20\x06\x21\x05\x0c\x00\x0b\x00\x0b\x20\x03\x20\x02\x28\x02\x10\x20\x00\x28\x02\x04\x11\x00\x00\x20\x03\x20\x02\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x0b\x4c\x01\x03\x7f\x20\x00\x28\x02\x20\x41\x18\x6a\x21\x01\x02\x40\x03\x40\x20\x01\x22\x02\x28\x02\x00\x22\x03\x45\x0d\x01\x20\x03\x41\x0c\x6a\x21\x01\x20\x03\x20\x00\x47\x0d\x00\x0b\x20\x02\x20\x01\x28\x02\x00\x36\x02\x00\x0f\x0b\x41\xde\x80\x02\x41\xae\xb7\x01\x41\xdb\xe5\x02\x41\xea\x80\x02\x10\x4a\x00\x0b\x7a\x01\x03\x7f\x02\x40\x20\x01\xa7\x28\x02\x20\x22\x03\x45\x0d\x00\x20\x03\x41\x08\x6a\x21\x04\x20\x03\x41\x04\x6a\x21\x05\x03\x40\x20\x04\x28\x02\x00\x22\x04\x20\x05\x46\x0d\x01\x02\x40\x20\x03\x28\x02\x00\x0d\x00\x20\x04\x29\x03\x10\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x02\x40\x20\x04\x29\x03\x18\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x20\x04\x41\x04\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x0b\x5e\x01\x02\x7f\x02\x40\x20\x01\xa7\x28\x02\x20\x22\x02\x45\x0d\x00\x02\x40\x20\x02\x29\x03\x00\x22\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x2d\x00\x05\x41\x02\x71\x0d\x00\x20\x02\x28\x02\x0c\x22\x03\x45\x0d\x00\x20\x00\x20\x03\x10\x96\x05\x20\x02\x29\x03\x00\x21\x01\x0b\x20\x00\x20\x01\x10\xda\x02\x20\x00\x41\x10\x6a\x20\x02\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x0b\x73\x01\x03\x7f\x20\x01\x20\x01\x28\x02\x00\x41\x7f\x6a\x22\x02\x36\x02\x00\x02\x40\x02\x40\x20\x02\x0d\x00\x20\x01\x28\x02\x04\x45\x0d\x01\x20\x01\x41\x14\x6a\x22\x02\x28\x02\x00\x22\x03\x20\x01\x28\x02\x10\x22\x04\x36\x02\x00\x20\x04\x20\x03\x36\x02\x04\x20\x01\x41\x00\x36\x02\x10\x20\x02\x41\x00\x36\x02\x00\x20\x00\x41\x10\x6a\x20\x01\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x0f\x0b\x41\xc2\x80\x02\x41\xae\xb7\x01\x41\xfe\xe5\x02\x41\xcc\x80\x02\x10\x4a\x00\x0b\x2c\x01\x01\x7f\x02\x40\x20\x01\xa7\x28\x02\x20\x22\x03\x45\x0d\x00\x20\x03\x29\x03\x00\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x0b\x2b\x01\x01\x7f\x02\x40\x20\x01\xa7\x28\x02\x20\x22\x02\x45\x0d\x00\x20\x00\x20\x02\x29\x03\x00\x10\xda\x02\x20\x00\x41\x10\x6a\x20\x02\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x0b\x2c\x01\x01\x7f\x02\x40\x20\x01\xa7\x28\x02\x20\x22\x03\x45\x0d\x00\x20\x03\x29\x03\x00\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x0b\x35\x01\x01\x7f\x02\x40\x20\x01\xa7\x28\x02\x20\x22\x02\x45\x0d\x00\x20\x00\x20\x02\x29\x03\x00\x10\xda\x02\x20\x00\x20\x02\x29\x03\x08\x10\xda\x02\x20\x00\x41\x10\x6a\x20\x02\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x0b\x49\x01\x01\x7f\x02\x40\x20\x01\xa7\x28\x02\x20\x22\x03\x45\x0d\x00\x02\x40\x20\x03\x29\x03\x00\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x20\x03\x29\x03\x08\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x0b\x3f\x01\x01\x7f\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x02\x2f\x01\x06\x41\x2f\x47\x0d\x00\x20\x02\x28\x02\x20\x22\x02\x45\x0d\x00\x20\x00\x20\x02\x10\xf1\x04\x20\x00\x41\x10\x6a\x20\x02\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x0b\x28\x01\x01\x7f\x02\x40\x20\x01\xa7\x28\x02\x20\x22\x03\x45\x0d\x00\x20\x03\x28\x02\x00\x41\x04\x46\x0d\x00\x20\x00\x20\x03\x41\x08\x6a\x20\x02\x10\xf4\x04\x0b\x0b\x5e\x01\x02\x7f\x02\x40\x20\x01\x45\x0d\x00\x41\x00\x21\x02\x02\x40\x20\x00\x28\x02\x04\x22\x03\x20\x01\x6a\x20\x00\x28\x02\x08\x4b\x0d\x00\x20\x01\x10\x39\x22\x01\x45\x0d\x00\x20\x00\x20\x03\x41\x08\x6a\x36\x02\x04\x20\x00\x20\x00\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x20\x01\x21\x02\x0b\x20\x02\x0f\x0b\x41\xa0\x81\x02\x41\xae\xb7\x01\x41\x95\x0d\x41\xaa\x81\x02\x10\x4a\x00\x0b\x22\x00\x20\x00\x10\x9a\x09\x20\x00\x41\x10\x6a\x42\x00\x37\x02\x00\x20\x00\x41\x08\x6a\x42\x00\x37\x02\x00\x20\x00\x42\x00\x37\x02\x00\x0b\x28\x00\x02\x40\x20\x01\x45\x0d\x00\x20\x00\x20\x00\x28\x02\x00\x41\x7f\x6a\x36\x02\x00\x20\x00\x20\x00\x28\x02\x04\x41\x78\x6a\x36\x02\x04\x20\x01\x10\x3b\x0b\x0b\x6a\x01\x01\x7f\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x0d\x00\x20\x02\x0d\x01\x0c\x03\x0b\x02\x40\x20\x02\x0d\x00\x20\x00\x20\x00\x28\x02\x00\x41\x7f\x6a\x36\x02\x00\x20\x00\x20\x00\x28\x02\x04\x41\x78\x6a\x36\x02\x04\x20\x01\x10\x3b\x0c\x03\x0b\x41\x00\x21\x03\x20\x00\x28\x02\x04\x20\x02\x6a\x20\x00\x28\x02\x08\x4b\x0d\x01\x20\x01\x20\x02\x10\x3d\x0f\x0b\x20\x00\x20\x02\x10\x9e\x05\x21\x03\x0b\x20\x03\x0f\x0b\x41\x00\x0b\x85\x02\x01\x02\x7e\x02\x40\x20\x01\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x02\x40\x02\x40\x20\x00\x20\x01\x41\x36\x20\x01\x41\x00\x10\xb4\x01\x22\x04\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x41\x94\x01\x10\xc5\x01\x21\x04\x0c\x01\x0b\x20\x00\x20\x04\x10\xf2\x03\x21\x04\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x02\x40\x20\x04\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x02\x40\x20\x00\x20\x01\x41\x33\x20\x01\x41\x00\x10\xb4\x01\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x41\x2f\x10\xc5\x01\x21\x01\x0c\x01\x0b\x20\x00\x20\x01\x10\xf2\x03\x21\x01\x0b\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x04\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x02\x40\x20\x04\x10\xa3\x05\x0d\x00\x20\x01\x10\xa3\x05\x0d\x00\x20\x00\x41\xd2\xc7\x01\x20\x04\x41\x8c\x83\x02\x10\xc1\x03\x21\x04\x0b\x20\x00\x20\x04\x20\x01\x10\xae\x03\x21\x05\x0b\x20\x05\x0b\x30\x01\x01\x7f\x41\x00\x21\x01\x02\x40\x20\x00\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x90\x7f\x52\x0d\x00\x20\x00\xa7\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x45\x21\x01\x0b\x20\x01\x0b\xee\x01\x01\x03\x7f\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x02\x40\x20\x01\xa7\x22\x03\x2f\x01\x06\x41\x30\x47\x0d\x00\x41\x7f\x21\x03\x20\x00\x20\x02\x41\x08\x6a\x20\x01\x41\xe2\x00\x10\xe3\x03\x22\x04\x45\x0d\x02\x02\x40\x20\x02\x29\x03\x08\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x20\x04\x29\x03\x00\x10\xa4\x05\x21\x03\x0c\x03\x0b\x20\x00\x20\x01\x20\x04\x29\x03\x08\x41\x01\x20\x04\x10\xef\x02\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x20\x00\x20\x01\x10\x9a\x03\x22\x03\x45\x0d\x01\x02\x40\x20\x00\x20\x04\x29\x03\x00\x10\xe4\x03\x22\x04\x41\x00\x4e\x0d\x00\x20\x04\x21\x03\x0c\x03\x0b\x20\x04\x45\x0d\x02\x20\x00\x41\xa7\xa0\x02\x41\x00\x10\xb2\x02\x41\x7f\x21\x03\x0c\x02\x0b\x20\x03\x20\x03\x2d\x00\x05\x41\xfe\x01\x71\x3a\x00\x05\x41\x01\x21\x03\x0c\x01\x0b\x41\x00\x21\x03\x0b\x20\x02\x41\x10\x6a\x24\x00\x20\x03\x0b\x0d\x00\x20\x00\x20\x01\x20\x01\x10\x71\x10\xf4\x03\x0b\x93\x01\x01\x01\x7f\x41\x7f\x21\x02\x02\x40\x20\x00\x28\x02\x14\x0d\x00\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x90\x7f\x51\x0d\x00\x02\x40\x20\x00\x28\x02\x00\x20\x01\x10\xe6\x02\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x10\xbe\x04\x41\x7f\x0f\x0b\x20\x00\x20\x01\xa7\x22\x02\x41\x00\x20\x02\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x10\xf5\x03\x21\x02\x20\x00\x28\x02\x00\x20\x01\x10\xcd\x01\x20\x02\x0f\x0b\x20\x00\x20\x01\xa7\x22\x02\x41\x00\x20\x02\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x10\xf5\x03\x21\x02\x0b\x20\x02\x0b\x6c\x00\x02\x40\x02\x40\x20\x02\x42\x80\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x02\x42\xff\xff\xff\xff\x0f\x83\x21\x02\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x02\xb9\xbd\x22\x02\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x02\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x02\x0b\x20\x00\x20\x01\x20\x02\x20\x03\x41\x87\x80\x01\x10\xb8\x03\x0b\x5d\x01\x01\x7e\x02\x40\x02\x40\x20\x02\x41\x00\x48\x0d\x00\x20\x02\xad\x21\x04\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x02\xb8\xbd\x22\x04\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x04\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x04\x0b\x20\x00\x20\x01\x20\x04\x20\x03\x41\x80\x80\x01\x10\xba\x03\x0b\x0c\x00\x20\x00\x20\x01\x10\xc0\x01\x10\x9a\x03\x0b\xda\x03\x02\x02\x7f\x01\x7e\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x06\x2f\x01\x06\x41\x2f\x46\x0d\x01\x0b\x20\x04\x41\x01\x36\x02\x00\x0c\x01\x0b\x20\x06\x28\x02\x20\x21\x06\x20\x04\x41\x01\x36\x02\x00\x20\x06\x0d\x01\x0b\x20\x00\x41\x86\x9c\x02\x41\x00\x10\xb2\x02\x0c\x01\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x06\x28\x02\x00\x41\x7f\x6a\x22\x07\x41\x03\x4b\x0d\x00\x20\x07\x0e\x04\x02\x02\x06\x01\x02\x0b\x20\x05\x45\x0d\x02\x20\x00\x41\x10\x6a\x28\x02\x00\x20\x06\x10\xab\x05\x0b\x20\x05\x41\x7f\x6a\x22\x04\x41\x01\x4d\x0d\x03\x42\x80\x80\x80\x80\x30\x0f\x0b\x20\x03\x29\x03\x00\x10\xc0\x01\x21\x01\x02\x40\x20\x05\x41\x02\x47\x0d\x00\x41\x01\x21\x03\x20\x06\x28\x02\x00\x41\x01\x47\x0d\x00\x20\x00\x20\x01\x10\xc9\x02\x0c\x02\x0b\x20\x06\x28\x02\x44\x22\x03\x20\x05\xad\x37\x03\x00\x20\x03\x41\x78\x6a\x20\x01\x37\x03\x00\x20\x06\x20\x03\x41\x08\x6a\x36\x02\x44\x0b\x41\x00\x21\x03\x0b\x20\x06\x41\x03\x36\x02\x00\x20\x06\x20\x03\x36\x02\x14\x20\x00\x20\x06\x41\x08\x6a\x10\xf0\x04\x21\x01\x20\x06\x41\x01\x36\x02\x00\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x41\x10\x6a\x28\x02\x00\x20\x06\x10\xab\x05\x20\x01\x0f\x0b\x20\x06\x28\x02\x44\x41\x78\x6a\x22\x05\x29\x03\x00\x21\x08\x20\x05\x42\x80\x80\x80\x80\x30\x37\x03\x00\x02\x40\x20\x01\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x02\x40\x20\x01\xa7\x41\x02\x47\x0d\x00\x20\x04\x41\x02\x36\x02\x00\x20\x06\x41\x02\x36\x02\x00\x20\x08\x0f\x0b\x20\x04\x41\x00\x36\x02\x00\x20\x08\x0f\x0b\x20\x00\x20\x01\x10\xcd\x01\x20\x00\x41\x10\x6a\x28\x02\x00\x20\x06\x10\xab\x05\x20\x08\x0f\x0b\x02\x40\x02\x40\x20\x04\x0e\x02\x00\x01\x00\x0b\x20\x03\x29\x03\x00\x10\xc0\x01\x0f\x0b\x20\x00\x20\x03\x29\x03\x00\x10\xc0\x01\x10\xc9\x02\x0c\x01\x0b\x20\x00\x41\x96\x9c\x02\x41\x00\x10\xb2\x02\x0b\x42\x80\x80\x80\x80\xe0\x00\x0b\x09\x00\x20\x00\x20\x01\x10\xf1\x04\x0b\x3b\x01\x02\x7e\x42\x80\x80\x80\x80\xe0\x00\x21\x04\x02\x40\x20\x00\x20\x03\x29\x03\x00\x10\xe6\x02\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x05\xa7\x41\x02\x10\xde\x03\x21\x04\x0b\x20\x04\x0b\x74\x01\x02\x7e\x02\x40\x20\x03\x29\x03\x00\x22\x04\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x80\x7f\x51\x0d\x00\x20\x00\x41\xfc\xdf\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x42\x80\x80\x80\x80\x30\x21\x05\x02\x40\x20\x04\xa7\x29\x02\x04\x42\x80\x80\x80\x80\x80\x80\x80\x80\x40\x83\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x52\x0d\x00\x20\x04\x42\xff\xff\xff\xff\x0f\x83\x42\x80\x80\x80\x80\x90\x7f\x84\x10\xc0\x01\x21\x05\x0b\x20\x05\x0b\x60\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x04\x20\x00\x20\x01\x10\xaf\x05\x22\x01\x37\x03\x08\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x21\x05\x0c\x01\x0b\x20\x00\x42\x80\x80\x80\x80\x30\x41\x01\x20\x04\x41\x08\x6a\x10\xda\x01\x21\x05\x20\x00\x20\x01\x10\xcd\x01\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x61\x01\x01\x7f\x02\x40\x02\x40\x20\x01\x42\x20\x88\xa7\x22\x02\x41\x7f\x46\x0d\x00\x20\x02\x41\x78\x47\x0d\x01\x20\x01\x10\xc0\x01\x0f\x0b\x20\x01\xa7\x22\x02\x2f\x01\x06\x41\x07\x47\x0d\x00\x20\x02\x29\x03\x20\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x80\x7f\x52\x0d\x00\x20\x01\x10\xc0\x01\x0f\x0b\x20\x00\x41\xfc\xdf\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x0b\x09\x00\x20\x00\x20\x01\x10\xaf\x05\x0b\x5c\x02\x01\x7e\x01\x7f\x02\x40\x20\x00\x20\x01\x10\xaf\x05\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x0f\x0b\x42\x80\x80\x80\x80\x30\x21\x02\x02\x40\x20\x01\xa7\x22\x03\x28\x02\x04\x41\x80\x80\x80\x80\x78\x46\x0d\x00\x20\x00\x20\x00\x28\x02\x10\x20\x03\x10\xdd\x03\x10\xc5\x01\x21\x02\x0b\x20\x00\x20\x01\x10\xcd\x01\x20\x02\x0b\x20\x00\x20\x00\x20\x03\x29\x03\x00\x20\x02\x41\x7f\x6a\x41\x00\x20\x02\x41\x00\x4a\x1b\x20\x03\x41\x08\x6a\x41\x02\x10\x87\x03\x0b\x9e\x01\x02\x01\x7f\x03\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x03\x29\x03\x08\x21\x05\x20\x03\x29\x03\x00\x22\x06\x21\x07\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x41\x03\x48\x0d\x00\x02\x40\x20\x03\x29\x03\x10\x22\x07\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x07\xa7\x2d\x00\x05\x41\x10\x71\x0d\x01\x0b\x20\x00\x41\xff\xe4\x01\x41\x00\x10\xb2\x02\x0c\x01\x0b\x20\x00\x20\x04\x41\x0c\x6a\x20\x05\x10\x8f\x03\x22\x03\x0d\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x0c\x01\x0b\x20\x00\x20\x06\x20\x07\x20\x04\x28\x02\x0c\x22\x02\x20\x03\x10\xdc\x03\x21\x07\x20\x00\x20\x03\x20\x02\x10\x90\x03\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x07\x0b\x88\x01\x02\x03\x7e\x01\x7f\x02\x40\x20\x03\x29\x03\x00\x22\x05\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x03\x29\x03\x10\x21\x06\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x02\x40\x20\x00\x20\x03\x29\x03\x08\x10\xa3\x03\x22\x03\x45\x0d\x00\x20\x00\x20\x05\x20\x03\x20\x06\x20\x04\x45\x41\x0e\x74\x10\xb5\x05\x21\x08\x20\x00\x20\x03\x10\xe4\x02\x20\x08\x41\x00\x48\x0d\x00\x02\x40\x20\x04\x45\x0d\x00\x20\x08\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x0f\x0b\x20\x05\x10\xc0\x01\x21\x07\x0b\x20\x07\x0b\x59\x01\x01\x7f\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x02\x40\x02\x40\x20\x00\x20\x05\x20\x03\x10\xc1\x05\x41\x00\x4e\x0d\x00\x41\x7f\x21\x02\x0c\x01\x0b\x20\x00\x20\x01\x20\x02\x20\x05\x29\x03\x08\x20\x05\x29\x03\x10\x20\x05\x29\x03\x18\x20\x05\x28\x02\x00\x20\x04\x72\x10\xcc\x01\x21\x02\x20\x00\x20\x05\x10\x81\x04\x0b\x20\x05\x41\x20\x6a\x24\x00\x20\x02\x0b\x6d\x02\x02\x7e\x01\x7f\x02\x40\x20\x03\x29\x03\x00\x22\x04\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x02\x40\x20\x00\x20\x03\x29\x03\x08\x10\xa3\x03\x22\x03\x45\x0d\x00\x20\x00\x20\x04\x20\x03\x41\x00\x10\xa1\x03\x21\x06\x20\x00\x20\x03\x10\xe4\x02\x20\x06\x41\x00\x48\x0d\x00\x20\x06\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x21\x05\x0b\x20\x05\x0b\x6b\x01\x03\x7e\x02\x40\x02\x40\x02\x40\x20\x03\x29\x03\x00\x22\x04\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x0c\x01\x0b\x20\x03\x29\x03\x08\x21\x05\x20\x04\x21\x06\x02\x40\x20\x02\x41\x03\x48\x0d\x00\x20\x03\x29\x03\x10\x21\x06\x0b\x20\x00\x20\x05\x10\xa3\x03\x22\x03\x0d\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x00\x20\x04\x20\x03\x20\x06\x41\x00\x10\xb4\x01\x21\x04\x20\x00\x20\x03\x10\xe4\x02\x20\x04\x0b\xd0\x03\x02\x01\x7f\x02\x7e\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x20\x03\x29\x03\x00\x21\x06\x02\x40\x02\x40\x02\x40\x02\x40\x20\x04\x45\x0d\x00\x02\x40\x20\x06\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x0c\x03\x0b\x20\x06\x10\xc0\x01\x21\x07\x0c\x01\x0b\x20\x00\x20\x06\x10\xfe\x02\x22\x07\x21\x06\x20\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x0b\x02\x40\x20\x00\x20\x03\x29\x03\x08\x10\xa3\x03\x22\x03\x45\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x06\x02\x40\x02\x40\x20\x07\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x00\x20\x05\x20\x07\xa7\x20\x03\x10\xea\x03\x22\x04\x41\x00\x48\x0d\x02\x20\x04\x45\x0d\x00\x20\x00\x10\xc1\x01\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x02\x40\x02\x40\x20\x05\x2d\x00\x00\x41\x10\x71\x45\x0d\x00\x20\x00\x20\x06\x41\xc1\x00\x20\x05\x29\x03\x10\x10\xc0\x01\x41\x87\x80\x01\x10\xc4\x01\x41\x00\x48\x0d\x03\x20\x00\x20\x06\x41\xc2\x00\x20\x05\x29\x03\x18\x10\xc0\x01\x41\x87\x80\x01\x10\xc4\x01\x41\x00\x4e\x0d\x01\x0c\x03\x0b\x20\x00\x20\x06\x41\xc0\x00\x20\x05\x29\x03\x08\x10\xc0\x01\x41\x87\x80\x01\x10\xc4\x01\x41\x00\x48\x0d\x02\x20\x00\x20\x06\x41\x3e\x20\x05\x35\x02\x00\x42\x01\x88\x42\x01\x83\x42\x80\x80\x80\x80\x10\x84\x41\x87\x80\x01\x10\xc4\x01\x41\x00\x48\x0d\x02\x0b\x20\x00\x20\x06\x41\x3f\x20\x05\x35\x02\x00\x42\x02\x88\x42\x01\x83\x42\x80\x80\x80\x80\x10\x84\x41\x87\x80\x01\x10\xc4\x01\x41\x00\x48\x0d\x01\x20\x00\x20\x06\x41\x3d\x20\x05\x35\x02\x00\x42\x01\x83\x42\x80\x80\x80\x80\x10\x84\x41\x87\x80\x01\x10\xc4\x01\x41\x00\x48\x0d\x01\x20\x00\x20\x05\x10\x81\x04\x0b\x20\x00\x20\x03\x10\xe4\x02\x20\x00\x20\x07\x10\xcd\x01\x0c\x03\x0b\x20\x00\x20\x05\x10\x81\x04\x20\x00\x20\x06\x10\xcd\x01\x0b\x20\x00\x20\x03\x10\xe4\x02\x20\x00\x20\x07\x10\xcd\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x0b\x20\x05\x41\x20\x6a\x24\x00\x20\x06\x0b\x3e\x01\x01\x7e\x02\x40\x20\x03\x29\x03\x00\x22\x05\x42\x20\x88\xa7\x22\x03\x41\x7f\x46\x0d\x00\x02\x40\x20\x04\x0d\x00\x20\x03\x41\x7e\x71\x41\x02\x47\x0d\x01\x0b\x20\x00\x10\x8a\x03\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x00\x20\x05\x10\x92\x03\x0b\x6b\x02\x02\x7e\x01\x7f\x02\x40\x20\x03\x29\x03\x00\x22\x04\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x02\x40\x20\x00\x20\x03\x29\x03\x08\x10\xa3\x03\x22\x03\x45\x0d\x00\x20\x00\x20\x04\x20\x03\x10\x96\x03\x21\x06\x20\x00\x20\x03\x10\xe4\x02\x20\x06\x41\x00\x48\x0d\x00\x20\x06\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x21\x05\x0b\x20\x05\x0b\x55\x01\x01\x7e\x02\x40\x02\x40\x02\x40\x20\x03\x29\x03\x00\x22\x05\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x02\x40\x20\x04\x0d\x00\x42\x80\x80\x80\x80\x10\x0f\x0b\x20\x00\x10\x8a\x03\x0c\x01\x0b\x20\x00\x20\x05\x10\xe4\x03\x22\x03\x41\x00\x4e\x0d\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x03\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x0b\x2f\x01\x01\x7e\x02\x40\x20\x03\x29\x03\x00\x22\x04\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x00\x20\x04\x41\x03\x41\x00\x10\xbd\x05\x0b\xa5\x04\x02\x0a\x7f\x03\x7e\x23\x00\x41\x30\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x0e\x02\x40\x20\x00\x20\x01\x10\xfe\x02\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x0e\x02\x40\x02\x40\x20\x00\x20\x04\x41\x2c\x6a\x20\x04\x41\x28\x6a\x20\x01\xa7\x22\x05\x20\x02\x41\x6f\x71\x10\x9d\x03\x0d\x00\x20\x00\x10\x85\x03\x22\x0e\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x04\x28\x02\x2c\x22\x06\x41\x04\x6a\x21\x07\x20\x02\x41\x10\x71\x21\x08\x20\x03\x41\x7f\x6a\x22\x09\x41\x01\x4b\x21\x0a\x20\x04\x28\x02\x28\x22\x0b\x21\x02\x41\x00\x21\x0c\x03\x40\x20\x02\x45\x0d\x02\x20\x07\x28\x02\x00\x21\x03\x02\x40\x02\x40\x02\x40\x20\x08\x45\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x05\x20\x03\x10\xea\x03\x22\x0d\x41\x00\x48\x0d\x04\x20\x0d\x45\x0d\x01\x20\x00\x20\x04\x41\x08\x6a\x10\x81\x04\x20\x04\x2d\x00\x08\x41\x04\x71\x45\x0d\x01\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x20\x0a\x0d\x00\x20\x09\x0e\x02\x01\x02\x01\x0b\x20\x00\x20\x03\x10\xdd\x01\x22\x0f\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x02\x0c\x06\x0b\x20\x00\x20\x01\x20\x03\x20\x01\x41\x00\x10\xb4\x01\x22\x0f\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0c\x05\x0b\x20\x00\x10\x85\x03\x22\x0f\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x04\x20\x00\x20\x03\x10\xdd\x01\x22\x10\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x20\x00\x20\x0f\x42\x00\x20\x10\x41\x87\x80\x01\x10\xb8\x03\x41\x00\x48\x0d\x02\x20\x00\x20\x01\x20\x03\x20\x01\x41\x00\x10\xb4\x01\x22\x10\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x20\x00\x20\x0f\x42\x01\x20\x10\x41\x87\x80\x01\x10\xb8\x03\x41\x00\x48\x0d\x02\x0b\x20\x00\x20\x0e\x20\x0c\xad\x20\x0f\x41\x00\x10\xc8\x04\x41\x00\x48\x0d\x03\x20\x0c\x41\x01\x6a\x21\x0c\x0b\x20\x02\x41\x7f\x6a\x21\x02\x20\x07\x41\x08\x6a\x21\x07\x0c\x01\x0b\x0b\x20\x00\x20\x0f\x10\xcd\x01\x0b\x20\x00\x20\x0e\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x0e\x20\x04\x28\x02\x28\x21\x0b\x20\x04\x28\x02\x2c\x21\x06\x0b\x20\x00\x20\x06\x20\x0b\x10\x9e\x03\x20\x00\x20\x01\x10\xcd\x01\x0b\x20\x04\x41\x30\x6a\x24\x00\x20\x0e\x0b\x7c\x01\x02\x7e\x02\x40\x02\x40\x02\x40\x20\x03\x29\x03\x00\x22\x05\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x04\x45\x0d\x01\x20\x00\x10\x8a\x03\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x20\x00\x20\x05\x10\xa4\x05\x22\x03\x41\x00\x48\x0d\x01\x02\x40\x20\x04\x45\x0d\x00\x20\x03\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x0f\x0b\x20\x03\x0d\x00\x20\x00\x41\xf8\x9f\x02\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x05\x10\xc0\x01\x21\x06\x0b\x20\x06\x0b\x92\x01\x01\x05\x7e\x20\x03\x29\x03\x10\x21\x04\x20\x03\x29\x03\x08\x21\x05\x20\x03\x29\x03\x00\x22\x06\x21\x07\x02\x40\x20\x02\x41\x04\x48\x0d\x00\x20\x03\x29\x03\x18\x21\x07\x0b\x02\x40\x20\x06\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x02\x40\x20\x00\x20\x05\x10\xa3\x03\x22\x03\x45\x0d\x00\x20\x00\x20\x06\x20\x03\x20\x04\x10\xc0\x01\x20\x07\x41\x00\x10\xb9\x03\x21\x02\x20\x00\x20\x03\x10\xe4\x02\x20\x02\x41\x00\x48\x0d\x00\x20\x02\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x21\x08\x0b\x20\x08\x0b\x2d\x00\x42\x80\x80\x80\x80\xe0\x00\x20\x00\x20\x03\x29\x03\x00\x20\x03\x29\x03\x08\x41\x00\x10\xc2\x03\x22\x03\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x20\x03\x41\x00\x48\x1b\x0b\xc0\x05\x02\x01\x7f\x04\x7e\x02\x40\x02\x40\x02\x40\x20\x02\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x0c\x01\x0b\x02\x40\x02\x40\x02\x40\x20\x00\x20\x02\x41\x3d\x10\x96\x03\x0d\x00\x41\x00\x21\x03\x0c\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x04\x42\x80\x80\x80\x80\x30\x21\x05\x42\x80\x80\x80\x80\x30\x21\x06\x20\x00\x20\x02\x41\x3d\x20\x02\x41\x00\x10\xb4\x01\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x41\x81\x02\x41\x80\x02\x20\x00\x20\x07\x10\x9a\x03\x1b\x21\x03\x0b\x02\x40\x20\x00\x20\x02\x41\x3e\x10\x96\x03\x45\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x04\x42\x80\x80\x80\x80\x30\x21\x05\x42\x80\x80\x80\x80\x30\x21\x06\x20\x00\x20\x02\x41\x3e\x20\x02\x41\x00\x10\xb4\x01\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x41\x82\x04\x41\x80\x04\x20\x00\x20\x07\x10\x9a\x03\x1b\x20\x03\x72\x21\x03\x0b\x02\x40\x20\x00\x20\x02\x41\x3f\x10\x96\x03\x45\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x04\x42\x80\x80\x80\x80\x30\x21\x05\x42\x80\x80\x80\x80\x30\x21\x06\x20\x00\x20\x02\x41\x3f\x20\x02\x41\x00\x10\xb4\x01\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x41\x84\x08\x41\x80\x08\x20\x00\x20\x07\x10\x9a\x03\x1b\x20\x03\x72\x21\x03\x0b\x42\x80\x80\x80\x80\x30\x21\x05\x02\x40\x02\x40\x20\x00\x20\x02\x41\xc0\x00\x10\x96\x03\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x06\x0c\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x04\x02\x40\x20\x00\x20\x02\x41\xc0\x00\x20\x02\x41\x00\x10\xb4\x01\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x05\x0c\x02\x0b\x20\x03\x41\x80\xc0\x00\x72\x21\x03\x0b\x02\x40\x20\x00\x20\x02\x41\xc1\x00\x10\x96\x03\x45\x0d\x00\x20\x03\x41\x80\x10\x72\x21\x03\x20\x00\x20\x02\x41\xc1\x00\x20\x02\x41\x00\x10\xb4\x01\x22\x05\x42\x80\x80\x80\x80\x70\x83\x22\x04\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x02\x40\x20\x04\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x05\x10\xf0\x02\x0d\x01\x0b\x20\x00\x41\xcd\xa0\x02\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\x30\x21\x04\x0c\x01\x0b\x02\x40\x02\x40\x20\x00\x20\x02\x41\xc2\x00\x10\x96\x03\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x04\x0c\x01\x0b\x20\x03\x41\x80\x20\x72\x21\x03\x20\x00\x20\x02\x41\xc2\x00\x20\x02\x41\x00\x10\xb4\x01\x22\x04\x42\x80\x80\x80\x80\x70\x83\x22\x02\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x02\x40\x20\x02\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x04\x10\xf0\x02\x0d\x01\x0b\x20\x00\x41\xdc\xa0\x02\x41\x00\x10\xb2\x02\x0c\x01\x0b\x20\x03\x41\x80\x30\x71\x45\x0d\x02\x20\x03\x41\x80\xc4\x00\x71\x45\x0d\x02\x20\x00\x41\xeb\xa0\x02\x41\x00\x10\xb2\x02\x0b\x20\x00\x20\x06\x10\xcd\x01\x20\x00\x20\x05\x10\xcd\x01\x20\x00\x20\x04\x10\xcd\x01\x0b\x41\x7f\x0f\x0b\x20\x01\x20\x04\x37\x03\x18\x20\x01\x20\x05\x37\x03\x10\x20\x01\x20\x06\x37\x03\x08\x20\x01\x20\x03\x36\x02\x00\x41\x00\x0b\xa6\x04\x03\x05\x7f\x02\x7e\x02\x7c\x23\x00\x41\x10\x6b\x22\x05\x24\x00\x02\x40\x02\x40\x20\x02\x0d\x00\x42\x80\x80\x80\x80\xc0\xfe\xff\xfb\xff\x00\x42\x80\x80\x80\x80\xc0\xfe\xff\x7b\x20\x04\x1b\x21\x0a\x0c\x01\x0b\x02\x40\x02\x40\x20\x03\x29\x03\x00\x22\x0b\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x03\x41\x08\x6a\x21\x06\x20\x0b\xa7\x21\x07\x41\x01\x21\x08\x02\x40\x03\x40\x20\x08\x20\x02\x4e\x0d\x01\x02\x40\x20\x06\x29\x03\x00\x22\x0a\x42\x80\x80\x80\x80\x10\x54\x0d\x00\x20\x05\x20\x07\xb7\x22\x0c\x39\x03\x08\x0c\x04\x0b\x20\x07\x20\x0a\xa7\x22\x09\x20\x07\x20\x09\x4a\x1b\x20\x07\x20\x09\x20\x07\x20\x09\x48\x1b\x20\x04\x1b\x21\x07\x20\x06\x41\x08\x6a\x21\x06\x20\x08\x41\x01\x6a\x21\x08\x0c\x00\x0b\x00\x0b\x20\x07\xad\x21\x0a\x0c\x02\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x0a\x20\x00\x20\x05\x41\x08\x6a\x20\x0b\x10\xdf\x04\x0d\x01\x41\x01\x21\x08\x20\x05\x2b\x03\x08\x21\x0c\x0b\x20\x03\x20\x08\x41\x03\x74\x6a\x21\x07\x02\x40\x02\x40\x03\x40\x20\x08\x20\x02\x4e\x0d\x01\x20\x00\x20\x05\x20\x07\x29\x03\x00\x10\xdf\x04\x0d\x02\x02\x40\x20\x0c\x20\x0c\x62\x0d\x00\x02\x40\x20\x05\x2b\x03\x00\x22\x0d\x20\x0d\x61\x0d\x00\x20\x0d\x21\x0c\x0c\x01\x0b\x20\x0c\x44\x00\x00\x00\x00\x00\x00\x00\x00\x61\x20\x0d\x44\x00\x00\x00\x00\x00\x00\x00\x00\x61\x71\x21\x09\x02\x40\x20\x04\x45\x0d\x00\x02\x40\x20\x09\x45\x0d\x00\x20\x0d\xbd\x20\x0c\xbd\x83\xbf\x21\x0c\x0c\x02\x0b\x20\x0c\x20\x0d\x10\xac\x01\x21\x0c\x0c\x01\x0b\x02\x40\x20\x09\x45\x0d\x00\x20\x0d\xbd\x20\x0c\xbd\x84\xbf\x21\x0c\x0c\x01\x0b\x20\x0c\x20\x0d\x10\xab\x01\x21\x0c\x0b\x20\x07\x41\x08\x6a\x21\x07\x20\x08\x41\x01\x6a\x21\x08\x0c\x00\x0b\x00\x0b\x20\x05\x20\x0c\x39\x03\x08\x20\x0c\xbd\x21\x0a\x02\x40\x02\x40\x20\x0c\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x0c\xaa\x21\x08\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x08\x0b\x02\x40\x20\x0a\x20\x08\xb7\xbd\x52\x0d\x00\x20\x08\xad\x21\x0a\x0c\x02\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x0a\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x0a\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x0a\x0c\x01\x0b\x20\x05\x20\x0c\x39\x03\x08\x42\x80\x80\x80\x80\xe0\x00\x21\x0a\x0b\x20\x05\x41\x10\x6a\x24\x00\x20\x0a\x0b\x85\x01\x02\x02\x7e\x01\x7f\x02\x40\x02\x40\x20\x00\xbd\x22\x01\x42\x34\x88\xa7\x41\xff\x0f\x71\x22\x03\x41\xfe\x07\x4b\x0d\x00\x20\x01\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x83\x22\x02\x20\x02\x20\x02\x42\x80\x80\x80\x80\x80\x80\x80\xf8\x3f\x84\x20\x03\x41\xfe\x07\x47\x1b\x20\x01\x42\x80\x80\x80\x80\x80\x80\x80\xf0\xbf\x7f\x51\x1b\x21\x01\x0c\x01\x0b\x20\x03\x41\xb2\x08\x4b\x0d\x00\x20\x01\x42\x3f\x87\x20\x01\x7c\x42\x01\x41\xb3\x08\x20\x03\x6b\xad\x86\x22\x01\x42\x01\x88\x7c\x42\x00\x20\x01\x7d\x83\x21\x01\x0b\x20\x01\xbf\x0b\x34\x01\x01\x7c\x20\x00\x20\x01\x10\xa9\x01\x22\x02\x44\x00\x00\x00\x00\x00\x00\xf8\x7f\x20\x01\x99\x44\x00\x00\x00\x00\x00\x00\xf0\x7f\x63\x1b\x20\x02\x20\x00\x99\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x61\x1b\x0b\x36\x00\x20\x00\x44\x00\x00\x00\x00\x00\x00\xf0\xbf\x44\x00\x00\x00\x00\x00\x00\xf0\x3f\x20\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x63\x1b\x20\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x61\x20\x00\x20\x00\x62\x72\x1b\x0b\xb4\x02\x03\x01\x7f\x01\x7c\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x04\x42\x00\x37\x03\x08\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x41\x01\x4e\x0d\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x05\x0c\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xdf\x04\x0d\x02\x20\x04\x2b\x03\x08\x21\x05\x02\x40\x02\x40\x20\x02\x41\x01\x46\x0d\x00\x20\x02\x41\x7f\x6a\x21\x02\x20\x03\x41\x08\x6a\x21\x03\x03\x40\x20\x02\x45\x0d\x02\x20\x00\x20\x04\x20\x03\x29\x03\x00\x10\xdf\x04\x0d\x04\x20\x02\x41\x7f\x6a\x21\x02\x20\x03\x41\x08\x6a\x21\x03\x20\x05\x20\x04\x2b\x03\x00\x10\x90\x01\x21\x05\x0c\x00\x0b\x00\x0b\x20\x05\x99\x21\x05\x0b\x20\x04\x20\x05\x39\x03\x08\x0b\x20\x05\xbd\x21\x06\x02\x40\x02\x40\x20\x05\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x05\xaa\x21\x02\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x02\x0b\x02\x40\x20\x06\x20\x02\xb7\xbd\x52\x0d\x00\x20\x02\xad\x21\x06\x0c\x02\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x06\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x06\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x06\x0c\x01\x0b\x20\x04\x20\x05\x39\x03\x08\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x06\x0b\x81\x01\x01\x01\x7e\x20\x00\x20\x00\x29\x03\xd0\x01\x22\x04\x42\x0c\x88\x20\x04\x85\x22\x04\x42\x19\x86\x20\x04\x85\x22\x04\x42\x1b\x88\x20\x04\x85\x22\x04\x37\x03\xd0\x01\x42\x80\x80\x80\x80\xc0\x7e\x20\x04\x42\x9d\xba\xb3\xfb\x94\x92\xfd\xa2\x25\x7e\x42\x0c\x88\x42\x80\x80\x80\x80\x80\x80\x80\xf8\x3f\x84\xbf\x44\x00\x00\x00\x00\x00\x00\xf0\xbf\xa0\xbd\x22\x04\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x04\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x0b\x06\x00\x20\x00\xb6\xbb\x0b\x54\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x02\x40\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x00\x10\xc9\x04\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x08\x10\xc9\x04\x0d\x00\x20\x04\x28\x02\x08\x20\x04\x28\x02\x0c\x6c\xad\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x3a\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x00\x10\xc9\x04\x21\x00\x20\x04\x28\x02\x0c\x21\x03\x20\x04\x41\x10\x6a\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x20\x03\x67\xad\x20\x00\x1b\x0b\xea\x01\x02\x05\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x06\x24\x00\x02\x40\x02\x40\x20\x00\x20\x01\x41\x2d\x10\xfe\x03\x22\x07\x0d\x00\x20\x04\x41\x00\x36\x02\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0c\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x01\x02\x40\x02\x40\x20\x07\x29\x03\x00\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x06\x20\x07\x28\x02\x0c\x22\x08\x36\x02\x0c\x20\x08\x20\x0b\xa7\x22\x09\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x49\x0d\x01\x20\x00\x20\x0b\x10\xcd\x01\x20\x07\x42\x80\x80\x80\x80\x30\x37\x03\x00\x0b\x20\x04\x41\x01\x36\x02\x00\x0c\x01\x0b\x20\x09\x20\x06\x41\x0c\x6a\x10\xcc\x05\x21\x0a\x20\x07\x20\x06\x28\x02\x0c\x36\x02\x0c\x20\x04\x41\x00\x36\x02\x00\x02\x40\x20\x0a\x41\xff\xff\x03\x4b\x0d\x00\x20\x00\x20\x0a\x41\xff\xff\x03\x71\x10\xf2\x02\x21\x01\x0c\x01\x0b\x20\x00\x20\x09\x20\x08\x41\x01\x74\x6a\x41\x10\x6a\x41\x02\x10\xe0\x04\x21\x01\x0b\x20\x06\x41\x10\x6a\x24\x00\x20\x01\x0b\xa8\x01\x01\x04\x7f\x20\x01\x28\x02\x00\x21\x02\x02\x40\x02\x40\x20\x00\x28\x02\x04\x22\x03\x41\x7f\x4a\x0d\x00\x20\x00\x20\x02\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x21\x04\x20\x02\x41\x01\x6a\x22\x05\x20\x03\x41\xff\xff\xff\xff\x07\x71\x4e\x0d\x01\x20\x04\x41\x80\xf8\x03\x71\x41\x80\xb0\x03\x47\x0d\x01\x20\x00\x20\x05\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x22\x00\x41\x80\xf8\x03\x71\x41\x80\xb8\x03\x47\x0d\x01\x20\x04\x41\x0a\x74\x41\x80\xf8\x3f\x71\x20\x00\x41\xff\x07\x71\x72\x41\x80\x80\x04\x6a\x21\x04\x20\x02\x41\x02\x6a\x21\x05\x0c\x01\x0b\x20\x02\x41\x01\x6a\x21\x05\x20\x00\x20\x02\x6a\x41\x10\x6a\x2d\x00\x00\x21\x04\x0b\x20\x01\x20\x05\x36\x02\x00\x20\x04\x0b\xb6\x01\x02\x03\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x02\x40\x02\x40\x20\x00\x20\x01\x10\xfc\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x21\x07\x0c\x01\x0b\x02\x40\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x00\x10\xce\x05\x0d\x00\x42\x80\x80\x80\x80\xc0\x7e\x21\x07\x20\x04\x28\x02\x0c\x22\x03\x41\x00\x48\x0d\x00\x20\x03\x20\x01\xa7\x22\x05\x28\x02\x04\x22\x06\x41\xff\xff\xff\xff\x07\x71\x4e\x0d\x00\x02\x40\x20\x06\x41\x7f\x4a\x0d\x00\x20\x05\x20\x03\x41\x01\x74\x6a\x41\x10\x6a\x33\x01\x00\x21\x07\x0c\x01\x0b\x20\x05\x20\x03\x6a\x41\x10\x6a\x31\x00\x00\x21\x07\x0b\x20\x00\x20\x01\x10\xcd\x01\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x07\x0b\x0e\x00\x20\x00\x20\x01\x20\x02\x10\xc0\x01\x10\xf2\x05\x0b\xcf\x01\x02\x03\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x02\x40\x02\x40\x20\x00\x20\x01\x10\xfc\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x21\x07\x0c\x01\x0b\x02\x40\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x00\x10\xce\x05\x0d\x00\x02\x40\x02\x40\x20\x04\x28\x02\x0c\x22\x03\x41\x00\x48\x0d\x00\x20\x03\x20\x01\xa7\x22\x05\x28\x02\x04\x22\x06\x41\xff\xff\xff\xff\x07\x71\x48\x0d\x01\x0b\x20\x00\x41\x2f\x10\xc5\x01\x21\x07\x0c\x01\x0b\x02\x40\x02\x40\x20\x06\x41\x7f\x4a\x0d\x00\x20\x05\x20\x03\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x21\x03\x0c\x01\x0b\x20\x05\x20\x03\x6a\x41\x10\x6a\x2d\x00\x00\x21\x03\x0b\x20\x00\x20\x03\x41\xff\xff\x03\x71\x10\xf2\x02\x21\x07\x0b\x20\x00\x20\x01\x10\xcd\x01\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x07\x0b\x55\x01\x01\x7f\x20\x00\x20\x01\x10\xfc\x03\x21\x01\x41\x00\x21\x04\x02\x40\x03\x40\x20\x04\x20\x02\x4e\x0d\x01\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x01\x20\x03\x29\x03\x00\x10\xc0\x01\x10\xae\x03\x21\x01\x20\x03\x41\x08\x6a\x21\x03\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x01\x0b\x97\x01\x02\x02\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x02\x40\x02\x40\x20\x00\x20\x01\x10\xfc\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x21\x06\x0c\x01\x0b\x02\x40\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x00\x10\xce\x05\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x06\x20\x04\x28\x02\x0c\x22\x03\x41\x00\x48\x0d\x00\x20\x03\x20\x01\xa7\x22\x05\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x4e\x0d\x00\x20\x05\x20\x04\x41\x0c\x6a\x10\xcc\x05\xad\x21\x06\x0b\x20\x00\x20\x01\x10\xcd\x01\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x06\x0b\xbb\x03\x03\x07\x7f\x01\x7e\x01\x7c\x23\x00\x41\x10\x6b\x22\x05\x24\x00\x02\x40\x20\x00\x20\x01\x10\xfc\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x02\x40\x20\x00\x20\x03\x29\x03\x00\x10\xe6\x02\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x0c\xa7\x22\x06\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x21\x07\x20\x01\xa7\x22\x08\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x21\x09\x02\x40\x02\x40\x20\x04\x45\x0d\x00\x20\x05\x20\x09\x20\x07\x6b\x22\x04\x36\x02\x0c\x41\x7f\x21\x0a\x41\x00\x21\x0b\x20\x02\x41\x02\x48\x0d\x01\x20\x00\x20\x05\x20\x03\x29\x03\x08\x10\xdf\x04\x0d\x02\x20\x05\x2b\x03\x00\x22\x0d\x20\x0d\x62\x0d\x01\x02\x40\x02\x40\x20\x0d\x44\x00\x00\x00\x00\x00\x00\x00\x00\x65\x41\x01\x73\x0d\x00\x41\x00\x21\x04\x0c\x01\x0b\x20\x0d\x20\x04\xb7\x63\x41\x01\x73\x0d\x02\x02\x40\x20\x0d\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x0d\xaa\x21\x04\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x04\x0b\x20\x05\x20\x04\x36\x02\x0c\x0c\x01\x0b\x41\x00\x21\x04\x20\x05\x41\x00\x36\x02\x0c\x02\x40\x20\x02\x41\x02\x48\x0d\x00\x20\x00\x20\x05\x41\x0c\x6a\x20\x03\x29\x03\x08\x20\x09\x41\x00\x10\xd3\x05\x0d\x02\x20\x05\x28\x02\x0c\x21\x04\x0b\x20\x09\x20\x07\x6b\x21\x0b\x41\x01\x21\x0a\x0b\x41\x7f\x21\x03\x20\x09\x20\x07\x49\x0d\x01\x20\x0b\x20\x04\x6b\x20\x0a\x6c\x41\x00\x48\x0d\x01\x03\x40\x02\x40\x20\x08\x20\x06\x20\x04\x41\x00\x20\x07\x10\xd4\x05\x0d\x00\x20\x04\x21\x03\x0c\x03\x0b\x20\x0b\x20\x04\x46\x0d\x02\x20\x04\x20\x0a\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x00\x20\x01\x10\xcd\x01\x20\x00\x20\x0c\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0c\x01\x0b\x20\x00\x20\x01\x10\xcd\x01\x20\x00\x20\x0c\x10\xcd\x01\x20\x03\xad\x21\x01\x0b\x20\x05\x41\x10\x6a\x24\x00\x20\x01\x0b\x4d\x01\x01\x7f\x02\x40\x02\x40\x20\x00\x20\x01\x20\x02\x10\xc0\x01\x10\xf2\x05\x22\x00\x0d\x00\x20\x01\x28\x02\x00\x22\x05\x41\x7f\x4c\x0d\x01\x20\x05\x20\x03\x4c\x0d\x00\x20\x01\x20\x03\x36\x02\x00\x0b\x20\x00\x0f\x0b\x20\x01\x20\x05\x20\x04\x6a\x22\x00\x41\x00\x20\x00\x41\x00\x4a\x1b\x36\x02\x00\x41\x00\x0b\xb0\x01\x01\x06\x7f\x20\x01\x41\x10\x6a\x22\x05\x20\x03\x41\x01\x74\x6a\x21\x06\x20\x00\x41\x10\x6a\x22\x07\x20\x02\x41\x01\x74\x6a\x21\x08\x20\x05\x20\x03\x6a\x21\x09\x20\x07\x20\x02\x6a\x21\x07\x41\x00\x21\x0a\x41\x00\x21\x02\x02\x40\x03\x40\x20\x02\x20\x04\x4e\x0d\x01\x02\x40\x02\x40\x20\x00\x28\x02\x04\x41\x7f\x4a\x0d\x00\x20\x08\x2f\x01\x00\x21\x03\x0c\x01\x0b\x20\x07\x20\x02\x6a\x2d\x00\x00\x21\x03\x0b\x02\x40\x02\x40\x20\x01\x28\x02\x04\x41\x7f\x4a\x0d\x00\x20\x06\x2f\x01\x00\x21\x05\x0c\x01\x0b\x20\x09\x20\x02\x6a\x2d\x00\x00\x21\x05\x0b\x20\x06\x41\x02\x6a\x21\x06\x20\x08\x41\x02\x6a\x21\x08\x20\x02\x41\x01\x6a\x21\x02\x20\x03\x20\x05\x46\x0d\x00\x0b\x20\x03\x20\x05\x6b\x21\x0a\x0b\x20\x0a\x0b\xb6\x03\x02\x05\x7f\x03\x7e\x23\x00\x41\x10\x6b\x22\x05\x24\x00\x02\x40\x02\x40\x20\x00\x20\x01\x10\xfc\x03\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x0a\x21\x01\x0c\x01\x0b\x02\x40\x02\x40\x20\x00\x20\x03\x29\x03\x00\x10\xd6\x05\x22\x06\x45\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x42\x80\x80\x80\x80\x30\x21\x0b\x20\x06\x41\x01\x48\x0d\x01\x20\x00\x41\xd1\xad\x02\x41\x00\x10\xb2\x02\x0c\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x20\x00\x20\x03\x29\x03\x00\x10\xe6\x02\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x05\x20\x0a\xa7\x22\x06\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x22\x07\x41\x00\x20\x04\x41\x02\x46\x1b\x36\x02\x0c\x20\x0b\xa7\x22\x08\x28\x02\x04\x21\x09\x02\x40\x20\x02\x41\x02\x48\x0d\x00\x20\x03\x29\x03\x08\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x05\x41\x0c\x6a\x20\x0c\x20\x07\x41\x00\x10\xd3\x05\x0d\x01\x0b\x20\x09\x41\xff\xff\xff\xff\x07\x71\x21\x02\x02\x40\x02\x40\x20\x04\x41\x01\x4b\x0d\x00\x20\x07\x20\x02\x6b\x21\x09\x02\x40\x02\x40\x20\x04\x0e\x02\x00\x01\x00\x0b\x20\x05\x28\x02\x0c\x21\x03\x0c\x02\x0b\x20\x05\x28\x02\x0c\x22\x03\x20\x09\x4a\x21\x04\x42\x80\x80\x80\x80\x10\x21\x01\x20\x03\x21\x09\x20\x04\x45\x0d\x01\x0c\x02\x0b\x20\x05\x20\x05\x28\x02\x0c\x20\x02\x6b\x22\x03\x36\x02\x0c\x20\x03\x21\x09\x0b\x42\x80\x80\x80\x80\x10\x21\x01\x20\x03\x41\x00\x48\x0d\x00\x20\x03\x20\x09\x4a\x0d\x00\x20\x09\x41\x01\x6a\x21\x04\x03\x40\x02\x40\x20\x06\x20\x08\x20\x03\x41\x00\x20\x02\x10\xd4\x05\x0d\x00\x42\x81\x80\x80\x80\x10\x21\x01\x0c\x02\x0b\x20\x04\x20\x03\x41\x01\x6a\x22\x03\x47\x0d\x00\x0b\x0b\x20\x00\x20\x0a\x10\xcd\x01\x20\x00\x20\x0b\x10\xcd\x01\x0b\x20\x05\x41\x10\x6a\x24\x00\x20\x01\x0b\x62\x02\x01\x7f\x02\x7e\x41\x00\x21\x02\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x02\x40\x20\x00\x20\x01\x41\xd2\x01\x20\x01\x41\x00\x10\xb4\x01\x22\x03\x42\x80\x80\x80\x80\x70\x83\x22\x04\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x41\x7f\x21\x02\x20\x04\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x03\x10\x9a\x03\x0f\x0b\x20\x01\xa7\x2f\x01\x06\x41\x12\x46\x21\x02\x0b\x20\x02\x0b\xb2\x03\x02\x01\x7f\x04\x7e\x23\x00\x41\x30\x6b\x22\x05\x24\x00\x20\x05\x20\x01\x37\x03\x28\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x10\x84\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x41\xfe\xe6\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x0c\x01\x0b\x02\x40\x20\x03\x29\x03\x00\x22\x07\x42\x80\x80\x80\x80\x10\x84\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x20\x00\x20\x07\x20\x04\x20\x07\x41\x00\x10\xb4\x01\x22\x08\x42\x80\x80\x80\x80\x70\x83\x22\x09\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x02\x40\x20\x04\x41\xd3\x01\x47\x0d\x00\x20\x00\x20\x07\x10\xd8\x05\x41\x7f\x4a\x0d\x00\x20\x00\x20\x08\x10\xcd\x01\x0c\x02\x0b\x20\x09\x42\x80\x80\x80\x80\x10\x84\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x08\x20\x07\x41\x01\x20\x05\x41\x28\x6a\x10\xef\x02\x21\x06\x0c\x01\x0b\x20\x05\x20\x00\x20\x01\x10\xe6\x02\x22\x01\x37\x03\x08\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x05\x20\x07\x37\x03\x10\x02\x40\x02\x40\x02\x40\x02\x40\x20\x04\x41\xd3\x01\x46\x0d\x00\x41\x01\x21\x03\x42\x80\x80\x80\x80\x30\x21\x07\x0c\x01\x0b\x20\x00\x41\xcf\xad\x02\x10\xc7\x02\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x05\x20\x07\x37\x03\x18\x41\x02\x21\x03\x0b\x20\x00\x20\x00\x29\x03\x48\x20\x03\x20\x05\x41\x10\x6a\x10\xdb\x04\x21\x09\x20\x00\x20\x07\x10\xcd\x01\x20\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0b\x20\x00\x20\x01\x10\xcd\x01\x0c\x01\x0b\x20\x00\x20\x09\x20\x04\x41\x01\x20\x05\x41\x08\x6a\x10\xd9\x05\x21\x06\x20\x00\x20\x05\x29\x03\x08\x10\xcd\x01\x0b\x20\x05\x41\x30\x6a\x24\x00\x20\x06\x0b\xbd\x01\x02\x02\x7f\x01\x7e\x41\x00\x21\x02\x02\x40\x02\x40\x20\x00\x20\x01\x10\xd6\x05\x22\x03\x41\x00\x48\x0d\x00\x20\x03\x45\x0d\x01\x02\x40\x02\x40\x20\x00\x20\x01\x41\xed\x00\x20\x01\x41\x00\x10\xb4\x01\x22\x04\x42\x80\x80\x80\x80\x70\x83\x22\x01\x42\x80\x80\x80\x80\x20\x51\x0d\x00\x20\x01\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x20\x01\x42\x80\x80\x80\x80\x30\x52\x0d\x01\x0b\x20\x00\x41\xfe\xe6\x01\x41\x00\x10\xb2\x02\x0c\x01\x0b\x41\x7f\x21\x02\x20\x00\x20\x04\x10\xf2\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x41\x00\x21\x02\x20\x01\xa7\x41\xe7\x00\x41\x00\x10\xf3\x05\x21\x03\x20\x00\x20\x01\x10\xcd\x01\x20\x03\x41\x7f\x4a\x0d\x01\x20\x00\x41\x9c\xad\x02\x41\x00\x10\xb2\x02\x0b\x41\x7f\x21\x02\x0b\x20\x02\x0b\x1c\x01\x01\x7e\x20\x00\x20\x01\x20\x02\x20\x03\x20\x04\x10\xf7\x05\x21\x05\x20\x00\x20\x01\x10\xcd\x01\x20\x05\x0b\xcb\x05\x02\x04\x7f\x0a\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x10\x84\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x41\xfe\xe6\x01\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x0c\x01\x0b\x20\x03\x29\x03\x08\x21\x09\x02\x40\x20\x03\x29\x03\x00\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x22\x0b\x42\x80\x80\x80\x80\x20\x51\x0d\x00\x20\x0b\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x0a\x41\xd6\x01\x20\x0a\x41\x00\x10\xb4\x01\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x22\x0d\x42\x80\x80\x80\x80\x20\x51\x0d\x00\x20\x0d\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x20\x0d\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x04\x20\x09\x37\x03\x08\x20\x04\x20\x01\x37\x03\x00\x20\x00\x20\x0c\x20\x0a\x41\x02\x20\x04\x10\xef\x02\x21\x08\x0c\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x42\x80\x80\x80\x80\x30\x21\x0d\x02\x40\x02\x40\x20\x00\x20\x01\x10\xe6\x02\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x0c\x0c\x01\x0b\x20\x00\x10\x85\x03\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x0d\x02\x40\x02\x40\x20\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x04\x41\x7f\x36\x02\x00\x0c\x01\x0b\x20\x00\x20\x04\x20\x09\x10\xc9\x04\x41\x00\x48\x0d\x01\x0b\x20\x01\xa7\x22\x03\x29\x02\x04\x21\x09\x20\x00\x20\x0a\x10\xe6\x02\x22\x0d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x04\x28\x02\x00\x22\x05\x45\x0d\x00\x20\x09\xa7\x41\xff\xff\xff\xff\x07\x71\x21\x06\x42\x00\x21\x0a\x02\x40\x02\x40\x20\x0b\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x42\x00\x21\x0b\x0c\x01\x0b\x20\x0d\xa7\x22\x07\x29\x02\x04\x42\xff\xff\xff\xff\x07\x83\x21\x0e\x02\x40\x20\x06\x45\x0d\x00\x20\x09\x42\xff\xff\xff\xff\x07\x83\x20\x0e\x7d\x20\x0e\x50\xad\x22\x0f\x7d\x21\x10\x20\x05\xad\x21\x11\x42\x00\x21\x0b\x42\x00\x21\x0a\x03\x40\x20\x0a\x20\x0f\x7c\x22\x09\x20\x10\x55\x0d\x02\x20\x03\x20\x07\x20\x09\xa7\x10\xdb\x05\x22\x05\x41\x00\x48\x0d\x02\x20\x00\x20\x03\x20\x0a\xa7\x20\x05\x10\xdc\x05\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x04\x20\x00\x20\x0c\x20\x0b\x20\x0a\x41\x00\x10\xc8\x04\x41\x00\x48\x0d\x04\x20\x0e\x20\x05\xac\x7c\x21\x0a\x20\x11\x20\x0b\x42\x01\x7c\x22\x0b\x52\x0d\x00\x0c\x03\x0b\x00\x0b\x42\x00\x21\x0b\x20\x0e\x50\x0d\x01\x0b\x20\x00\x20\x03\x20\x0a\xa7\x20\x06\x10\xdc\x05\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x0c\x20\x0b\x42\xff\xff\xff\xff\x0f\x83\x20\x0a\x41\x00\x10\xc8\x04\x41\x00\x48\x0d\x01\x0b\x20\x00\x20\x01\x10\xcd\x01\x20\x00\x20\x0d\x10\xcd\x01\x20\x0c\x21\x08\x0c\x01\x0b\x20\x00\x20\x0c\x10\xcd\x01\x20\x00\x20\x01\x10\xcd\x01\x20\x00\x20\x0d\x10\xcd\x01\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x08\x0b\x95\x01\x01\x05\x7f\x02\x40\x20\x01\x28\x02\x04\x22\x03\x41\xff\xff\xff\xff\x07\x71\x22\x04\x0d\x00\x20\x02\x0f\x0b\x20\x00\x28\x02\x04\x21\x05\x02\x40\x02\x40\x20\x03\x41\x7f\x4a\x0d\x00\x20\x01\x2f\x01\x10\x21\x06\x0c\x01\x0b\x20\x01\x2d\x00\x10\x21\x06\x0b\x20\x05\x41\xff\xff\xff\xff\x07\x71\x21\x05\x20\x04\x41\x7f\x6a\x21\x07\x02\x40\x03\x40\x20\x02\x20\x04\x6a\x20\x05\x4a\x0d\x01\x20\x00\x20\x06\x20\x02\x10\xf3\x05\x22\x03\x41\x00\x48\x0d\x01\x20\x03\x20\x04\x6a\x20\x05\x4a\x0d\x01\x20\x00\x20\x01\x20\x03\x41\x01\x6a\x22\x02\x41\x01\x20\x07\x10\xd4\x05\x0d\x00\x0b\x20\x03\x0f\x0b\x41\x7f\x0b\xa3\x02\x01\x04\x7f\x20\x01\x28\x02\x04\x21\x04\x02\x40\x20\x02\x0d\x00\x20\x04\x41\xff\xff\xff\xff\x07\x71\x20\x03\x47\x0d\x00\x20\x01\xad\x42\x80\x80\x80\x80\x90\x7f\x84\x10\xc0\x01\x0f\x0b\x02\x40\x20\x03\x20\x02\x6b\x22\x05\x41\x01\x48\x0d\x00\x20\x04\x41\x7f\x4a\x0d\x00\x20\x01\x20\x02\x41\x01\x74\x6a\x41\x10\x6a\x21\x06\x41\x00\x21\x07\x20\x02\x21\x04\x02\x40\x03\x40\x20\x04\x20\x03\x4e\x0d\x01\x20\x04\x41\x01\x6a\x21\x04\x20\x07\x20\x06\x2f\x01\x00\x72\x21\x07\x20\x06\x41\x02\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x02\x40\x20\x07\x41\x80\x02\x48\x0d\x00\x20\x00\x20\x01\x20\x02\x41\x01\x74\x6a\x41\x10\x6a\x20\x05\x10\xe0\x04\x0f\x0b\x41\x00\x21\x04\x02\x40\x20\x00\x20\x05\x41\x00\x10\xe7\x02\x22\x07\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x07\x41\x10\x6a\x21\x03\x20\x01\x20\x02\x41\x01\x74\x6a\x41\x10\x6a\x21\x06\x02\x40\x03\x40\x20\x05\x20\x04\x46\x0d\x01\x20\x07\x20\x04\x6a\x41\x10\x6a\x20\x06\x2d\x00\x00\x3a\x00\x00\x20\x06\x41\x02\x6a\x21\x06\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x03\x20\x05\x6a\x41\x00\x3a\x00\x00\x20\x07\xad\x42\x80\x80\x80\x80\x90\x7f\x84\x0f\x0b\x20\x00\x20\x01\x20\x02\x6a\x41\x10\x6a\x20\x05\x10\xb3\x02\x0b\xda\x01\x02\x04\x7f\x02\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x02\x40\x02\x40\x20\x00\x20\x01\x10\xfc\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x21\x08\x0c\x01\x0b\x02\x40\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x00\x20\x01\xa7\x22\x05\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x41\x00\x10\xd3\x05\x0d\x00\x20\x04\x20\x05\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x22\x06\x36\x02\x08\x02\x40\x20\x03\x29\x03\x08\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x09\x20\x06\x41\x00\x10\xd3\x05\x0d\x01\x20\x04\x28\x02\x08\x21\x06\x0b\x20\x00\x20\x05\x20\x04\x28\x02\x0c\x22\x03\x20\x06\x20\x03\x20\x06\x48\x22\x07\x1b\x20\x06\x20\x03\x20\x07\x1b\x10\xdc\x05\x21\x08\x0b\x20\x00\x20\x01\x10\xcd\x01\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x08\x0b\xc9\x01\x02\x04\x7f\x02\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x02\x40\x02\x40\x20\x00\x20\x01\x10\xfc\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x21\x08\x0c\x01\x0b\x02\x40\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x00\x20\x01\xa7\x22\x05\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x22\x06\x20\x06\x10\xd3\x05\x0d\x00\x20\x04\x20\x06\x20\x04\x28\x02\x0c\x22\x07\x6b\x22\x06\x36\x02\x08\x02\x40\x20\x03\x29\x03\x08\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x09\x20\x06\x41\x00\x10\xd3\x05\x0d\x01\x20\x04\x28\x02\x08\x21\x06\x0b\x20\x00\x20\x05\x20\x07\x20\x06\x20\x07\x6a\x10\xdc\x05\x21\x08\x0b\x20\x00\x20\x01\x10\xcd\x01\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x08\x0b\xc9\x01\x02\x03\x7f\x02\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x02\x40\x02\x40\x20\x00\x20\x01\x10\xfc\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x21\x07\x0c\x01\x0b\x02\x40\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x00\x20\x01\xa7\x22\x05\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x22\x06\x20\x06\x10\xd3\x05\x0d\x00\x20\x04\x20\x06\x36\x02\x08\x02\x40\x20\x03\x29\x03\x08\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x08\x20\x06\x20\x06\x10\xd3\x05\x0d\x01\x20\x04\x28\x02\x08\x21\x06\x0b\x20\x00\x20\x05\x20\x04\x28\x02\x0c\x22\x03\x20\x06\x20\x03\x20\x06\x20\x03\x4a\x1b\x10\xdc\x05\x21\x07\x0b\x20\x00\x20\x01\x10\xcd\x01\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x07\x0b\xc5\x02\x02\x04\x7f\x02\x7e\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x02\x40\x02\x40\x02\x40\x20\x00\x20\x01\x10\xfc\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x04\x20\x03\x29\x03\x00\x10\xe1\x05\x0d\x00\x02\x40\x20\x04\x29\x03\x00\x22\x09\x42\x80\x80\x80\x80\x08\x54\x0d\x00\x20\x00\x41\xba\xad\x02\x41\x00\x10\xa6\x04\x0c\x01\x0b\x20\x09\xa7\x22\x03\x41\x01\x46\x0d\x01\x20\x01\xa7\x22\x05\x29\x02\x04\xa7\x22\x06\x41\xff\xff\xff\xff\x07\x71\x22\x07\x45\x0d\x01\x02\x40\x20\x09\x20\x07\xad\x7e\x42\x80\x80\x80\x80\x04\x53\x0d\x00\x20\x00\x41\xe9\xd7\x01\x41\x00\x10\xc2\x02\x0c\x01\x0b\x20\x00\x20\x04\x41\x08\x6a\x20\x07\x20\x03\x6c\x20\x06\x41\x1f\x76\x10\xf3\x03\x0d\x00\x02\x40\x02\x40\x20\x07\x41\x01\x46\x0d\x00\x03\x40\x20\x03\x41\x01\x48\x0d\x02\x20\x04\x41\x08\x6a\x20\x05\x41\x00\x20\x07\x10\xf5\x03\x1a\x20\x03\x41\x7f\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x02\x40\x02\x40\x20\x05\x28\x02\x04\x41\x7f\x4a\x0d\x00\x20\x05\x2f\x01\x10\x21\x07\x0c\x01\x0b\x20\x05\x2d\x00\x10\x21\x07\x0b\x20\x04\x41\x08\x6a\x20\x07\x20\x03\x10\xe2\x05\x1a\x0b\x20\x00\x20\x01\x10\xcd\x01\x20\x04\x41\x08\x6a\x10\xf6\x03\x21\x08\x0c\x02\x0b\x20\x00\x20\x01\x10\xcd\x01\x0c\x01\x0b\x20\x01\x21\x08\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x08\x0b\x0e\x00\x20\x00\x20\x01\x20\x02\x10\xc0\x01\x10\xf6\x05\x0b\x57\x01\x02\x7f\x02\x40\x02\x40\x20\x00\x28\x02\x08\x20\x02\x6a\x22\x03\x20\x00\x28\x02\x0c\x4c\x0d\x00\x41\x7f\x21\x04\x20\x00\x20\x03\x20\x01\x10\xba\x04\x0d\x01\x0b\x20\x02\x41\x01\x6a\x21\x02\x03\x40\x02\x40\x20\x02\x41\x7f\x6a\x22\x02\x41\x01\x4e\x0d\x00\x41\x00\x0f\x0b\x20\x00\x20\x01\x10\xb5\x04\x45\x0d\x00\x0b\x41\x7f\x21\x04\x0b\x20\x04\x0b\xd2\x06\x02\x06\x7f\x05\x7e\x23\x00\x41\xd0\x00\x6b\x22\x05\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x10\x84\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x41\xfe\xe6\x01\x41\x00\x10\xb2\x02\x0c\x01\x0b\x20\x03\x29\x03\x08\x21\x0b\x20\x03\x29\x03\x00\x22\x0c\x42\x80\x80\x80\x80\x10\x84\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x02\x20\x04\x45\x0d\x01\x20\x00\x20\x0c\x10\xd8\x05\x41\x00\x4e\x0d\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x0d\x0c\x02\x0b\x20\x00\x20\x0c\x41\xd4\x01\x20\x0c\x41\x00\x10\xb4\x01\x22\x0e\x42\x80\x80\x80\x80\x70\x83\x22\x0f\x42\x80\x80\x80\x80\x20\x51\x0d\x00\x20\x0f\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x0d\x20\x0f\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x05\x20\x0b\x37\x03\x28\x20\x05\x20\x01\x37\x03\x20\x20\x00\x20\x0e\x20\x0c\x41\x02\x20\x05\x41\x20\x6a\x10\xef\x02\x21\x0d\x0c\x01\x0b\x20\x00\x20\x05\x41\x08\x6a\x41\x00\x10\xb3\x04\x1a\x42\x80\x80\x80\x80\xe0\x00\x21\x0d\x42\x80\x80\x80\x80\x30\x21\x0e\x02\x40\x02\x40\x20\x00\x20\x01\x10\xe6\x02\x22\x0f\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x0c\x0c\x01\x0b\x20\x00\x20\x0c\x10\xe6\x02\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x0e\x02\x40\x20\x00\x20\x0b\x10\xf0\x02\x22\x06\x0d\x00\x20\x00\x20\x0b\x10\xe6\x02\x22\x0e\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x0b\x20\x0f\xa7\x21\x07\x20\x0c\xa7\x22\x08\x29\x02\x04\x21\x01\x41\x00\x21\x09\x41\x01\x21\x0a\x02\x40\x03\x40\x02\x40\x02\x40\x20\x01\x42\xff\xff\xff\xff\x07\x83\x42\x00\x52\x0d\x00\x41\x00\x21\x03\x20\x0a\x0d\x01\x20\x09\x20\x07\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x4e\x0d\x03\x20\x09\x41\x01\x6a\x21\x03\x0c\x01\x0b\x20\x07\x20\x08\x20\x09\x10\xdb\x05\x22\x03\x41\x7f\x4a\x0d\x00\x20\x0a\x45\x0d\x02\x20\x05\x28\x02\x08\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x05\x28\x02\x0c\x20\x03\x28\x02\x04\x11\x00\x00\x20\x05\x41\x00\x36\x02\x0c\x20\x00\x20\x0c\x10\xcd\x01\x20\x00\x20\x0e\x10\xcd\x01\x20\x0f\x21\x0d\x0c\x04\x0b\x20\x05\x20\x0c\x37\x03\x20\x02\x40\x02\x40\x20\x06\x45\x0d\x00\x20\x05\x20\x0f\x37\x03\x30\x20\x05\x20\x03\xad\x37\x03\x28\x20\x00\x20\x00\x20\x0b\x42\x80\x80\x80\x80\x30\x41\x03\x20\x05\x41\x20\x6a\x10\xb5\x01\x10\xf2\x03\x21\x01\x0c\x01\x0b\x20\x05\x20\x0e\x37\x03\x48\x20\x05\x42\x80\x80\x80\x80\x30\x37\x03\x40\x20\x05\x42\x80\x80\x80\x80\x30\x37\x03\x38\x20\x05\x20\x0f\x37\x03\x28\x20\x05\x20\x03\xad\x37\x03\x30\x20\x00\x20\x05\x41\x20\x6a\x10\xe4\x05\x21\x01\x0b\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x20\x05\x41\x08\x6a\x20\x07\x20\x09\x20\x03\x10\xf5\x03\x1a\x20\x05\x41\x08\x6a\x20\x01\x10\xe5\x05\x1a\x20\x08\x29\x02\x04\x22\x01\xa7\x41\xff\xff\xff\xff\x07\x71\x20\x03\x6a\x21\x09\x41\x00\x21\x0a\x20\x04\x0d\x00\x0b\x0b\x20\x05\x41\x08\x6a\x20\x07\x20\x09\x20\x07\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x10\xf5\x03\x1a\x20\x00\x20\x0c\x10\xcd\x01\x20\x00\x20\x0e\x10\xcd\x01\x20\x00\x20\x0f\x10\xcd\x01\x20\x05\x41\x08\x6a\x10\xf6\x03\x21\x0d\x0c\x01\x0b\x20\x05\x28\x02\x08\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x05\x28\x02\x0c\x20\x03\x28\x02\x04\x11\x00\x00\x20\x05\x41\x00\x36\x02\x0c\x20\x00\x20\x0c\x10\xcd\x01\x20\x00\x20\x0e\x10\xcd\x01\x20\x00\x20\x0f\x10\xcd\x01\x0b\x20\x05\x41\xd0\x00\x6a\x24\x00\x20\x0d\x0b\x8d\x07\x02\x0c\x7f\x06\x7e\x23\x00\x41\x30\x6b\x22\x02\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x29\x03\x08\x22\x0e\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x90\x7f\x52\x0d\x00\x20\x01\x29\x03\x28\x22\x0f\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x90\x7f\x51\x0d\x01\x0b\x20\x00\x41\x8a\xad\x02\x41\x00\x10\xb2\x02\x0c\x01\x0b\x20\x01\x29\x03\x20\x21\x10\x20\x01\x29\x03\x18\x21\x11\x20\x01\x29\x03\x00\x21\x12\x20\x00\x20\x02\x41\x08\x6a\x41\x00\x10\xb3\x04\x1a\x20\x02\x41\x00\x36\x02\x24\x02\x40\x02\x40\x20\x11\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x02\x41\x24\x6a\x20\x11\x10\xb6\x03\x0d\x01\x0b\x20\x00\x20\x02\x41\x28\x6a\x20\x12\x10\xb6\x03\x0d\x00\x20\x00\x20\x02\x41\x2c\x6a\x20\x01\x29\x03\x10\x10\xc9\x04\x41\x00\x48\x0d\x00\x20\x0e\xa7\x21\x03\x20\x02\x28\x02\x28\x20\x02\x28\x02\x2c\x22\x04\x6a\x21\x05\x20\x10\x42\x80\x80\x80\x80\x70\x83\x21\x0e\x20\x0f\xa7\x22\x06\x41\x10\x6a\x21\x07\x20\x06\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x21\x08\x20\x02\x28\x02\x24\x21\x09\x41\x00\x21\x0a\x03\x40\x02\x40\x02\x40\x20\x06\x41\x24\x20\x0a\x10\xf3\x05\x22\x01\x41\x00\x48\x0d\x00\x20\x01\x41\x01\x6a\x22\x0b\x20\x08\x4f\x0d\x00\x20\x02\x41\x08\x6a\x20\x06\x20\x0a\x20\x01\x10\xf5\x03\x1a\x02\x40\x02\x40\x20\x06\x28\x02\x04\x41\x7f\x4a\x22\x0c\x0d\x00\x20\x06\x20\x0b\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x21\x0b\x0c\x01\x0b\x20\x07\x20\x0b\x6a\x2d\x00\x00\x21\x0b\x0b\x20\x01\x41\x02\x6a\x21\x0a\x02\x40\x02\x40\x20\x0b\x41\x5c\x6a\x22\x0d\x41\x03\x4d\x0d\x00\x20\x0b\x41\xe0\x00\x47\x0d\x01\x20\x02\x41\x08\x6a\x20\x03\x41\x00\x20\x04\x10\xf5\x03\x1a\x0c\x04\x0b\x02\x40\x02\x40\x20\x0d\x0e\x04\x00\x02\x04\x01\x00\x0b\x20\x02\x41\x08\x6a\x41\x24\x10\xb4\x04\x1a\x0c\x04\x0b\x20\x02\x41\x08\x6a\x20\x03\x20\x05\x20\x03\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x10\xf5\x03\x1a\x0c\x03\x0b\x02\x40\x02\x40\x20\x0b\x41\x50\x6a\x22\x0d\x41\x09\x4b\x0d\x00\x02\x40\x20\x0a\x20\x08\x4f\x0d\x00\x02\x40\x02\x40\x20\x0c\x0d\x00\x20\x06\x20\x0a\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x21\x0b\x0c\x01\x0b\x20\x07\x20\x0a\x6a\x2d\x00\x00\x21\x0b\x0b\x20\x0b\x41\x50\x6a\x41\x09\x4b\x0d\x00\x20\x01\x41\x03\x6a\x20\x0a\x20\x0b\x20\x0d\x41\x0a\x6c\x6a\x22\x0b\x41\x30\x4a\x20\x0b\x41\x50\x6a\x22\x0b\x20\x09\x49\x71\x22\x0c\x1b\x21\x0a\x20\x0b\x20\x0d\x20\x0c\x1b\x21\x0d\x0b\x20\x0d\x41\x01\x48\x0d\x01\x20\x0d\x20\x09\x4f\x0d\x01\x20\x00\x20\x11\x20\x0d\xad\x10\xf4\x05\x22\x0f\x42\x80\x80\x80\x80\x70\x83\x22\x13\x42\x80\x80\x80\x80\x30\x51\x0d\x04\x20\x13\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x05\x20\x02\x41\x08\x6a\x20\x0f\x10\xe5\x05\x45\x0d\x04\x0c\x05\x0b\x20\x0e\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x0b\x41\x3c\x47\x0d\x00\x20\x06\x41\x3e\x20\x0a\x10\xf3\x05\x22\x0b\x41\x00\x48\x0d\x00\x20\x00\x20\x06\x20\x0a\x20\x0b\x10\xdc\x05\x22\x0f\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x04\x02\x40\x20\x00\x20\x10\x20\x0f\x10\xbb\x03\x22\x0f\x42\x80\x80\x80\x80\x70\x83\x22\x13\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x13\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x05\x20\x02\x41\x08\x6a\x20\x0f\x10\xe5\x05\x0d\x05\x0b\x20\x0b\x41\x01\x6a\x21\x0a\x0c\x03\x0b\x20\x02\x41\x08\x6a\x20\x06\x20\x01\x20\x0a\x10\xf5\x03\x1a\x0c\x02\x0b\x20\x02\x41\x08\x6a\x20\x06\x20\x0a\x20\x06\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x10\xf5\x03\x1a\x20\x02\x41\x08\x6a\x10\xf6\x03\x21\x11\x0c\x04\x0b\x20\x02\x41\x08\x6a\x20\x12\x10\xa6\x05\x45\x0d\x00\x0b\x0b\x20\x02\x28\x02\x08\x28\x02\x10\x22\x01\x41\x10\x6a\x20\x02\x28\x02\x0c\x20\x01\x28\x02\x04\x11\x00\x00\x20\x02\x41\x00\x36\x02\x0c\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x11\x0b\x20\x02\x41\x30\x6a\x24\x00\x20\x11\x0b\x7d\x01\x01\x7f\x02\x40\x20\x00\x28\x02\x14\x45\x0d\x00\x20\x00\x28\x02\x00\x20\x01\x10\xcd\x01\x41\x7f\x0f\x0b\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x90\x7f\x51\x0d\x00\x20\x00\x28\x02\x00\x20\x01\x10\xf2\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x10\xbe\x04\x41\x7f\x0f\x0b\x20\x00\x20\x01\xa7\x22\x02\x41\x00\x20\x02\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x10\xf5\x03\x21\x02\x20\x00\x28\x02\x00\x20\x01\x10\xcd\x01\x20\x02\x0b\xb7\x04\x02\x07\x7f\x03\x7e\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x0c\x02\x40\x20\x00\x20\x01\x10\xfc\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x02\x40\x20\x00\x20\x05\x41\x04\x6a\x20\x03\x29\x03\x00\x10\xce\x05\x0d\x00\x20\x05\x28\x02\x04\x22\x06\x20\x01\xa7\x22\x07\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x22\x08\x4c\x0d\x01\x41\x20\x21\x09\x42\x80\x80\x80\x80\x30\x21\x0d\x41\x00\x21\x0a\x02\x40\x20\x02\x41\x02\x48\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x0d\x20\x03\x29\x03\x08\x22\x0e\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x0e\x10\xe6\x02\x22\x0d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x02\x40\x20\x0d\xa7\x22\x03\x28\x02\x04\x22\x0b\x41\xff\xff\xff\xff\x07\x71\x22\x02\x41\x01\x4d\x0d\x00\x20\x03\x21\x0a\x0c\x01\x0b\x02\x40\x02\x40\x20\x02\x0e\x02\x00\x01\x00\x0b\x20\x00\x20\x0d\x10\xcd\x01\x0c\x03\x0b\x02\x40\x20\x0b\x41\x7f\x4a\x0d\x00\x20\x03\x2f\x01\x10\x21\x09\x0c\x01\x0b\x20\x03\x2d\x00\x10\x21\x09\x0b\x02\x40\x20\x06\x41\x80\x80\x80\x80\x04\x48\x0d\x00\x20\x00\x41\xe9\xd7\x01\x41\x00\x10\xc2\x02\x0c\x01\x0b\x02\x40\x20\x00\x20\x05\x41\x08\x6a\x20\x06\x10\xb3\x04\x0d\x00\x20\x05\x20\x06\x20\x08\x6b\x22\x03\x36\x02\x04\x02\x40\x02\x40\x20\x04\x45\x0d\x00\x20\x05\x41\x08\x6a\x20\x07\x41\x00\x20\x08\x10\xf5\x03\x0d\x01\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x20\x0a\x45\x0d\x00\x03\x40\x20\x03\x41\x01\x48\x0d\x02\x20\x05\x41\x08\x6a\x20\x0a\x41\x00\x20\x03\x20\x0a\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x22\x02\x20\x03\x20\x02\x48\x1b\x22\x02\x10\xf5\x03\x0d\x04\x20\x03\x20\x02\x6b\x21\x03\x0c\x00\x0b\x00\x0b\x20\x05\x41\x08\x6a\x20\x09\x20\x03\x10\xe2\x05\x45\x0d\x01\x0c\x03\x0b\x20\x05\x20\x03\x36\x02\x04\x0b\x02\x40\x20\x04\x0d\x00\x20\x05\x41\x08\x6a\x20\x07\x41\x00\x20\x08\x10\xf5\x03\x0d\x02\x0b\x20\x00\x20\x0d\x10\xcd\x01\x20\x00\x20\x01\x10\xcd\x01\x20\x05\x41\x08\x6a\x10\xf6\x03\x21\x0c\x0c\x05\x0b\x20\x05\x20\x03\x36\x02\x04\x0b\x20\x05\x28\x02\x08\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x05\x28\x02\x0c\x20\x03\x28\x02\x04\x11\x00\x00\x20\x05\x41\x00\x36\x02\x0c\x0b\x20\x00\x20\x0d\x10\xcd\x01\x0b\x20\x00\x20\x01\x10\xcd\x01\x0c\x01\x0b\x20\x01\x21\x0c\x0b\x20\x05\x41\x20\x6a\x24\x00\x20\x0c\x0b\x9f\x02\x02\x08\x7f\x01\x7e\x02\x40\x20\x00\x20\x01\x10\xfc\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x0f\x0b\x20\x01\xa7\x22\x05\x28\x02\x04\x22\x06\x41\xff\xff\xff\xff\x07\x71\x21\x07\x41\x00\x21\x08\x02\x40\x20\x04\x41\x01\x71\x45\x0d\x00\x41\x00\x21\x08\x20\x06\x41\x7f\x4a\x21\x09\x20\x05\x41\x10\x6a\x22\x0a\x21\x0b\x03\x40\x02\x40\x20\x07\x20\x08\x47\x0d\x00\x20\x07\x21\x08\x0c\x02\x0b\x02\x40\x02\x40\x20\x09\x0d\x00\x20\x0b\x2f\x01\x00\x21\x0c\x0c\x01\x0b\x20\x0a\x20\x08\x6a\x2d\x00\x00\x21\x0c\x0b\x20\x0c\x10\x9f\x04\x45\x0d\x01\x20\x0b\x41\x02\x6a\x21\x0b\x20\x08\x41\x01\x6a\x21\x08\x0c\x00\x0b\x00\x0b\x02\x40\x02\x40\x20\x04\x41\x02\x71\x0d\x00\x20\x07\x21\x0b\x0c\x01\x0b\x20\x07\x41\x01\x74\x41\x0e\x6a\x21\x0c\x03\x40\x20\x07\x22\x0b\x20\x08\x4c\x0d\x01\x02\x40\x02\x40\x20\x06\x41\x7f\x4a\x0d\x00\x20\x05\x20\x0c\x6a\x2f\x01\x00\x21\x09\x0c\x01\x0b\x20\x05\x20\x0b\x6a\x41\x0f\x6a\x2d\x00\x00\x21\x09\x0b\x20\x0b\x41\x7f\x6a\x21\x07\x20\x0c\x41\x7e\x6a\x21\x0c\x20\x09\x10\x9f\x04\x0d\x00\x0b\x0b\x20\x00\x20\x05\x20\x08\x20\x0b\x10\xdc\x05\x21\x0d\x20\x00\x20\x01\x10\xcd\x01\x20\x0d\x0b\x61\x01\x01\x7f\x02\x40\x02\x40\x20\x01\x42\x20\x88\xa7\x22\x04\x41\x7f\x46\x0d\x00\x20\x04\x41\x79\x47\x0d\x01\x20\x01\x10\xc0\x01\x0f\x0b\x20\x01\xa7\x22\x04\x2f\x01\x06\x41\x05\x47\x0d\x00\x20\x04\x29\x03\x20\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x90\x7f\x52\x0d\x00\x20\x01\x10\xc0\x01\x0f\x0b\x20\x00\x41\x8a\xad\x02\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x0b\x09\x00\x20\x00\x20\x01\x10\xea\x05\x0b\xb6\x03\x01\x04\x7f\x23\x00\x41\xc0\x00\x6b\x22\x02\x24\x00\x02\x40\x20\x00\x20\x01\x10\xfc\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x00\x20\x02\x41\x20\x6a\x20\x01\xa7\x22\x03\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x41\x02\x6a\x10\xb3\x04\x0d\x00\x20\x02\x41\x20\x6a\x41\x22\x10\xb4\x04\x0d\x00\x41\x00\x21\x04\x20\x02\x41\x00\x36\x02\x3c\x03\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x04\x20\x03\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x4e\x0d\x00\x20\x03\x20\x02\x41\x3c\x6a\x10\xcc\x05\x22\x04\x41\x78\x6a\x22\x05\x41\x05\x4d\x0d\x01\x20\x04\x41\x22\x46\x0d\x02\x20\x04\x41\xdc\x00\x46\x0d\x02\x0c\x03\x0b\x20\x02\x41\x20\x6a\x41\x22\x10\xb4\x04\x0d\x05\x20\x00\x20\x01\x10\xcd\x01\x20\x02\x41\x20\x6a\x10\xf6\x03\x21\x01\x0c\x06\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x05\x0e\x06\x01\x04\x02\x06\x00\x03\x01\x0b\x41\xe6\x00\x21\x04\x0c\x04\x0b\x41\xe2\x00\x21\x04\x0c\x03\x0b\x41\xee\x00\x21\x04\x0c\x02\x0b\x41\xf2\x00\x21\x04\x0c\x01\x0b\x41\xf4\x00\x21\x04\x0b\x20\x02\x41\x20\x6a\x41\xdc\x00\x10\xb4\x04\x0d\x03\x20\x02\x41\x20\x6a\x20\x04\x10\xb4\x04\x45\x0d\x01\x0c\x03\x0b\x02\x40\x02\x40\x20\x04\x41\x20\x49\x0d\x00\x20\x04\x41\x80\x70\x71\x41\x80\xb0\x03\x47\x0d\x01\x0b\x20\x02\x20\x04\x36\x02\x00\x20\x02\x41\x10\x6a\x41\x10\x41\x83\xad\x02\x20\x02\x10\x5f\x1a\x20\x02\x41\x20\x6a\x20\x02\x41\x10\x6a\x10\xa5\x05\x0d\x03\x0c\x01\x0b\x20\x02\x41\x20\x6a\x20\x04\x10\xf0\x05\x0d\x02\x0b\x20\x02\x28\x02\x3c\x21\x04\x0c\x00\x0b\x00\x0b\x20\x00\x20\x01\x10\xcd\x01\x20\x02\x28\x02\x20\x28\x02\x10\x22\x00\x41\x10\x6a\x20\x02\x28\x02\x24\x20\x00\x28\x02\x04\x11\x00\x00\x20\x02\x41\x00\x36\x02\x24\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x02\x41\xc0\x00\x6a\x24\x00\x20\x01\x0b\x79\x01\x01\x7e\x42\x80\x80\x80\x80\xe0\x00\x21\x04\x02\x40\x20\x00\x20\x01\x10\xfc\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x00\x20\x03\x29\x03\x00\x10\xe6\x02\x22\x04\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x01\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x01\xa7\x20\x04\xa7\x10\x89\x04\x21\x03\x20\x00\x20\x01\x10\xcd\x01\x20\x00\x20\x04\x10\xcd\x01\x20\x03\xad\x21\x04\x0b\x20\x04\x0b\xc7\x04\x01\x09\x7f\x23\x00\x41\x30\x6b\x22\x05\x24\x00\x02\x40\x20\x00\x20\x01\x10\xfc\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x01\xa7\x22\x06\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x22\x07\x45\x0d\x00\x02\x40\x20\x00\x20\x05\x41\x10\x6a\x20\x07\x10\xb3\x04\x0d\x00\x41\x00\x21\x07\x20\x05\x41\x00\x36\x02\x0c\x20\x06\x41\x10\x6a\x21\x08\x03\x40\x02\x40\x02\x40\x20\x07\x20\x06\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x4e\x0d\x00\x20\x06\x20\x05\x41\x0c\x6a\x10\xcc\x05\x21\x09\x02\x40\x02\x40\x20\x04\x45\x0d\x00\x20\x09\x41\xa3\x07\x47\x0d\x00\x20\x05\x20\x05\x28\x02\x0c\x22\x0a\x41\x7f\x6a\x22\x07\x36\x02\x2c\x03\x40\x02\x40\x02\x40\x20\x07\x41\x01\x4e\x0d\x00\x41\x00\x21\x0b\x0c\x01\x0b\x20\x07\x41\x7f\x6a\x21\x0c\x02\x40\x02\x40\x20\x06\x28\x02\x04\x41\x7f\x4a\x0d\x00\x20\x06\x20\x0c\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x21\x0b\x20\x07\x41\x02\x48\x0d\x01\x20\x0b\x41\x80\xf8\x03\x71\x41\x80\xb8\x03\x47\x0d\x01\x20\x06\x20\x07\x41\x7e\x6a\x22\x07\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x22\x0d\x41\x80\xd0\x00\x6a\x41\xff\xff\x03\x71\x41\x80\x08\x4b\x0d\x01\x20\x0d\x41\xff\x07\x71\x41\x0a\x74\x20\x0b\x41\xff\x07\x71\x72\x41\x80\x80\x04\x6a\x21\x0b\x0c\x02\x0b\x20\x08\x20\x0c\x6a\x2d\x00\x00\x21\x0b\x0b\x20\x0c\x21\x07\x0b\x20\x0b\x10\xed\x05\x0d\x00\x0b\x20\x05\x20\x07\x36\x02\x2c\x20\x0b\x10\xee\x05\x45\x0d\x00\x20\x05\x20\x0a\x36\x02\x2c\x02\x40\x03\x40\x20\x0a\x20\x06\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x4e\x0d\x01\x02\x40\x20\x06\x20\x05\x41\x2c\x6a\x10\xcc\x05\x22\x07\x10\xed\x05\x45\x0d\x00\x20\x05\x28\x02\x2c\x21\x0a\x0c\x01\x0b\x0b\x20\x07\x10\xee\x05\x0d\x01\x0b\x20\x05\x41\xc2\x07\x36\x02\x00\x41\x01\x21\x0a\x0c\x01\x0b\x20\x05\x20\x09\x20\x04\x10\xef\x05\x21\x0a\x0b\x20\x05\x21\x07\x41\x7f\x21\x0b\x03\x40\x20\x0b\x41\x01\x6a\x22\x0b\x20\x0a\x4e\x0d\x02\x20\x07\x28\x02\x00\x21\x0c\x20\x07\x41\x04\x6a\x21\x07\x20\x05\x41\x10\x6a\x20\x0c\x10\xf0\x05\x45\x0d\x00\x0c\x04\x0b\x00\x0b\x20\x00\x20\x01\x10\xcd\x01\x20\x05\x41\x10\x6a\x10\xf6\x03\x21\x01\x0c\x03\x0b\x20\x05\x28\x02\x0c\x21\x07\x0c\x00\x0b\x00\x0b\x20\x00\x20\x01\x10\xcd\x01\x20\x05\x28\x02\x10\x28\x02\x10\x22\x07\x41\x10\x6a\x20\x05\x28\x02\x14\x20\x07\x28\x02\x04\x11\x00\x00\x20\x05\x41\x00\x36\x02\x14\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x05\x41\x30\x6a\x24\x00\x20\x01\x0b\x11\x00\x20\x00\x41\xb0\xb4\x03\x41\xf0\xb9\x03\x41\x16\x10\xeb\x09\x0b\x77\x01\x05\x7f\x41\xe8\x02\x21\x01\x41\x00\x21\x02\x02\x40\x03\x40\x20\x02\x20\x01\x4a\x0d\x01\x02\x40\x20\x01\x20\x02\x6a\x41\x01\x76\x22\x03\x41\x02\x74\x41\xc0\xa3\x03\x6a\x28\x02\x00\x22\x04\x41\x0f\x76\x22\x05\x20\x00\x4d\x0d\x00\x20\x03\x41\x7f\x6a\x21\x01\x0c\x01\x0b\x02\x40\x20\x04\x41\x08\x76\x41\xff\x00\x71\x20\x05\x6a\x20\x00\x4d\x0d\x00\x41\x01\x0f\x0b\x20\x03\x41\x01\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x20\x00\x41\xe0\xb2\x03\x41\x90\xb4\x03\x41\x06\x10\xeb\x09\x0b\xad\x05\x01\x07\x7f\x02\x40\x02\x40\x02\x40\x20\x01\x41\xff\x00\x4b\x0d\x00\x20\x02\x45\x0d\x01\x20\x01\x41\x20\x6a\x20\x01\x20\x01\x41\xbf\x7f\x6a\x41\x1a\x49\x1b\x21\x01\x0c\x02\x0b\x41\x00\x21\x03\x20\x02\x41\x00\x47\x21\x04\x41\xe8\x02\x21\x05\x03\x40\x20\x03\x20\x05\x4a\x0d\x02\x02\x40\x20\x05\x20\x03\x6a\x41\x01\x76\x22\x06\x41\x02\x74\x41\xc0\xa3\x03\x6a\x28\x02\x00\x22\x07\x41\x0f\x76\x22\x08\x20\x01\x4d\x0d\x00\x20\x06\x41\x7f\x6a\x21\x05\x0c\x01\x0b\x02\x40\x20\x07\x41\x08\x76\x41\xff\x00\x71\x20\x08\x6a\x20\x01\x4b\x0d\x00\x20\x06\x41\x01\x6a\x21\x03\x0c\x01\x0b\x0b\x20\x07\x41\x08\x74\x41\x80\x1e\x71\x21\x09\x20\x06\x41\xf0\xae\x03\x6a\x2d\x00\x00\x21\x03\x02\x40\x20\x07\x41\x04\x76\x22\x07\x41\x0f\x71\x22\x05\x41\x0c\x4b\x0d\x00\x20\x09\x20\x03\x72\x21\x06\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x05\x0e\x0d\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x06\x07\x07\x00\x0b\x02\x40\x20\x07\x41\x01\x71\x20\x02\x46\x0d\x00\x20\x02\x41\x02\x47\x0d\x0a\x20\x05\x41\x02\x49\x0d\x0a\x0b\x20\x01\x20\x08\x6b\x20\x06\x41\x02\x74\x41\xc0\xa3\x03\x6a\x28\x02\x00\x41\x0f\x76\x6a\x21\x01\x0c\x09\x0b\x20\x02\x41\x00\x47\x20\x01\x20\x08\x6b\x22\x05\x41\x01\x71\x46\x0d\x08\x20\x05\x41\x01\x73\x20\x08\x6a\x21\x01\x0c\x08\x0b\x02\x40\x20\x01\x20\x08\x6b\x22\x05\x41\x01\x47\x0d\x00\x41\x01\x41\x7f\x20\x02\x1b\x20\x01\x6a\x21\x01\x0c\x08\x0b\x20\x05\x20\x02\x45\x41\x01\x74\x47\x0d\x07\x41\x02\x41\x7e\x20\x02\x1b\x20\x01\x6a\x21\x01\x0c\x07\x0b\x20\x01\x20\x08\x6b\x21\x05\x02\x40\x20\x02\x0d\x00\x20\x00\x41\x99\x07\x36\x02\x04\x20\x00\x20\x05\x20\x06\x41\x05\x76\x41\xfe\x00\x71\x41\xe0\xb1\x03\x6a\x2f\x01\x00\x6a\x36\x02\x00\x41\x02\x0f\x0b\x20\x05\x20\x03\x41\x3f\x71\x41\x01\x74\x41\xe0\xb1\x03\x6a\x2f\x01\x00\x6a\x21\x01\x0c\x06\x0b\x20\x02\x41\x01\x46\x0d\x05\x20\x06\x20\x02\x41\x02\x46\x41\x05\x74\x6a\x21\x01\x0c\x05\x0b\x20\x02\x41\x01\x46\x0d\x04\x20\x06\x41\x01\x74\x41\xe0\xb1\x03\x6a\x2f\x01\x00\x20\x02\x41\x02\x46\x6a\x21\x01\x0c\x04\x0b\x20\x05\x41\x77\x6a\x20\x04\x47\x0d\x03\x20\x06\x41\x01\x74\x41\xe0\xb1\x03\x6a\x2f\x01\x00\x21\x01\x0c\x03\x0b\x20\x05\x41\x75\x6a\x20\x02\x47\x0d\x02\x20\x00\x20\x03\x41\x3f\x71\x41\x01\x74\x41\xe0\xb1\x03\x6a\x2f\x01\x00\x36\x02\x04\x20\x00\x20\x01\x20\x08\x6b\x20\x06\x41\x05\x76\x41\xfe\x00\x71\x41\xe0\xb1\x03\x6a\x2f\x01\x00\x6a\x36\x02\x00\x41\x02\x0f\x0b\x20\x02\x0d\x01\x20\x00\x20\x09\x41\x07\x76\x41\xe0\xb1\x03\x6a\x2f\x01\x00\x36\x02\x00\x20\x00\x20\x03\x41\x0f\x71\x41\x01\x74\x41\xe0\xb1\x03\x6a\x2f\x01\x00\x36\x02\x08\x20\x00\x20\x03\x41\x03\x76\x41\x1e\x71\x41\xe0\xb1\x03\x6a\x2f\x01\x00\x36\x02\x04\x41\x03\x0f\x0b\x20\x01\x41\x60\x6a\x20\x01\x20\x01\x41\x9f\x7f\x6a\x41\x1a\x49\x1b\x21\x01\x0b\x20\x00\x20\x01\x36\x02\x00\x41\x01\x0b\x47\x01\x01\x7f\x02\x40\x02\x40\x20\x01\x41\x80\x80\x04\x49\x0d\x00\x41\x7f\x21\x02\x20\x00\x20\x01\x41\x80\x80\x7c\x6a\x22\x01\x41\x0a\x76\x41\x80\xb0\x03\x6a\x10\xb5\x04\x0d\x01\x20\x01\x41\xff\x07\x71\x41\x80\xb8\x03\x72\x21\x01\x0b\x20\x00\x20\x01\x10\xb5\x04\x21\x02\x0b\x20\x02\x0b\xd3\x03\x02\x05\x7f\x02\x7e\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x0a\x02\x40\x20\x00\x20\x01\x10\xfc\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x05\x41\x08\x6a\x41\x07\x10\xb3\x04\x1a\x20\x05\x41\x08\x6a\x41\x3c\x10\xb4\x04\x1a\x20\x05\x41\x08\x6a\x20\x04\x41\x03\x74\x22\x06\x41\xf0\xab\x02\x6a\x28\x02\x00\x22\x07\x10\xa5\x05\x1a\x02\x40\x41\xe1\x02\x20\x04\x76\x41\x01\x71\x45\x0d\x00\x20\x05\x41\x08\x6a\x41\x20\x10\xb4\x04\x1a\x20\x05\x41\x08\x6a\x20\x06\x41\xf4\xab\x02\x6a\x28\x02\x00\x10\xa5\x05\x1a\x20\x05\x41\x08\x6a\x41\xd8\xac\x02\x10\xa5\x05\x1a\x42\x80\x80\x80\x80\xe0\x00\x21\x0a\x02\x40\x20\x00\x20\x03\x29\x03\x00\x10\xfc\x03\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x01\x10\xcd\x01\x20\x05\x28\x02\x08\x28\x02\x10\x22\x04\x41\x10\x6a\x20\x05\x28\x02\x0c\x20\x04\x28\x02\x04\x11\x00\x00\x20\x05\x41\x00\x36\x02\x0c\x0c\x02\x0b\x41\x00\x21\x04\x20\x0b\xa7\x22\x08\x41\x10\x6a\x22\x09\x21\x06\x02\x40\x03\x40\x20\x04\x20\x08\x28\x02\x04\x22\x03\x41\xff\xff\xff\xff\x07\x71\x4f\x0d\x01\x02\x40\x02\x40\x20\x03\x41\x7f\x4a\x0d\x00\x20\x06\x2f\x01\x00\x21\x03\x0c\x01\x0b\x20\x09\x20\x04\x6a\x2d\x00\x00\x21\x03\x0b\x02\x40\x02\x40\x20\x03\x41\x22\x47\x0d\x00\x20\x05\x41\x08\x6a\x41\xdb\xac\x02\x10\xa5\x05\x1a\x0c\x01\x0b\x20\x05\x41\x08\x6a\x20\x03\x10\xb5\x04\x1a\x0b\x20\x06\x41\x02\x6a\x21\x06\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x00\x20\x0b\x10\xcd\x01\x20\x05\x41\x08\x6a\x41\x22\x10\xb4\x04\x1a\x0b\x20\x05\x41\x08\x6a\x41\x3e\x10\xb4\x04\x1a\x20\x05\x41\x08\x6a\x20\x01\x10\xe5\x05\x1a\x20\x05\x41\x08\x6a\x41\xe2\xac\x02\x10\xa5\x05\x1a\x20\x05\x41\x08\x6a\x20\x07\x10\xa5\x05\x1a\x20\x05\x41\x08\x6a\x41\x3e\x10\xb4\x04\x1a\x20\x05\x41\x08\x6a\x10\xf6\x03\x21\x0a\x0b\x20\x05\x41\x20\x6a\x24\x00\x20\x0a\x0b\xb2\x02\x02\x04\x7f\x01\x7c\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x02\x40\x03\x40\x41\x7f\x21\x04\x41\x00\x21\x05\x02\x40\x41\x07\x20\x02\x42\x20\x88\xa7\x22\x06\x20\x06\x41\x0b\x6a\x41\x11\x4b\x1b\x41\x09\x6a\x22\x06\x41\x10\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x06\x0e\x11\x03\x04\x04\x04\x04\x04\x04\x04\x04\x00\x00\x00\x00\x04\x04\x06\x01\x03\x0b\x20\x02\xa7\x21\x05\x0c\x01\x0b\x02\x40\x20\x02\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\x22\x07\x20\x07\x61\x0d\x00\x41\x00\x21\x05\x0c\x01\x0b\x02\x40\x20\x07\x44\x00\x00\x00\x00\x00\x00\xe0\xc1\x63\x41\x01\x73\x45\x0d\x00\x02\x40\x20\x07\x44\x00\x00\xc0\xff\xff\xff\xdf\x41\x64\x41\x01\x73\x0d\x00\x41\xff\xff\xff\xff\x07\x21\x05\x0c\x02\x0b\x20\x07\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x07\xaa\x21\x05\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x05\x0b\x20\x03\x20\x05\x36\x02\x0c\x41\x00\x21\x04\x0c\x03\x0b\x41\x00\x21\x04\x20\x03\x41\x0c\x6a\x20\x02\xa7\x41\x04\x6a\x41\x00\x10\xa5\x04\x20\x00\x20\x02\x10\xcd\x01\x20\x03\x28\x02\x0c\x21\x05\x0c\x02\x0b\x20\x00\x20\x02\x10\xed\x03\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x0b\x0b\x20\x01\x20\x05\x36\x02\x00\x20\x03\x41\x10\x6a\x24\x00\x20\x04\x0b\x98\x01\x01\x03\x7f\x20\x00\x28\x02\x04\x22\x03\x41\xff\xff\xff\xff\x07\x71\x21\x04\x41\x7f\x21\x05\x02\x40\x02\x40\x02\x40\x20\x03\x41\x7f\x4a\x0d\x00\x20\x00\x20\x02\x41\x01\x74\x6a\x41\x10\x6a\x21\x00\x03\x40\x20\x02\x20\x04\x4e\x0d\x03\x20\x00\x2f\x01\x00\x20\x01\x46\x0d\x02\x20\x00\x41\x02\x6a\x21\x00\x20\x02\x41\x01\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x20\x01\x41\xff\x01\x4b\x0d\x01\x20\x00\x41\x10\x6a\x21\x00\x20\x01\x41\xff\x01\x71\x21\x01\x03\x40\x20\x02\x20\x04\x4e\x0d\x02\x20\x00\x20\x02\x6a\x2d\x00\x00\x20\x01\x46\x0d\x01\x20\x02\x41\x01\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x20\x02\x21\x05\x0b\x20\x05\x0b\x4a\x01\x01\x7f\x02\x40\x20\x02\x42\xff\xff\xff\xff\x07\x56\x0d\x00\x20\x00\x20\x01\x20\x02\x10\xbb\x03\x0f\x0b\x02\x40\x20\x00\x20\x02\x10\xf5\x05\x22\x03\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x00\x20\x01\x20\x03\x20\x01\x41\x00\x10\xb4\x01\x21\x02\x20\x00\x20\x03\x10\xe4\x02\x20\x02\x0b\x7c\x01\x02\x7f\x23\x00\x41\x30\x6b\x22\x02\x24\x00\x02\x40\x02\x40\x20\x01\x42\xff\xff\xff\xff\x07\x56\x0d\x00\x20\x01\xa7\x41\x80\x80\x80\x80\x78\x72\x21\x03\x0c\x01\x0b\x20\x02\x20\x01\x37\x03\x00\x20\x02\x41\x10\x6a\x41\x18\x41\x97\xad\x02\x20\x02\x10\x5f\x1a\x41\x00\x21\x03\x20\x00\x20\x02\x41\x10\x6a\x10\xc7\x02\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x28\x02\x10\x20\x01\xa7\x41\x01\x10\xb7\x04\x21\x03\x0b\x20\x02\x41\x30\x6a\x24\x00\x20\x03\x0b\xc7\x02\x02\x01\x7f\x01\x7c\x02\x40\x03\x40\x02\x40\x41\x07\x20\x02\x42\x20\x88\xa7\x22\x03\x20\x03\x41\x0b\x6a\x41\x11\x4b\x1b\x41\x09\x6a\x22\x03\x41\x10\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x03\x0e\x11\x03\x04\x04\x04\x04\x04\x04\x04\x04\x00\x00\x00\x00\x04\x04\x01\x02\x03\x0b\x20\x01\x20\x02\x42\x20\x86\x42\x20\x87\x37\x03\x00\x41\x00\x0f\x0b\x20\x01\x42\x00\x37\x03\x00\x0c\x04\x0b\x02\x40\x20\x02\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\x22\x04\x20\x04\x61\x0d\x00\x20\x01\x42\x00\x37\x03\x00\x41\x00\x0f\x0b\x02\x40\x20\x04\x44\x00\x00\x00\x00\x00\x00\xe0\xc3\x63\x41\x01\x73\x0d\x00\x20\x01\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x03\x00\x41\x00\x0f\x0b\x02\x40\x20\x04\x44\x00\x00\x00\x00\x00\x00\xe0\x43\x64\x41\x01\x73\x0d\x00\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x37\x03\x00\x41\x00\x0f\x0b\x02\x40\x02\x40\x20\x04\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x43\x63\x45\x0d\x00\x20\x04\xb0\x21\x02\x0c\x01\x0b\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x21\x02\x0b\x20\x01\x20\x02\x37\x03\x00\x41\x00\x0f\x0b\x20\x01\x20\x02\xa7\x41\x04\x6a\x41\x00\x10\xcf\x04\x1a\x20\x00\x20\x02\x10\xcd\x01\x41\x00\x0f\x0b\x20\x00\x20\x02\x10\xed\x03\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x0b\x20\x01\x42\x00\x37\x03\x00\x0b\x41\x7f\x0b\x38\x01\x01\x7e\x02\x40\x20\x00\x20\x01\x20\x02\x20\x01\x41\x00\x10\xb4\x01\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x05\x20\x01\x20\x03\x20\x04\x10\xef\x02\x21\x05\x0b\x20\x05\x0b\xa7\x01\x02\x02\x7f\x01\x7e\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x02\x10\xb3\x04\x1a\x41\x00\x21\x05\x02\x40\x02\x40\x03\x40\x20\x05\x20\x02\x4e\x0d\x01\x02\x40\x02\x40\x20\x00\x20\x04\x41\x04\x6a\x20\x03\x29\x03\x00\x10\xc9\x04\x0d\x00\x20\x04\x41\x08\x6a\x20\x04\x2f\x01\x04\x10\xb5\x04\x45\x0d\x01\x0b\x20\x04\x28\x02\x08\x28\x02\x10\x22\x05\x41\x10\x6a\x20\x04\x28\x02\x0c\x20\x05\x28\x02\x04\x11\x00\x00\x20\x04\x41\x00\x36\x02\x0c\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x0c\x03\x0b\x20\x03\x41\x08\x6a\x21\x03\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x04\x41\x08\x6a\x10\xf6\x03\x21\x06\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x06\x0b\x97\x02\x03\x03\x7f\x01\x7e\x01\x7c\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x20\x02\x10\xb3\x04\x0d\x00\x41\x7f\x21\x05\x02\x40\x02\x40\x03\x40\x20\x05\x41\x01\x6a\x22\x05\x20\x02\x4e\x0d\x01\x02\x40\x02\x40\x20\x03\x29\x03\x00\x22\x07\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x07\xa7\x22\x06\x41\xff\xff\xc3\x00\x4d\x0d\x01\x0c\x04\x0b\x20\x00\x20\x04\x41\x18\x6a\x20\x07\x10\xdf\x04\x0d\x04\x20\x04\x2b\x03\x18\x22\x08\x44\x00\x00\x00\x00\x00\x00\x00\x00\x63\x0d\x03\x20\x08\x44\x00\x00\x00\x00\xff\xff\x30\x41\x64\x0d\x03\x02\x40\x02\x40\x20\x08\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x08\xaa\x21\x06\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x06\x0b\x20\x08\x20\x06\xb7\x62\x0d\x03\x0b\x20\x03\x41\x08\x6a\x21\x03\x20\x04\x20\x06\x10\xf0\x05\x45\x0d\x00\x0c\x03\x0b\x00\x0b\x20\x04\x10\xf6\x03\x21\x07\x0c\x02\x0b\x20\x00\x41\x84\xae\x02\x41\x00\x10\xa6\x04\x0b\x20\x04\x28\x02\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x04\x28\x02\x04\x20\x03\x28\x02\x04\x11\x00\x00\x20\x04\x41\x00\x36\x02\x04\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x07\x0b\xe3\x02\x02\x01\x7f\x08\x7e\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x20\x00\x20\x04\x41\x08\x6a\x41\x00\x10\xb3\x04\x1a\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x42\x80\x80\x80\x80\x30\x21\x06\x02\x40\x02\x40\x20\x00\x20\x03\x29\x03\x00\x10\xfe\x02\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x00\x20\x07\x41\xf0\x00\x20\x07\x41\x00\x10\xb4\x01\x10\x9b\x03\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x04\x20\x06\x10\xfb\x05\x41\x00\x48\x0d\x00\x20\x03\x41\x08\x6a\x21\x03\x20\x04\x29\x03\x00\x22\x08\x42\x7f\x7c\x21\x09\x20\x02\xac\x21\x0a\x42\x00\x21\x0b\x03\x40\x02\x40\x02\x40\x20\x0b\x20\x08\x59\x0d\x00\x20\x00\x20\x00\x20\x06\x20\x0b\x10\xf4\x05\x10\xf2\x03\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x04\x41\x08\x6a\x20\x0c\x10\xe5\x05\x1a\x20\x0b\x42\x01\x7c\x21\x0c\x20\x0b\x20\x09\x59\x0d\x01\x20\x0c\x20\x0a\x59\x0d\x01\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xa6\x05\x45\x0d\x01\x0c\x03\x0b\x20\x00\x20\x07\x10\xcd\x01\x20\x00\x20\x06\x10\xcd\x01\x20\x04\x41\x08\x6a\x10\xf6\x03\x21\x05\x0c\x03\x0b\x20\x03\x41\x08\x6a\x21\x03\x20\x0c\x21\x0b\x0c\x00\x0b\x00\x0b\x20\x00\x20\x07\x10\xcd\x01\x20\x00\x20\x06\x10\xcd\x01\x20\x04\x28\x02\x08\x28\x02\x10\x22\x00\x41\x10\x6a\x20\x04\x28\x02\x0c\x20\x00\x28\x02\x04\x11\x00\x00\x20\x04\x41\x00\x36\x02\x0c\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x05\x0b\x38\x00\x02\x40\x20\x00\x20\x02\x41\x30\x20\x02\x41\x00\x10\xb4\x01\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x42\x00\x37\x03\x00\x41\x7f\x0f\x0b\x20\x00\x20\x01\x20\x02\x10\xfc\x05\x0b\x23\x00\x20\x00\x20\x01\x20\x02\x42\x00\x42\xff\xff\xff\xff\xff\xff\xff\x0f\x42\x00\x10\xfd\x05\x21\x01\x20\x00\x20\x02\x10\xcd\x01\x20\x01\x0b\x54\x00\x02\x40\x20\x00\x20\x01\x20\x02\x10\xc0\x01\x10\xf6\x05\x22\x00\x0d\x00\x02\x40\x20\x01\x29\x03\x00\x22\x02\x42\x7f\x55\x0d\x00\x20\x01\x20\x02\x20\x05\x7c\x22\x02\x37\x03\x00\x0b\x02\x40\x20\x02\x20\x03\x59\x0d\x00\x20\x01\x20\x03\x37\x03\x00\x20\x00\x0f\x0b\x20\x02\x20\x04\x57\x0d\x00\x20\x01\x20\x04\x37\x03\x00\x0b\x20\x00\x0b\x30\x00\x02\x40\x20\x00\x20\x01\x10\xff\x05\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x41\x03\x41\x02\x20\x01\xa7\x1b\x10\xc5\x01\x21\x01\x0b\x20\x01\x0b\x68\x01\x01\x7f\x02\x40\x02\x40\x20\x01\x42\x20\x88\xa7\x41\x01\x6a\x22\x02\x41\x02\x4b\x0d\x00\x02\x40\x02\x40\x20\x02\x0e\x03\x01\x02\x00\x01\x0b\x20\x01\x10\xc0\x01\x0f\x0b\x20\x01\xa7\x22\x02\x2f\x01\x06\x41\x06\x47\x0d\x00\x20\x02\x29\x03\x20\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x10\x51\x0d\x01\x0b\x20\x00\x41\xa1\xae\x02\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x01\x0b\x09\x00\x20\x00\x20\x01\x10\xff\x05\x0b\x37\x02\x01\x7f\x01\x7e\x02\x40\x02\x40\x20\x03\x28\x02\x04\x22\x04\x45\x0d\x00\x42\x80\x80\x80\x80\x10\x21\x05\x20\x04\x41\x0b\x6a\x41\x12\x49\x0d\x01\x0b\x20\x00\x20\x01\x20\x02\x20\x03\x10\x82\x06\x21\x05\x0b\x20\x05\x0b\x45\x02\x01\x7f\x01\x7c\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xdf\x04\x21\x00\x20\x04\x2b\x03\x08\x21\x05\x20\x04\x41\x10\x6a\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x20\x05\x20\x05\x62\xad\x42\x80\x80\x80\x80\x10\x84\x20\x00\x1b\x0b\x37\x02\x01\x7f\x01\x7e\x02\x40\x02\x40\x20\x03\x28\x02\x04\x22\x04\x45\x0d\x00\x42\x80\x80\x80\x80\x10\x21\x05\x20\x04\x41\x0b\x6a\x41\x12\x49\x0d\x01\x0b\x20\x00\x20\x01\x20\x02\x20\x03\x10\x84\x06\x21\x05\x0b\x20\x05\x0b\x5f\x03\x01\x7f\x01\x7e\x01\x7c\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xdf\x04\x45\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0c\x01\x0b\x20\x04\x2b\x03\x08\x99\x22\x06\x44\x00\x00\x00\x00\x00\x00\xf0\x7f\x62\x20\x06\x20\x06\x61\x71\xad\x42\x80\x80\x80\x80\x10\x84\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x26\x00\x42\x80\x80\x80\x80\xe0\x00\x20\x00\x20\x03\x29\x03\x00\x10\xd4\x03\x22\x00\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x20\x00\x41\x00\x48\x1b\x0b\x72\x02\x01\x7f\x02\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x03\x29\x03\x00\x22\x05\x42\x20\x88\xa7\x22\x03\x45\x0d\x00\x42\x80\x80\x80\x80\x10\x21\x06\x20\x03\x41\x0b\x6a\x41\x12\x49\x0d\x01\x0b\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x05\x10\xdf\x04\x45\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x0c\x01\x0b\x20\x04\x2b\x03\x08\x10\x84\x04\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x21\x06\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x06\x0b\x9f\x02\x03\x02\x7f\x01\x7e\x02\x7c\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x02\x40\x02\x40\x20\x00\x20\x01\x10\x88\x06\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x21\x06\x0c\x01\x0b\x20\x00\x20\x04\x20\x01\x10\xf8\x03\x0d\x00\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x00\x10\xce\x05\x0d\x00\x02\x40\x20\x04\x2b\x03\x00\x22\x07\x99\x22\x08\x44\x00\x00\x00\x00\x00\x00\xf0\x7f\x62\x20\x08\x20\x08\x61\x71\x0d\x00\x20\x00\x42\x80\x80\x80\x80\xc0\x7e\x20\x07\xbd\x22\x06\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x06\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x10\xf2\x03\x21\x06\x0c\x01\x0b\x02\x40\x02\x40\x20\x03\x35\x02\x04\x42\x20\x86\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x41\x04\x21\x05\x41\x00\x21\x03\x0c\x01\x0b\x02\x40\x20\x04\x28\x02\x0c\x22\x03\x41\xe5\x00\x49\x0d\x00\x20\x00\x41\xa9\xb0\x02\x41\x00\x10\xa6\x04\x0c\x02\x0b\x20\x03\x41\x01\x6a\x21\x03\x41\x05\x21\x05\x0b\x20\x04\x20\x03\x36\x02\x0c\x20\x00\x20\x07\x41\x0a\x20\x03\x20\x05\x10\xec\x02\x21\x06\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x06\x0b\x75\x01\x01\x7f\x02\x40\x02\x40\x20\x01\x42\x20\x88\xa7\x22\x02\x45\x0d\x00\x20\x02\x41\x0b\x6a\x41\x12\x49\x0d\x01\x0b\x20\x01\x10\xc0\x01\x0f\x0b\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x02\x2f\x01\x06\x41\x04\x47\x0d\x00\x02\x40\x20\x02\x29\x03\x20\x22\x01\x42\x20\x88\xa7\x22\x02\x45\x0d\x00\x20\x02\x41\x0b\x6a\x41\x12\x49\x0d\x01\x0b\x20\x01\x10\xc0\x01\x0f\x0b\x20\x00\x41\xfd\xaf\x02\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x0b\xe7\x01\x03\x01\x7f\x01\x7e\x01\x7c\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x02\x40\x02\x40\x20\x00\x20\x01\x10\x88\x06\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x21\x05\x0c\x01\x0b\x20\x00\x20\x04\x20\x01\x10\xf8\x03\x0d\x00\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x00\x10\xce\x05\x0d\x00\x02\x40\x20\x04\x28\x02\x0c\x22\x03\x41\xe5\x00\x49\x0d\x00\x20\x00\x41\xa9\xb0\x02\x41\x00\x10\xa6\x04\x0c\x01\x0b\x02\x40\x20\x04\x2b\x03\x00\x22\x06\x99\x44\x50\xef\xe2\xd6\xe4\x1a\x4b\x44\x66\x41\x01\x73\x0d\x00\x20\x00\x42\x80\x80\x80\x80\xc0\x7e\x20\x06\xbd\x22\x05\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x05\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x10\xf2\x03\x21\x05\x0c\x01\x0b\x20\x00\x20\x06\x41\x0a\x20\x03\x41\x02\x10\xec\x02\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x94\x02\x03\x01\x7f\x01\x7e\x02\x7c\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x02\x40\x02\x40\x20\x00\x20\x01\x10\x88\x06\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x21\x05\x0c\x01\x0b\x20\x00\x20\x04\x20\x01\x10\xf8\x03\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x03\x29\x03\x00\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x04\x29\x03\x00\x21\x05\x0c\x01\x0b\x20\x00\x20\x04\x41\x0c\x6a\x20\x01\x10\xce\x05\x0d\x02\x20\x04\x2b\x03\x00\x22\x06\x99\x22\x07\x44\x00\x00\x00\x00\x00\x00\xf0\x7f\x62\x20\x07\x20\x07\x61\x71\x0d\x01\x20\x06\xbd\x21\x05\x0b\x20\x00\x42\x80\x80\x80\x80\xc0\x7e\x20\x05\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x05\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x10\xf2\x03\x21\x05\x0c\x01\x0b\x02\x40\x20\x04\x28\x02\x0c\x22\x03\x41\x7f\x6a\x41\xe4\x00\x49\x0d\x00\x20\x00\x41\xa9\xb0\x02\x41\x00\x10\xa6\x04\x0c\x01\x0b\x20\x00\x20\x06\x41\x0a\x20\x03\x41\x01\x10\xec\x02\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\xa7\x01\x02\x02\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x05\x24\x00\x02\x40\x20\x00\x20\x01\x10\x88\x06\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x41\x0a\x21\x06\x02\x40\x02\x40\x20\x04\x0d\x00\x20\x03\x29\x03\x00\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x07\x10\x8c\x06\x22\x06\x41\x00\x48\x0d\x01\x0b\x20\x00\x20\x05\x41\x08\x6a\x20\x01\x10\xf8\x03\x21\x04\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x20\x04\x0d\x01\x20\x00\x20\x05\x2b\x03\x08\x20\x06\x41\x00\x41\x00\x10\xec\x02\x21\x01\x0c\x01\x0b\x20\x00\x20\x01\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x05\x41\x10\x6a\x24\x00\x20\x01\x0b\x49\x01\x02\x7f\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x41\x7f\x21\x03\x02\x40\x20\x00\x20\x02\x41\x0c\x6a\x20\x01\x10\xce\x05\x0d\x00\x20\x02\x28\x02\x0c\x22\x03\x41\x7e\x6a\x41\x23\x49\x0d\x00\x20\x00\x41\x8a\xb0\x02\x41\x00\x10\xa6\x04\x41\x7f\x21\x03\x0b\x20\x02\x41\x10\x6a\x24\x00\x20\x03\x0b\x09\x00\x20\x00\x20\x01\x10\x88\x06\x0b\x91\x01\x02\x02\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x03\x29\x03\x00\x10\xce\x02\x22\x05\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x0c\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x02\x40\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x08\x10\xc9\x04\x0d\x00\x02\x40\x20\x04\x28\x02\x0c\x22\x03\x45\x0d\x00\x42\x80\x80\x80\x80\xc0\x7e\x21\x06\x20\x03\x41\x7e\x6a\x41\x22\x4b\x0d\x01\x0b\x20\x00\x20\x05\x20\x05\x10\x9c\x04\x6a\x41\x00\x20\x03\x41\x81\x08\x10\x9d\x04\x21\x06\x0b\x20\x00\x20\x05\x10\xcf\x02\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x06\x0b\x3b\x01\x01\x7e\x02\x40\x20\x00\x20\x03\x29\x03\x00\x10\xce\x02\x22\x03\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x00\x20\x03\x20\x03\x10\x9c\x04\x6a\x41\x00\x41\x0a\x41\x00\x10\x9d\x04\x21\x04\x20\x00\x20\x03\x10\xcf\x02\x20\x04\x0b\xad\x04\x02\x07\x7f\x01\x7e\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x02\x40\x20\x00\x20\x03\x29\x03\x00\x10\xe6\x02\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x05\x41\x08\x6a\x41\x00\x10\xb3\x04\x1a\x20\x0c\xa7\x22\x06\x41\x10\x6a\x21\x07\x41\x00\x21\x08\x02\x40\x03\x40\x20\x08\x20\x06\x28\x02\x04\x22\x03\x41\xff\xff\xff\xff\x07\x71\x4e\x0d\x01\x02\x40\x02\x40\x20\x03\x41\x7f\x4a\x0d\x00\x20\x06\x20\x08\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x21\x03\x0c\x01\x0b\x20\x07\x20\x08\x6a\x2d\x00\x00\x21\x03\x0b\x02\x40\x02\x40\x20\x03\x41\x25\x47\x0d\x00\x02\x40\x20\x00\x20\x06\x20\x08\x10\x91\x06\x22\x03\x41\x00\x48\x0d\x00\x20\x08\x41\x03\x6a\x21\x09\x02\x40\x20\x03\x41\xff\x00\x4a\x0d\x00\x02\x40\x20\x04\x45\x0d\x00\x20\x09\x21\x08\x0c\x04\x0b\x41\x25\x20\x03\x20\x03\x10\x92\x06\x22\x0a\x1b\x21\x03\x20\x08\x41\x01\x6a\x20\x09\x20\x0a\x1b\x21\x08\x0c\x03\x0b\x02\x40\x02\x40\x20\x03\x41\x60\x71\x41\xc0\x01\x47\x0d\x00\x20\x03\x41\x1f\x71\x21\x03\x41\x80\x01\x21\x0b\x41\x01\x21\x08\x0c\x01\x0b\x02\x40\x20\x03\x41\x70\x71\x41\xe0\x01\x47\x0d\x00\x20\x03\x41\x0f\x71\x21\x03\x41\x80\x10\x21\x0b\x41\x02\x21\x08\x0c\x01\x0b\x20\x03\x41\x07\x71\x41\x00\x20\x03\x41\x78\x71\x41\xf0\x01\x46\x22\x08\x1b\x21\x03\x41\x80\x80\x04\x41\x01\x20\x08\x1b\x21\x0b\x41\x03\x41\x00\x20\x08\x1b\x21\x08\x0b\x02\x40\x02\x40\x03\x40\x20\x08\x41\x01\x48\x0d\x01\x20\x00\x20\x06\x20\x09\x10\x91\x06\x22\x0a\x41\x00\x48\x0d\x03\x20\x0a\x41\xc0\x01\x71\x41\x80\x01\x47\x0d\x02\x20\x08\x41\x7f\x6a\x21\x08\x20\x0a\x41\x3f\x71\x20\x03\x41\x06\x74\x72\x21\x03\x20\x09\x41\x03\x6a\x21\x09\x0c\x00\x0b\x00\x0b\x20\x03\x20\x0b\x48\x0d\x00\x20\x03\x41\xff\xff\xc3\x00\x4a\x0d\x00\x20\x09\x21\x08\x20\x03\x41\x80\x70\x71\x41\x80\xb0\x03\x47\x0d\x03\x0b\x20\x00\x41\xc8\xb2\x02\x41\x00\x10\x93\x06\x0b\x20\x00\x20\x0c\x10\xcd\x01\x20\x05\x28\x02\x08\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x05\x28\x02\x0c\x20\x03\x28\x02\x04\x11\x00\x00\x20\x05\x41\x00\x36\x02\x0c\x42\x80\x80\x80\x80\xe0\x00\x21\x0c\x0c\x04\x0b\x20\x08\x41\x01\x6a\x21\x08\x0b\x20\x05\x41\x08\x6a\x20\x03\x10\xf0\x05\x1a\x0c\x00\x0b\x00\x0b\x20\x00\x20\x0c\x10\xcd\x01\x20\x05\x41\x08\x6a\x10\xf6\x03\x21\x0c\x0b\x20\x05\x41\x20\x6a\x24\x00\x20\x0c\x0b\x8a\x01\x01\x03\x7f\x41\xd8\xb2\x02\x21\x03\x02\x40\x02\x40\x20\x01\x28\x02\x04\x22\x04\x41\xff\xff\xff\xff\x07\x71\x22\x05\x20\x02\x4c\x0d\x00\x02\x40\x02\x40\x20\x04\x41\x7f\x4a\x0d\x00\x20\x01\x20\x02\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x21\x04\x0c\x01\x0b\x20\x01\x20\x02\x6a\x41\x10\x6a\x2d\x00\x00\x21\x04\x0b\x20\x04\x41\x25\x47\x0d\x00\x41\xe5\xb2\x02\x21\x03\x20\x02\x41\x02\x6a\x20\x05\x4e\x0d\x00\x20\x01\x20\x02\x41\x01\x6a\x41\x02\x10\x98\x06\x22\x02\x41\x7f\x4a\x0d\x01\x0b\x20\x00\x20\x03\x41\x00\x10\x93\x06\x41\x7f\x21\x02\x0b\x20\x02\x0b\x24\x01\x01\x7f\x41\x00\x21\x01\x02\x40\x20\x00\x41\xff\x01\x4a\x0d\x00\x41\xbc\xb2\x02\x20\x00\x41\x0b\x10\x78\x41\x00\x47\x21\x01\x0b\x20\x01\x0b\x26\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x20\x03\x20\x02\x36\x02\x0c\x20\x00\x41\x05\x20\x01\x20\x02\x10\xc3\x02\x20\x03\x41\x10\x6a\x24\x00\x0b\x83\x05\x02\x08\x7f\x01\x7e\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x02\x40\x20\x00\x20\x03\x29\x03\x00\x10\xe6\x02\x22\x0d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x05\x41\x08\x6a\x20\x0d\xa7\x22\x06\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x10\xb3\x04\x1a\x20\x06\x41\x10\x6a\x21\x07\x41\x00\x21\x08\x02\x40\x02\x40\x03\x40\x20\x08\x20\x06\x28\x02\x04\x22\x09\x41\xff\xff\xff\xff\x07\x71\x22\x0a\x4e\x0d\x01\x02\x40\x02\x40\x02\x40\x20\x09\x41\x00\x48\x0d\x00\x20\x08\x41\x01\x6a\x21\x0b\x20\x07\x20\x08\x6a\x2d\x00\x00\x21\x03\x0c\x01\x0b\x20\x08\x41\x01\x6a\x21\x0b\x20\x06\x20\x08\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x22\x03\x41\xff\x01\x4b\x0d\x01\x0b\x02\x40\x20\x03\x41\x50\x6a\x41\x0a\x49\x0d\x00\x20\x03\x41\xdf\xff\x03\x71\x41\xbf\x7f\x6a\x41\x1a\x49\x0d\x00\x41\x87\xb2\x02\x20\x03\x41\x09\x10\x78\x0d\x00\x20\x04\x0d\x01\x20\x03\x10\x92\x06\x45\x0d\x01\x0b\x20\x05\x41\x08\x6a\x20\x03\x10\xb5\x04\x1a\x20\x0b\x21\x08\x0c\x01\x0b\x02\x40\x02\x40\x20\x03\x41\x80\xf8\x03\x71\x22\x0c\x41\x80\xb0\x03\x46\x0d\x00\x20\x0c\x41\x80\xb8\x03\x47\x0d\x01\x41\x91\xb2\x02\x21\x0c\x0c\x04\x0b\x41\xa3\xb2\x02\x21\x0c\x20\x0b\x20\x0a\x4e\x0d\x03\x02\x40\x02\x40\x20\x09\x41\x7f\x4a\x0d\x00\x20\x06\x20\x0b\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x21\x0b\x0c\x01\x0b\x20\x07\x20\x0b\x6a\x2d\x00\x00\x21\x0b\x0b\x20\x0b\x41\x80\xf8\x03\x71\x41\x80\xb8\x03\x47\x0d\x03\x20\x0b\x41\xff\x07\x71\x20\x03\x41\x0a\x74\x41\x80\xf8\x3f\x71\x72\x41\x80\x80\x04\x6a\x21\x03\x20\x08\x41\x02\x6a\x21\x0b\x0b\x02\x40\x20\x03\x41\xff\x00\x4a\x0d\x00\x20\x05\x41\x08\x6a\x20\x03\x10\x95\x06\x20\x0b\x21\x08\x0c\x01\x0b\x02\x40\x02\x40\x20\x03\x41\xff\x0f\x4a\x0d\x00\x20\x03\x41\x06\x76\x41\xc0\x01\x72\x21\x08\x0c\x01\x0b\x02\x40\x02\x40\x20\x03\x41\xff\xff\x03\x4a\x0d\x00\x20\x03\x41\x0c\x76\x41\xe0\x01\x72\x21\x08\x0c\x01\x0b\x20\x05\x41\x08\x6a\x20\x03\x41\x12\x76\x41\xf0\x01\x72\x10\x95\x06\x20\x03\x41\x0c\x76\x41\x3f\x71\x41\x80\x01\x72\x21\x08\x0b\x20\x05\x41\x08\x6a\x20\x08\x10\x95\x06\x20\x03\x41\x06\x76\x41\x3f\x71\x41\x80\x01\x72\x21\x08\x0b\x20\x05\x41\x08\x6a\x20\x08\x10\x95\x06\x20\x05\x41\x08\x6a\x20\x03\x41\x3f\x71\x41\x80\x01\x72\x10\x95\x06\x20\x0b\x21\x08\x0c\x00\x0b\x00\x0b\x20\x00\x20\x0d\x10\xcd\x01\x20\x05\x41\x08\x6a\x10\xf6\x03\x21\x0d\x0c\x01\x0b\x20\x00\x20\x0c\x41\x00\x10\x93\x06\x20\x00\x20\x0d\x10\xcd\x01\x20\x05\x28\x02\x08\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x05\x28\x02\x0c\x20\x03\x28\x02\x04\x11\x00\x00\x20\x05\x41\x00\x36\x02\x0c\x42\x80\x80\x80\x80\xe0\x00\x21\x0d\x0b\x20\x05\x41\x20\x6a\x24\x00\x20\x0d\x0b\xa2\x01\x01\x03\x7f\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x20\x02\x41\x25\x3a\x00\x0a\x41\x01\x21\x03\x02\x40\x20\x01\x41\x80\x02\x48\x0d\x00\x20\x02\x41\xf5\x00\x3a\x00\x0b\x20\x02\x20\x01\x41\x08\x76\x41\x0f\x71\x41\xf6\xb1\x02\x6a\x2d\x00\x00\x3a\x00\x0d\x20\x02\x20\x01\x41\x0c\x76\x41\x0f\x71\x41\xf6\xb1\x02\x6a\x2d\x00\x00\x3a\x00\x0c\x41\x04\x21\x03\x0b\x20\x02\x41\x0a\x6a\x20\x03\x6a\x22\x04\x41\x01\x6a\x20\x01\x41\x0f\x71\x41\xf6\xb1\x02\x6a\x2d\x00\x00\x3a\x00\x00\x20\x04\x20\x01\x41\x04\x76\x41\x0f\x71\x41\xf6\xb1\x02\x6a\x2d\x00\x00\x3a\x00\x00\x20\x00\x20\x02\x41\x0a\x6a\x20\x03\x41\x02\x72\x10\xf4\x03\x1a\x20\x02\x41\x10\x6a\x24\x00\x0b\xee\x01\x02\x05\x7f\x01\x7e\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x02\x40\x20\x00\x20\x03\x29\x03\x00\x10\xe6\x02\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x09\xa7\x22\x05\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x10\xb3\x04\x1a\x20\x05\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x21\x03\x20\x05\x41\x10\x6a\x22\x06\x21\x07\x02\x40\x03\x40\x20\x03\x45\x0d\x01\x02\x40\x02\x40\x02\x40\x02\x40\x20\x05\x28\x02\x04\x41\x00\x48\x0d\x00\x20\x06\x2d\x00\x00\x21\x08\x0c\x01\x0b\x20\x07\x2f\x01\x00\x22\x08\x41\xff\x01\x4b\x0d\x01\x0b\x41\xb0\xb1\x02\x20\x08\x41\xc5\x00\x10\x78\x45\x0d\x00\x20\x04\x41\x08\x6a\x20\x08\x10\xb5\x04\x1a\x0c\x01\x0b\x20\x04\x41\x08\x6a\x20\x08\x10\x95\x06\x0b\x20\x03\x41\x7f\x6a\x21\x03\x20\x06\x41\x01\x6a\x21\x06\x20\x07\x41\x02\x6a\x21\x07\x0c\x00\x0b\x00\x0b\x20\x00\x20\x09\x10\xcd\x01\x20\x04\x41\x08\x6a\x10\xf6\x03\x21\x09\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x09\x0b\xde\x02\x02\x06\x7f\x01\x7e\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x02\x40\x20\x00\x20\x03\x29\x03\x00\x10\xe6\x02\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x41\x00\x10\xb3\x04\x1a\x20\x0a\xa7\x22\x05\x41\x10\x6a\x21\x06\x20\x05\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x21\x07\x41\x00\x21\x03\x02\x40\x03\x40\x20\x03\x20\x07\x4e\x0d\x01\x02\x40\x02\x40\x20\x05\x28\x02\x04\x41\x7f\x4a\x22\x08\x0d\x00\x20\x05\x20\x03\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x21\x09\x0c\x01\x0b\x20\x06\x20\x03\x6a\x2d\x00\x00\x21\x09\x0b\x02\x40\x20\x09\x41\x25\x47\x0d\x00\x02\x40\x20\x03\x41\x06\x6a\x20\x07\x4a\x0d\x00\x20\x03\x41\x01\x6a\x21\x09\x02\x40\x02\x40\x20\x08\x0d\x00\x20\x05\x20\x09\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x21\x09\x0c\x01\x0b\x20\x06\x20\x09\x6a\x2d\x00\x00\x21\x09\x0b\x20\x09\x41\xf5\x00\x47\x0d\x00\x20\x05\x20\x03\x41\x02\x6a\x41\x04\x10\x98\x06\x22\x09\x41\x00\x48\x0d\x00\x20\x03\x41\x05\x6a\x21\x03\x0c\x01\x0b\x41\x25\x21\x09\x20\x03\x41\x03\x6a\x20\x07\x4a\x0d\x00\x20\x05\x20\x03\x41\x01\x6a\x41\x02\x10\x98\x06\x22\x09\x41\x25\x20\x09\x41\x7f\x4a\x22\x08\x1b\x21\x09\x20\x03\x41\x02\x6a\x20\x03\x20\x08\x1b\x21\x03\x0b\x20\x04\x41\x08\x6a\x20\x09\x10\xb5\x04\x1a\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x20\x0a\x10\xcd\x01\x20\x04\x41\x08\x6a\x10\xf6\x03\x21\x0a\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x0a\x0b\xbd\x01\x01\x04\x7f\x20\x00\x41\x10\x6a\x22\x03\x20\x01\x41\x01\x74\x6a\x21\x04\x20\x03\x20\x01\x6a\x21\x03\x41\x00\x21\x05\x02\x40\x03\x40\x02\x40\x20\x02\x41\x01\x4e\x0d\x00\x20\x05\x21\x06\x0c\x02\x0b\x02\x40\x02\x40\x20\x00\x28\x02\x04\x41\x7f\x4a\x0d\x00\x20\x04\x2f\x01\x00\x21\x01\x0c\x01\x0b\x20\x03\x2d\x00\x00\x21\x01\x0b\x02\x40\x20\x01\x41\x50\x6a\x22\x06\x41\x0a\x49\x0d\x00\x02\x40\x20\x01\x41\xbf\x7f\x6a\x41\x05\x4b\x0d\x00\x20\x01\x41\x49\x6a\x21\x06\x0c\x01\x0b\x41\x7f\x21\x06\x20\x01\x41\xd7\x00\x49\x0d\x02\x20\x01\x41\x9f\x7f\x6a\x41\x05\x4b\x0d\x02\x20\x01\x41\xa9\x7f\x6a\x21\x06\x0b\x20\x02\x41\x7f\x6a\x21\x02\x20\x04\x41\x02\x6a\x21\x04\x20\x03\x41\x01\x6a\x21\x03\x20\x06\x20\x05\x41\x04\x74\x72\x21\x05\x0c\x00\x0b\x00\x0b\x20\x06\x0b\x8a\x01\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x04\x41\x00\x10\x3f\x1a\x02\x40\x02\x40\x20\x04\x29\x03\x00\x42\xc0\x84\x3d\x7e\x20\x04\x29\x03\x08\x7c\x22\x05\x42\x80\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x05\x42\xff\xff\xff\xff\x0f\x83\x21\x05\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x05\xb9\xbd\x22\x05\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x05\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x26\x00\x42\x80\x80\x80\x80\xe0\x00\x20\x00\x20\x03\x29\x03\x00\x10\x9b\x06\x22\x00\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x20\x00\x41\x00\x48\x1b\x0b\x5a\x01\x03\x7f\x02\x40\x03\x40\x41\x00\x21\x02\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x01\x02\x40\x20\x01\xa7\x22\x03\x2f\x01\x06\x22\x04\x41\x30\x47\x0d\x00\x20\x03\x28\x02\x20\x22\x04\x45\x0d\x02\x02\x40\x20\x04\x2d\x00\x11\x45\x0d\x00\x20\x00\x10\xcb\x04\x41\x7f\x0f\x0b\x20\x04\x29\x03\x00\x21\x01\x0c\x01\x0b\x0b\x20\x04\x41\x02\x46\x21\x02\x0b\x20\x02\x0b\xe6\x09\x02\x02\x7f\x08\x7e\x23\x00\x41\x30\x6b\x22\x04\x24\x00\x20\x03\x29\x03\x00\x21\x06\x20\x04\x42\x80\x80\x80\x80\x30\x37\x03\x18\x20\x04\x42\x80\x80\x80\x80\x30\x37\x03\x10\x42\x80\x80\x80\x80\x30\x21\x07\x42\x80\x80\x80\x80\x30\x21\x08\x41\x00\x21\x05\x02\x40\x02\x40\x02\x40\x20\x02\x41\x02\x48\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x07\x02\x40\x20\x03\x29\x03\x08\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x41\x00\x21\x05\x0c\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x09\x42\x80\x80\x80\x80\x30\x21\x0a\x42\x80\x80\x80\x80\x30\x21\x0b\x42\x80\x80\x80\x80\x30\x21\x0c\x20\x00\x20\x08\x10\xdb\x03\x0d\x01\x41\x01\x21\x05\x42\x80\x80\x80\x80\x30\x21\x07\x20\x02\x41\x03\x48\x0d\x00\x20\x03\x29\x03\x10\x21\x07\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x20\x06\x41\xd1\x01\x20\x06\x41\x00\x10\xb4\x01\x22\x09\x42\x80\x80\x80\x80\x70\x83\x22\x0b\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x0b\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x09\x42\x80\x80\x80\x80\x30\x21\x0a\x42\x80\x80\x80\x80\x30\x21\x0b\x0c\x01\x0b\x20\x00\x20\x09\x10\xcd\x01\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x2d\x00\x05\x41\x10\x71\x45\x0d\x00\x20\x00\x20\x01\x41\x00\x41\x00\x10\xdb\x04\x21\x0b\x0c\x01\x0b\x20\x00\x10\x85\x03\x21\x0b\x0b\x02\x40\x20\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x09\x42\x80\x80\x80\x80\x30\x21\x0a\x0c\x01\x0b\x20\x04\x20\x06\x10\xc0\x01\x37\x03\x10\x20\x00\x20\x04\x41\x10\x6a\x41\x08\x72\x41\x00\x10\xc6\x03\x21\x03\x20\x04\x29\x03\x18\x21\x09\x20\x04\x29\x03\x10\x21\x0a\x20\x03\x45\x0d\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x0c\x0c\x06\x0b\x42\x00\x21\x06\x03\x40\x20\x00\x20\x0a\x20\x09\x20\x04\x41\x08\x6a\x10\xb7\x03\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x02\x40\x20\x04\x28\x02\x08\x45\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x0c\x0c\x06\x0b\x02\x40\x02\x40\x20\x05\x0d\x00\x20\x0c\x21\x01\x0c\x01\x0b\x20\x04\x20\x0c\x37\x03\x20\x20\x04\x20\x06\x42\xff\xff\xff\xff\x0f\x83\x37\x03\x28\x20\x00\x20\x08\x20\x07\x41\x02\x20\x04\x41\x20\x6a\x10\xb5\x01\x21\x01\x20\x00\x20\x0c\x10\xcd\x01\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x0b\x20\x00\x20\x0b\x20\x06\x20\x01\x10\xa7\x05\x41\x00\x48\x0d\x02\x20\x06\x42\x01\x7c\x21\x06\x0c\x00\x0b\x00\x0b\x20\x00\x20\x06\x10\xfe\x02\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x20\x00\x20\x04\x41\x08\x6a\x20\x0c\x10\xfb\x05\x41\x00\x48\x0d\x02\x02\x40\x02\x40\x20\x04\x29\x03\x08\x22\x0d\x42\x80\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x0d\x42\xff\xff\xff\xff\x0f\x83\x21\x06\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x0d\xb9\xbd\x22\x0b\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x0b\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x06\x0b\x20\x04\x20\x06\x37\x03\x20\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x2d\x00\x05\x41\x10\x71\x45\x0d\x00\x20\x00\x20\x01\x41\x01\x20\x04\x41\x20\x6a\x10\xdb\x04\x21\x0b\x0c\x01\x0b\x20\x00\x42\x80\x80\x80\x80\x30\x41\x01\x20\x04\x41\x20\x6a\x10\xd5\x01\x21\x0b\x0b\x20\x00\x20\x06\x10\xcd\x01\x02\x40\x20\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x09\x0c\x02\x0b\x42\x00\x21\x06\x03\x40\x02\x40\x20\x06\x20\x0d\x53\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x09\x42\x80\x80\x80\x80\x30\x21\x0a\x0c\x05\x0b\x42\x80\x80\x80\x80\x30\x21\x09\x20\x00\x20\x0c\x20\x06\x10\xf4\x05\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x02\x40\x02\x40\x20\x05\x0d\x00\x20\x0a\x21\x01\x0c\x01\x0b\x20\x04\x20\x0a\x37\x03\x20\x20\x04\x20\x06\x42\xff\xff\xff\xff\x0f\x83\x37\x03\x28\x20\x00\x20\x08\x20\x07\x41\x02\x20\x04\x41\x20\x6a\x10\xb5\x01\x21\x01\x20\x00\x20\x0a\x10\xcd\x01\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x0b\x20\x00\x20\x0b\x20\x06\x20\x01\x10\xa7\x05\x41\x00\x48\x0d\x02\x20\x06\x42\x01\x7c\x21\x06\x0c\x00\x0b\x00\x0b\x42\x80\x80\x80\x80\x30\x21\x0c\x20\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x03\x20\x00\x20\x0a\x41\x01\x10\xfc\x02\x1a\x0c\x03\x0b\x42\x80\x80\x80\x80\x30\x21\x0a\x0c\x02\x0b\x42\x80\x80\x80\x80\x30\x21\x09\x42\x80\x80\x80\x80\x30\x21\x0a\x42\x80\x80\x80\x80\x30\x21\x0b\x0c\x01\x0b\x02\x40\x02\x40\x20\x06\xa7\x22\x03\x41\x00\x48\x0d\x00\x20\x06\x42\xff\xff\xff\xff\x0f\x83\x21\x06\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x03\xb8\xbd\x22\x06\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x06\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x06\x0b\x20\x00\x20\x0b\x41\x30\x20\x06\x10\x82\x04\x41\x00\x4e\x0d\x01\x0b\x20\x00\x20\x0b\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x0b\x0b\x20\x00\x20\x0c\x10\xcd\x01\x20\x00\x20\x0a\x10\xcd\x01\x20\x00\x20\x09\x10\xcd\x01\x20\x04\x41\x30\x6a\x24\x00\x20\x0b\x0b\xa4\x02\x02\x02\x7f\x03\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x2d\x00\x05\x41\x10\x71\x45\x0d\x00\x20\x04\x20\x02\xad\x37\x03\x08\x20\x00\x20\x01\x41\x01\x20\x04\x41\x08\x6a\x10\xdb\x04\x21\x06\x0c\x01\x0b\x20\x00\x10\x85\x03\x21\x06\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x02\x40\x20\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x02\xac\x21\x08\x42\x00\x21\x01\x02\x40\x02\x40\x03\x40\x20\x01\x20\x08\x59\x0d\x01\x20\x00\x20\x06\x20\x01\x20\x03\x29\x03\x00\x10\xc0\x01\x41\x80\x80\x01\x10\xc8\x04\x21\x05\x20\x03\x41\x08\x6a\x21\x03\x20\x01\x42\x01\x7c\x21\x01\x20\x05\x41\x00\x4e\x0d\x00\x0c\x02\x0b\x00\x0b\x02\x40\x02\x40\x20\x02\x41\x00\x48\x0d\x00\x20\x02\xad\x21\x01\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x02\xb8\xbd\x22\x01\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x01\x0b\x20\x00\x20\x06\x41\x30\x20\x01\x10\x82\x04\x41\x7f\x4c\x0d\x00\x20\x06\x21\x07\x0c\x01\x0b\x20\x00\x20\x06\x10\xcd\x01\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x07\x0b\x07\x00\x20\x01\x10\xc0\x01\x0b\xbe\x04\x02\x03\x7f\x06\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\x30\x21\x07\x02\x40\x02\x40\x20\x00\x20\x01\x10\xfe\x02\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x42\x00\x21\x09\x20\x00\x20\x08\x42\x00\x10\xa0\x06\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x41\x7f\x21\x05\x02\x40\x02\x40\x03\x40\x20\x05\x20\x02\x4e\x0d\x01\x20\x08\x21\x0a\x02\x40\x20\x05\x41\x00\x48\x0d\x00\x20\x03\x20\x05\x41\x03\x74\x6a\x29\x03\x00\x21\x0a\x0b\x02\x40\x02\x40\x02\x40\x20\x0a\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x02\x40\x02\x40\x20\x00\x20\x0a\x41\xd8\x01\x20\x0a\x41\x00\x10\xb4\x01\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x22\x01\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x01\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x08\x20\x00\x20\x0b\x10\x9a\x03\x21\x06\x0c\x01\x0b\x20\x00\x20\x0a\x10\x9b\x06\x21\x06\x0b\x20\x06\x41\x00\x48\x0d\x06\x20\x06\x45\x0d\x00\x20\x00\x20\x04\x20\x0a\x10\xfb\x05\x0d\x06\x20\x04\x29\x03\x00\x22\x0c\x20\x09\x7c\x42\xff\xff\xff\xff\xff\xff\xff\x0f\x55\x0d\x05\x42\x00\x21\x01\x03\x40\x20\x09\x20\x01\x7c\x21\x0b\x20\x01\x20\x0c\x59\x0d\x02\x20\x00\x20\x0a\x20\x01\x20\x04\x41\x08\x6a\x10\xa1\x06\x22\x06\x41\x00\x48\x0d\x07\x02\x40\x20\x06\x45\x0d\x00\x20\x00\x20\x07\x20\x0b\x20\x04\x29\x03\x08\x10\xa7\x05\x41\x00\x48\x0d\x08\x0b\x20\x01\x42\x01\x7c\x21\x01\x0c\x00\x0b\x00\x0b\x02\x40\x20\x09\x42\xff\xff\xff\xff\xff\xff\xff\x0f\x53\x0d\x00\x20\x00\x41\xd9\xb4\x02\x41\x00\x10\xb2\x02\x0c\x06\x0b\x20\x00\x20\x07\x20\x09\x20\x0a\x10\xc0\x01\x10\xa7\x05\x41\x00\x48\x0d\x05\x20\x09\x42\x01\x7c\x21\x09\x0c\x01\x0b\x20\x0b\x21\x09\x0b\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x02\x40\x02\x40\x20\x09\x42\x80\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x09\x42\xff\xff\xff\xff\x0f\x83\x21\x01\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x09\xb9\xbd\x22\x01\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x01\x0b\x20\x00\x20\x07\x41\x30\x20\x01\x10\x82\x04\x41\x7f\x4a\x0d\x02\x0c\x01\x0b\x20\x00\x41\xd9\xb4\x02\x41\x00\x10\xb2\x02\x0b\x20\x00\x20\x07\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x0b\x20\x00\x20\x08\x10\xcd\x01\x20\x04\x41\x10\x6a\x24\x00\x20\x07\x0b\xde\x02\x01\x02\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x20\x03\x20\x02\x37\x03\x08\x02\x40\x02\x40\x20\x00\x20\x01\x10\x9b\x06\x22\x04\x41\x00\x48\x0d\x00\x02\x40\x20\x04\x0d\x00\x20\x00\x42\x80\x80\x80\x80\x30\x41\x01\x20\x03\x41\x08\x6a\x10\xd5\x01\x21\x01\x0c\x02\x0b\x02\x40\x20\x00\x20\x01\x41\x3c\x20\x01\x41\x00\x10\xb4\x01\x22\x02\x42\x80\x80\x80\x80\x70\x83\x22\x01\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x02\x21\x01\x0c\x02\x0b\x02\x40\x02\x40\x02\x40\x20\x02\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x02\x40\x20\x02\xa7\x2d\x00\x05\x41\x10\x71\x45\x0d\x00\x02\x40\x20\x00\x20\x02\x10\xdd\x04\x22\x04\x0d\x00\x20\x00\x20\x02\x10\xcd\x01\x0c\x05\x0b\x20\x04\x20\x00\x46\x0d\x00\x20\x00\x20\x02\x20\x04\x29\x03\x40\x10\x8d\x03\x45\x0d\x00\x20\x00\x20\x02\x10\xcd\x01\x0c\x02\x0b\x20\x00\x20\x02\x41\xda\x01\x20\x02\x41\x00\x10\xb4\x01\x21\x01\x20\x00\x20\x02\x10\xcd\x01\x20\x01\x42\x80\x80\x80\x80\x70\x83\x22\x02\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x04\x42\x80\x80\x80\x80\x30\x20\x01\x20\x02\x42\x80\x80\x80\x80\x20\x51\x1b\x22\x02\x42\x80\x80\x80\x80\x70\x83\x21\x01\x0b\x20\x01\x42\x80\x80\x80\x80\x30\x52\x0d\x01\x0b\x20\x00\x42\x80\x80\x80\x80\x30\x41\x01\x20\x03\x41\x08\x6a\x10\xd5\x01\x21\x01\x0c\x02\x0b\x20\x00\x20\x02\x41\x01\x20\x03\x41\x08\x6a\x10\xdb\x04\x21\x01\x20\x00\x20\x02\x10\xcd\x01\x0c\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x01\x0b\xc6\x01\x01\x02\x7f\x02\x40\x02\x40\x02\x40\x20\x02\x42\xff\xff\xff\xff\x07\x56\x0d\x00\x20\x00\x20\x01\x20\x02\xa7\x41\x80\x80\x80\x80\x78\x72\x10\x96\x03\x22\x04\x41\x01\x48\x0d\x01\x41\x7f\x20\x04\x20\x00\x20\x01\x20\x02\x10\xbb\x03\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x1b\x21\x04\x0c\x02\x0b\x02\x40\x20\x00\x20\x02\x10\xf5\x05\x22\x05\x0d\x00\x41\x7f\x21\x04\x0c\x01\x0b\x02\x40\x02\x40\x20\x00\x20\x01\x20\x05\x10\x96\x03\x22\x04\x41\x01\x4e\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x02\x0c\x01\x0b\x41\x7f\x20\x04\x20\x00\x20\x01\x20\x05\x20\x01\x41\x00\x10\xb4\x01\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x1b\x21\x04\x0b\x20\x00\x20\x05\x10\xe4\x02\x0c\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x02\x0b\x20\x03\x20\x02\x37\x03\x00\x20\x04\x0b\xbf\x08\x02\x03\x7f\x09\x7e\x23\x00\x41\x30\x6b\x22\x05\x24\x00\x42\x80\x80\x80\x80\x30\x21\x08\x20\x05\x42\x80\x80\x80\x80\x30\x37\x03\x28\x02\x40\x02\x40\x02\x40\x02\x40\x20\x04\x41\x08\x71\x22\x06\x45\x0d\x00\x20\x05\x20\x00\x20\x01\x10\xc0\x01\x22\x09\x10\xa3\x06\x22\x07\xac\x37\x03\x08\x20\x07\x41\x00\x4e\x0d\x01\x0c\x02\x0b\x20\x00\x20\x05\x41\x08\x6a\x20\x00\x20\x01\x10\xfe\x02\x22\x09\x10\xfb\x05\x0d\x01\x0b\x20\x03\x29\x03\x00\x21\x0a\x42\x80\x80\x80\x80\x30\x21\x08\x42\x80\x80\x80\x80\x30\x21\x0b\x02\x40\x20\x02\x41\x02\x48\x0d\x00\x20\x03\x29\x03\x08\x21\x0b\x0b\x20\x00\x20\x0a\x10\xdb\x03\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x08\x02\x40\x20\x04\x41\x0c\x4b\x22\x02\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x08\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x04\x0e\x0d\x05\x00\x06\x01\x02\x06\x06\x06\x05\x00\x06\x03\x04\x05\x0b\x42\x80\x80\x80\x80\x10\x21\x08\x0c\x05\x0b\x02\x40\x02\x40\x20\x05\x29\x03\x08\x22\x01\x42\x80\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x01\x42\xff\xff\xff\xff\x0f\x83\x21\x01\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x01\xb9\xbd\x22\x01\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x01\x0b\x20\x00\x20\x09\x20\x01\x10\xa0\x06\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x05\x0c\x04\x0b\x20\x00\x20\x09\x42\x00\x10\xa0\x06\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x04\x0c\x03\x0b\x20\x05\x20\x09\x37\x03\x10\x20\x05\x20\x05\x35\x02\x08\x37\x03\x18\x20\x00\x41\x02\x20\x05\x41\x10\x6a\x10\xa4\x06\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x0c\x02\x0b\x20\x00\x10\x85\x03\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x0c\x01\x0b\x42\x81\x80\x80\x80\x10\x21\x08\x0b\x42\x00\x21\x01\x20\x05\x29\x03\x08\x21\x0c\x42\x00\x21\x0d\x02\x40\x03\x40\x20\x01\x20\x0c\x59\x0d\x01\x02\x40\x02\x40\x02\x40\x20\x06\x45\x0d\x00\x20\x05\x20\x00\x20\x09\x20\x01\x10\xf4\x05\x22\x0e\x37\x03\x28\x20\x0e\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x05\x0c\x01\x0b\x20\x00\x20\x09\x20\x01\x20\x05\x41\x28\x6a\x10\xa1\x06\x22\x03\x41\x00\x48\x0d\x04\x20\x03\x45\x0d\x01\x0b\x20\x01\x21\x0e\x02\x40\x20\x01\x42\x80\x80\x80\x80\x08\x54\x0d\x00\x42\x80\x80\x80\x80\xc0\x7e\x20\x01\xb9\xbd\x22\x0e\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x0e\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x0e\x0b\x20\x0e\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x05\x20\x09\x37\x03\x20\x20\x05\x20\x0e\x37\x03\x18\x20\x05\x20\x05\x29\x03\x28\x22\x0f\x37\x03\x10\x20\x00\x20\x0a\x20\x0b\x41\x03\x20\x05\x41\x10\x6a\x10\xb5\x01\x21\x10\x20\x00\x20\x0e\x10\xcd\x01\x20\x10\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x02\x40\x02\x40\x20\x02\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x04\x0e\x0d\x00\x01\x05\x02\x04\x05\x05\x05\x00\x01\x05\x03\x04\x00\x0b\x20\x00\x20\x10\x10\x9a\x03\x0d\x05\x42\x80\x80\x80\x80\x10\x21\x01\x0c\x0a\x0b\x20\x00\x20\x10\x10\x9a\x03\x45\x0d\x04\x42\x81\x80\x80\x80\x10\x21\x01\x0c\x09\x0b\x20\x00\x20\x08\x20\x01\x20\x10\x10\xa7\x05\x41\x00\x48\x0d\x07\x0c\x03\x0b\x20\x00\x20\x08\x20\x01\x42\xff\xff\xff\xff\x0f\x83\x20\x10\x41\x80\x80\x01\x10\xba\x03\x41\x00\x48\x0d\x06\x0c\x02\x0b\x20\x00\x20\x10\x10\x9a\x03\x45\x0d\x01\x20\x00\x20\x08\x20\x0d\x20\x0f\x10\xc0\x01\x10\xa7\x05\x41\x00\x48\x0d\x05\x20\x0d\x42\x01\x7c\x21\x0d\x0c\x01\x0b\x20\x00\x20\x10\x10\xcd\x01\x0b\x20\x00\x20\x0f\x10\xcd\x01\x20\x05\x42\x80\x80\x80\x80\x30\x37\x03\x28\x0b\x20\x01\x42\x01\x7c\x21\x01\x0c\x00\x0b\x00\x0b\x02\x40\x20\x04\x41\x0c\x46\x0d\x00\x20\x08\x21\x01\x0c\x02\x0b\x20\x05\x20\x09\x37\x03\x10\x20\x05\x20\x0d\x42\xff\xff\xff\xff\x0f\x83\x37\x03\x18\x20\x00\x41\x02\x20\x05\x41\x10\x6a\x10\xa4\x06\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x05\x20\x08\x37\x03\x10\x20\x00\x20\x00\x20\x01\x41\xc2\x00\x41\x01\x20\x05\x41\x10\x6a\x10\xf7\x05\x10\xa5\x06\x0d\x00\x20\x00\x20\x08\x10\xcd\x01\x0c\x01\x0b\x20\x00\x20\x08\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x00\x20\x05\x29\x03\x28\x10\xcd\x01\x20\x00\x20\x09\x10\xcd\x01\x20\x05\x41\x30\x6a\x24\x00\x20\x01\x0b\x41\x01\x02\x7f\x41\x7f\x21\x02\x02\x40\x20\x00\x20\x01\x41\x00\x10\xbc\x06\x22\x03\x45\x0d\x00\x02\x40\x20\x03\x28\x02\x20\x28\x02\x0c\x28\x02\x20\x2d\x00\x04\x45\x0d\x00\x20\x00\x10\xff\x03\x41\x7f\x0f\x0b\x20\x03\x41\x28\x6a\x28\x02\x00\x21\x02\x0b\x20\x02\x0b\x92\x01\x02\x02\x7e\x01\x7f\x02\x40\x20\x00\x20\x02\x29\x03\x00\x22\x03\x41\x00\x10\xbc\x06\x22\x05\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x02\x40\x20\x00\x20\x03\x42\x80\x80\x80\x80\x30\x10\xbd\x06\x22\x03\x42\x80\x80\x80\x80\x70\x83\x22\x04\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x03\x0f\x0b\x20\x02\x41\x08\x6a\x21\x02\x20\x01\x41\x7f\x6a\x21\x01\x02\x40\x20\x04\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x42\x80\x80\x80\x80\x30\x20\x01\x20\x02\x20\x05\x2f\x01\x06\x10\xed\x01\x0f\x0b\x20\x00\x20\x03\x20\x01\x20\x02\x10\xbe\x06\x21\x04\x20\x00\x20\x03\x10\xcd\x01\x20\x04\x0b\x1a\x00\x20\x00\x20\x01\x10\xcd\x01\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0b\xfd\x05\x02\x03\x7f\x08\x7e\x23\x00\x41\xc0\x00\x6b\x22\x05\x24\x00\x42\x80\x80\x80\x80\x30\x21\x08\x20\x05\x42\x80\x80\x80\x80\x30\x37\x03\x38\x20\x05\x42\x80\x80\x80\x80\x30\x37\x03\x30\x02\x40\x02\x40\x02\x40\x02\x40\x20\x04\x41\x08\x71\x22\x06\x45\x0d\x00\x20\x05\x20\x00\x20\x01\x10\xc0\x01\x22\x09\x10\xa3\x06\x22\x07\xac\x37\x03\x08\x20\x07\x41\x00\x4e\x0d\x01\x0c\x02\x0b\x20\x00\x20\x05\x41\x08\x6a\x20\x00\x20\x01\x10\xfe\x02\x22\x09\x10\xfb\x05\x0d\x01\x0b\x20\x00\x20\x03\x29\x03\x00\x22\x0a\x10\xdb\x03\x0d\x00\x02\x40\x02\x40\x20\x02\x41\x01\x4a\x0d\x00\x20\x04\x41\x01\x71\x21\x04\x42\x00\x21\x01\x20\x05\x29\x03\x08\x21\x0b\x42\x7f\x21\x0c\x03\x40\x20\x0c\x21\x0d\x02\x40\x20\x0b\x20\x01\x55\x0d\x00\x20\x00\x41\x80\xb5\x02\x41\x00\x10\xb2\x02\x0c\x04\x0b\x20\x0b\x20\x0d\x7c\x20\x01\x20\x04\x1b\x21\x0c\x02\x40\x20\x06\x45\x0d\x00\x20\x05\x20\x00\x20\x09\x20\x0c\x10\xf4\x05\x22\x01\x37\x03\x30\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x04\x42\x00\x20\x0d\x7d\x21\x0d\x0c\x03\x0b\x20\x00\x20\x09\x20\x0c\x20\x05\x41\x30\x6a\x10\xa1\x06\x22\x03\x41\x00\x48\x0d\x03\x20\x01\x42\x01\x7c\x21\x01\x20\x0d\x42\x7f\x7c\x21\x0c\x20\x03\x45\x0d\x00\x0b\x42\x00\x20\x0d\x7d\x21\x0d\x20\x05\x29\x03\x30\x21\x01\x0c\x01\x0b\x20\x05\x20\x03\x29\x03\x08\x10\xc0\x01\x22\x01\x37\x03\x30\x20\x04\x41\x01\x71\x21\x04\x42\x00\x21\x0d\x20\x05\x29\x03\x08\x21\x0b\x0b\x20\x0d\x42\x7f\x85\x20\x0b\x7c\x21\x0c\x02\x40\x02\x40\x03\x40\x20\x0b\x20\x0d\x57\x0d\x01\x20\x0c\x20\x0d\x20\x04\x1b\x21\x08\x02\x40\x02\x40\x02\x40\x20\x06\x45\x0d\x00\x20\x05\x20\x00\x20\x09\x20\x08\x10\xf4\x05\x22\x0e\x37\x03\x38\x20\x0e\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0c\x05\x0b\x20\x00\x20\x09\x20\x08\x20\x05\x41\x38\x6a\x10\xa1\x06\x22\x03\x41\x00\x48\x0d\x04\x20\x03\x45\x0d\x01\x0b\x02\x40\x02\x40\x20\x08\x42\x80\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x08\x42\xff\xff\xff\xff\x0f\x83\x21\x08\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x08\xb9\xbd\x22\x08\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x08\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x08\x0b\x20\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x05\x20\x01\x37\x03\x10\x20\x05\x20\x09\x37\x03\x28\x20\x05\x20\x08\x37\x03\x20\x20\x05\x20\x05\x29\x03\x38\x22\x0f\x37\x03\x18\x20\x00\x20\x0a\x42\x80\x80\x80\x80\x30\x41\x04\x20\x05\x41\x10\x6a\x10\xb5\x01\x21\x0e\x20\x00\x20\x08\x10\xcd\x01\x20\x00\x20\x0f\x10\xcd\x01\x20\x05\x42\x80\x80\x80\x80\x30\x37\x03\x38\x20\x0e\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x00\x20\x01\x10\xcd\x01\x20\x0e\x21\x01\x0b\x20\x0c\x42\x7f\x7c\x21\x0c\x20\x0d\x42\x01\x7c\x21\x0d\x0c\x00\x0b\x00\x0b\x20\x05\x20\x01\x37\x03\x30\x0c\x02\x0b\x20\x05\x20\x01\x37\x03\x30\x20\x05\x29\x03\x38\x21\x08\x0b\x20\x00\x20\x05\x29\x03\x30\x10\xcd\x01\x20\x00\x20\x08\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x00\x20\x09\x10\xcd\x01\x20\x05\x41\xc0\x00\x6a\x24\x00\x20\x01\x0b\xa0\x02\x02\x01\x7f\x02\x7e\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x02\x40\x20\x00\x20\x04\x41\x18\x6a\x20\x00\x20\x01\x10\xfe\x02\x22\x05\x10\xfb\x05\x0d\x00\x20\x04\x42\x00\x37\x03\x10\x02\x40\x02\x40\x20\x02\x41\x01\x4a\x0d\x00\x20\x04\x20\x04\x29\x03\x18\x22\x06\x37\x03\x08\x0c\x01\x0b\x20\x04\x29\x03\x18\x21\x06\x02\x40\x20\x03\x29\x03\x08\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x04\x41\x10\x6a\x20\x01\x42\x00\x20\x06\x20\x06\x10\xfd\x05\x0d\x02\x0b\x20\x04\x20\x06\x37\x03\x08\x20\x02\x41\x03\x48\x0d\x00\x20\x03\x29\x03\x10\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x01\x42\x00\x20\x06\x20\x06\x10\xfd\x05\x0d\x01\x20\x04\x29\x03\x08\x21\x06\x0b\x20\x04\x29\x03\x10\x21\x01\x03\x40\x20\x01\x20\x06\x59\x0d\x02\x02\x40\x20\x00\x20\x05\x20\x01\x20\x03\x29\x03\x00\x10\xc0\x01\x10\xa8\x06\x41\x00\x48\x0d\x00\x20\x01\x42\x01\x7c\x21\x01\x0c\x01\x0b\x0b\x20\x04\x20\x01\x37\x03\x10\x0b\x20\x00\x20\x05\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0c\x01\x0b\x20\x04\x20\x01\x37\x03\x10\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x05\x0b\x50\x01\x02\x7f\x02\x40\x20\x02\x42\xff\xff\xff\xff\x07\x56\x0d\x00\x20\x00\x20\x01\x20\x02\x20\x03\x41\x80\x80\x01\x10\xba\x03\x0f\x0b\x02\x40\x20\x00\x20\x02\x10\xf5\x05\x22\x04\x0d\x00\x20\x00\x20\x03\x10\xcd\x01\x41\x7f\x0f\x0b\x20\x00\x20\x01\x20\x04\x20\x03\x10\x82\x04\x21\x05\x20\x00\x20\x04\x10\xe4\x02\x20\x05\x0b\xd0\x03\x02\x01\x7f\x08\x7e\x23\x00\x41\x30\x6b\x22\x05\x24\x00\x42\x80\x80\x80\x80\x30\x21\x06\x02\x40\x02\x40\x02\x40\x20\x00\x20\x05\x41\x08\x6a\x20\x00\x20\x01\x10\xfe\x02\x22\x07\x10\xfb\x05\x45\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x08\x0c\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x08\x20\x00\x20\x03\x29\x03\x00\x22\x09\x10\xdb\x03\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x06\x42\x80\x80\x80\x80\x30\x21\x0a\x02\x40\x20\x02\x41\x02\x48\x0d\x00\x20\x03\x29\x03\x08\x21\x0a\x0b\x42\x00\x21\x0b\x20\x05\x29\x03\x08\x21\x0c\x02\x40\x03\x40\x20\x0b\x20\x0c\x59\x0d\x01\x20\x0b\x21\x08\x02\x40\x20\x0b\x42\x80\x80\x80\x80\x08\x54\x0d\x00\x42\x80\x80\x80\x80\xc0\x7e\x20\x0b\xb9\xbd\x22\x08\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x08\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x08\x0b\x20\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x20\x00\x20\x07\x20\x08\x10\xbb\x03\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x20\x05\x20\x01\x37\x03\x20\x20\x05\x20\x08\x37\x03\x18\x20\x05\x20\x06\x37\x03\x10\x20\x00\x20\x09\x20\x0a\x41\x03\x20\x05\x41\x10\x6a\x10\xb5\x01\x22\x0d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x02\x40\x20\x00\x20\x0d\x10\x9a\x03\x45\x0d\x00\x02\x40\x20\x04\x45\x0d\x00\x20\x00\x20\x06\x10\xcd\x01\x20\x00\x20\x07\x10\xcd\x01\x0c\x05\x0b\x20\x00\x20\x08\x10\xcd\x01\x20\x00\x20\x07\x10\xcd\x01\x20\x06\x21\x08\x0c\x04\x0b\x20\x00\x20\x06\x10\xcd\x01\x20\x00\x20\x08\x10\xcd\x01\x20\x0b\x42\x01\x7c\x21\x0b\x0c\x00\x0b\x00\x0b\x20\x00\x20\x07\x10\xcd\x01\x42\xff\xff\xff\xff\x0f\x42\x80\x80\x80\x80\x30\x20\x04\x1b\x21\x08\x0c\x01\x0b\x20\x00\x20\x08\x10\xcd\x01\x20\x00\x20\x06\x10\xcd\x01\x20\x00\x20\x07\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x0b\x20\x05\x41\x30\x6a\x24\x00\x20\x08\x0b\xc0\x03\x02\x01\x7f\x03\x7e\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x10\x6a\x20\x00\x20\x01\x10\xfe\x02\x22\x05\x10\xfb\x05\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x04\x29\x03\x10\x22\x06\x42\x01\x53\x0d\x00\x20\x04\x42\x00\x37\x03\x08\x02\x40\x20\x02\x41\x02\x48\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x08\x42\x00\x20\x06\x20\x06\x10\xfd\x05\x0d\x04\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x20\x05\x20\x04\x41\x04\x6a\x20\x04\x10\xb5\x03\x0d\x00\x20\x04\x29\x03\x08\x21\x01\x0c\x01\x0b\x20\x04\x28\x02\x04\x20\x04\x29\x03\x08\x22\x01\xa7\x41\x03\x74\x6a\x21\x02\x20\x04\x35\x02\x00\x21\x07\x02\x40\x03\x40\x20\x01\x20\x07\x59\x0d\x01\x20\x00\x20\x03\x29\x03\x00\x10\xc0\x01\x20\x02\x29\x03\x00\x10\xc0\x01\x41\x00\x10\xe0\x03\x0d\x03\x20\x02\x41\x08\x6a\x21\x02\x20\x01\x42\x01\x7c\x21\x01\x0c\x00\x0b\x00\x0b\x20\x04\x20\x01\x37\x03\x08\x0b\x03\x40\x20\x01\x20\x06\x59\x0d\x02\x20\x00\x20\x05\x20\x01\x20\x04\x41\x18\x6a\x10\xa1\x06\x22\x02\x41\x00\x48\x0d\x05\x02\x40\x20\x02\x45\x0d\x00\x20\x00\x20\x03\x29\x03\x00\x10\xc0\x01\x20\x04\x29\x03\x18\x41\x00\x10\xe0\x03\x0d\x02\x0b\x20\x01\x42\x01\x7c\x21\x01\x0c\x00\x0b\x00\x0b\x20\x04\x20\x01\x37\x03\x08\x20\x00\x20\x05\x10\xcd\x01\x20\x01\x42\x80\x80\x80\x80\x08\x7c\x42\x80\x80\x80\x80\x10\x54\x0d\x02\x42\x80\x80\x80\x80\xc0\x7e\x20\x01\xb9\xbd\x22\x01\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x01\x0c\x05\x0b\x20\x04\x20\x01\x37\x03\x08\x0b\x20\x00\x20\x05\x10\xcd\x01\x42\x7f\x21\x01\x0b\x20\x01\x42\xff\xff\xff\xff\x0f\x83\x21\x01\x0c\x02\x0b\x20\x04\x20\x01\x37\x03\x08\x0b\x20\x00\x20\x05\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x01\x0b\xdc\x02\x02\x01\x7f\x02\x7e\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x10\x6a\x20\x00\x20\x01\x10\xfe\x02\x22\x05\x10\xfb\x05\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x04\x29\x03\x10\x22\x06\x42\x01\x53\x0d\x00\x20\x04\x20\x06\x42\x7f\x7c\x22\x01\x37\x03\x08\x02\x40\x20\x02\x41\x02\x48\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x08\x42\x7f\x20\x01\x20\x06\x10\xfd\x05\x0d\x06\x20\x04\x29\x03\x08\x21\x01\x0b\x02\x40\x03\x40\x20\x01\x42\x00\x53\x0d\x01\x20\x00\x20\x05\x20\x01\x20\x04\x41\x18\x6a\x10\xa1\x06\x22\x02\x41\x00\x48\x0d\x06\x02\x40\x20\x02\x45\x0d\x00\x20\x00\x20\x03\x29\x03\x00\x10\xc0\x01\x20\x04\x29\x03\x18\x41\x00\x10\xe0\x03\x0d\x04\x0b\x20\x01\x42\x7f\x7c\x21\x01\x0c\x00\x0b\x00\x0b\x20\x04\x20\x01\x37\x03\x08\x0b\x20\x00\x20\x05\x10\xcd\x01\x42\x7f\x21\x01\x0c\x01\x0b\x20\x04\x20\x01\x37\x03\x08\x20\x00\x20\x05\x10\xcd\x01\x20\x01\x42\x80\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x56\x0d\x01\x0b\x20\x01\x42\xff\xff\xff\xff\x0f\x83\x21\x01\x0c\x03\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x01\xb9\xbd\x22\x01\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x01\x0c\x02\x0b\x20\x04\x20\x01\x37\x03\x08\x0b\x20\x00\x20\x05\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x01\x0b\xfc\x02\x02\x01\x7f\x04\x7e\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x02\x40\x20\x00\x20\x04\x41\x18\x6a\x20\x00\x20\x01\x10\xfe\x02\x22\x06\x10\xfb\x05\x0d\x00\x02\x40\x20\x04\x29\x03\x18\x22\x07\x42\x01\x59\x0d\x00\x42\x80\x80\x80\x80\x10\x21\x05\x0c\x01\x0b\x20\x04\x42\x00\x37\x03\x10\x02\x40\x20\x02\x41\x02\x48\x0d\x00\x20\x00\x20\x04\x41\x10\x6a\x20\x03\x29\x03\x08\x42\x00\x20\x07\x20\x07\x10\xfd\x05\x0d\x01\x0b\x02\x40\x02\x40\x02\x40\x20\x06\x20\x04\x41\x0c\x6a\x20\x04\x41\x08\x6a\x10\xb5\x03\x0d\x00\x20\x04\x29\x03\x10\x21\x01\x0c\x01\x0b\x20\x04\x28\x02\x0c\x20\x04\x29\x03\x10\x22\x01\xa7\x41\x03\x74\x6a\x21\x02\x20\x04\x35\x02\x08\x21\x05\x02\x40\x03\x40\x20\x01\x20\x05\x59\x0d\x01\x20\x00\x20\x03\x29\x03\x00\x10\xc0\x01\x20\x02\x29\x03\x00\x10\xc0\x01\x41\x02\x10\xe0\x03\x0d\x03\x20\x02\x41\x08\x6a\x21\x02\x20\x01\x42\x01\x7c\x21\x01\x0c\x00\x0b\x00\x0b\x20\x04\x20\x01\x37\x03\x10\x0b\x03\x40\x02\x40\x02\x40\x02\x40\x20\x01\x20\x07\x53\x0d\x00\x42\x80\x80\x80\x80\x10\x21\x05\x0c\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x20\x00\x20\x06\x20\x01\x10\xf4\x05\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x03\x29\x03\x00\x10\xc0\x01\x20\x08\x41\x02\x10\xe0\x03\x45\x0d\x01\x42\x81\x80\x80\x80\x10\x21\x05\x0b\x20\x04\x20\x01\x37\x03\x10\x0c\x03\x0b\x20\x01\x42\x01\x7c\x21\x01\x0c\x00\x0b\x00\x0b\x20\x04\x20\x01\x37\x03\x10\x42\x81\x80\x80\x80\x10\x21\x05\x0b\x20\x00\x20\x06\x10\xcd\x01\x20\x04\x41\x20\x6a\x24\x00\x20\x05\x0b\xc3\x03\x02\x03\x7f\x05\x7e\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x02\x40\x02\x40\x20\x00\x20\x05\x20\x00\x20\x01\x10\xfe\x02\x22\x08\x10\xfb\x05\x0d\x00\x41\x2c\x21\x06\x02\x40\x02\x40\x20\x02\x41\x01\x48\x0d\x00\x20\x04\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x09\x41\x00\x21\x07\x20\x03\x29\x03\x00\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x01\x20\x00\x20\x01\x10\xe6\x02\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x41\x7f\x21\x06\x20\x09\xa7\x22\x07\x28\x02\x04\x41\x01\x47\x0d\x01\x20\x07\x2d\x00\x10\x21\x06\x0c\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x09\x41\x00\x21\x07\x0b\x20\x00\x20\x05\x41\x08\x6a\x41\x00\x10\xb3\x04\x1a\x42\x00\x21\x01\x20\x05\x29\x03\x00\x21\x0a\x41\x00\x21\x02\x02\x40\x02\x40\x03\x40\x20\x01\x20\x0a\x59\x0d\x01\x02\x40\x20\x01\x50\x0d\x00\x02\x40\x20\x06\x41\x00\x48\x0d\x00\x20\x05\x41\x08\x6a\x20\x06\x10\xb4\x04\x1a\x0c\x01\x0b\x20\x05\x41\x08\x6a\x20\x07\x41\x00\x20\x07\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x10\xf5\x03\x1a\x0b\x02\x40\x20\x00\x20\x08\x20\x02\x10\xf6\x02\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x22\x0c\x42\x80\x80\x80\x80\x20\x51\x0d\x00\x20\x0c\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x0c\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x02\x40\x20\x04\x45\x0d\x00\x20\x00\x20\x0b\x10\xae\x06\x21\x0b\x0b\x20\x05\x41\x08\x6a\x20\x0b\x10\xe5\x05\x0d\x03\x0b\x20\x02\x41\x01\x6a\x21\x02\x20\x01\x42\x01\x7c\x21\x01\x0c\x00\x0b\x00\x0b\x20\x00\x20\x09\x10\xcd\x01\x20\x00\x20\x08\x10\xcd\x01\x20\x05\x41\x08\x6a\x10\xf6\x03\x21\x01\x0c\x02\x0b\x20\x05\x28\x02\x08\x28\x02\x10\x22\x02\x41\x10\x6a\x20\x05\x28\x02\x0c\x20\x02\x28\x02\x04\x11\x00\x00\x20\x05\x41\x00\x36\x02\x0c\x20\x00\x20\x09\x10\xcd\x01\x0b\x20\x00\x20\x08\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x05\x41\x20\x6a\x24\x00\x20\x01\x0b\x33\x00\x02\x40\x20\x01\x42\x80\x80\x80\x80\x10\x84\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x20\x01\x10\xf2\x03\x0f\x0b\x20\x00\x20\x01\x41\x38\x41\x00\x41\x00\x10\xd9\x05\x0b\x91\x01\x01\x02\x7e\x42\x80\x80\x80\x80\xe0\x00\x21\x04\x02\x40\x20\x00\x20\x01\x10\xfe\x02\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x04\x02\x40\x20\x00\x20\x01\x41\xdb\x00\x20\x01\x41\x00\x10\xb4\x01\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x00\x20\x05\x10\xf0\x02\x0d\x00\x20\x00\x20\x05\x10\xcd\x01\x20\x00\x20\x01\x41\x00\x41\x00\x10\xb0\x06\x21\x04\x0c\x01\x0b\x20\x00\x20\x05\x20\x01\x41\x00\x41\x00\x10\xef\x02\x21\x04\x0b\x20\x00\x20\x01\x10\xcd\x01\x0b\x20\x04\x0b\xb5\x02\x02\x02\x7e\x02\x7f\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x83\x22\x04\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x04\x42\x80\x80\x80\x80\x20\x52\x0d\x01\x20\x00\x41\xe8\xb4\x02\x10\xc7\x02\x21\x04\x0c\x02\x0b\x20\x00\x41\xed\xb4\x02\x10\xc7\x02\x21\x04\x0c\x01\x0b\x20\x00\x20\x01\x10\xfe\x02\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x02\x40\x20\x00\x20\x01\x10\x9b\x06\x22\x06\x41\x7f\x4a\x0d\x00\x20\x00\x20\x01\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x41\x93\x01\x21\x07\x02\x40\x20\x06\x0d\x00\x41\x9d\x01\x21\x07\x20\x00\x20\x01\x10\xf0\x02\x0d\x00\x41\x92\x01\x21\x07\x20\x01\xa7\x2f\x01\x06\x22\x06\x41\x12\x4b\x0d\x00\x41\x01\x20\x06\x74\x41\xf8\x8e\x10\x71\x45\x0d\x00\x20\x00\x28\x02\x10\x28\x02\x44\x20\x06\x41\x18\x6c\x6a\x28\x02\x04\x21\x07\x0b\x20\x00\x20\x01\x41\xd7\x01\x20\x01\x41\x00\x10\xb4\x01\x21\x04\x20\x00\x20\x01\x10\xcd\x01\x20\x04\x42\x80\x80\x80\x80\x70\x83\x22\x05\x42\x80\x80\x80\x80\x90\x7f\x51\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x20\x05\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x04\x10\xcd\x01\x20\x00\x20\x07\x10\xc5\x01\x21\x04\x0b\x20\x00\x41\xf7\xb4\x02\x20\x04\x41\x86\xdf\x01\x10\xc1\x03\x21\x01\x0b\x20\x01\x0b\xa8\x03\x02\x04\x7f\x03\x7e\x23\x00\x41\x10\x6b\x22\x05\x24\x00\x42\x80\x80\x80\x80\x30\x21\x09\x02\x40\x02\x40\x20\x00\x20\x05\x41\x08\x6a\x20\x00\x20\x01\x10\xfe\x02\x22\x01\x10\xfb\x05\x0d\x00\x02\x40\x02\x40\x20\x05\x29\x03\x08\x22\x0a\x42\x01\x59\x0d\x00\x42\x00\x21\x0b\x42\x80\x80\x80\x80\x30\x21\x09\x0c\x01\x0b\x20\x0a\x42\x7f\x7c\x21\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x20\x05\x41\x04\x6a\x20\x05\x10\xb5\x03\x45\x0d\x00\x20\x0a\x20\x05\x28\x02\x00\x22\x06\xad\x52\x0d\x00\x20\x01\xa7\x21\x07\x20\x05\x28\x02\x04\x21\x08\x20\x04\x45\x0d\x01\x20\x08\x29\x03\x00\x21\x09\x20\x08\x20\x08\x41\x08\x6a\x20\x06\x41\x03\x74\x41\x78\x6a\x10\xad\x01\x1a\x0c\x02\x0b\x02\x40\x02\x40\x20\x04\x45\x0d\x00\x20\x00\x20\x01\x42\x00\x10\xbb\x03\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x06\x20\x00\x20\x01\x42\x00\x42\x01\x20\x0b\x41\x01\x10\xb2\x06\x45\x0d\x01\x0c\x06\x0b\x20\x00\x20\x01\x20\x0b\x10\xf4\x05\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x05\x0b\x20\x00\x20\x01\x20\x0b\x10\xb3\x06\x41\x00\x4e\x0d\x02\x0c\x04\x0b\x20\x06\x41\x03\x74\x20\x08\x6a\x41\x78\x6a\x29\x03\x00\x21\x09\x0b\x20\x07\x41\x28\x6a\x22\x04\x20\x04\x28\x02\x00\x41\x7f\x6a\x36\x02\x00\x0b\x20\x0a\x42\x81\x80\x80\x80\x08\x54\x0d\x00\x42\x80\x80\x80\x80\xc0\x7e\x20\x0b\xb9\xbd\x22\x0b\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x0b\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x0b\x0b\x20\x00\x20\x01\x41\x30\x20\x0b\x10\x82\x04\x41\x7f\x4a\x0d\x01\x0b\x20\x00\x20\x09\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x09\x0b\x20\x00\x20\x01\x10\xcd\x01\x20\x05\x41\x10\x6a\x24\x00\x20\x09\x0b\xa9\x01\x02\x03\x7f\x03\x7e\x23\x00\x41\x10\x6b\x22\x06\x24\x00\x20\x04\x42\x7f\x7c\x21\x09\x42\x00\x21\x0a\x20\x05\x41\x00\x48\x21\x07\x02\x40\x03\x40\x02\x40\x20\x0a\x20\x04\x53\x0d\x00\x41\x00\x21\x08\x0c\x02\x0b\x41\x7f\x21\x08\x20\x00\x20\x01\x20\x09\x20\x0a\x20\x07\x1b\x22\x0b\x20\x03\x7c\x20\x06\x41\x08\x6a\x10\xa1\x06\x22\x05\x41\x00\x48\x0d\x01\x20\x0b\x20\x02\x7c\x21\x0b\x02\x40\x02\x40\x20\x05\x45\x0d\x00\x20\x00\x20\x01\x20\x0b\x20\x06\x29\x03\x08\x10\xa8\x06\x41\x00\x4e\x0d\x01\x0c\x03\x0b\x20\x00\x20\x01\x20\x0b\x10\xb3\x06\x41\x00\x48\x0d\x02\x0b\x20\x09\x42\x7f\x7c\x21\x09\x20\x0a\x42\x01\x7c\x21\x0a\x0c\x00\x0b\x00\x0b\x20\x06\x41\x10\x6a\x24\x00\x20\x08\x0b\x51\x01\x02\x7f\x02\x40\x20\x02\x42\xff\xff\xff\xff\x07\x56\x0d\x00\x20\x00\x20\x01\x20\x02\xa7\x41\x80\x80\x80\x80\x78\x72\x41\x80\x80\x01\x10\xa1\x03\x0f\x0b\x02\x40\x20\x00\x20\x02\x10\xf5\x05\x22\x03\x0d\x00\x41\x7f\x0f\x0b\x20\x00\x20\x01\x20\x03\x41\x80\x80\x01\x10\xa1\x03\x21\x04\x20\x00\x20\x03\x10\xe4\x02\x20\x04\x0b\xdc\x05\x02\x03\x7f\x06\x7e\x23\x00\x41\x10\x6b\x22\x05\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x20\x01\x10\xfe\x02\x22\x08\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x08\xa7\x22\x06\x2f\x01\x06\x41\x02\x47\x0d\x00\x20\x06\x2d\x00\x05\x41\x09\x71\x41\x09\x47\x0d\x00\x20\x06\x28\x02\x10\x41\x33\x6a\x2d\x00\x00\x41\x08\x71\x45\x0d\x00\x20\x06\x28\x02\x14\x29\x03\x00\x22\x09\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x05\x20\x09\x42\x20\x86\x42\x20\x87\x22\x01\x37\x03\x08\x20\x01\x20\x06\x41\x28\x6a\x35\x02\x00\x52\x0d\x00\x20\x01\x20\x02\xac\x7c\x22\x0a\x42\xff\xff\xff\xff\x07\x55\x0d\x00\x02\x40\x20\x0a\x20\x06\x35\x02\x20\x57\x0d\x00\x20\x00\x20\x06\x20\x0a\xa7\x10\xca\x04\x0d\x03\x0b\x02\x40\x02\x40\x20\x02\x41\x01\x48\x0d\x00\x20\x04\x45\x0d\x00\x20\x06\x28\x02\x24\x22\x04\x20\x02\x41\x03\x74\x6a\x20\x04\x20\x09\xa7\x41\x03\x74\x10\xad\x01\x1a\x41\x00\x21\x04\x0c\x01\x0b\x20\x01\xa7\x21\x04\x0b\x20\x04\x41\x03\x74\x21\x07\x41\x00\x21\x04\x02\x40\x03\x40\x20\x04\x20\x02\x4e\x0d\x01\x20\x03\x29\x03\x00\x10\xc0\x01\x21\x01\x20\x06\x28\x02\x24\x20\x07\x6a\x20\x01\x37\x03\x00\x20\x07\x41\x08\x6a\x21\x07\x20\x03\x41\x08\x6a\x21\x03\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x06\x20\x0a\x3e\x02\x28\x20\x06\x28\x02\x14\x20\x0a\x42\xff\xff\xff\xff\x0f\x83\x37\x03\x00\x20\x0a\x42\x80\x80\x80\x80\x08\x7c\x21\x01\x0c\x01\x0b\x20\x00\x20\x05\x41\x08\x6a\x20\x08\x10\xfb\x05\x0d\x01\x02\x40\x20\x05\x29\x03\x08\x22\x01\x20\x02\xac\x22\x0b\x7c\x22\x0a\x42\x80\x80\x80\x80\x80\x80\x80\x10\x53\x0d\x00\x20\x00\x41\xd9\xb4\x02\x41\x00\x10\xb2\x02\x0c\x02\x0b\x02\x40\x02\x40\x20\x02\x41\x01\x48\x0d\x00\x20\x04\x45\x0d\x00\x42\x00\x21\x0c\x20\x00\x20\x08\x20\x0b\x42\x00\x20\x01\x41\x7f\x10\xb2\x06\x0d\x03\x0c\x01\x0b\x20\x01\x21\x0c\x0b\x42\x00\x21\x01\x02\x40\x03\x40\x20\x01\x20\x0b\x59\x0d\x01\x20\x0c\x20\x01\x7c\x21\x09\x20\x03\x29\x03\x00\x21\x0d\x20\x03\x41\x08\x6a\x21\x03\x20\x01\x42\x01\x7c\x21\x01\x20\x00\x20\x08\x20\x09\x20\x0d\x10\xc0\x01\x10\xa8\x06\x41\x00\x4e\x0d\x00\x0c\x03\x0b\x00\x0b\x02\x40\x02\x40\x20\x0a\x42\x80\x80\x80\x80\x08\x7c\x22\x01\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x0a\x42\xff\xff\xff\xff\x0f\x83\x21\x09\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x0a\xb9\xbd\x22\x09\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x09\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x09\x0b\x20\x00\x20\x08\x41\x30\x20\x09\x10\x82\x04\x41\x00\x48\x0d\x01\x0b\x20\x00\x20\x08\x10\xcd\x01\x02\x40\x20\x01\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x0a\x42\xff\xff\xff\xff\x0f\x83\x21\x01\x0c\x02\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x0a\xb9\xbd\x22\x01\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x01\x0c\x01\x0b\x20\x00\x20\x08\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x05\x41\x10\x6a\x24\x00\x20\x01\x0b\xf1\x03\x02\x04\x7f\x02\x7e\x23\x00\x41\x30\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\x30\x21\x08\x20\x04\x42\x80\x80\x80\x80\x30\x37\x03\x28\x02\x40\x02\x40\x02\x40\x20\x00\x20\x04\x41\x10\x6a\x20\x00\x20\x01\x10\xfe\x02\x22\x01\x10\xfb\x05\x0d\x00\x02\x40\x02\x40\x20\x01\x20\x04\x41\x1c\x6a\x20\x04\x41\x0c\x6a\x10\xb5\x03\x0d\x00\x20\x04\x29\x03\x10\x21\x08\x0c\x01\x0b\x20\x04\x29\x03\x10\x22\x08\x20\x04\x28\x02\x0c\x22\x05\xad\x51\x0d\x02\x0b\x20\x08\x42\x7f\x7c\x21\x09\x42\x00\x21\x08\x03\x40\x20\x08\x20\x09\x59\x0d\x03\x02\x40\x02\x40\x20\x00\x20\x01\x20\x08\x20\x04\x41\x28\x6a\x10\xa1\x06\x22\x05\x41\x00\x48\x0d\x00\x20\x00\x20\x01\x20\x09\x20\x04\x41\x20\x6a\x10\xa1\x06\x22\x06\x41\x00\x48\x0d\x00\x02\x40\x02\x40\x20\x06\x45\x0d\x00\x20\x00\x20\x01\x20\x08\x20\x04\x29\x03\x20\x10\xa8\x06\x41\x00\x48\x0d\x02\x20\x05\x45\x0d\x01\x20\x00\x20\x01\x20\x09\x20\x04\x29\x03\x28\x10\xa8\x06\x21\x05\x20\x04\x42\x80\x80\x80\x80\x30\x37\x03\x28\x20\x05\x41\x00\x4e\x0d\x03\x0c\x02\x0b\x20\x05\x45\x0d\x02\x20\x00\x20\x01\x20\x08\x10\xb3\x06\x41\x00\x48\x0d\x01\x20\x00\x20\x01\x20\x09\x20\x04\x29\x03\x28\x10\xa8\x06\x21\x05\x20\x04\x42\x80\x80\x80\x80\x30\x37\x03\x28\x20\x05\x41\x00\x48\x0d\x01\x0c\x02\x0b\x20\x00\x20\x01\x20\x09\x10\xb3\x06\x41\x00\x4e\x0d\x01\x0b\x20\x04\x29\x03\x28\x21\x08\x0c\x02\x0b\x20\x09\x42\x7f\x7c\x21\x09\x20\x08\x42\x01\x7c\x21\x08\x0c\x00\x0b\x00\x0b\x20\x00\x20\x08\x10\xcd\x01\x20\x00\x20\x01\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0c\x01\x0b\x20\x05\x41\x02\x49\x0d\x00\x20\x04\x28\x02\x1c\x22\x00\x20\x05\x41\x7f\x6a\x22\x06\x41\x03\x74\x6a\x21\x05\x41\x00\x21\x07\x42\x80\x80\x80\x80\x30\x21\x08\x02\x40\x03\x40\x20\x07\x20\x06\x4f\x0d\x01\x20\x00\x29\x03\x00\x21\x08\x20\x00\x20\x05\x29\x03\x00\x37\x03\x00\x20\x05\x20\x08\x37\x03\x00\x20\x06\x41\x7f\x6a\x21\x06\x20\x05\x41\x78\x6a\x21\x05\x20\x00\x41\x08\x6a\x21\x00\x20\x07\x41\x01\x6a\x21\x07\x0c\x00\x0b\x00\x0b\x20\x04\x20\x08\x37\x03\x28\x0b\x20\x04\x41\x30\x6a\x24\x00\x20\x01\x0b\xec\x05\x02\x06\x7f\x05\x7e\x23\x00\x41\x30\x6b\x22\x04\x24\x00\x20\x04\x42\x00\x37\x02\x1c\x20\x04\x20\x00\x36\x02\x18\x20\x04\x20\x03\x29\x03\x00\x22\x0a\x37\x03\x28\x42\x80\x80\x80\x80\x30\x21\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x20\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x41\x00\x21\x05\x41\x00\x21\x06\x41\x00\x21\x07\x20\x00\x20\x0a\x10\xdb\x03\x0d\x01\x20\x04\x41\x01\x36\x02\x20\x0b\x41\x00\x21\x05\x02\x40\x02\x40\x20\x00\x20\x04\x41\x10\x6a\x20\x00\x20\x01\x10\xfe\x02\x22\x0b\x10\xfb\x05\x45\x0d\x00\x41\x00\x21\x06\x0c\x01\x0b\x42\x00\x21\x0a\x41\x00\x21\x05\x41\x00\x21\x03\x41\x00\x21\x06\x42\x00\x21\x0c\x02\x40\x03\x40\x20\x0a\x20\x04\x29\x03\x10\x22\x01\x59\x0d\x01\x02\x40\x20\x06\x20\x03\x49\x0d\x00\x20\x00\x20\x05\x20\x03\x20\x03\x41\x01\x76\x6a\x41\x1f\x6a\x41\x70\x71\x22\x03\x41\x18\x6c\x20\x04\x41\x0c\x6a\x10\xbd\x04\x22\x07\x45\x0d\x03\x20\x04\x28\x02\x0c\x41\x18\x6e\x20\x03\x6a\x21\x03\x20\x07\x21\x05\x0b\x41\x00\x21\x07\x20\x00\x20\x0b\x20\x0a\x20\x05\x20\x06\x41\x18\x6c\x6a\x22\x08\x10\xa1\x06\x22\x09\x41\x00\x48\x0d\x03\x02\x40\x20\x09\x45\x0d\x00\x02\x40\x20\x08\x35\x02\x04\x42\x20\x86\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x0c\x42\x01\x7c\x21\x0c\x0c\x01\x0b\x20\x08\x20\x0a\x37\x03\x10\x20\x08\x41\x00\x36\x02\x08\x20\x06\x41\x01\x6a\x21\x06\x0b\x20\x0a\x42\x01\x7c\x21\x0a\x0c\x00\x0b\x00\x0b\x20\x05\x20\x06\x41\x18\x41\xf6\x00\x20\x04\x41\x18\x6a\x10\xab\x04\x41\x00\x21\x07\x20\x04\x28\x02\x1c\x0d\x01\x20\x06\xad\x21\x0d\x42\x00\x21\x0a\x20\x05\x21\x03\x41\x01\x21\x07\x02\x40\x03\x40\x20\x0d\x20\x0a\x51\x0d\x01\x02\x40\x20\x03\x41\x08\x6a\x28\x02\x00\x22\x08\x45\x0d\x00\x20\x00\x20\x08\xad\x42\x80\x80\x80\x80\x90\x7f\x84\x10\xcd\x01\x0b\x20\x03\x29\x03\x00\x21\x0e\x02\x40\x02\x40\x20\x0a\x20\x03\x41\x10\x6a\x29\x03\x00\x52\x0d\x00\x20\x00\x20\x0e\x10\xcd\x01\x0c\x01\x0b\x20\x00\x20\x0b\x20\x0a\x20\x0e\x10\xa8\x06\x41\x00\x48\x0d\x04\x0b\x20\x03\x41\x18\x6a\x21\x03\x20\x07\x41\x01\x6a\x21\x07\x20\x0a\x42\x01\x7c\x21\x0a\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x05\x20\x03\x28\x02\x04\x11\x00\x00\x03\x40\x02\x40\x20\x0c\x42\x00\x55\x0d\x00\x03\x40\x20\x0d\x20\x01\x59\x0d\x06\x20\x00\x20\x0b\x20\x0d\x10\xb3\x06\x21\x03\x20\x0d\x42\x01\x7c\x21\x0d\x20\x03\x41\x00\x4e\x0d\x00\x0c\x05\x0b\x00\x0b\x20\x00\x20\x0b\x20\x0d\x42\x80\x80\x80\x80\x30\x10\xa8\x06\x41\x00\x48\x0d\x03\x20\x0c\x42\x7f\x7c\x21\x0c\x20\x0d\x42\x01\x7c\x21\x0d\x0c\x00\x0b\x00\x0b\x41\x00\x21\x07\x0b\x20\x05\x20\x07\x41\x18\x6c\x6a\x21\x03\x02\x40\x03\x40\x20\x07\x20\x06\x4f\x0d\x01\x20\x00\x20\x03\x29\x03\x00\x10\xcd\x01\x02\x40\x20\x03\x41\x08\x6a\x28\x02\x00\x22\x08\x45\x0d\x00\x20\x00\x20\x08\xad\x42\x80\x80\x80\x80\x90\x7f\x84\x10\xcd\x01\x0b\x20\x03\x41\x18\x6a\x21\x03\x20\x07\x41\x01\x6a\x21\x07\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x05\x20\x03\x28\x02\x04\x11\x00\x00\x0b\x20\x00\x20\x0b\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x0b\x0b\x20\x04\x41\x30\x6a\x24\x00\x20\x0b\x0b\xfb\x02\x03\x05\x7f\x02\x7e\x01\x7c\x23\x00\x41\x20\x6b\x22\x03\x24\x00\x41\x00\x21\x04\x02\x40\x20\x02\x28\x02\x04\x0d\x00\x20\x02\x28\x02\x00\x21\x05\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x28\x02\x08\x45\x0d\x00\x20\x00\x29\x00\x00\x20\x01\x29\x00\x00\x51\x0d\x02\x20\x03\x20\x00\x29\x03\x00\x37\x03\x10\x20\x03\x20\x01\x29\x03\x00\x37\x03\x18\x20\x05\x20\x02\x29\x03\x10\x42\x80\x80\x80\x80\x30\x41\x02\x20\x03\x41\x10\x6a\x10\xb5\x01\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x02\x40\x20\x08\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x08\xa7\x22\x02\x41\x00\x4a\x20\x02\x41\x1f\x75\x6a\x21\x04\x0c\x02\x0b\x20\x05\x20\x03\x41\x08\x6a\x20\x08\x10\xf8\x03\x41\x00\x48\x0d\x03\x20\x03\x2b\x03\x08\x22\x0a\x44\x00\x00\x00\x00\x00\x00\x00\x00\x64\x20\x0a\x44\x00\x00\x00\x00\x00\x00\x00\x00\x63\x6b\x21\x04\x0c\x01\x0b\x02\x40\x20\x00\x28\x02\x08\x22\x06\x0d\x00\x20\x05\x20\x00\x29\x03\x00\x10\xe6\x02\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x00\x20\x08\xa7\x22\x06\x36\x02\x08\x0b\x02\x40\x20\x01\x28\x02\x08\x22\x07\x0d\x00\x20\x05\x20\x01\x29\x03\x00\x10\xe6\x02\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x01\x20\x08\xa7\x22\x07\x36\x02\x08\x20\x00\x28\x02\x08\x21\x06\x0b\x20\x06\x20\x07\x10\x89\x04\x21\x04\x0b\x20\x04\x0d\x02\x0b\x20\x00\x29\x03\x10\x22\x08\x20\x01\x29\x03\x10\x22\x09\x55\x20\x08\x20\x09\x53\x6b\x21\x04\x0c\x01\x0b\x20\x02\x41\x01\x36\x02\x04\x0b\x20\x03\x41\x20\x6a\x24\x00\x20\x04\x0b\xe3\x08\x02\x02\x7f\x08\x7e\x23\x00\x41\x30\x6b\x22\x05\x24\x00\x42\x80\x80\x80\x80\x30\x21\x07\x02\x40\x02\x40\x20\x00\x20\x05\x41\x20\x6a\x20\x00\x20\x01\x10\xfe\x02\x22\x01\x10\xfb\x05\x0d\x00\x20\x00\x20\x05\x41\x18\x6a\x20\x03\x29\x03\x00\x42\x00\x20\x05\x29\x03\x20\x22\x08\x20\x08\x10\xfd\x05\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x04\x45\x0d\x00\x02\x40\x20\x02\x41\x01\x4b\x0d\x00\x02\x40\x02\x40\x20\x02\x0e\x02\x00\x01\x00\x0b\x42\x00\x21\x09\x0c\x03\x0b\x20\x08\x20\x05\x29\x03\x18\x7d\x21\x09\x0c\x02\x0b\x20\x00\x20\x05\x41\x08\x6a\x20\x03\x29\x03\x08\x42\x00\x20\x08\x20\x05\x29\x03\x18\x7d\x42\x00\x10\xfd\x05\x0d\x04\x20\x02\x41\x7e\x6a\x21\x06\x20\x05\x29\x03\x08\x21\x09\x0c\x02\x0b\x20\x05\x20\x08\x37\x03\x10\x42\x80\x80\x80\x80\x30\x21\x07\x20\x08\x21\x0a\x02\x40\x20\x03\x29\x03\x08\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x05\x41\x10\x6a\x20\x0b\x42\x00\x20\x08\x20\x08\x10\xfd\x05\x0d\x04\x20\x05\x29\x03\x10\x21\x0a\x0b\x20\x0a\x20\x05\x29\x03\x18\x7d\x22\x0a\x42\x00\x20\x0a\x42\x00\x55\x1b\x21\x09\x41\x00\x21\x06\x0c\x02\x0b\x20\x05\x20\x09\x37\x03\x08\x41\x00\x21\x06\x0b\x20\x08\x20\x06\xad\x7c\x20\x09\x7d\x42\x80\x80\x80\x80\x80\x80\x80\x10\x53\x0d\x00\x20\x00\x41\xd9\xb4\x02\x41\x00\x10\xb2\x02\x0c\x01\x0b\x02\x40\x02\x40\x20\x09\x42\x80\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x09\x42\xff\xff\xff\xff\x0f\x83\x21\x07\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x09\xb9\xbd\x22\x0a\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x0a\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x07\x0b\x20\x00\x20\x01\x20\x07\x10\xa0\x06\x21\x0a\x20\x00\x20\x07\x10\xcd\x01\x02\x40\x20\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x05\x20\x05\x29\x03\x18\x22\x0c\x20\x09\x7c\x22\x0d\x37\x03\x10\x20\x01\x20\x05\x41\x04\x6a\x20\x05\x10\xb5\x03\x21\x02\x42\x00\x21\x0b\x02\x40\x02\x40\x20\x0a\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x02\x45\x0d\x00\x20\x0a\xa7\x22\x02\x2f\x01\x06\x41\x02\x47\x0d\x00\x20\x0c\x21\x07\x20\x02\x2d\x00\x05\x41\x08\x71\x45\x0d\x01\x20\x05\x28\x02\x04\x20\x0c\xa7\x41\x03\x74\x6a\x21\x02\x42\x00\x21\x0b\x20\x05\x35\x02\x00\x21\x0e\x03\x40\x20\x0c\x20\x0b\x7c\x22\x07\x20\x0d\x59\x0d\x02\x20\x07\x20\x0e\x59\x0d\x02\x20\x00\x20\x0a\x20\x0b\x20\x02\x29\x03\x00\x10\xc0\x01\x41\x80\x80\x01\x10\xc8\x04\x41\x00\x48\x0d\x03\x20\x02\x41\x08\x6a\x21\x02\x20\x0b\x42\x01\x7c\x21\x0b\x0c\x00\x0b\x00\x0b\x20\x0c\x21\x07\x0b\x02\x40\x03\x40\x20\x07\x20\x0d\x59\x0d\x01\x20\x00\x20\x01\x20\x07\x20\x05\x41\x28\x6a\x10\xa1\x06\x22\x02\x41\x00\x48\x0d\x02\x02\x40\x20\x02\x45\x0d\x00\x20\x00\x20\x0a\x20\x0b\x20\x05\x29\x03\x28\x41\x80\x80\x01\x10\xc8\x04\x41\x00\x48\x0d\x03\x0b\x20\x0b\x42\x01\x7c\x21\x0b\x20\x07\x42\x01\x7c\x21\x07\x0c\x00\x0b\x00\x0b\x02\x40\x20\x0b\x42\x80\x80\x80\x80\x08\x54\x0d\x00\x42\x80\x80\x80\x80\xc0\x7e\x20\x0b\xb9\xbd\x22\x07\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x07\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x0b\x0b\x20\x00\x20\x0a\x41\x30\x20\x0b\x10\x82\x04\x41\x00\x48\x0d\x00\x02\x40\x20\x04\x45\x0d\x00\x20\x08\x20\x06\xad\x22\x07\x7c\x20\x09\x7d\x21\x0b\x02\x40\x20\x09\x20\x07\x51\x0d\x00\x20\x00\x20\x01\x20\x0c\x20\x07\x7c\x20\x0c\x20\x09\x7c\x22\x0d\x20\x08\x20\x0d\x7d\x41\x7f\x41\x01\x20\x09\x20\x07\x53\x1b\x10\xb2\x06\x41\x00\x48\x0d\x02\x03\x40\x20\x08\x20\x0b\x57\x0d\x01\x20\x00\x20\x01\x20\x08\x42\x7f\x7c\x22\x08\x10\xb3\x06\x41\x00\x48\x0d\x03\x0c\x00\x0b\x00\x0b\x20\x03\x41\x10\x6a\x21\x03\x02\x40\x03\x40\x20\x07\x50\x0d\x01\x20\x00\x20\x01\x20\x0c\x20\x03\x29\x03\x00\x10\xc0\x01\x10\xa8\x06\x21\x02\x20\x07\x42\x7f\x7c\x21\x07\x20\x03\x41\x08\x6a\x21\x03\x20\x0c\x42\x01\x7c\x21\x0c\x20\x02\x41\x00\x48\x0d\x03\x0c\x00\x0b\x00\x0b\x02\x40\x02\x40\x20\x0b\x42\x80\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x0b\x42\xff\xff\xff\xff\x0f\x83\x21\x0b\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x0b\xb9\xbd\x22\x07\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x07\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x0b\x0b\x20\x0a\x21\x07\x20\x00\x20\x01\x41\x30\x20\x0b\x10\x82\x04\x41\x7f\x4c\x0d\x02\x0b\x20\x01\x21\x07\x0c\x02\x0b\x20\x0a\x21\x07\x0b\x20\x00\x20\x01\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x0a\x0b\x20\x00\x20\x07\x10\xcd\x01\x20\x05\x41\x30\x6a\x24\x00\x20\x0a\x0b\x81\x02\x02\x01\x7f\x04\x7e\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x18\x6a\x20\x00\x20\x01\x10\xfe\x02\x22\x01\x10\xfb\x05\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x42\x00\x20\x04\x29\x03\x18\x22\x05\x20\x05\x10\xfd\x05\x0d\x00\x20\x00\x20\x04\x41\x10\x6a\x20\x03\x29\x03\x08\x42\x00\x20\x05\x20\x05\x10\xfd\x05\x0d\x00\x20\x04\x20\x05\x37\x03\x00\x20\x05\x21\x06\x02\x40\x20\x02\x41\x03\x48\x0d\x00\x20\x05\x21\x06\x20\x03\x29\x03\x10\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x04\x20\x07\x42\x00\x20\x05\x20\x05\x10\xfd\x05\x0d\x01\x20\x04\x29\x03\x00\x21\x06\x0b\x20\x00\x20\x01\x20\x04\x29\x03\x08\x22\x07\x20\x04\x29\x03\x10\x22\x08\x20\x06\x20\x08\x7d\x22\x06\x20\x05\x20\x07\x7d\x22\x05\x20\x06\x20\x05\x53\x1b\x22\x05\x41\x7f\x41\x01\x20\x07\x20\x05\x20\x08\x7c\x53\x1b\x41\x01\x20\x08\x20\x07\x53\x1b\x10\xb2\x06\x45\x0d\x01\x0b\x20\x00\x20\x01\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x01\x0b\xd1\x02\x02\x01\x7f\x04\x7e\x23\x00\x41\x10\x6b\x22\x05\x24\x00\x42\x80\x80\x80\x80\x30\x21\x06\x02\x40\x02\x40\x20\x00\x20\x05\x41\x08\x6a\x20\x00\x20\x01\x10\xfe\x02\x22\x07\x10\xfb\x05\x0d\x00\x20\x05\x41\x01\x36\x02\x04\x02\x40\x02\x40\x20\x04\x45\x0d\x00\x20\x03\x29\x03\x00\x21\x08\x42\x80\x80\x80\x80\x30\x21\x06\x42\x80\x80\x80\x80\x30\x21\x09\x02\x40\x20\x02\x41\x02\x48\x0d\x00\x20\x03\x29\x03\x08\x21\x09\x0b\x20\x00\x20\x08\x10\xdb\x03\x45\x0d\x01\x0c\x02\x0b\x02\x40\x20\x02\x41\x01\x4e\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x08\x42\x80\x80\x80\x80\x30\x21\x09\x0c\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x08\x42\x80\x80\x80\x80\x30\x21\x09\x20\x03\x29\x03\x00\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x08\x42\x80\x80\x80\x80\x30\x21\x09\x42\x80\x80\x80\x80\x30\x21\x06\x20\x00\x20\x05\x41\x04\x6a\x20\x01\x10\xce\x05\x41\x00\x48\x0d\x01\x0b\x02\x40\x20\x00\x20\x07\x42\x00\x10\xa0\x06\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x21\x06\x0c\x01\x0b\x20\x01\x21\x06\x20\x00\x20\x01\x20\x07\x20\x05\x29\x03\x08\x42\x00\x20\x05\x28\x02\x04\x20\x08\x20\x09\x10\xbb\x06\x42\x7f\x57\x0d\x00\x20\x07\x21\x06\x0c\x01\x0b\x20\x00\x20\x07\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x00\x20\x06\x10\xcd\x01\x20\x05\x41\x10\x6a\x24\x00\x20\x01\x0b\xe1\x03\x02\x03\x7f\x04\x7e\x23\x00\x41\x30\x6b\x22\x08\x24\x00\x02\x40\x02\x40\x20\x00\x28\x02\x10\x28\x02\x78\x20\x08\x22\x08\x4b\x0d\x00\x20\x05\x41\x7f\x6a\x21\x09\x20\x06\x42\x80\x80\x80\x80\x70\x83\x21\x0b\x20\x05\x41\x01\x48\x21\x0a\x42\x00\x21\x0c\x03\x40\x02\x40\x20\x0c\x20\x03\x53\x0d\x00\x20\x04\x21\x0d\x0c\x03\x0b\x42\x7f\x21\x0d\x20\x00\x20\x02\x20\x0c\x20\x08\x41\x28\x6a\x10\xa1\x06\x22\x05\x41\x00\x48\x0d\x02\x02\x40\x20\x05\x45\x0d\x00\x02\x40\x20\x0b\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x08\x20\x08\x29\x03\x28\x37\x03\x00\x20\x0c\x21\x0e\x02\x40\x20\x0c\x42\x80\x80\x80\x80\x08\x54\x0d\x00\x42\x80\x80\x80\x80\xc0\x7e\x20\x0c\xb9\xbd\x22\x0e\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x0e\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x0e\x0b\x20\x08\x20\x02\x37\x03\x10\x20\x08\x20\x0e\x37\x03\x08\x20\x08\x20\x00\x20\x06\x20\x07\x41\x03\x20\x08\x10\xb5\x01\x22\x0e\x37\x03\x28\x20\x00\x20\x08\x29\x03\x00\x10\xcd\x01\x20\x00\x20\x08\x29\x03\x08\x10\xcd\x01\x20\x0e\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x04\x0b\x02\x40\x02\x40\x02\x40\x20\x0a\x0d\x00\x20\x00\x20\x08\x29\x03\x28\x22\x0e\x10\x9b\x06\x22\x05\x41\x00\x48\x0d\x01\x20\x05\x45\x0d\x00\x20\x00\x20\x08\x41\x20\x6a\x20\x0e\x10\xfb\x05\x41\x00\x48\x0d\x01\x20\x00\x20\x01\x20\x0e\x20\x08\x29\x03\x20\x20\x04\x20\x09\x42\x80\x80\x80\x80\x30\x42\x80\x80\x80\x80\x30\x10\xbb\x06\x22\x04\x42\x00\x53\x0d\x01\x20\x00\x20\x0e\x10\xcd\x01\x0c\x03\x0b\x20\x04\x42\xff\xff\xff\xff\xff\xff\xff\x0f\x53\x0d\x01\x20\x00\x41\xca\xb4\x02\x41\x00\x10\xb2\x02\x20\x08\x29\x03\x28\x21\x0e\x0b\x20\x00\x20\x0e\x10\xcd\x01\x0c\x04\x0b\x20\x00\x20\x01\x20\x04\x20\x08\x29\x03\x28\x10\xa7\x05\x41\x00\x48\x0d\x03\x20\x04\x42\x01\x7c\x21\x04\x0b\x20\x0c\x42\x01\x7c\x21\x0c\x0c\x00\x0b\x00\x0b\x20\x00\x10\xfb\x02\x42\x7f\x21\x0d\x0b\x20\x08\x41\x30\x6a\x24\x00\x20\x0d\x0b\x75\x01\x03\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x04\x2f\x01\x06\x21\x05\x02\x40\x20\x02\x45\x0d\x00\x20\x05\x41\xff\xff\x03\x71\x41\x20\x47\x0d\x01\x0c\x02\x0b\x20\x05\x41\x6b\x6a\x41\xff\xff\x03\x71\x41\x0b\x49\x0d\x01\x0b\x20\x03\x41\x97\xb5\x02\x41\x8c\xb5\x02\x20\x02\x1b\x36\x02\x00\x20\x00\x41\xa0\xb5\x02\x20\x03\x10\xb2\x02\x41\x00\x21\x04\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x04\x0b\xea\x01\x01\x01\x7e\x02\x40\x02\x40\x02\x40\x20\x01\x42\xff\xff\xff\xff\x6f\x58\x0d\x00\x20\x00\x20\x01\x41\x3c\x20\x01\x41\x00\x10\xb4\x01\x22\x01\x42\x80\x80\x80\x80\x70\x83\x22\x03\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x02\x40\x20\x03\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x02\x40\x20\x01\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x20\x01\x10\xcd\x01\x0c\x02\x0b\x20\x00\x20\x01\x41\xda\x01\x20\x01\x41\x00\x10\xb4\x01\x21\x03\x20\x00\x20\x01\x10\xcd\x01\x20\x03\x42\x80\x80\x80\x80\x70\x83\x22\x01\x42\x80\x80\x80\x80\x20\x51\x0d\x00\x02\x40\x20\x01\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x01\x42\x80\x80\x80\x80\x30\x51\x0d\x01\x02\x40\x20\x03\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x03\xa7\x2d\x00\x05\x41\x10\x71\x0d\x01\x0b\x20\x00\x20\x03\x10\xcd\x01\x20\x00\x41\xff\xe4\x01\x41\x00\x10\xb2\x02\x0c\x03\x0b\x20\x03\x0f\x0b\x20\x02\x10\xc0\x01\x0f\x0b\x20\x00\x10\x8a\x03\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x01\x0b\x89\x01\x01\x02\x7f\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x20\x00\x20\x01\x20\x02\x20\x03\x10\xdb\x04\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x00\x20\x01\x10\xa3\x06\x22\x05\x41\x00\x48\x0d\x00\x20\x02\x41\x01\x47\x0d\x01\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xc0\x01\x10\xfc\x05\x0d\x00\x20\x04\x29\x03\x08\x20\x05\xad\x57\x0d\x01\x20\x00\x41\xa9\xb5\x02\x41\x00\x10\xb2\x02\x0b\x20\x00\x20\x01\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x01\x0b\x5f\x01\x02\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x41\x7f\x21\x04\x02\x40\x20\x00\x20\x03\x41\x08\x6a\x20\x02\x10\xe1\x05\x0d\x00\x41\x00\x21\x04\x02\x40\x20\x03\x29\x03\x08\x22\x02\x42\x80\x80\x80\x80\x80\x80\x80\x10\x54\x0d\x00\x20\x00\x41\x82\xb6\x02\x41\x00\x10\xa6\x04\x41\x7f\x21\x04\x42\x00\x21\x02\x0b\x20\x01\x20\x02\x37\x03\x00\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x04\x0b\x0d\x00\x20\x00\x20\x01\x20\x02\x41\x13\x10\xc2\x06\x0b\x9f\x01\x01\x05\x7f\x20\x01\xa7\x22\x05\x2f\x01\x06\x21\x06\x02\x40\x20\x00\x41\x18\x10\xc0\x02\x22\x07\x0d\x00\x20\x00\x20\x02\x10\xcd\x01\x41\x7f\x0f\x0b\x20\x07\x20\x02\xa7\x22\x08\x28\x02\x20\x22\x00\x28\x02\x0c\x22\x09\x36\x02\x00\x20\x09\x20\x07\x36\x02\x04\x20\x07\x20\x04\x20\x06\x41\xf6\xe5\x01\x6a\x31\x00\x00\x86\x3e\x02\x14\x20\x07\x20\x03\xa7\x22\x06\x36\x02\x10\x20\x07\x20\x08\x36\x02\x0c\x20\x07\x20\x05\x36\x02\x08\x20\x00\x20\x07\x36\x02\x0c\x20\x07\x20\x00\x41\x0c\x6a\x36\x02\x04\x20\x05\x41\x28\x6a\x20\x04\x3e\x02\x00\x20\x05\x20\x07\x36\x02\x20\x20\x05\x41\x24\x6a\x20\x00\x28\x02\x08\x20\x06\x6a\x36\x02\x00\x41\x00\x0b\x14\x00\x20\x00\x20\x01\x20\x02\x20\x03\x41\x00\x41\xf7\x00\x41\x01\x10\xc4\x06\x0b\x11\x00\x20\x00\x41\x10\x6a\x20\x02\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x88\x03\x01\x04\x7f\x20\x00\x28\x02\x10\x21\x07\x02\x40\x02\x40\x20\x00\x20\x01\x20\x03\x10\xda\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x02\x42\x80\x80\x80\x80\x08\x54\x0d\x00\x41\x00\x21\x08\x20\x00\x41\xe6\xb5\x02\x41\x00\x10\xa6\x04\x0c\x02\x0b\x02\x40\x20\x00\x41\x1c\x10\xc0\x02\x22\x08\x0d\x00\x41\x00\x21\x08\x0c\x02\x0b\x20\x08\x20\x02\xa7\x22\x09\x36\x02\x00\x02\x40\x02\x40\x20\x06\x45\x0d\x00\x02\x40\x20\x03\x41\x14\x47\x0d\x00\x20\x07\x28\x02\xb8\x01\x22\x0a\x45\x0d\x00\x20\x08\x20\x07\x41\xc4\x01\x6a\x28\x02\x00\x20\x09\x41\x01\x20\x09\x41\x01\x4a\x1b\x20\x0a\x11\x03\x00\x22\x07\x36\x02\x08\x20\x07\x45\x0d\x04\x20\x07\x41\x00\x20\x09\x10\x74\x1a\x0c\x02\x0b\x20\x08\x20\x00\x20\x09\x41\x01\x20\x09\x41\x01\x4a\x1b\x10\xe2\x03\x22\x07\x36\x02\x08\x20\x07\x45\x0d\x03\x0c\x01\x0b\x02\x40\x20\x03\x41\x14\x47\x0d\x00\x20\x07\x41\xc0\x01\x6a\x28\x02\x00\x22\x00\x45\x0d\x00\x20\x07\x41\xc4\x01\x6a\x28\x02\x00\x20\x04\x20\x00\x11\x00\x00\x0b\x20\x08\x20\x04\x36\x02\x08\x0b\x20\x08\x20\x05\x36\x02\x18\x20\x08\x41\x00\x36\x02\x14\x20\x08\x41\x00\x3a\x00\x04\x20\x08\x20\x08\x41\x0c\x6a\x22\x00\x36\x02\x10\x20\x08\x20\x00\x36\x02\x0c\x20\x08\x20\x03\x41\x14\x46\x3a\x00\x05\x02\x40\x20\x04\x45\x0d\x00\x20\x06\x45\x0d\x00\x20\x08\x28\x02\x08\x20\x04\x20\x09\x10\x70\x1a\x0b\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x20\x08\x36\x02\x20\x0b\x20\x01\x0f\x0b\x20\x00\x20\x01\x10\xcd\x01\x20\x00\x28\x02\x10\x22\x00\x41\x10\x6a\x20\x08\x20\x00\x28\x02\x04\x11\x00\x00\x42\x80\x80\x80\x80\xe0\x00\x0b\x07\x00\x20\x01\x10\xc0\x01\x0b\x34\x00\x02\x40\x20\x02\x41\x00\x4a\x0d\x00\x20\x00\x20\x01\x42\x80\x80\x80\x80\x30\x41\x00\x41\x00\x10\xb5\x01\x0f\x0b\x20\x00\x20\x01\x20\x03\x29\x03\x00\x20\x02\x41\x7f\x6a\x20\x03\x41\x08\x6a\x10\xb5\x01\x0b\xd9\x05\x03\x03\x7e\x04\x7f\x03\x7c\x42\x80\x80\x80\x80\xe0\x00\x21\x04\x02\x40\x02\x40\x20\x00\x20\x01\x10\xdb\x03\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x04\x20\x00\x20\x00\x29\x03\x30\x41\x0e\x10\xc6\x01\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x05\xa7\x21\x07\x41\x00\x21\x08\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x2d\x00\x05\x41\x10\x71\x21\x08\x0b\x20\x07\x20\x07\x2d\x00\x05\x41\xef\x01\x71\x20\x08\x72\x3a\x00\x05\x41\x18\x21\x08\x20\x00\x20\x02\x41\x7f\x6a\x41\x00\x20\x02\x41\x00\x4a\x1b\x22\x09\x41\x03\x74\x41\x18\x6a\x10\xc0\x02\x22\x0a\x45\x0d\x01\x20\x0a\x20\x01\x10\xc0\x01\x22\x04\x37\x03\x00\x20\x03\x29\x03\x00\x10\xc0\x01\x21\x06\x20\x0a\x20\x09\x36\x02\x10\x20\x0a\x20\x06\x37\x03\x08\x41\x00\x21\x02\x02\x40\x03\x40\x20\x02\x20\x09\x4e\x0d\x01\x20\x0a\x20\x08\x6a\x20\x03\x20\x08\x6a\x41\x70\x6a\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x08\x41\x08\x6a\x21\x08\x20\x02\x41\x01\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x20\x07\x20\x0a\x36\x02\x20\x02\x40\x20\x01\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x0c\x02\x0b\x20\x00\x41\x00\x20\x04\xa7\x41\x30\x10\xea\x03\x22\x08\x41\x00\x48\x0d\x01\x42\x00\x21\x01\x02\x40\x20\x08\x45\x0d\x00\x20\x00\x20\x04\x41\x30\x20\x04\x41\x00\x10\xb4\x01\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x02\x40\x20\x06\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x06\xa7\x22\x08\x20\x09\x6b\x41\x00\x20\x08\x20\x09\x4a\x1b\xad\x21\x01\x0c\x01\x0b\x02\x40\x02\x40\x20\x06\x42\x20\x88\xa7\x22\x08\x41\x07\x46\x0d\x00\x20\x08\x41\x0b\x6a\x41\x12\x49\x0d\x01\x0b\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x0b\x02\x40\x20\x06\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\x22\x0c\x20\x0c\x62\x0d\x00\x20\x0c\x9d\x22\x0c\x20\x09\xb7\x22\x0d\x65\x0d\x00\x20\x0c\x20\x0d\xa1\x21\x0b\x0b\x20\x0b\xbd\x21\x01\x02\x40\x02\x40\x20\x0b\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x0b\xaa\x21\x08\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x08\x0b\x02\x40\x20\x01\x20\x08\xb7\xbd\x52\x0d\x00\x20\x08\xad\x21\x01\x0c\x02\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x01\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x01\x0c\x01\x0b\x20\x00\x20\x06\x10\xcd\x01\x0b\x20\x00\x20\x05\x41\x30\x20\x01\x41\x01\x10\xc4\x01\x1a\x02\x40\x20\x00\x20\x04\x41\x36\x20\x04\x41\x00\x10\xb4\x01\x22\x01\x42\x80\x80\x80\x80\x70\x83\x22\x04\x42\x80\x80\x80\x80\x90\x7f\x51\x0d\x00\x20\x04\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x20\x00\x20\x01\x10\xcd\x01\x20\x00\x41\x2f\x10\xc5\x01\x21\x01\x0b\x20\x00\x41\xcb\xb7\x02\x20\x01\x41\xd2\xc7\x01\x10\xc1\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x05\x41\x36\x20\x01\x41\x01\x10\xc4\x01\x1a\x20\x05\x21\x04\x0b\x20\x04\x0f\x0b\x20\x00\x20\x05\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x0b\xc4\x01\x02\x01\x7e\x04\x7f\x42\x80\x80\x80\x80\xe0\x00\x21\x04\x02\x40\x20\x00\x20\x01\x10\xdb\x03\x0d\x00\x41\xfc\xb6\x02\x21\x05\x02\x40\x20\x01\xa7\x22\x06\x2f\x01\x06\x10\xc6\x02\x45\x0d\x00\x02\x40\x20\x06\x28\x02\x20\x22\x06\x2f\x00\x11\x22\x07\x41\x80\x08\x71\x45\x0d\x00\x20\x06\x41\xd4\x00\x6a\x28\x02\x00\x22\x08\x45\x0d\x00\x20\x00\x20\x08\x20\x06\x41\xc8\x00\x6a\x28\x02\x00\x10\xcb\x02\x0f\x0b\x20\x07\x41\x04\x76\x41\x03\x71\x41\x7f\x6a\x22\x06\x41\x02\x4b\x0d\x00\x20\x06\x41\x02\x74\x41\xf0\xb6\x02\x6a\x28\x02\x00\x21\x05\x0b\x02\x40\x20\x00\x20\x01\x41\x36\x20\x01\x41\x00\x10\xb4\x01\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x41\x2f\x10\xc5\x01\x21\x01\x0b\x20\x00\x20\x05\x20\x01\x41\x86\xb7\x02\x10\xc1\x03\x21\x04\x0b\x20\x04\x0b\x28\x00\x42\x80\x80\x80\x80\xe0\x00\x20\x00\x20\x03\x29\x03\x00\x20\x01\x10\x8c\x04\x22\x00\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x20\x00\x41\x00\x48\x1b\x0b\x37\x02\x01\x7e\x01\x7f\x42\x80\x80\x80\x80\x30\x21\x02\x02\x40\x20\x01\x10\xc4\x02\x22\x03\x45\x0d\x00\x20\x03\x41\x12\x6a\x2d\x00\x00\x41\x04\x71\x45\x0d\x00\x20\x00\x20\x03\x28\x02\x40\x10\xc5\x01\x21\x02\x0b\x20\x02\x0b\x36\x02\x01\x7e\x01\x7f\x42\x80\x80\x80\x80\x30\x21\x02\x02\x40\x20\x01\x10\xc4\x02\x22\x03\x45\x0d\x00\x20\x03\x41\x12\x6a\x2d\x00\x00\x41\x04\x71\x45\x0d\x00\x20\x03\x41\xc4\x00\x6a\x35\x02\x00\x21\x02\x0b\x20\x02\x0b\x0f\x00\x20\x00\x20\x01\x41\x37\x41\x00\x41\x00\x10\xf7\x05\x0b\x09\x00\x20\x00\x20\x01\x10\xfe\x02\x0b\x86\x01\x02\x01\x7e\x01\x7f\x02\x40\x20\x00\x20\x03\x29\x03\x00\x10\xa3\x03\x22\x03\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x04\x02\x40\x20\x00\x20\x01\x10\xfe\x02\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x03\x10\xe4\x02\x20\x01\x0f\x0b\x20\x00\x41\x00\x20\x01\xa7\x20\x03\x10\xea\x03\x21\x05\x20\x00\x20\x03\x10\xe4\x02\x20\x00\x20\x01\x10\xcd\x01\x02\x40\x20\x05\x41\x00\x48\x0d\x00\x20\x05\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x21\x04\x0b\x20\x04\x0b\xd0\x01\x01\x03\x7e\x42\x80\x80\x80\x80\x10\x21\x04\x02\x40\x20\x03\x29\x03\x00\x22\x05\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x04\x20\x00\x20\x01\x10\xfe\x02\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x06\xa7\x21\x03\x20\x05\x10\xc0\x01\x21\x04\x02\x40\x03\x40\x02\x40\x02\x40\x02\x40\x20\x00\x20\x04\x10\x9c\x03\x22\x04\x42\x80\x80\x80\x80\x70\x83\x22\x01\x42\x80\x80\x80\x80\x20\x52\x0d\x00\x42\x80\x80\x80\x80\x10\x21\x01\x0c\x01\x0b\x20\x01\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x03\x20\x04\xa7\x47\x0d\x01\x42\x81\x80\x80\x80\x10\x21\x01\x0b\x20\x00\x20\x04\x10\xcd\x01\x20\x00\x20\x06\x10\xcd\x01\x20\x01\x0f\x0b\x20\x00\x10\xfa\x02\x45\x0d\x00\x0b\x0b\x20\x00\x20\x04\x10\xcd\x01\x20\x00\x20\x06\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x04\x0b\x20\x04\x0b\xa7\x01\x02\x02\x7f\x01\x7e\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x02\x40\x02\x40\x20\x00\x20\x01\x10\xfe\x02\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x03\x29\x03\x00\x10\xa3\x03\x22\x03\x45\x0d\x00\x20\x00\x20\x04\x20\x01\xa7\x20\x03\x10\xea\x03\x22\x05\x41\x00\x48\x0d\x01\x02\x40\x20\x05\x0d\x00\x42\x80\x80\x80\x80\x10\x21\x06\x0c\x02\x0b\x20\x04\x35\x02\x00\x21\x06\x20\x00\x20\x04\x10\x81\x04\x20\x06\x42\x02\x88\x42\x01\x83\x42\x80\x80\x80\x80\x10\x84\x21\x06\x0c\x01\x0b\x41\x00\x21\x03\x0b\x20\x00\x20\x03\x10\xe4\x02\x20\x00\x20\x01\x10\xcd\x01\x20\x04\x41\x20\x6a\x24\x00\x20\x06\x0b\x36\x01\x01\x7e\x02\x40\x20\x00\x20\x01\x10\xfe\x02\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x0f\x0b\x20\x00\x20\x01\x10\x92\x03\x21\x02\x20\x00\x20\x01\x10\xcd\x01\x20\x02\x0b\x78\x01\x01\x7e\x42\x80\x80\x80\x80\x30\x21\x03\x02\x40\x20\x01\x42\x80\x80\x80\x80\x10\x84\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x10\x8a\x03\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x02\x40\x02\x40\x20\x02\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x20\x52\x0d\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x42\x80\x80\x80\x80\x30\x20\x00\x20\x01\x20\x02\x41\x01\x10\xc2\x03\x41\x00\x48\x1b\x21\x03\x0b\x20\x03\x0b\xab\x01\x01\x02\x7e\x20\x03\x29\x03\x08\x21\x05\x20\x03\x29\x03\x00\x21\x06\x02\x40\x02\x40\x20\x00\x20\x01\x10\xfe\x02\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x00\x20\x05\x10\xdb\x03\x0d\x00\x20\x00\x20\x06\x10\xa3\x03\x22\x03\x0d\x02\x0b\x20\x00\x20\x01\x10\xcd\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x00\x20\x01\x20\x03\x42\x80\x80\x80\x80\x30\x42\x80\x80\x80\x80\x30\x20\x05\x20\x04\x1b\x20\x05\x42\x80\x80\x80\x80\x30\x20\x04\x1b\x41\x85\xaa\x01\x41\x85\x9a\x01\x20\x04\x1b\x10\xcc\x01\x21\x04\x20\x00\x20\x01\x10\xcd\x01\x20\x00\x20\x03\x10\xe4\x02\x42\x80\x80\x80\x80\xe0\x00\x42\x80\x80\x80\x80\x30\x20\x04\x41\x00\x48\x1b\x0b\x8a\x02\x02\x02\x7f\x02\x7e\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x02\x40\x02\x40\x20\x00\x20\x01\x10\xfe\x02\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x03\x29\x03\x00\x10\xa3\x03\x22\x06\x45\x0d\x00\x20\x00\x20\x05\x20\x01\xa7\x20\x06\x10\xea\x03\x21\x03\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x03\x40\x20\x03\x41\x00\x48\x0d\x02\x02\x40\x20\x03\x45\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x07\x02\x40\x20\x05\x2d\x00\x00\x41\x10\x71\x45\x0d\x00\x20\x05\x41\x18\x6a\x20\x05\x41\x10\x6a\x20\x04\x1b\x29\x03\x00\x10\xc0\x01\x21\x07\x0b\x20\x00\x20\x05\x10\x81\x04\x0c\x03\x0b\x02\x40\x20\x00\x20\x01\x10\x9c\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x22\x08\x42\x80\x80\x80\x80\x20\x51\x0d\x00\x20\x08\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x00\x10\xfa\x02\x0d\x03\x20\x00\x20\x05\x20\x01\xa7\x20\x06\x10\xea\x03\x21\x03\x0c\x01\x0b\x0b\x42\x80\x80\x80\x80\x30\x21\x07\x0c\x01\x0b\x41\x00\x21\x06\x0b\x20\x00\x20\x06\x10\xe4\x02\x20\x00\x20\x01\x10\xcd\x01\x20\x05\x41\x20\x6a\x24\x00\x20\x07\x0b\x90\x01\x01\x02\x7e\x02\x40\x20\x03\x29\x03\x00\x22\x04\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x04\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x20\x51\x0d\x00\x20\x00\x41\xed\xb9\x02\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x02\x40\x02\x40\x20\x00\x20\x04\x10\xbd\x01\x22\x04\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x03\x29\x03\x08\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x01\x20\x00\x20\x04\x20\x05\x10\xd6\x06\x45\x0d\x01\x20\x00\x20\x04\x10\xcd\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x04\x0b\xa9\x02\x02\x07\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x02\x40\x02\x40\x20\x01\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x41\x7f\x21\x04\x0c\x01\x0b\x41\x7f\x21\x04\x20\x00\x20\x02\x10\xfe\x02\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x41\x7f\x21\x05\x02\x40\x02\x40\x20\x00\x20\x03\x41\x0c\x6a\x20\x03\x41\x08\x6a\x20\x0a\xa7\x41\x13\x10\x9d\x03\x41\x7f\x4a\x0d\x00\x41\x7f\x21\x04\x42\x80\x80\x80\x80\x30\x21\x02\x20\x03\x28\x02\x08\x21\x06\x20\x03\x28\x02\x0c\x21\x07\x0c\x01\x0b\x20\x03\x28\x02\x0c\x22\x07\x41\x04\x6a\x21\x08\x42\x80\x80\x80\x80\x30\x21\x02\x20\x03\x28\x02\x08\x21\x06\x41\x00\x21\x04\x03\x40\x20\x06\x20\x05\x41\x01\x6a\x22\x05\x46\x0d\x01\x20\x00\x20\x02\x10\xcd\x01\x02\x40\x20\x00\x20\x0a\x20\x08\x28\x02\x00\x20\x0a\x41\x00\x10\xb4\x01\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x08\x28\x02\x00\x21\x09\x20\x08\x41\x08\x6a\x21\x08\x20\x00\x20\x01\x20\x09\x20\x02\x41\x80\x80\x01\x10\xb5\x05\x41\x7f\x4a\x0d\x01\x0b\x0b\x41\x7f\x21\x04\x0b\x20\x00\x20\x07\x20\x06\x10\x9e\x03\x20\x00\x20\x0a\x10\xcd\x01\x20\x00\x20\x02\x10\xcd\x01\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x04\x0b\x2c\x01\x01\x7e\x02\x40\x20\x00\x20\x03\x29\x03\x00\x22\x04\x20\x03\x29\x03\x08\x41\x01\x10\xc2\x03\x41\x00\x4e\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x04\x10\xc0\x01\x0b\x2c\x01\x02\x7e\x42\x80\x80\x80\x80\xe0\x00\x21\x04\x02\x40\x20\x00\x20\x03\x29\x03\x00\x22\x05\x20\x03\x29\x03\x08\x10\xd6\x06\x0d\x00\x20\x05\x10\xc0\x01\x21\x04\x0b\x20\x04\x0b\x10\x00\x20\x00\x20\x03\x29\x03\x00\x41\x01\x41\x00\x10\xbd\x05\x0b\x10\x00\x20\x00\x20\x03\x29\x03\x00\x41\x02\x41\x00\x10\xbd\x05\x0b\x10\x00\x20\x00\x20\x03\x29\x03\x00\x41\x11\x20\x04\x10\xbd\x05\x0b\xe6\x02\x02\x04\x7f\x04\x7e\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x02\x40\x20\x00\x20\x03\x29\x03\x00\x10\xfe\x02\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x0a\x02\x40\x02\x40\x20\x00\x20\x04\x41\x1c\x6a\x20\x04\x41\x18\x6a\x20\x09\xa7\x41\x03\x10\x9d\x03\x0d\x00\x20\x00\x10\xc1\x01\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x04\x28\x02\x1c\x22\x05\x41\x04\x6a\x21\x03\x20\x04\x28\x02\x18\x22\x06\x21\x07\x02\x40\x03\x40\x20\x07\x45\x0d\x01\x20\x00\x20\x03\x28\x02\x00\x10\xdd\x01\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x20\x04\x20\x08\x37\x03\x08\x20\x04\x20\x09\x37\x03\x00\x20\x00\x42\x80\x80\x80\x80\x30\x41\x02\x20\x04\x41\x00\x10\xb8\x05\x21\x0b\x20\x00\x20\x08\x10\xcd\x01\x02\x40\x20\x0b\x42\x80\x80\x80\x80\x70\x83\x22\x08\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x08\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x00\x20\x0a\x20\x03\x28\x02\x00\x20\x0b\x41\x87\x80\x01\x10\xc4\x01\x41\x7f\x4c\x0d\x03\x0b\x20\x07\x41\x7f\x6a\x21\x07\x20\x03\x41\x08\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x20\x05\x20\x06\x10\x9e\x03\x20\x0a\x21\x08\x0c\x01\x0b\x20\x00\x20\x04\x28\x02\x1c\x20\x04\x28\x02\x18\x10\x9e\x03\x20\x00\x20\x09\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x20\x0a\x21\x09\x0b\x20\x00\x20\x09\x10\xcd\x01\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x08\x0b\x1c\x00\x20\x00\x20\x03\x29\x03\x00\x20\x03\x29\x03\x08\x10\x8d\x03\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x0b\xc4\x01\x02\x02\x7e\x01\x7f\x42\x80\x80\x80\x80\x30\x21\x04\x02\x40\x20\x00\x20\x03\x29\x03\x00\x10\xfe\x02\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x03\x41\x08\x6a\x21\x06\x41\x01\x21\x03\x03\x40\x02\x40\x20\x03\x20\x02\x48\x0d\x00\x20\x05\x0f\x0b\x02\x40\x20\x06\x29\x03\x00\x22\x04\x42\x80\x80\x80\x80\x10\x84\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x04\x10\xfe\x02\x22\x04\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x20\x00\x20\x05\x20\x04\x42\x80\x80\x80\x80\x30\x41\x01\x10\xb0\x03\x0d\x02\x20\x00\x20\x04\x10\xcd\x01\x0b\x20\x06\x41\x08\x6a\x21\x06\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x20\x05\x10\xcd\x01\x20\x00\x20\x04\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x0b\xfe\x01\x02\x06\x7f\x02\x7e\x23\x00\x41\x30\x6b\x22\x05\x24\x00\x42\x81\x80\x80\x80\x10\x21\x0b\x02\x40\x20\x03\x29\x03\x00\x22\x0c\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x0b\x20\x00\x20\x05\x41\x2c\x6a\x20\x05\x41\x28\x6a\x20\x0c\xa7\x22\x06\x41\x03\x10\x9d\x03\x0d\x00\x20\x05\x28\x02\x2c\x22\x07\x41\x04\x6a\x21\x08\x20\x05\x28\x02\x28\x22\x09\x21\x03\x02\x40\x02\x40\x03\x40\x20\x03\x45\x0d\x01\x20\x00\x20\x05\x41\x08\x6a\x20\x06\x20\x08\x28\x02\x00\x10\xea\x03\x22\x0a\x41\x00\x48\x0d\x02\x02\x40\x20\x0a\x45\x0d\x00\x20\x00\x20\x05\x41\x08\x6a\x10\x81\x04\x02\x40\x20\x05\x28\x02\x08\x22\x0a\x41\x01\x71\x0d\x00\x20\x04\x45\x0d\x01\x20\x0a\x41\x02\x71\x45\x0d\x01\x0b\x42\x80\x80\x80\x80\x10\x21\x0b\x0c\x03\x0b\x20\x03\x41\x7f\x6a\x21\x03\x20\x08\x41\x08\x6a\x21\x08\x0c\x00\x0b\x00\x0b\x20\x00\x20\x0c\x10\xe4\x03\x22\x03\x41\x00\x48\x0d\x01\x20\x03\x41\x01\x47\xad\x42\x80\x80\x80\x80\x10\x84\x21\x0b\x0b\x20\x00\x20\x07\x20\x09\x10\x9e\x03\x0b\x20\x05\x41\x30\x6a\x24\x00\x20\x0b\x0b\x61\x02\x01\x7f\x01\x7e\x41\x2f\x21\x04\x02\x40\x20\x03\x29\x03\x00\x22\x05\x42\x20\x88\xa7\x22\x03\x41\x7f\x47\x0d\x00\x20\x03\x41\x0b\x6a\x41\x11\x4b\x0d\x00\x02\x40\x20\x05\xa7\x2f\x01\x06\x22\x04\x41\x30\x47\x0d\x00\x41\x0d\x41\x30\x20\x00\x20\x05\x10\xf0\x02\x1b\x21\x04\x0b\x20\x00\x28\x02\x10\x28\x02\x44\x20\x04\x41\x18\x6c\x6a\x28\x02\x04\x21\x04\x0b\x20\x00\x20\x04\x10\xc5\x01\x0b\x8b\x03\x02\x01\x7f\x06\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x03\x29\x03\x00\x21\x05\x02\x40\x02\x40\x20\x00\x10\xc1\x01\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x06\x21\x07\x0c\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x08\x02\x40\x02\x40\x20\x00\x20\x05\x41\x00\x10\xb3\x03\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x09\x41\xea\x00\x20\x09\x41\x00\x10\xb4\x01\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x03\x40\x20\x00\x20\x09\x20\x08\x20\x04\x41\x0c\x6a\x10\xb7\x03\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x02\x40\x20\x04\x28\x02\x0c\x45\x0d\x00\x20\x06\x21\x07\x0c\x03\x0b\x02\x40\x02\x40\x02\x40\x20\x05\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x0c\x01\x0b\x20\x00\x20\x05\x42\x00\x10\xbb\x03\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x00\x20\x05\x42\x01\x10\xbb\x03\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x07\x10\xcd\x01\x0c\x01\x0b\x20\x00\x20\x06\x20\x07\x20\x0a\x41\x87\x80\x01\x10\xb8\x03\x41\x7f\x4a\x0d\x01\x0b\x20\x00\x20\x05\x10\xcd\x01\x0c\x02\x0b\x20\x00\x20\x05\x10\xcd\x01\x0c\x00\x0b\x00\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x02\x40\x20\x09\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x00\x20\x09\x41\x01\x10\xfc\x02\x1a\x0b\x20\x08\x21\x05\x20\x09\x21\x08\x20\x06\x21\x09\x0b\x20\x00\x20\x05\x10\xcd\x01\x20\x00\x20\x08\x10\xcd\x01\x20\x00\x20\x09\x10\xcd\x01\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x07\x0b\x38\x02\x01\x7f\x02\x7e\x23\x00\x41\x10\x6b\x22\x00\x24\x00\x20\x00\x41\x00\x10\x3f\x1a\x20\x00\x29\x03\x00\x21\x01\x20\x00\x29\x03\x08\x21\x02\x20\x00\x41\x10\x6a\x24\x00\x20\x02\x42\xe8\x07\x7f\x20\x01\x42\xe8\x07\x7e\x7c\x0b\xb9\x0e\x03\x13\x7f\x03\x7e\x01\x7c\x23\x00\x41\xa0\x01\x6b\x22\x04\x24\x00\x20\x04\x41\xe0\x00\x6a\x41\x00\x41\x38\x10\x74\x1a\x20\x04\x42\x01\x37\x03\x70\x20\x04\x42\x01\x37\x03\x68\x42\x80\x80\x80\x80\xe0\x00\x21\x17\x02\x40\x20\x00\x20\x03\x29\x03\x00\x10\xe6\x02\x22\x18\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x04\x41\x00\x36\x02\x0c\x20\x18\xa7\x22\x05\x29\x02\x04\x22\x17\xa7\x21\x06\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x17\x42\xff\xff\xff\xff\x07\x83\x50\x0d\x00\x02\x40\x02\x40\x20\x06\x41\x7f\x4a\x0d\x00\x20\x05\x2f\x01\x10\x21\x07\x0c\x01\x0b\x20\x05\x2d\x00\x10\x21\x07\x0b\x02\x40\x20\x07\x41\x50\x6a\x41\x0a\x49\x0d\x00\x20\x07\x41\x55\x6a\x22\x03\x41\x02\x4b\x0d\x01\x20\x03\x0e\x03\x00\x01\x00\x00\x0b\x42\x80\x80\x80\x80\xc0\x7e\x21\x17\x20\x05\x20\x04\x41\x0c\x6a\x20\x04\x41\xe0\x00\x6a\x10\xe7\x06\x0d\x05\x20\x05\x41\x11\x6a\x21\x08\x20\x05\x41\x12\x6a\x21\x09\x20\x05\x41\x10\x6a\x21\x0a\x41\x01\x21\x0b\x03\x40\x41\x07\x21\x03\x20\x04\x28\x02\x0c\x21\x0c\x20\x0b\x41\x07\x46\x0d\x03\x20\x0c\x20\x05\x28\x02\x04\x22\x03\x41\xff\xff\xff\xff\x07\x71\x22\x0d\x4e\x0d\x02\x02\x40\x20\x0b\x41\x7f\x6a\x22\x06\x41\x05\x4b\x0d\x00\x20\x06\x41\x02\x74\x41\x90\xc1\x02\x6a\x28\x02\x00\x21\x07\x0b\x02\x40\x02\x40\x20\x03\x41\x7f\x4a\x22\x0e\x0d\x00\x20\x05\x20\x0c\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x21\x03\x0c\x01\x0b\x20\x0a\x20\x0c\x6a\x2d\x00\x00\x21\x03\x0b\x20\x03\x20\x07\x47\x0d\x02\x20\x04\x20\x0c\x41\x01\x6a\x22\x0f\x36\x02\x0c\x20\x04\x41\xe0\x00\x6a\x20\x0b\x41\x03\x74\x6a\x21\x10\x02\x40\x02\x40\x20\x0b\x41\x06\x47\x0d\x00\x20\x0f\x20\x0d\x4e\x0d\x08\x20\x08\x20\x0c\x6a\x21\x11\x20\x09\x20\x0c\x41\x01\x74\x6a\x21\x12\x41\xe8\x07\x21\x06\x41\x00\x21\x03\x41\x00\x21\x13\x03\x40\x02\x40\x02\x40\x20\x0f\x20\x03\x6a\x20\x0d\x4e\x0d\x00\x02\x40\x02\x40\x20\x0e\x0d\x00\x20\x12\x2f\x01\x00\x21\x14\x0c\x01\x0b\x20\x11\x20\x03\x6a\x2d\x00\x00\x21\x14\x0b\x20\x14\x41\x50\x6a\x22\x15\x41\x0a\x49\x0d\x01\x20\x03\x45\x0d\x0b\x0b\x20\x10\x20\x13\xac\x37\x03\x00\x20\x04\x20\x0c\x20\x03\x6a\x41\x01\x6a\x36\x02\x0c\x0c\x03\x0b\x20\x06\x41\x01\x46\x21\x16\x20\x15\x20\x06\x41\x0a\x6d\x22\x06\x6c\x20\x13\x6a\x20\x16\x20\x14\x41\x34\x4b\x71\x6a\x21\x13\x20\x12\x41\x02\x6a\x21\x12\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x05\x20\x04\x41\x0c\x6a\x20\x10\x10\xe8\x06\x0d\x07\x0b\x20\x0b\x41\x01\x6a\x21\x0b\x0c\x00\x0b\x00\x0b\x20\x04\x41\xf0\x00\x6a\x21\x16\x20\x04\x41\xe0\x00\x6a\x41\x08\x72\x21\x0d\x20\x06\x41\xff\xff\xff\xff\x07\x71\x21\x12\x41\x00\x21\x03\x20\x06\x41\x7f\x4a\x21\x13\x20\x05\x41\x10\x6a\x22\x15\x21\x06\x02\x40\x03\x40\x20\x12\x20\x03\x46\x0d\x01\x02\x40\x02\x40\x20\x13\x0d\x00\x20\x06\x2f\x01\x00\x21\x14\x0c\x01\x0b\x20\x05\x20\x03\x6a\x41\x10\x6a\x2d\x00\x00\x21\x14\x0b\x20\x14\x41\x20\x46\x0d\x01\x20\x04\x20\x03\x41\x01\x6a\x22\x03\x36\x02\x0c\x20\x06\x41\x02\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x20\x05\x20\x04\x41\x0c\x6a\x10\xe9\x06\x42\x80\x80\x80\x80\xc0\x7e\x21\x17\x20\x04\x28\x02\x0c\x22\x03\x20\x05\x28\x02\x04\x22\x06\x41\xff\xff\xff\xff\x07\x71\x4e\x0d\x04\x02\x40\x02\x40\x20\x06\x41\x7f\x4a\x0d\x00\x20\x05\x20\x03\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x21\x03\x0c\x01\x0b\x20\x15\x20\x03\x6a\x2d\x00\x00\x21\x03\x0b\x02\x40\x02\x40\x20\x03\x41\x50\x6a\x41\x09\x4b\x0d\x00\x20\x05\x20\x04\x41\x0c\x6a\x20\x16\x10\xe8\x06\x0d\x06\x20\x05\x20\x04\x41\x0c\x6a\x20\x0d\x10\xea\x06\x45\x0d\x01\x0c\x06\x0b\x20\x05\x20\x04\x41\x0c\x6a\x20\x0d\x10\xea\x06\x0d\x05\x20\x05\x20\x04\x41\x0c\x6a\x10\xe9\x06\x20\x05\x20\x04\x41\x0c\x6a\x20\x16\x10\xe8\x06\x0d\x05\x0b\x20\x05\x20\x04\x41\x0c\x6a\x10\xe9\x06\x20\x05\x20\x04\x41\x0c\x6a\x20\x04\x41\xe0\x00\x6a\x10\xe7\x06\x0d\x04\x20\x05\x20\x04\x41\x0c\x6a\x10\xe9\x06\x20\x04\x41\xe0\x00\x6a\x41\x18\x6a\x21\x12\x41\x00\x21\x03\x41\x00\x21\x06\x03\x40\x02\x40\x20\x03\x41\x18\x47\x0d\x00\x20\x05\x28\x02\x04\x22\x06\x41\xff\xff\xff\xff\x07\x71\x21\x15\x20\x05\x20\x04\x28\x02\x0c\x22\x03\x41\x01\x74\x6a\x41\x10\x6a\x21\x14\x20\x06\x41\x7f\x4a\x21\x16\x03\x40\x41\x00\x21\x06\x20\x03\x20\x15\x4e\x0d\x05\x02\x40\x02\x40\x20\x16\x0d\x00\x20\x14\x2f\x01\x00\x21\x12\x0c\x01\x0b\x20\x05\x20\x03\x6a\x41\x10\x6a\x2d\x00\x00\x21\x12\x0b\x20\x04\x20\x03\x41\x01\x6a\x22\x03\x36\x02\x0c\x20\x14\x41\x02\x6a\x21\x14\x20\x12\x41\x55\x6a\x22\x13\x41\x02\x4b\x0d\x00\x02\x40\x20\x13\x0e\x03\x00\x01\x00\x00\x0b\x0b\x20\x05\x20\x04\x41\x0c\x6a\x20\x04\x41\x18\x6a\x10\xeb\x06\x0d\x06\x20\x05\x20\x04\x41\x0c\x6a\x20\x04\x41\x10\x6a\x10\xeb\x06\x0d\x06\x42\x00\x20\x04\x29\x03\x18\x42\x3c\x7e\x20\x04\x29\x03\x10\x7c\x22\x17\x7d\x20\x17\x20\x12\x41\x2d\x46\x1b\x21\x19\x0c\x05\x0b\x02\x40\x20\x06\x41\x7f\x6a\x41\x01\x4b\x0d\x00\x20\x04\x28\x02\x0c\x22\x14\x20\x05\x28\x02\x04\x22\x13\x41\xff\xff\xff\xff\x07\x71\x4e\x0d\x06\x02\x40\x02\x40\x20\x13\x41\x7f\x4a\x0d\x00\x20\x05\x20\x14\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x21\x13\x0c\x01\x0b\x20\x15\x20\x14\x6a\x2d\x00\x00\x21\x13\x0b\x20\x13\x41\x3a\x47\x0d\x06\x20\x04\x20\x14\x41\x01\x6a\x36\x02\x0c\x0b\x20\x06\x41\x01\x6a\x21\x06\x20\x12\x20\x03\x6a\x21\x14\x20\x03\x41\x08\x6a\x21\x03\x20\x05\x20\x04\x41\x0c\x6a\x20\x14\x10\xe8\x06\x45\x0d\x00\x0c\x05\x0b\x00\x0b\x20\x0b\x21\x03\x0b\x20\x04\x20\x04\x29\x03\x68\x42\x7f\x7c\x37\x03\x68\x02\x40\x20\x0c\x20\x05\x28\x02\x04\x22\x06\x41\xff\xff\xff\xff\x07\x71\x22\x14\x48\x0d\x00\x20\x03\x41\x03\x4b\x21\x06\x0c\x01\x0b\x02\x40\x02\x40\x20\x06\x41\x7f\x4a\x0d\x00\x20\x05\x20\x0c\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x21\x03\x0c\x01\x0b\x20\x0a\x20\x0c\x6a\x2d\x00\x00\x21\x03\x0b\x02\x40\x02\x40\x20\x03\x41\x55\x6a\x22\x06\x41\x02\x4d\x0d\x00\x20\x03\x41\xda\x00\x47\x0d\x04\x20\x04\x20\x0c\x41\x01\x6a\x22\x03\x36\x02\x0c\x42\x00\x21\x19\x0c\x01\x0b\x02\x40\x20\x06\x0e\x03\x00\x04\x00\x00\x0b\x20\x04\x20\x0c\x41\x01\x6a\x22\x06\x36\x02\x0c\x20\x14\x20\x06\x6b\x22\x06\x41\x01\x72\x41\x05\x47\x0d\x03\x20\x05\x20\x04\x41\x0c\x6a\x20\x04\x41\x18\x6a\x10\xeb\x06\x0d\x03\x02\x40\x20\x06\x41\x05\x47\x0d\x00\x20\x04\x28\x02\x0c\x21\x06\x02\x40\x02\x40\x20\x05\x28\x02\x04\x41\x7f\x4a\x0d\x00\x20\x05\x20\x06\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x21\x14\x0c\x01\x0b\x20\x0a\x20\x06\x6a\x2d\x00\x00\x21\x14\x0b\x20\x14\x41\x3a\x47\x0d\x04\x20\x04\x20\x06\x41\x01\x6a\x36\x02\x0c\x0b\x20\x05\x20\x04\x41\x0c\x6a\x20\x04\x41\x10\x6a\x10\xeb\x06\x0d\x03\x42\x00\x20\x04\x29\x03\x18\x42\x3c\x7e\x20\x04\x29\x03\x10\x7c\x22\x19\x7d\x20\x19\x20\x03\x41\x2d\x46\x1b\x21\x19\x20\x05\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x21\x14\x20\x04\x28\x02\x0c\x21\x03\x0b\x41\x00\x21\x06\x20\x03\x20\x14\x46\x0d\x01\x0c\x02\x0b\x42\x00\x21\x19\x0b\x41\x00\x21\x03\x02\x40\x03\x40\x20\x03\x41\x38\x46\x0d\x01\x20\x04\x41\x20\x6a\x20\x03\x6a\x20\x04\x41\xe0\x00\x6a\x20\x03\x6a\x29\x03\x00\xb9\x39\x03\x00\x20\x03\x41\x08\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x04\x41\x20\x6a\x20\x06\x10\xe4\x06\x20\x19\x42\xe0\xd4\x03\x7e\xb9\xa1\x22\x1a\xbd\x21\x17\x02\x40\x02\x40\x20\x1a\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x1a\xaa\x21\x03\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x03\x0b\x02\x40\x20\x17\x20\x03\xb7\xbd\x52\x0d\x00\x20\x03\xad\x21\x17\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x17\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x17\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x17\x0b\x20\x00\x20\x18\x10\xcd\x01\x0b\x20\x04\x41\xa0\x01\x6a\x24\x00\x20\x17\x0b\xbb\x03\x03\x02\x7c\x04\x7f\x01\x7e\x02\x40\x02\x40\x20\x00\x2b\x03\x08\x22\x02\x44\x00\x00\x00\x00\x00\x00\x28\x40\x10\xa5\x01\x22\x03\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x03\xaa\x21\x04\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x04\x0b\x41\x00\x21\x05\x20\x04\x41\x00\x48\x21\x06\x20\x04\x41\x0c\x6a\x21\x07\x02\x40\x02\x40\x20\x00\x2b\x03\x00\x20\x02\x44\x00\x00\x00\x00\x00\x00\x28\x40\xa3\x9c\xa0\x22\x02\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x43\x63\x45\x0d\x00\x20\x02\xb0\x21\x08\x0c\x01\x0b\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x21\x08\x0b\x20\x07\x20\x04\x20\x06\x1b\x21\x07\x20\x08\x10\xed\x06\xb9\x21\x02\x41\xe0\xc0\x02\x21\x04\x02\x40\x03\x40\x20\x05\x20\x07\x4e\x0d\x01\x20\x04\x28\x02\x00\x21\x06\x02\x40\x20\x05\x41\x01\x47\x0d\x00\x20\x06\x20\x08\x10\xee\x06\xa7\x6a\x41\x93\x7d\x6a\x21\x06\x0b\x20\x04\x41\x04\x6a\x21\x04\x20\x05\x41\x01\x6a\x21\x05\x20\x02\x20\x06\xb7\xa0\x21\x02\x0c\x00\x0b\x00\x0b\x20\x02\x20\x00\x2b\x03\x10\x44\x00\x00\x00\x00\x00\x00\xf0\xbf\xa0\xa0\x44\x00\x00\x00\x00\x70\x99\x94\x41\xa2\x20\x00\x2b\x03\x30\x20\x00\x2b\x03\x18\x44\x00\x00\x00\x00\x40\x77\x4b\x41\xa2\x20\x00\x2b\x03\x20\x44\x00\x00\x00\x00\x00\x4c\xed\x40\xa2\xa0\x20\x00\x2b\x03\x28\x44\x00\x00\x00\x00\x00\x40\x8f\x40\xa2\xa0\xa0\xa0\x21\x02\x02\x40\x20\x01\x45\x0d\x00\x02\x40\x02\x40\x20\x02\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x43\x63\x45\x0d\x00\x20\x02\xb0\x21\x08\x0c\x01\x0b\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x21\x08\x0b\x20\x02\x20\x08\x10\xef\x06\x41\xe0\xd4\x03\x6c\xb7\xa0\x21\x02\x0b\x20\x02\x9d\x44\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x44\x00\x00\x00\x00\x00\x00\xf8\x7f\x20\x02\x44\x00\x00\xdc\xc2\x08\xb2\x3e\x43\x65\x1b\x44\x00\x00\x00\x00\x00\x00\xf8\x7f\x20\x02\x44\x00\x00\xdc\xc2\x08\xb2\x3e\xc3\x66\x1b\x0b\xcf\x0a\x03\x0d\x7f\x01\x7e\x01\x7c\x23\x00\x41\xd0\x02\x6b\x22\x05\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x12\x02\x40\x20\x00\x20\x01\x20\x05\x41\xc0\x01\x6a\x20\x04\x41\x04\x76\x22\x06\x41\x01\x71\x41\x00\x10\xf0\x06\x22\x07\x41\x00\x48\x0d\x00\x20\x06\x41\x0f\x71\x21\x08\x02\x40\x20\x07\x0d\x00\x02\x40\x20\x08\x41\x02\x47\x0d\x00\x20\x00\x41\xd5\xc1\x02\x41\x00\x10\xa6\x04\x0c\x02\x0b\x20\x00\x41\xe7\xc1\x02\x10\xc7\x02\x21\x12\x0c\x01\x0b\x02\x40\x02\x40\x20\x05\x2b\x03\x80\x02\x22\x13\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x13\xaa\x21\x09\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x09\x0b\x02\x40\x02\x40\x20\x05\x2b\x03\xf8\x01\x22\x13\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x13\xaa\x21\x0a\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x0a\x0b\x02\x40\x02\x40\x20\x05\x2b\x03\xf0\x01\x22\x13\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x13\xaa\x21\x0b\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x0b\x0b\x02\x40\x02\x40\x20\x05\x2b\x03\xe8\x01\x22\x13\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x13\xaa\x21\x0c\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x0c\x0b\x02\x40\x02\x40\x20\x05\x2b\x03\xe0\x01\x22\x13\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x13\xaa\x21\x0d\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x0d\x0b\x02\x40\x02\x40\x20\x05\x2b\x03\xd8\x01\x22\x13\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x13\xaa\x21\x0e\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x0e\x0b\x02\x40\x02\x40\x20\x05\x2b\x03\xd0\x01\x22\x13\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x13\xaa\x21\x0f\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x0f\x0b\x02\x40\x02\x40\x20\x05\x2b\x03\xc8\x01\x22\x13\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x13\xaa\x21\x10\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x10\x0b\x20\x04\x41\x01\x71\x21\x07\x02\x40\x02\x40\x20\x05\x2b\x03\xc0\x01\x22\x13\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x13\xaa\x21\x11\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x11\x0b\x41\x00\x21\x06\x02\x40\x20\x07\x45\x0d\x00\x20\x08\x41\x03\x4b\x0d\x00\x20\x04\x41\x0f\x71\x21\x07\x02\x40\x02\x40\x02\x40\x02\x40\x20\x08\x0e\x04\x00\x01\x02\x03\x00\x0b\x20\x05\x41\xe0\x00\x6a\x20\x11\x36\x02\x00\x20\x05\x20\x0f\x36\x02\x54\x20\x05\x20\x11\x41\x1f\x76\x41\x04\x72\x36\x02\x5c\x20\x05\x20\x10\x41\x03\x6c\x41\xb0\xc1\x02\x6a\x36\x02\x58\x20\x05\x20\x0a\x41\x03\x6c\x41\x80\xc2\x02\x6a\x36\x02\x50\x20\x05\x41\x90\x02\x6a\x41\xc0\x00\x41\x96\xc2\x02\x20\x05\x41\xd0\x00\x6a\x10\x5f\x21\x06\x0c\x03\x0b\x20\x05\x41\x80\x01\x6a\x20\x11\x36\x02\x00\x20\x05\x20\x0f\x36\x02\x78\x20\x05\x20\x11\x41\x1f\x76\x41\x04\x72\x36\x02\x7c\x20\x05\x20\x10\x41\x03\x6c\x41\xb0\xc1\x02\x6a\x36\x02\x74\x20\x05\x20\x0a\x41\x03\x6c\x41\x80\xc2\x02\x6a\x36\x02\x70\x20\x05\x41\x90\x02\x6a\x41\xc0\x00\x41\xac\xc2\x02\x20\x05\x41\xf0\x00\x6a\x10\x5f\x21\x06\x20\x07\x41\x03\x47\x0d\x02\x20\x05\x41\x90\x02\x6a\x20\x06\x6a\x41\x20\x3a\x00\x00\x20\x06\x41\x01\x6a\x21\x06\x0c\x02\x0b\x20\x05\x20\x11\x36\x02\xa0\x01\x20\x05\x41\x90\x02\x6a\x41\xc0\x00\x41\xc0\xc2\x02\x41\xc5\xc2\x02\x20\x11\x41\x90\xce\x00\x49\x1b\x20\x05\x41\xa0\x01\x6a\x10\x5f\x21\x06\x20\x05\x20\x0f\x36\x02\x94\x01\x20\x05\x20\x10\x41\x01\x6a\x36\x02\x90\x01\x20\x06\x20\x06\x20\x05\x41\x90\x02\x6a\x6a\x41\xc0\x00\x20\x06\x6b\x41\xcb\xc2\x02\x20\x05\x41\x90\x01\x6a\x10\x5f\x6a\x21\x06\x0c\x01\x0b\x20\x05\x20\x0f\x36\x02\xb4\x01\x20\x05\x20\x10\x41\x01\x6a\x36\x02\xb0\x01\x20\x05\x20\x11\x36\x02\xbc\x01\x20\x05\x20\x11\x41\x1f\x76\x41\x04\x72\x36\x02\xb8\x01\x20\x05\x41\x90\x02\x6a\x41\xc0\x00\x41\xd7\xc2\x02\x20\x05\x41\xb0\x01\x6a\x10\x5f\x21\x06\x20\x07\x41\x03\x47\x0d\x00\x20\x05\x41\x90\x02\x6a\x20\x06\x6a\x41\xac\xc0\x00\x3b\x00\x00\x20\x06\x41\x02\x6a\x21\x06\x0b\x02\x40\x20\x04\x41\x02\x71\x45\x0d\x00\x20\x08\x41\x03\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x08\x0e\x04\x00\x01\x02\x03\x00\x0b\x20\x05\x20\x0c\x36\x02\x08\x20\x05\x20\x0d\x36\x02\x04\x20\x05\x20\x0e\x36\x02\x00\x20\x05\x41\x90\x02\x6a\x20\x06\x6a\x41\xc0\x00\x20\x06\x6b\x41\xe6\xc2\x02\x20\x05\x10\x5f\x20\x06\x6a\x21\x06\x0c\x03\x0b\x20\x05\x20\x0c\x36\x02\x28\x20\x05\x20\x0d\x36\x02\x24\x20\x05\x20\x0e\x36\x02\x20\x20\x05\x41\x90\x02\x6a\x20\x06\x6a\x41\xc0\x00\x20\x06\x6b\x41\xe6\xc2\x02\x20\x05\x41\x20\x6a\x10\x5f\x20\x06\x6a\x22\x04\x41\x01\x6a\x21\x06\x20\x05\x41\x90\x02\x6a\x20\x04\x6a\x21\x07\x02\x40\x02\x40\x20\x09\x41\x7f\x4a\x0d\x00\x20\x07\x41\x2d\x3a\x00\x00\x41\x00\x20\x09\x6b\x21\x09\x0c\x01\x0b\x20\x07\x41\x2b\x3a\x00\x00\x0b\x20\x05\x20\x09\x41\x3c\x6e\x22\x07\x36\x02\x10\x20\x05\x20\x09\x20\x07\x41\x44\x6c\x6a\x36\x02\x14\x20\x05\x41\x90\x02\x6a\x20\x06\x6a\x41\x3f\x20\x04\x6b\x41\xf9\xc2\x02\x20\x05\x41\x10\x6a\x10\x5f\x20\x06\x6a\x21\x06\x0c\x02\x0b\x20\x05\x20\x0b\x36\x02\x3c\x20\x05\x20\x0c\x36\x02\x38\x20\x05\x20\x0d\x36\x02\x34\x20\x05\x20\x0e\x36\x02\x30\x20\x05\x41\x90\x02\x6a\x20\x06\x6a\x41\xc0\x00\x20\x06\x6b\x41\x82\xc3\x02\x20\x05\x41\x30\x6a\x10\x5f\x20\x06\x6a\x21\x06\x0c\x01\x0b\x20\x05\x20\x0c\x36\x02\x48\x20\x05\x20\x0d\x36\x02\x44\x20\x05\x41\xc1\x00\x41\xd0\x00\x20\x0e\x41\x0c\x48\x1b\x36\x02\x4c\x20\x05\x20\x0e\x41\x01\x6a\x41\x0c\x6f\x41\x7f\x6a\x36\x02\x40\x20\x05\x41\x90\x02\x6a\x20\x06\x6a\x41\xc0\x00\x20\x06\x6b\x41\x97\xc3\x02\x20\x05\x41\xc0\x00\x6a\x10\x5f\x20\x06\x6a\x21\x06\x0b\x20\x00\x20\x05\x41\x90\x02\x6a\x20\x06\x10\xcb\x02\x21\x12\x0b\x20\x05\x41\xd0\x02\x6a\x24\x00\x20\x12\x0b\x5a\x01\x01\x7e\x02\x40\x10\xe2\x06\x22\x04\x42\x80\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x04\x42\xff\xff\xff\xff\x0f\x83\x0f\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x04\xb9\xbd\x22\x04\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x04\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x0b\xbf\x01\x01\x04\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x20\x03\x20\x01\x28\x02\x00\x22\x04\x36\x02\x0c\x41\x7f\x21\x05\x02\x40\x20\x04\x20\x00\x28\x02\x04\x22\x06\x41\xff\xff\xff\xff\x07\x71\x4e\x0d\x00\x02\x40\x02\x40\x20\x06\x41\x7f\x4a\x0d\x00\x20\x00\x20\x04\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x21\x06\x0c\x01\x0b\x20\x00\x20\x04\x6a\x41\x10\x6a\x2d\x00\x00\x21\x06\x0b\x02\x40\x20\x06\x41\x55\x6a\x22\x05\x41\x02\x4b\x0d\x00\x02\x40\x20\x05\x0e\x03\x00\x01\x00\x00\x0b\x20\x03\x20\x04\x41\x01\x6a\x36\x02\x0c\x0b\x20\x00\x20\x03\x41\x0c\x6a\x20\x02\x10\xe8\x06\x21\x05\x02\x40\x20\x06\x41\x2d\x47\x0d\x00\x20\x05\x0d\x00\x20\x02\x42\x00\x20\x02\x29\x03\x00\x7d\x37\x03\x00\x0b\x20\x01\x20\x03\x28\x02\x0c\x36\x02\x00\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x05\x0b\xc2\x01\x02\x07\x7f\x01\x7e\x41\x7f\x21\x03\x02\x40\x20\x01\x28\x02\x00\x22\x04\x20\x00\x28\x02\x04\x22\x05\x41\xff\xff\xff\xff\x07\x71\x22\x06\x4e\x0d\x00\x20\x00\x41\x10\x6a\x22\x00\x20\x04\x41\x01\x74\x6a\x21\x07\x20\x00\x20\x04\x6a\x21\x08\x42\x00\x21\x0a\x41\x00\x21\x00\x20\x05\x41\x7f\x4a\x21\x09\x02\x40\x03\x40\x20\x04\x20\x00\x6a\x22\x05\x20\x06\x4e\x0d\x01\x02\x40\x02\x40\x20\x09\x0d\x00\x20\x07\x2f\x01\x00\x21\x03\x0c\x01\x0b\x20\x08\x20\x00\x6a\x2d\x00\x00\x21\x03\x0b\x02\x40\x20\x03\x41\x50\x6a\x41\x0a\x49\x0d\x00\x20\x00\x0d\x02\x41\x7f\x0f\x0b\x20\x07\x41\x02\x6a\x21\x07\x20\x00\x41\x01\x6a\x21\x00\x20\x0a\x42\x0a\x7e\x20\x03\xad\x7c\x42\x50\x7c\x21\x0a\x0c\x00\x0b\x00\x0b\x20\x02\x20\x0a\x37\x03\x00\x20\x01\x20\x05\x36\x02\x00\x41\x00\x21\x03\x0b\x20\x03\x0b\x6e\x01\x04\x7f\x20\x00\x41\x10\x6a\x22\x02\x20\x01\x28\x02\x00\x22\x03\x41\x01\x74\x6a\x21\x04\x02\x40\x03\x40\x20\x03\x20\x00\x28\x02\x04\x22\x05\x41\xff\xff\xff\xff\x07\x71\x4e\x0d\x01\x02\x40\x02\x40\x20\x05\x41\x7f\x4a\x0d\x00\x20\x04\x2f\x01\x00\x21\x05\x0c\x01\x0b\x20\x02\x20\x03\x6a\x2d\x00\x00\x21\x05\x0b\x20\x05\x41\x20\x47\x0d\x01\x20\x01\x20\x03\x41\x01\x6a\x22\x03\x36\x02\x00\x20\x04\x41\x02\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x0b\xda\x01\x01\x0a\x7f\x20\x00\x20\x01\x10\xe9\x06\x41\x7f\x21\x03\x02\x40\x20\x01\x28\x02\x00\x22\x04\x41\x03\x6a\x22\x05\x20\x00\x28\x02\x04\x22\x06\x41\xff\xff\xff\xff\x07\x71\x4a\x0d\x00\x20\x00\x41\x10\x6a\x22\x00\x20\x04\x41\x01\x74\x6a\x21\x07\x20\x00\x20\x04\x6a\x21\x08\x41\x00\x21\x09\x41\xb0\xc1\x02\x21\x0a\x41\x7f\x21\x03\x20\x06\x41\x7f\x4a\x21\x0b\x03\x40\x20\x09\x41\x0c\x46\x0d\x01\x41\x00\x21\x00\x20\x07\x21\x04\x02\x40\x03\x40\x20\x00\x41\x03\x46\x0d\x01\x02\x40\x02\x40\x20\x0b\x0d\x00\x20\x04\x2f\x01\x00\x21\x0c\x0c\x01\x0b\x20\x08\x20\x00\x6a\x2d\x00\x00\x21\x0c\x0b\x20\x04\x41\x02\x6a\x21\x04\x20\x0a\x20\x00\x6a\x21\x06\x20\x00\x41\x01\x6a\x21\x00\x20\x0c\x20\x06\x2c\x00\x00\x46\x0d\x00\x0b\x20\x0a\x41\x03\x6a\x21\x0a\x20\x09\x41\x01\x6a\x21\x09\x0c\x01\x0b\x0b\x20\x01\x20\x05\x36\x02\x00\x20\x02\x20\x09\xad\x37\x03\x00\x41\x00\x21\x03\x0b\x20\x03\x0b\xbf\x01\x02\x08\x7f\x01\x7e\x20\x00\x41\x10\x6a\x22\x03\x20\x01\x28\x02\x00\x22\x04\x41\x01\x74\x6a\x21\x05\x20\x03\x20\x04\x6a\x21\x06\x20\x04\x41\x02\x6a\x21\x07\x20\x00\x28\x02\x04\x22\x03\x41\xff\xff\xff\xff\x07\x71\x21\x08\x41\x00\x21\x00\x42\x00\x21\x0b\x20\x03\x41\x7f\x4a\x21\x09\x02\x40\x02\x40\x03\x40\x20\x00\x41\x02\x46\x0d\x01\x41\x7f\x21\x0a\x20\x04\x20\x00\x6a\x20\x08\x4e\x0d\x02\x02\x40\x02\x40\x20\x09\x0d\x00\x20\x05\x2f\x01\x00\x21\x03\x0c\x01\x0b\x20\x06\x20\x00\x6a\x2d\x00\x00\x21\x03\x0b\x20\x03\x41\x50\x6a\x41\x09\x4b\x0d\x02\x20\x05\x41\x02\x6a\x21\x05\x20\x00\x41\x01\x6a\x21\x00\x20\x0b\x42\x0a\x7e\x20\x03\xad\x7c\x42\x50\x7c\x21\x0b\x0c\x00\x0b\x00\x0b\x20\x01\x20\x07\x36\x02\x00\x20\x02\x20\x0b\x37\x03\x00\x41\x00\x21\x0a\x0b\x20\x0a\x0b\xfb\x02\x03\x03\x7f\x01\x7e\x01\x7c\x23\x00\x41\xd0\x00\x6b\x22\x04\x24\x00\x41\x00\x21\x05\x20\x04\x41\x10\x6a\x41\x00\x41\x38\x10\x74\x1a\x20\x04\x42\x80\x80\x80\x80\x80\x80\x80\xf8\x3f\x37\x03\x20\x42\x80\x80\x80\x80\xc0\x7e\x21\x07\x02\x40\x20\x02\x45\x0d\x00\x20\x02\x41\x07\x20\x02\x41\x07\x48\x1b\x21\x06\x20\x04\x41\x10\x6a\x21\x02\x02\x40\x03\x40\x20\x05\x20\x06\x4e\x0d\x01\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xdf\x04\x45\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x0c\x03\x0b\x20\x04\x2b\x03\x08\x22\x08\x99\x44\x00\x00\x00\x00\x00\x00\xf0\x7f\x63\x41\x01\x73\x0d\x02\x20\x02\x20\x08\x9d\x39\x03\x00\x02\x40\x20\x05\x0d\x00\x20\x04\x2b\x03\x10\x22\x08\x44\x00\x00\x00\x00\x00\x00\x00\x00\x66\x41\x01\x73\x0d\x00\x20\x08\x44\x00\x00\x00\x00\x00\x00\x59\x40\x63\x41\x01\x73\x0d\x00\x20\x04\x20\x08\x44\x00\x00\x00\x00\x00\xb0\x9d\x40\xa0\x39\x03\x10\x0b\x20\x02\x41\x08\x6a\x21\x02\x20\x03\x41\x08\x6a\x21\x03\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x04\x41\x10\x6a\x41\x00\x10\xe4\x06\x22\x08\xbd\x21\x07\x02\x40\x02\x40\x20\x08\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x08\xaa\x21\x05\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x05\x0b\x02\x40\x20\x07\x20\x05\xb7\xbd\x52\x0d\x00\x20\x05\xad\x21\x07\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x07\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x07\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x07\x0b\x20\x04\x41\xd0\x00\x6a\x24\x00\x20\x07\x0b\x6c\x01\x01\x7e\x20\x00\x42\xed\x02\x7e\x20\x00\x42\xcf\x70\x7c\x22\x01\x20\x01\x42\x04\x81\x22\x01\x7d\x20\x01\x42\x3d\x88\x42\x04\x83\x7d\x42\x04\x7f\x7c\x20\x00\x42\x93\x71\x7c\x22\x01\x20\x01\x42\xe4\x00\x81\x22\x01\x7d\x20\x01\x42\x3f\x87\x42\xe4\x00\x83\x7d\x42\x9c\x7f\x7f\x7c\x20\x00\x42\xbf\x73\x7c\x22\x00\x20\x00\x42\x90\x03\x81\x22\x00\x7d\x20\x00\x42\x3f\x87\x42\x90\x03\x83\x7d\x42\x90\x03\x7f\x7c\x42\xb6\x8e\x54\x7c\x0b\x21\x00\x42\xee\x02\x42\xed\x02\x20\x00\x42\x03\x83\x50\x1b\x20\x00\x42\xe4\x00\x81\x50\xad\x7d\x20\x00\x42\x90\x03\x81\x50\xad\x7c\x0b\x3a\x01\x02\x7f\x23\x00\x41\xc0\x00\x6b\x22\x01\x24\x00\x20\x01\x20\x00\x42\xe8\x07\x7f\x37\x03\x38\x20\x01\x41\x38\x6a\x20\x01\x41\x08\x6a\x10\x4b\x1a\x20\x01\x28\x02\x2c\x21\x02\x20\x01\x41\xc0\x00\x6a\x24\x00\x20\x02\x41\x44\x6d\x0b\xaf\x04\x03\x02\x7f\x01\x7c\x09\x7e\x23\x00\x41\x10\x6b\x22\x05\x24\x00\x41\x7f\x21\x06\x02\x40\x20\x00\x20\x05\x41\x08\x6a\x20\x01\x10\xf1\x06\x0d\x00\x02\x40\x02\x40\x20\x05\x2b\x03\x08\x22\x07\x20\x07\x61\x0d\x00\x02\x40\x20\x04\x45\x0d\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x07\x42\x00\x21\x01\x0c\x02\x0b\x41\x00\x21\x06\x0c\x02\x0b\x02\x40\x02\x40\x20\x07\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x43\x63\x45\x0d\x00\x20\x07\xb0\x21\x01\x0c\x01\x0b\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x21\x01\x0b\x02\x40\x20\x03\x0d\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x07\x0c\x01\x0b\x41\x00\x20\x01\x10\xef\x06\x6b\x22\x06\xac\x42\xe0\xd4\x03\x7e\x20\x01\x7c\x21\x01\x20\x06\xb7\x21\x07\x0b\x20\x01\x20\x01\x42\x80\xb8\x99\x29\x81\x22\x08\x42\x3f\x87\x42\x80\xb8\x99\x29\x83\x20\x08\x7c\x22\x09\x7d\x42\x80\xb8\x99\x29\x7f\x22\x0a\x42\x90\xce\x00\x7e\x22\x01\x20\x01\x42\xc9\xf6\xde\x01\x81\x22\x01\x7d\x20\x01\x42\x3f\x87\x42\xc9\xf6\xde\x01\x83\x7d\x42\xc9\xf6\xde\x01\x7f\x42\xb2\x0f\x7c\x21\x01\x20\x09\x42\xe0\xd4\x03\x7f\x21\x0b\x20\x0a\x42\x04\x7c\x42\x07\x81\x22\x0c\x42\x3f\x87\x21\x0d\x03\x40\x02\x40\x02\x40\x20\x0a\x20\x01\x10\xed\x06\x7d\x22\x08\x42\x00\x59\x0d\x00\x42\x7f\x21\x0e\x0c\x01\x0b\x42\x01\x21\x0e\x20\x08\x20\x01\x10\xee\x06\x22\x0f\x59\x0d\x00\x20\x09\x42\x80\xdd\xdb\x01\x7f\x21\x10\x20\x0b\x42\x3c\x81\x21\x0b\x20\x0d\x42\x07\x83\x20\x0c\x7c\x21\x0c\x20\x09\x42\xe8\x07\x7f\x22\x0e\x42\x3c\x81\x21\x0d\x20\x09\x20\x0e\x42\x98\x78\x7e\x7c\x21\x09\x42\x00\x21\x0e\x41\xe0\xc0\x02\x21\x06\x03\x40\x42\x0b\x21\x0a\x02\x40\x02\x40\x20\x0e\x42\x0b\x51\x0d\x00\x20\x08\x20\x06\x34\x02\x00\x22\x0a\x20\x0f\x7c\x42\x93\x7d\x7c\x20\x0a\x20\x0e\x42\x01\x51\x1b\x22\x0a\x59\x0d\x01\x20\x0e\x21\x0a\x0b\x20\x02\x20\x07\x39\x03\x40\x20\x02\x20\x0c\xb9\x39\x03\x38\x20\x02\x20\x09\xb9\x39\x03\x30\x20\x02\x20\x0d\xb9\x39\x03\x28\x20\x02\x20\x0b\xb9\x39\x03\x20\x20\x02\x20\x10\xb9\x39\x03\x18\x20\x02\x20\x0a\xb9\x39\x03\x08\x20\x02\x20\x01\xb9\x39\x03\x00\x20\x02\x20\x08\x42\x01\x7c\xb9\x39\x03\x10\x41\x01\x21\x06\x0c\x04\x0b\x20\x06\x41\x04\x6a\x21\x06\x20\x0e\x42\x01\x7c\x21\x0e\x20\x08\x20\x0a\x7d\x21\x08\x0c\x00\x0b\x00\x0b\x20\x01\x20\x0e\x7c\x21\x01\x0c\x00\x0b\x00\x0b\x20\x05\x41\x10\x6a\x24\x00\x20\x06\x0b\x53\x01\x01\x7f\x02\x40\x20\x02\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x02\xa7\x22\x03\x2f\x01\x06\x41\x0a\x47\x0d\x00\x02\x40\x20\x03\x29\x03\x20\x22\x02\x42\x20\x88\xa7\x22\x03\x45\x0d\x00\x20\x03\x41\x0b\x6a\x41\x12\x49\x0d\x01\x0b\x20\x00\x20\x01\x20\x02\x10\xdf\x04\x0f\x0b\x20\x00\x41\xaa\xc3\x02\x41\x00\x10\xb2\x02\x41\x7f\x0b\xa8\x01\x03\x01\x7f\x01\x7e\x01\x7c\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x01\x10\xf1\x06\x0d\x00\x20\x04\x2b\x03\x08\x22\x06\xbd\x21\x05\x02\x40\x02\x40\x20\x06\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x06\xaa\x21\x00\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x00\x0b\x02\x40\x20\x05\x20\x00\xb7\xbd\x52\x0d\x00\x20\x00\xad\x21\x05\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x05\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x05\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x9c\x01\x02\x01\x7e\x01\x7f\x02\x40\x02\x40\x20\x01\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x0c\x01\x0b\x02\x40\x02\x40\x02\x40\x20\x03\x29\x03\x00\x22\x04\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x90\x7f\x52\x0d\x00\x20\x00\x20\x04\x10\xa3\x03\x22\x03\x45\x0d\x03\x20\x00\x20\x03\x10\xe4\x02\x02\x40\x20\x03\x41\xba\x7f\x6a\x22\x05\x41\x05\x4d\x0d\x00\x20\x03\x41\x16\x47\x0d\x01\x0c\x02\x0b\x41\x11\x21\x03\x20\x05\x0e\x06\x02\x00\x01\x00\x00\x02\x02\x0b\x20\x00\x41\xe4\xc7\x02\x41\x00\x10\xb2\x02\x0c\x02\x0b\x41\x10\x21\x03\x0b\x20\x00\x20\x01\x20\x03\x10\xeb\x02\x0f\x0b\x42\x80\x80\x80\x80\xe0\x00\x0b\xdb\x01\x03\x01\x7f\x01\x7e\x01\x7c\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x01\x10\xf1\x06\x0d\x00\x02\x40\x20\x04\x2b\x03\x08\x22\x06\x20\x06\x61\x0d\x00\x42\x80\x80\x80\x80\xc0\x7e\x21\x05\x0c\x01\x0b\x02\x40\x02\x40\x20\x06\x9d\x22\x06\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x43\x63\x45\x0d\x00\x20\x06\xb0\x21\x05\x0c\x01\x0b\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x21\x05\x0b\x02\x40\x20\x05\x10\xef\x06\x22\x00\xac\x22\x05\x42\x80\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x05\x42\xff\xff\xff\xff\x0f\x83\x21\x05\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x00\xb7\xbd\x22\x05\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x05\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\xf8\x01\x02\x01\x7f\x01\x7c\x23\x00\x41\xd0\x00\x6b\x22\x05\x24\x00\x02\x40\x02\x40\x20\x00\x20\x01\x20\x05\x20\x04\x41\x0f\x71\x41\x00\x10\xf0\x06\x22\x00\x41\x00\x4e\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0c\x01\x0b\x02\x40\x20\x00\x0d\x00\x42\x80\x80\x80\x80\xc0\x7e\x21\x01\x0c\x01\x0b\x20\x04\x41\x04\x76\x41\x0f\x71\x21\x00\x02\x40\x20\x04\x41\x80\x02\x71\x45\x0d\x00\x20\x05\x20\x05\x2b\x03\x00\x44\x00\x00\x00\x00\x00\xb0\x9d\xc0\xa0\x39\x03\x00\x0b\x20\x05\x20\x00\x41\x03\x74\x6a\x2b\x03\x00\x22\x06\xbd\x21\x01\x02\x40\x02\x40\x20\x06\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x06\xaa\x21\x04\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x04\x0b\x02\x40\x20\x01\x20\x04\xb7\xbd\x52\x0d\x00\x20\x04\xad\x21\x01\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x01\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x01\x0b\x20\x05\x41\xd0\x00\x6a\x24\x00\x20\x01\x0b\x8c\x01\x03\x01\x7f\x01\x7e\x01\x7c\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x01\x10\xf1\x06\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xdf\x04\x0d\x00\x20\x00\x20\x01\x20\x04\x2b\x03\x08\x22\x06\x9d\x44\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x44\x00\x00\x00\x00\x00\x00\xf8\x7f\x20\x06\x44\x00\x00\xdc\xc2\x08\xb2\x3e\x43\x65\x1b\x44\x00\x00\x00\x00\x00\x00\xf8\x7f\x20\x06\x44\x00\x00\xdc\xc2\x08\xb2\x3e\xc3\x66\x1b\x10\xf7\x06\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\xba\x01\x01\x01\x7f\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x03\x2f\x01\x06\x41\x0a\x47\x0d\x00\x20\x00\x20\x03\x29\x03\x20\x10\xcd\x01\x20\x02\xbd\x21\x01\x02\x40\x02\x40\x20\x02\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x02\xaa\x21\x00\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x00\x0b\x02\x40\x02\x40\x20\x01\x20\x00\xb7\xbd\x52\x0d\x00\x20\x00\xad\x21\x01\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x01\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x01\x0b\x20\x03\x20\x01\x37\x03\x20\x20\x01\x10\xc0\x01\x0f\x0b\x20\x00\x41\xaa\xc3\x02\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x0b\xfb\x01\x03\x04\x7f\x01\x7e\x02\x7c\x23\x00\x41\xe0\x00\x6b\x22\x05\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x09\x02\x40\x20\x00\x20\x01\x20\x05\x41\x10\x6a\x20\x04\x41\x0f\x71\x22\x06\x20\x04\x41\x08\x76\x41\x0f\x71\x22\x07\x45\x10\xf0\x06\x22\x08\x41\x00\x48\x0d\x00\x44\x00\x00\x00\x00\x00\x00\xf8\x7f\x21\x0a\x02\x40\x20\x02\x41\x01\x48\x0d\x00\x20\x08\x45\x0d\x00\x20\x02\x20\x04\x41\x04\x76\x41\x0f\x71\x20\x07\x6b\x22\x04\x20\x04\x20\x02\x4a\x1b\x21\x08\x20\x05\x41\x10\x6a\x20\x07\x41\x03\x74\x6a\x21\x02\x41\x00\x21\x04\x02\x40\x03\x40\x20\x04\x20\x08\x4e\x0d\x01\x20\x00\x20\x05\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xdf\x04\x0d\x03\x20\x05\x2b\x03\x08\x22\x0b\x99\x44\x00\x00\x00\x00\x00\x00\xf0\x7f\x63\x41\x01\x73\x0d\x02\x20\x02\x20\x0b\x9d\x39\x03\x00\x20\x02\x41\x08\x6a\x21\x02\x20\x03\x41\x08\x6a\x21\x03\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x05\x41\x10\x6a\x20\x06\x10\xe4\x06\x21\x0a\x0b\x20\x00\x20\x01\x20\x0a\x10\xf7\x06\x21\x09\x0b\x20\x05\x41\xe0\x00\x6a\x24\x00\x20\x09\x0b\xa6\x02\x03\x01\x7f\x01\x7e\x01\x7c\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x01\x10\xf1\x06\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xdf\x04\x0d\x00\x02\x40\x20\x04\x2b\x03\x08\x22\x06\x99\x44\x00\x00\x00\x00\x00\x00\xf0\x7f\x63\x41\x01\x73\x0d\x00\x20\x04\x20\x06\x9d\x22\x06\x39\x03\x08\x20\x06\x44\x00\x00\x00\x00\x00\x00\x00\x00\x66\x41\x01\x73\x0d\x00\x20\x06\x44\x00\x00\x00\x00\x00\x00\x59\x40\x63\x41\x01\x73\x0d\x00\x20\x04\x20\x06\x44\x00\x00\x00\x00\x00\xb0\x9d\x40\xa0\x22\x06\x39\x03\x08\x0b\x20\x06\xbd\x21\x05\x02\x40\x02\x40\x20\x06\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x06\xaa\x21\x03\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x03\x0b\x02\x40\x02\x40\x20\x05\x20\x03\xb7\xbd\x52\x0d\x00\x20\x03\xad\x21\x05\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x05\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x05\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x05\x0b\x20\x04\x20\x05\x37\x03\x00\x20\x00\x20\x01\x41\x01\x20\x04\x41\x11\x10\xf8\x06\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\xf7\x01\x02\x02\x7f\x03\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x02\x40\x20\x00\x20\x00\x20\x01\x10\xfe\x02\x22\x07\x41\x01\x10\xeb\x02\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x02\x40\x20\x01\x42\x20\x88\xa7\x22\x05\x45\x0d\x00\x20\x05\x41\x0b\x6a\x41\x12\x49\x0d\x01\x0b\x20\x00\x20\x04\x41\x08\x6a\x20\x01\x10\xdf\x04\x41\x00\x48\x0d\x01\x20\x04\x2b\x03\x08\x99\x44\x00\x00\x00\x00\x00\x00\xf0\x7f\x63\x41\x01\x73\x45\x0d\x00\x42\x80\x80\x80\x80\x20\x21\x06\x0c\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x20\x00\x20\x07\x41\xd4\xc3\x02\x10\xb6\x01\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x00\x20\x08\x10\xf0\x02\x0d\x00\x20\x00\x41\xc4\xc7\x02\x41\x00\x10\xb2\x02\x20\x00\x20\x08\x10\xcd\x01\x0c\x01\x0b\x20\x00\x20\x08\x20\x07\x41\x00\x41\x00\x10\xef\x02\x21\x06\x0b\x20\x00\x20\x07\x10\xcd\x01\x20\x00\x20\x01\x10\xcd\x01\x20\x04\x41\x10\x6a\x24\x00\x20\x06\x0b\x85\x01\x01\x03\x7f\x02\x40\x20\x00\x41\xf0\x00\x10\xe2\x03\x22\x02\x0d\x00\x20\x00\x20\x01\x10\xe4\x02\x41\x00\x0f\x0b\x20\x02\x20\x00\x28\x02\xf4\x01\x22\x03\x36\x02\x08\x20\x03\x20\x02\x41\x08\x6a\x22\x04\x36\x02\x04\x20\x02\x42\x80\x80\x80\x80\x30\x37\x03\x68\x20\x02\x42\x80\x80\x80\x80\x30\x37\x03\x60\x20\x02\x42\x80\x80\x80\x80\x30\x37\x03\x48\x20\x02\x42\x80\x80\x80\x80\x30\x37\x03\x40\x20\x02\x20\x01\x36\x02\x04\x20\x02\x41\x01\x36\x02\x00\x20\x00\x20\x04\x36\x02\xf4\x01\x20\x02\x20\x00\x41\xf4\x01\x6a\x36\x02\x0c\x20\x02\x0b\xdc\x02\x01\x03\x7f\x02\x40\x20\x00\x41\x98\x03\x10\xe2\x03\x22\x06\x0d\x00\x41\x00\x0f\x0b\x20\x06\x20\x00\x36\x02\x00\x20\x06\x41\x7f\x36\x02\x08\x20\x06\x20\x01\x36\x02\x04\x20\x06\x20\x06\x41\x10\x6a\x22\x07\x36\x02\x14\x20\x06\x20\x07\x36\x02\x10\x02\x40\x20\x01\x45\x0d\x00\x20\x06\x20\x01\x28\x02\x10\x22\x07\x36\x02\x18\x20\x07\x20\x06\x41\x18\x6a\x22\x08\x36\x02\x04\x20\x06\x20\x01\x2d\x00\x6e\x3a\x00\x6e\x20\x06\x20\x01\x28\x02\xbc\x01\x36\x02\x0c\x20\x01\x20\x08\x36\x02\x10\x20\x06\x20\x01\x41\x10\x6a\x36\x02\x1c\x0b\x20\x06\x20\x03\x36\x02\x2c\x20\x06\x20\x02\x36\x02\x20\x20\x06\x41\x7f\x36\x02\x98\x02\x20\x06\x41\xef\x00\x36\x02\x90\x02\x20\x06\x41\x00\x36\x02\x70\x20\x00\x28\x02\x10\x21\x01\x20\x06\x42\x00\x37\x02\x80\x02\x20\x06\x41\x88\x02\x6a\x42\x00\x37\x02\x00\x20\x06\x20\x01\x36\x02\x94\x02\x20\x06\x41\x90\x01\x6a\x41\xff\x01\x41\x28\x10\x74\x1a\x20\x06\x42\x84\x80\x80\x80\x10\x37\x02\xc4\x01\x20\x06\x20\x06\x41\xd0\x01\x6a\x36\x02\xcc\x01\x20\x06\x42\x7f\x37\x02\xd0\x01\x20\x06\x41\x7f\x36\x02\xf0\x01\x20\x06\x42\x80\x80\x80\x80\x70\x37\x02\xbc\x01\x20\x00\x20\x04\x10\xb3\x01\x21\x01\x20\x06\x20\x05\x36\x02\xf0\x02\x20\x06\x20\x01\x36\x02\xec\x02\x20\x06\x41\xef\x00\x36\x02\x84\x03\x20\x06\x20\x05\x36\x02\x9c\x02\x20\x00\x28\x02\x10\x21\x00\x20\x06\x42\x00\x37\x02\xf4\x02\x20\x06\x41\xfc\x02\x6a\x42\x00\x37\x02\x00\x20\x06\x20\x00\x36\x02\x88\x03\x20\x06\x0b\x73\x01\x01\x7f\x20\x01\x20\x01\x2d\x00\x00\x41\x7c\x71\x41\x01\x72\x22\x04\x3a\x00\x00\x20\x01\x20\x02\x2d\x00\x0c\x41\x02\x74\x41\x04\x71\x20\x04\x41\x79\x71\x72\x22\x04\x3a\x00\x00\x20\x01\x20\x04\x41\x75\x71\x20\x02\x2d\x00\x0c\x41\x02\x74\x41\x08\x71\x72\x22\x04\x3a\x00\x00\x20\x01\x20\x04\x41\x0d\x71\x20\x02\x28\x02\x0c\x41\x01\x74\x41\xf0\x01\x71\x72\x3a\x00\x00\x20\x01\x20\x03\x3b\x01\x02\x20\x01\x20\x00\x20\x02\x28\x02\x00\x10\xd9\x03\x36\x02\x04\x0b\x3a\x01\x02\x7f\x41\x01\x21\x01\x02\x40\x20\x00\x28\x02\x00\x22\x02\x41\x8f\x7f\x6a\x41\x03\x49\x0d\x00\x20\x02\x41\x08\x46\x0d\x00\x20\x02\x41\xd3\x00\x46\x0d\x00\x20\x00\x28\x02\x0c\x41\xf8\x00\x71\x41\x20\x46\x21\x01\x0b\x20\x01\x0b\xb6\x02\x01\x06\x7f\x23\x00\x41\x10\x6b\x22\x01\x24\x00\x02\x40\x02\x40\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x22\x02\x0d\x00\x41\x00\x21\x03\x0c\x01\x0b\x02\x40\x02\x40\x02\x40\x20\x02\x28\x02\xc8\x01\x22\x03\x20\x02\x28\x02\xc4\x01\x22\x04\x4e\x0d\x00\x20\x02\x28\x02\xcc\x01\x21\x04\x20\x03\x21\x05\x0c\x01\x0b\x20\x04\x41\x03\x6c\x41\x02\x6d\x22\x04\x20\x03\x41\x01\x6a\x20\x03\x20\x04\x48\x1b\x21\x05\x20\x00\x28\x02\x00\x21\x04\x02\x40\x02\x40\x20\x02\x28\x02\xcc\x01\x22\x06\x20\x02\x41\xd0\x01\x6a\x47\x0d\x00\x20\x04\x41\x00\x20\x05\x41\x03\x74\x20\x01\x41\x0c\x6a\x10\xbd\x04\x22\x04\x45\x0d\x03\x20\x04\x20\x02\x28\x02\xcc\x01\x20\x02\x28\x02\xc8\x01\x41\x03\x74\x10\x70\x1a\x0c\x01\x0b\x20\x04\x20\x06\x20\x05\x41\x03\x74\x20\x01\x41\x0c\x6a\x10\xbd\x04\x22\x04\x45\x0d\x02\x0b\x20\x02\x20\x04\x36\x02\xcc\x01\x20\x02\x20\x01\x28\x02\x0c\x41\x03\x76\x20\x05\x6a\x36\x02\xc4\x01\x20\x02\x28\x02\xc8\x01\x21\x05\x0b\x20\x02\x20\x05\x41\x01\x6a\x36\x02\xc8\x01\x20\x04\x20\x03\x41\x03\x74\x6a\x20\x02\x29\x02\xbc\x01\x37\x02\x00\x20\x00\x41\xb4\x01\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x20\x03\x41\xff\xff\x03\x71\x10\x89\x07\x20\x02\x20\x03\x36\x02\xbc\x01\x0c\x01\x0b\x41\x7f\x21\x03\x0b\x20\x01\x41\x10\x6a\x24\x00\x20\x03\x0b\xfe\x19\x02\x06\x7f\x02\x7e\x23\x00\x41\x10\x6b\x22\x01\x24\x00\x02\x40\x02\x40\x02\x40\x20\x00\x28\x02\x00\x28\x02\x10\x28\x02\x78\x20\x01\x22\x02\x4d\x0d\x00\x20\x00\x41\x98\x9d\x03\x41\x00\x10\x8a\x07\x0c\x01\x0b\x20\x00\x20\x00\x41\x10\x6a\x22\x03\x10\x84\x07\x20\x00\x41\x00\x36\x02\x30\x20\x00\x20\x00\x28\x02\x38\x22\x01\x36\x02\x34\x20\x00\x20\x00\x41\x14\x6a\x28\x02\x00\x36\x02\x04\x20\x02\x20\x01\x36\x02\x0c\x03\x40\x20\x00\x20\x01\x36\x02\x18\x20\x00\x20\x00\x28\x02\x08\x22\x04\x36\x02\x14\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x2c\x00\x00\x22\x05\x41\xff\x01\x71\x22\x06\x41\xfc\x00\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x06\x0e\x7d\x00\x07\x07\x07\x07\x07\x07\x07\x07\x04\x03\x04\x04\x02\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x04\x0c\x06\x19\x1a\x14\x0b\x06\x07\x07\x15\x13\x07\x10\x17\x05\x16\x18\x18\x18\x18\x18\x18\x18\x18\x18\x07\x07\x0f\x0d\x0e\x08\x07\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x07\x1b\x07\x0a\x1a\x01\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x1a\x07\x09\x00\x0b\x02\x40\x20\x00\x28\x02\x3c\x20\x01\x4d\x0d\x00\x41\x00\x21\x04\x0c\x1c\x0b\x20\x03\x41\xac\x7f\x36\x02\x00\x0c\x21\x0b\x20\x00\x20\x01\x41\x01\x6a\x10\x8b\x07\x0d\x1d\x20\x02\x20\x00\x28\x02\x38\x36\x02\x0c\x0c\x20\x0b\x20\x01\x2d\x00\x01\x41\x0a\x47\x0d\x00\x20\x02\x20\x01\x41\x01\x6a\x22\x01\x36\x02\x0c\x0b\x20\x02\x20\x01\x41\x01\x6a\x36\x02\x0c\x0c\x21\x0b\x20\x02\x20\x01\x41\x01\x6a\x36\x02\x0c\x0c\x21\x0b\x02\x40\x20\x01\x2d\x00\x01\x22\x06\x41\x2a\x46\x0d\x00\x20\x06\x41\x2f\x46\x0d\x1e\x20\x06\x41\x3d\x47\x0d\x1c\x20\x03\x41\x86\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x02\x6a\x36\x02\x0c\x0c\x1d\x0b\x20\x02\x20\x01\x41\x02\x6a\x22\x01\x36\x02\x0c\x03\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x2d\x00\x00\x22\x06\x41\x76\x6a\x22\x04\x41\x03\x4d\x0d\x00\x02\x40\x20\x06\x41\x2a\x46\x0d\x00\x20\x06\x0d\x02\x20\x01\x20\x00\x28\x02\x3c\x49\x0d\x03\x20\x00\x41\xce\xeb\x02\x41\x00\x10\x8a\x07\x0c\x21\x0b\x20\x01\x2d\x00\x01\x41\x2f\x47\x0d\x02\x20\x02\x20\x01\x41\x02\x6a\x36\x02\x0c\x0c\x27\x0b\x20\x04\x0e\x04\x03\x00\x00\x02\x03\x0b\x20\x06\x41\x18\x74\x41\x18\x75\x41\x7f\x4a\x0d\x00\x02\x40\x20\x01\x41\x06\x20\x02\x41\x0c\x6a\x10\x9e\x04\x22\x01\x41\x01\x72\x41\xa9\xc0\x00\x47\x0d\x00\x20\x00\x41\x01\x36\x02\x30\x0c\x04\x0b\x20\x01\x41\x7f\x47\x0d\x03\x20\x02\x20\x02\x28\x02\x0c\x41\x01\x6a\x36\x02\x0c\x0c\x03\x0b\x20\x02\x20\x01\x41\x01\x6a\x36\x02\x0c\x0c\x02\x0b\x20\x00\x41\x01\x36\x02\x30\x20\x02\x20\x01\x41\x01\x6a\x36\x02\x0c\x0c\x01\x0b\x20\x00\x41\x01\x36\x02\x30\x20\x00\x20\x00\x28\x02\x08\x41\x01\x6a\x36\x02\x08\x20\x02\x20\x01\x41\x01\x6a\x36\x02\x0c\x0b\x20\x02\x28\x02\x0c\x21\x01\x0c\x00\x0b\x00\x0b\x20\x00\x20\x06\x41\x01\x20\x01\x41\x01\x6a\x20\x03\x20\x02\x41\x0c\x6a\x10\x8c\x07\x45\x0d\x1b\x0c\x18\x0b\x20\x05\x41\x7f\x4a\x0d\x09\x02\x40\x20\x01\x41\x06\x20\x02\x41\x0c\x6a\x10\x9e\x04\x22\x06\x41\x7e\x71\x41\xa8\xc0\x00\x47\x0d\x00\x20\x00\x28\x02\x08\x21\x04\x0c\x1e\x0b\x20\x06\x10\x9f\x04\x0d\x1e\x02\x40\x20\x06\x10\x8d\x07\x45\x0d\x00\x20\x02\x41\x00\x36\x02\x08\x0c\x17\x0b\x20\x00\x41\xd4\xec\x02\x41\x00\x10\x8a\x07\x0c\x17\x0b\x41\x3f\x21\x04\x02\x40\x20\x01\x2d\x00\x01\x22\x06\x41\x2e\x46\x0d\x00\x20\x06\x41\x3f\x47\x0d\x14\x02\x40\x20\x01\x2d\x00\x02\x41\x3d\x47\x0d\x00\x20\x03\x41\x94\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x03\x6a\x36\x02\x0c\x0c\x1b\x0b\x20\x03\x41\xa8\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x02\x6a\x36\x02\x0c\x0c\x1a\x0b\x20\x01\x2d\x00\x02\x41\x50\x6a\x41\xff\x01\x71\x41\x0a\x49\x0d\x13\x20\x03\x41\xa9\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x02\x6a\x36\x02\x0c\x0c\x19\x0b\x41\xfc\x00\x21\x04\x02\x40\x20\x01\x2d\x00\x01\x22\x06\x41\xfc\x00\x46\x0d\x00\x20\x06\x41\x3d\x47\x0d\x13\x20\x03\x41\x8f\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x02\x6a\x36\x02\x0c\x0c\x19\x0b\x02\x40\x20\x01\x2d\x00\x02\x41\x3d\x47\x0d\x00\x20\x03\x41\x93\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x03\x6a\x36\x02\x0c\x0c\x19\x0b\x20\x03\x41\xa3\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x02\x6a\x36\x02\x0c\x0c\x18\x0b\x02\x40\x02\x40\x20\x01\x2d\x00\x01\x22\x06\x41\xde\x00\x46\x0d\x00\x20\x06\x41\x3d\x47\x0d\x01\x20\x02\x20\x01\x41\x02\x6a\x36\x02\x0c\x02\x40\x20\x00\x28\x02\x40\x2d\x00\x6e\x41\x04\x71\x45\x0d\x00\x20\x03\x41\x90\x7f\x36\x02\x00\x0c\x1a\x0b\x20\x03\x41\x8e\x7f\x36\x02\x00\x0c\x19\x0b\x02\x40\x20\x01\x2d\x00\x02\x41\x3d\x47\x0d\x00\x20\x03\x41\x8e\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x03\x6a\x36\x02\x0c\x0c\x19\x0b\x20\x03\x41\xde\x00\x36\x02\x00\x20\x02\x20\x01\x41\x02\x6a\x36\x02\x0c\x0c\x18\x0b\x20\x02\x20\x01\x41\x01\x6a\x36\x02\x0c\x02\x40\x20\x00\x28\x02\x40\x2d\x00\x6e\x41\x04\x71\x45\x0d\x00\x20\x03\x41\xa4\x7f\x36\x02\x00\x0c\x18\x0b\x20\x03\x41\xde\x00\x36\x02\x00\x0c\x17\x0b\x41\x26\x21\x04\x02\x40\x20\x01\x2d\x00\x01\x22\x06\x41\x26\x46\x0d\x00\x20\x06\x41\x3d\x47\x0d\x11\x20\x03\x41\x8d\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x02\x6a\x36\x02\x0c\x0c\x17\x0b\x02\x40\x20\x01\x2d\x00\x02\x41\x3d\x47\x0d\x00\x20\x03\x41\x92\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x03\x6a\x36\x02\x0c\x0c\x17\x0b\x20\x03\x41\xa2\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x02\x6a\x36\x02\x0c\x0c\x16\x0b\x02\x40\x20\x01\x2d\x00\x01\x41\x3d\x46\x0d\x00\x41\x21\x21\x04\x0c\x10\x0b\x02\x40\x20\x01\x2d\x00\x02\x41\x3d\x47\x0d\x00\x20\x03\x41\xa1\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x03\x6a\x36\x02\x0c\x0c\x16\x0b\x20\x03\x41\xa0\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x02\x6a\x36\x02\x0c\x0c\x15\x0b\x02\x40\x20\x01\x2d\x00\x01\x41\x43\x6a\x22\x06\x41\x01\x4d\x0d\x00\x41\x3d\x21\x04\x0c\x0f\x0b\x02\x40\x02\x40\x20\x06\x0e\x02\x00\x01\x00\x0b\x02\x40\x20\x01\x2d\x00\x02\x41\x3d\x47\x0d\x00\x20\x03\x41\x9f\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x03\x6a\x36\x02\x0c\x0c\x16\x0b\x20\x03\x41\x9e\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x02\x6a\x36\x02\x0c\x0c\x15\x0b\x20\x03\x41\xa6\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x02\x6a\x36\x02\x0c\x0c\x14\x0b\x02\x40\x20\x01\x2d\x00\x01\x41\x43\x6a\x22\x06\x41\x01\x4d\x0d\x00\x41\x3e\x21\x04\x0c\x0e\x0b\x02\x40\x02\x40\x20\x06\x0e\x02\x00\x01\x00\x0b\x20\x03\x41\x9d\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x02\x6a\x36\x02\x0c\x0c\x14\x0b\x02\x40\x20\x01\x2d\x00\x02\x41\x43\x6a\x22\x06\x41\x01\x4b\x0d\x00\x02\x40\x02\x40\x20\x06\x0e\x02\x01\x00\x01\x0b\x02\x40\x20\x01\x2d\x00\x03\x41\x3d\x47\x0d\x00\x20\x03\x41\x8c\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x04\x6a\x36\x02\x0c\x0c\x16\x0b\x20\x03\x41\x99\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x03\x6a\x36\x02\x0c\x0c\x15\x0b\x20\x03\x41\x8b\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x03\x6a\x36\x02\x0c\x0c\x14\x0b\x20\x03\x41\x98\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x02\x6a\x36\x02\x0c\x0c\x13\x0b\x02\x40\x20\x01\x2d\x00\x01\x22\x06\x41\x44\x6a\x22\x04\x41\x01\x4b\x0d\x00\x02\x40\x02\x40\x20\x04\x0e\x02\x01\x00\x01\x0b\x20\x03\x41\x9b\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x02\x6a\x36\x02\x0c\x0c\x14\x0b\x02\x40\x20\x01\x2d\x00\x02\x41\x3d\x47\x0d\x00\x20\x03\x41\x8a\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x03\x6a\x36\x02\x0c\x0c\x14\x0b\x20\x03\x41\x97\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x02\x6a\x36\x02\x0c\x0c\x13\x0b\x41\x3c\x21\x05\x20\x06\x41\x21\x47\x0d\x01\x20\x00\x28\x02\x48\x45\x0d\x01\x20\x01\x2d\x00\x02\x41\x2d\x47\x0d\x01\x20\x01\x2d\x00\x03\x41\x2d\x46\x0d\x02\x0c\x01\x0b\x41\x2d\x21\x05\x02\x40\x20\x01\x2d\x00\x01\x22\x06\x41\x2d\x46\x0d\x00\x20\x06\x41\x3d\x47\x0d\x01\x20\x03\x41\x89\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x02\x6a\x36\x02\x0c\x0c\x12\x0b\x02\x40\x20\x00\x28\x02\x48\x45\x0d\x00\x20\x01\x2d\x00\x02\x41\x3e\x47\x0d\x00\x20\x00\x28\x02\x04\x20\x04\x47\x0d\x02\x0b\x20\x03\x41\x95\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x02\x6a\x36\x02\x0c\x0c\x11\x0b\x20\x05\x41\xff\x01\x71\x21\x04\x0c\x0a\x0b\x41\x01\x21\x06\x0c\x11\x0b\x41\x2b\x21\x04\x02\x40\x20\x01\x2d\x00\x01\x22\x06\x41\x2b\x46\x0d\x00\x20\x06\x41\x3d\x47\x0d\x09\x20\x03\x41\x88\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x02\x6a\x36\x02\x0c\x0c\x0f\x0b\x20\x03\x41\x96\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x02\x6a\x36\x02\x0c\x0c\x0e\x0b\x02\x40\x20\x01\x2d\x00\x01\x41\x3d\x46\x0d\x00\x41\x25\x21\x04\x0c\x08\x0b\x20\x03\x41\x87\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x02\x6a\x36\x02\x0c\x0c\x0d\x0b\x41\x2a\x21\x04\x02\x40\x20\x01\x2d\x00\x01\x22\x06\x41\x2a\x46\x0d\x00\x20\x06\x41\x3d\x47\x0d\x07\x20\x03\x41\x85\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x02\x6a\x36\x02\x0c\x0c\x0d\x0b\x02\x40\x20\x01\x2d\x00\x02\x41\x3d\x47\x0d\x00\x20\x03\x41\x91\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x03\x6a\x36\x02\x0c\x0c\x0d\x0b\x20\x03\x41\xa5\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x02\x6a\x36\x02\x0c\x0c\x0c\x0b\x20\x01\x2d\x00\x01\x41\x50\x6a\x41\x09\x4b\x0d\x01\x20\x00\x28\x02\x40\x2d\x00\x6e\x41\x01\x71\x45\x0d\x01\x20\x00\x41\x90\xec\x02\x41\x00\x10\x8a\x07\x0c\x08\x0b\x41\x2e\x21\x04\x02\x40\x20\x01\x2d\x00\x01\x22\x06\x41\x2e\x47\x0d\x00\x41\x2e\x21\x04\x20\x01\x2d\x00\x02\x41\x2e\x47\x0d\x05\x20\x03\x41\xa7\x7f\x36\x02\x00\x20\x02\x20\x01\x41\x03\x6a\x36\x02\x0c\x0c\x0b\x0b\x20\x06\x41\x50\x6a\x41\xff\x01\x71\x41\x0a\x4f\x0d\x04\x0b\x20\x00\x28\x02\x40\x2d\x00\x6e\x21\x06\x20\x00\x41\x28\x6a\x22\x04\x41\x00\x36\x02\x00\x02\x40\x02\x40\x20\x00\x28\x02\x00\x20\x01\x20\x02\x41\x0c\x6a\x41\x00\x41\xf4\x06\x41\xf4\x00\x20\x06\x41\x04\x71\x1b\x20\x04\x10\xa0\x04\x22\x07\x42\x80\x80\x80\x80\x70\x83\x22\x08\x42\x80\x80\x80\x80\xc0\x7e\x51\x0d\x00\x20\x08\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x08\x20\x02\x28\x02\x0c\x41\x06\x20\x02\x41\x08\x6a\x10\x9e\x04\x10\x8e\x07\x45\x0d\x01\x0b\x20\x00\x28\x02\x00\x20\x07\x10\xcd\x01\x20\x00\x41\xbd\xec\x02\x41\x00\x10\x8a\x07\x0c\x07\x0b\x20\x00\x41\x80\x7f\x36\x02\x10\x20\x00\x41\x20\x6a\x20\x07\x37\x03\x00\x0c\x09\x0b\x20\x02\x20\x01\x41\x01\x6a\x22\x05\x36\x02\x0c\x20\x02\x20\x01\x41\x02\x6a\x22\x04\x36\x02\x04\x41\xdc\x00\x21\x06\x02\x40\x02\x40\x20\x01\x2d\x00\x01\x22\x01\x41\xdc\x00\x47\x0d\x00\x20\x04\x2d\x00\x00\x41\xf5\x00\x47\x0d\x01\x20\x02\x41\x04\x6a\x41\x01\x10\x8f\x07\x21\x06\x0c\x01\x0b\x20\x01\x21\x06\x20\x01\x41\x18\x74\x41\x18\x75\x41\x7f\x4a\x0d\x00\x20\x05\x41\x06\x20\x02\x41\x04\x6a\x10\x9e\x04\x21\x06\x0b\x02\x40\x20\x06\x10\x8d\x07\x0d\x00\x20\x00\x41\xe8\xeb\x02\x41\x00\x10\x8a\x07\x0c\x06\x0b\x20\x02\x20\x02\x28\x02\x04\x36\x02\x0c\x20\x02\x41\x00\x36\x02\x08\x20\x00\x20\x02\x41\x0c\x6a\x20\x02\x41\x08\x6a\x20\x06\x41\x01\x10\x90\x07\x22\x01\x45\x0d\x05\x20\x00\x41\xab\x7f\x36\x02\x10\x20\x00\x41\x20\x6a\x20\x01\x36\x02\x00\x0c\x08\x0b\x20\x02\x41\x00\x36\x02\x08\x20\x02\x20\x01\x41\x01\x6a\x36\x02\x0c\x0c\x03\x0b\x41\xdc\x00\x21\x04\x20\x01\x2d\x00\x01\x41\xf5\x00\x47\x0d\x00\x20\x02\x20\x01\x41\x01\x6a\x36\x02\x04\x02\x40\x20\x02\x41\x04\x6a\x41\x01\x10\x8f\x07\x22\x06\x41\x00\x48\x0d\x00\x20\x06\x10\x8d\x07\x0d\x02\x0b\x20\x02\x28\x02\x0c\x21\x01\x0b\x20\x03\x20\x04\x36\x02\x00\x20\x02\x20\x01\x41\x01\x6a\x36\x02\x0c\x0c\x05\x0b\x20\x02\x20\x02\x28\x02\x04\x36\x02\x0c\x20\x02\x41\x01\x36\x02\x08\x0b\x20\x00\x20\x02\x41\x0c\x6a\x20\x02\x41\x08\x6a\x20\x06\x41\x00\x10\x90\x07\x22\x01\x45\x0d\x00\x20\x00\x41\x20\x6a\x20\x01\x36\x02\x00\x20\x00\x41\x28\x6a\x41\x00\x36\x02\x00\x20\x00\x41\x24\x6a\x20\x02\x28\x02\x08\x22\x06\x36\x02\x00\x02\x40\x20\x01\x41\x25\x49\x0d\x00\x02\x40\x20\x01\x41\x2d\x4b\x0d\x00\x20\x00\x28\x02\x40\x22\x04\x2d\x00\x6e\x41\x01\x71\x0d\x01\x20\x01\x41\x2d\x47\x0d\x03\x20\x04\x2f\x01\x6c\x22\x05\x41\x01\x71\x0d\x01\x20\x05\x41\x80\xfe\x03\x71\x41\x80\x06\x47\x0d\x03\x20\x04\x28\x02\x64\x0d\x03\x20\x04\x28\x02\x04\x22\x04\x45\x0d\x03\x20\x04\x2d\x00\x6c\x41\x01\x71\x0d\x01\x0c\x03\x0b\x20\x01\x41\x2e\x47\x0d\x02\x20\x00\x28\x02\x44\x0d\x00\x20\x00\x28\x02\x40\x22\x05\x2f\x01\x6c\x22\x04\x41\x02\x71\x0d\x00\x20\x04\x41\x80\xfe\x03\x71\x41\x80\x06\x47\x0d\x02\x20\x05\x28\x02\x64\x0d\x02\x20\x05\x28\x02\x04\x22\x04\x45\x0d\x02\x20\x04\x2d\x00\x6c\x41\x02\x71\x45\x0d\x02\x0b\x02\x40\x20\x06\x45\x0d\x00\x20\x00\x41\x83\x7f\x36\x02\x10\x20\x00\x41\x01\x36\x02\x28\x0c\x04\x0b\x20\x03\x20\x01\x41\xac\x7f\x6a\x36\x02\x00\x0c\x03\x0b\x20\x03\x41\xaa\x7f\x36\x02\x00\x0c\x08\x0b\x20\x03\x41\x83\x7f\x36\x02\x00\x0c\x01\x0b\x20\x03\x41\x2f\x36\x02\x00\x20\x02\x20\x01\x41\x01\x6a\x36\x02\x0c\x0b\x20\x00\x20\x02\x28\x02\x0c\x36\x02\x38\x41\x00\x21\x01\x0c\x06\x0b\x20\x01\x41\x02\x6a\x21\x01\x41\x00\x21\x06\x0b\x03\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x06\x0e\x02\x00\x01\x01\x0b\x20\x02\x20\x01\x36\x02\x0c\x0c\x01\x0b\x20\x01\x2d\x00\x00\x22\x06\x45\x0d\x02\x02\x40\x20\x06\x41\x76\x6a\x22\x04\x41\x03\x4b\x0d\x00\x20\x04\x0e\x04\x08\x00\x00\x08\x08\x0b\x20\x06\x41\x18\x74\x41\x18\x75\x41\x7f\x4a\x0d\x03\x20\x01\x41\x06\x20\x02\x41\x0c\x6a\x10\x9e\x04\x22\x06\x41\x01\x72\x41\xa9\xc0\x00\x46\x0d\x07\x20\x02\x28\x02\x0c\x21\x01\x20\x06\x41\x7f\x46\x0d\x01\x0b\x41\x01\x21\x06\x0c\x04\x0b\x20\x01\x41\x01\x6a\x21\x01\x0c\x02\x0b\x20\x01\x20\x00\x28\x02\x3c\x4f\x0d\x04\x0b\x20\x01\x41\x01\x6a\x21\x01\x0b\x41\x00\x21\x06\x0c\x00\x0b\x00\x0b\x20\x00\x41\x01\x36\x02\x30\x20\x00\x20\x04\x41\x01\x6a\x36\x02\x08\x0b\x20\x02\x28\x02\x0c\x21\x01\x0c\x00\x0b\x00\x0b\x41\x7f\x21\x01\x0b\x20\x02\x41\x10\x6a\x24\x00\x20\x01\x0b\xdd\x03\x01\x04\x7f\x23\x00\x41\xc0\x00\x6b\x22\x01\x24\x00\x41\x00\x21\x02\x02\x40\x20\x00\x28\x02\x10\x41\x81\x7f\x47\x0d\x00\x20\x01\x20\x00\x28\x02\x04\x36\x02\x10\x20\x01\x20\x00\x28\x02\x30\x36\x02\x18\x20\x01\x20\x00\x41\x14\x6a\x28\x02\x00\x36\x02\x14\x20\x01\x20\x00\x41\x18\x6a\x28\x02\x00\x36\x02\x1c\x41\x81\x7f\x21\x03\x02\x40\x03\x40\x20\x03\x41\x81\x7f\x47\x0d\x01\x20\x00\x28\x02\x38\x21\x03\x20\x01\x20\x00\x28\x02\x18\x22\x02\x41\x01\x6a\x36\x02\x04\x20\x01\x20\x03\x20\x02\x6b\x41\x7e\x6a\x36\x02\x00\x20\x01\x41\x20\x6a\x41\x14\x41\xab\xeb\x02\x20\x01\x10\x5f\x1a\x41\x7f\x21\x02\x20\x00\x10\x80\x07\x0d\x02\x02\x40\x02\x40\x20\x00\x28\x02\x10\x22\x04\x41\x80\x01\x6a\x22\x03\x41\xd8\x00\x4d\x0d\x00\x20\x04\x41\xfd\x00\x46\x0d\x01\x20\x04\x41\x3b\x47\x0d\x03\x20\x00\x10\x80\x07\x45\x0d\x01\x0c\x04\x0b\x02\x40\x20\x03\x0e\x59\x00\x00\x00\x00\x00\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x00\x00\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x01\x00\x00\x00\x00\x03\x00\x00\x00\x00\x03\x00\x00\x03\x03\x00\x00\x00\x03\x03\x00\x03\x03\x00\x00\x03\x03\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x20\x00\x28\x02\x30\x45\x0d\x02\x0b\x02\x40\x02\x40\x20\x01\x41\x20\x6a\x41\xb0\xeb\x02\x41\x0b\x10\x6b\x0d\x00\x20\x00\x28\x02\x40\x22\x03\x41\x01\x36\x02\x40\x20\x03\x20\x03\x2d\x00\x6e\x41\x01\x72\x3a\x00\x6e\x0c\x01\x0b\x02\x40\x20\x01\x41\x20\x6a\x41\xbb\xeb\x02\x41\x0a\x10\x6b\x0d\x00\x20\x00\x28\x02\x40\x22\x03\x20\x03\x2d\x00\x6e\x41\x02\x72\x3a\x00\x6e\x0c\x01\x0b\x20\x00\x28\x02\x00\x2d\x00\xe8\x01\x45\x0d\x00\x20\x01\x41\x20\x6a\x41\xc5\xeb\x02\x41\x09\x10\x6b\x0d\x00\x20\x00\x28\x02\x40\x22\x03\x20\x03\x2d\x00\x6e\x41\x04\x72\x3a\x00\x6e\x0b\x20\x00\x28\x02\x10\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x20\x01\x41\x10\x6a\x10\x91\x07\x21\x02\x0b\x20\x01\x41\xc0\x00\x6a\x24\x00\x20\x02\x0b\x9c\x01\x01\x02\x7f\x02\x40\x20\x01\x28\x02\x7c\x22\x03\x41\x80\x80\x04\x48\x0d\x00\x20\x00\x41\x92\xeb\x02\x41\x00\x10\xc2\x02\x41\x7f\x0f\x0b\x41\x7f\x21\x04\x02\x40\x20\x00\x20\x01\x41\xf4\x00\x6a\x41\x10\x20\x01\x41\xf8\x00\x6a\x20\x03\x41\x01\x6a\x10\xc3\x04\x0d\x00\x20\x01\x20\x01\x28\x02\x7c\x22\x03\x41\x01\x6a\x36\x02\x7c\x20\x01\x28\x02\x74\x20\x03\x41\x04\x74\x6a\x22\x03\x42\x00\x37\x02\x00\x20\x03\x41\x08\x6a\x42\x00\x37\x02\x00\x20\x00\x20\x02\x10\xd9\x03\x21\x00\x20\x03\x20\x03\x28\x02\x0c\x41\x80\xff\xff\xff\x07\x72\x36\x02\x0c\x20\x03\x20\x00\x36\x02\x00\x20\x01\x28\x02\x7c\x41\x7f\x6a\x21\x04\x0b\x20\x04\x0b\xd0\x0f\x01\x07\x7f\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x28\x02\x10\x22\x01\x41\x47\x46\x0d\x00\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x21\x02\x20\x00\x41\x85\x01\x10\x92\x07\x45\x0d\x02\x20\x00\x41\x01\x10\x93\x07\x41\x47\x47\x0d\x01\x0b\x41\x7f\x21\x01\x20\x00\x41\x00\x41\x00\x20\x00\x41\x18\x6a\x28\x02\x00\x20\x00\x41\x14\x6a\x28\x02\x00\x10\x94\x07\x45\x0d\x02\x0c\x03\x0b\x20\x00\x28\x02\x10\x21\x01\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x41\x33\x6a\x22\x01\x41\x02\x4b\x0d\x00\x02\x40\x02\x40\x20\x01\x0e\x03\x00\x02\x01\x00\x0b\x20\x02\x28\x02\x94\x03\x45\x0d\x01\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x28\x02\x94\x03\x21\x03\x20\x00\x28\x02\x00\x21\x02\x41\x7f\x21\x01\x20\x00\x10\x80\x07\x0d\x06\x02\x40\x02\x40\x02\x40\x20\x00\x28\x02\x10\x22\x04\x41\x39\x6a\x22\x05\x41\x03\x4b\x0d\x00\x02\x40\x20\x05\x0e\x04\x02\x01\x01\x00\x02\x0b\x20\x00\x41\x00\x41\x01\x10\x95\x07\x21\x00\x0c\x07\x0b\x20\x00\x41\x85\x01\x10\x92\x07\x45\x0d\x01\x20\x00\x41\x01\x10\x93\x07\x41\x47\x47\x0d\x01\x0b\x20\x00\x41\x00\x41\x00\x20\x00\x41\x18\x6a\x28\x02\x00\x20\x00\x41\x14\x6a\x28\x02\x00\x41\x01\x41\x00\x10\x96\x07\x21\x00\x0c\x05\x0b\x20\x00\x10\x80\x07\x0d\x06\x02\x40\x02\x40\x20\x04\x41\xb3\x7f\x46\x0d\x00\x02\x40\x02\x40\x20\x04\x41\x42\x46\x0d\x00\x20\x04\x41\x4b\x46\x0d\x02\x20\x04\x41\x53\x46\x0d\x02\x02\x40\x20\x04\x41\x2a\x46\x0d\x00\x20\x04\x41\xfb\x00\x47\x0d\x04\x20\x03\x28\x02\x20\x21\x06\x02\x40\x03\x40\x20\x00\x28\x02\x10\x22\x05\x41\xfd\x00\x46\x0d\x01\x02\x40\x20\x05\x41\x83\x7f\x46\x0d\x00\x20\x05\x41\xd3\x00\x6a\x41\x2e\x49\x0d\x00\x20\x00\x41\xa3\xcf\x02\x41\x00\x10\x8a\x07\x41\x7f\x0f\x0b\x20\x02\x20\x00\x28\x02\x20\x10\xd9\x03\x21\x04\x41\x00\x21\x05\x02\x40\x02\x40\x02\x40\x20\x00\x10\x80\x07\x0d\x00\x20\x00\x41\xf9\x00\x10\x92\x07\x45\x0d\x01\x20\x00\x10\x80\x07\x0d\x00\x02\x40\x20\x00\x28\x02\x10\x22\x05\x41\x83\x7f\x46\x0d\x00\x20\x05\x41\xd3\x00\x6a\x41\x2e\x49\x0d\x00\x41\x00\x21\x05\x20\x00\x41\xa3\xcf\x02\x41\x00\x10\x8a\x07\x0c\x01\x0b\x20\x02\x20\x00\x28\x02\x20\x10\xd9\x03\x21\x05\x20\x00\x10\x80\x07\x45\x0d\x02\x0b\x20\x02\x20\x04\x10\xe4\x02\x0c\x0c\x0b\x20\x02\x20\x04\x10\xd9\x03\x21\x05\x0b\x20\x00\x20\x03\x20\x04\x20\x05\x41\x00\x10\x97\x07\x21\x07\x20\x02\x20\x04\x10\xe4\x02\x20\x02\x20\x05\x10\xe4\x02\x20\x07\x45\x0d\x0d\x20\x00\x28\x02\x10\x41\x2c\x47\x0d\x01\x20\x00\x10\x80\x07\x45\x0d\x00\x0c\x0d\x0b\x00\x0b\x20\x00\x41\xfd\x00\x10\x98\x07\x0d\x0b\x20\x00\x41\xfa\x00\x10\x92\x07\x45\x0d\x02\x20\x00\x10\x99\x07\x22\x05\x45\x0d\x0b\x20\x02\x20\x03\x20\x05\x10\x9a\x07\x21\x04\x20\x02\x20\x05\x10\xe4\x02\x20\x04\x41\x00\x48\x0d\x0b\x20\x06\x41\x14\x6c\x21\x02\x03\x40\x20\x06\x20\x03\x28\x02\x20\x4e\x0d\x03\x20\x03\x28\x02\x1c\x20\x02\x6a\x22\x05\x20\x04\x36\x02\x00\x20\x05\x41\x08\x6a\x41\x01\x36\x02\x00\x20\x02\x41\x14\x6a\x21\x02\x20\x06\x41\x01\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x02\x40\x20\x00\x41\xf9\x00\x10\x92\x07\x45\x0d\x00\x20\x00\x10\x80\x07\x0d\x0b\x02\x40\x20\x00\x28\x02\x10\x22\x05\x41\x83\x7f\x46\x0d\x00\x20\x05\x41\xd3\x00\x6a\x41\x2e\x49\x0d\x00\x20\x00\x41\xa3\xcf\x02\x41\x00\x10\x8a\x07\x41\x7f\x0f\x0b\x20\x02\x20\x00\x41\x20\x6a\x28\x02\x00\x10\xd9\x03\x21\x05\x20\x00\x10\x80\x07\x0d\x08\x20\x00\x10\x99\x07\x22\x04\x45\x0d\x08\x20\x02\x20\x03\x20\x04\x10\x9a\x07\x21\x07\x20\x02\x20\x04\x10\xe4\x02\x20\x07\x41\x00\x48\x0d\x08\x20\x00\x20\x03\x41\xfd\x00\x20\x05\x41\x01\x10\x97\x07\x21\x03\x20\x02\x20\x05\x10\xe4\x02\x20\x03\x45\x0d\x0b\x20\x03\x20\x07\x36\x02\x00\x0c\x02\x0b\x20\x00\x10\x99\x07\x22\x05\x45\x0d\x0a\x20\x02\x20\x03\x20\x05\x10\x9a\x07\x21\x04\x20\x02\x20\x05\x10\xe4\x02\x20\x04\x41\x00\x48\x0d\x0a\x20\x02\x20\x03\x41\x28\x6a\x41\x04\x20\x03\x41\x30\x6a\x20\x03\x28\x02\x2c\x41\x01\x6a\x10\xc3\x04\x0d\x0a\x20\x03\x20\x03\x28\x02\x2c\x22\x02\x41\x01\x6a\x36\x02\x2c\x20\x03\x28\x02\x28\x20\x02\x41\x02\x74\x6a\x20\x04\x36\x02\x00\x0c\x01\x0b\x02\x40\x02\x40\x02\x40\x20\x00\x28\x02\x10\x41\x39\x6a\x22\x02\x41\x03\x4b\x0d\x00\x02\x40\x20\x02\x0e\x04\x02\x01\x01\x00\x02\x0b\x20\x00\x41\x00\x41\x02\x10\x95\x07\x21\x00\x0c\x0a\x0b\x20\x00\x41\x85\x01\x10\x92\x07\x45\x0d\x01\x20\x00\x41\x01\x10\x93\x07\x41\x47\x47\x0d\x01\x0b\x20\x00\x41\x00\x41\x00\x20\x00\x41\x18\x6a\x28\x02\x00\x20\x00\x41\x14\x6a\x28\x02\x00\x41\x02\x41\x00\x10\x96\x07\x21\x00\x0c\x08\x0b\x20\x00\x10\x9b\x07\x0d\x09\x20\x00\x41\x16\x10\x9c\x07\x20\x00\x20\x00\x41\xc0\x00\x6a\x22\x02\x28\x02\x00\x41\xfc\x00\x41\x01\x10\x9d\x07\x41\x00\x48\x0d\x09\x20\x00\x41\xbd\x01\x10\x86\x07\x20\x00\x41\xfc\x00\x10\x9e\x07\x20\x02\x28\x02\x00\x41\x00\x10\x89\x07\x20\x00\x20\x03\x41\xfc\x00\x41\x16\x41\x00\x10\x97\x07\x45\x0d\x09\x0b\x20\x00\x10\x9f\x07\x21\x00\x0c\x06\x0b\x20\x00\x41\x01\x20\x04\x41\x01\x10\xa0\x07\x21\x00\x0c\x05\x0b\x20\x00\x41\xb7\xcf\x02\x41\x00\x10\x8a\x07\x41\x7f\x0f\x0b\x20\x02\x28\x02\x94\x03\x45\x0d\x00\x20\x00\x41\x00\x10\x93\x07\x22\x01\x41\x28\x46\x0d\x00\x20\x01\x41\x2e\x46\x0d\x00\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x28\x02\x94\x03\x21\x05\x20\x00\x28\x02\x00\x21\x03\x41\x7f\x21\x01\x20\x00\x10\x80\x07\x0d\x05\x20\x05\x28\x02\x38\x21\x02\x02\x40\x02\x40\x02\x40\x20\x00\x28\x02\x10\x22\x07\x41\xff\x00\x6a\x22\x04\x41\x02\x4b\x0d\x00\x02\x40\x02\x40\x20\x04\x0e\x03\x00\x02\x01\x00\x0b\x20\x03\x20\x00\x41\x20\x6a\x29\x03\x00\x10\xa3\x03\x22\x07\x45\x0d\x09\x20\x00\x10\x80\x07\x45\x0d\x03\x20\x03\x20\x07\x10\xe4\x02\x41\x7f\x0f\x0b\x02\x40\x20\x00\x41\x28\x6a\x28\x02\x00\x45\x0d\x00\x20\x00\x10\xa1\x07\x41\x7f\x0f\x0b\x20\x03\x20\x00\x41\x20\x6a\x28\x02\x00\x10\xd9\x03\x21\x04\x41\x16\x21\x07\x20\x00\x10\x80\x07\x0d\x04\x41\x16\x21\x07\x20\x00\x20\x05\x20\x04\x41\x16\x10\xa2\x07\x0d\x04\x20\x03\x20\x04\x10\xe4\x02\x20\x00\x28\x02\x10\x41\x2c\x47\x0d\x01\x20\x00\x10\x80\x07\x0d\x08\x20\x00\x28\x02\x10\x21\x07\x0b\x02\x40\x20\x07\x41\xfb\x00\x46\x0d\x00\x20\x07\x41\x2a\x47\x0d\x01\x20\x00\x10\x80\x07\x0d\x08\x02\x40\x20\x00\x41\xf9\x00\x10\x92\x07\x0d\x00\x20\x00\x41\xcd\xcf\x02\x41\x00\x10\x8a\x07\x41\x7f\x0f\x0b\x20\x00\x10\x80\x07\x0d\x08\x02\x40\x20\x00\x28\x02\x10\x22\x04\x41\x83\x7f\x46\x0d\x00\x20\x04\x41\xd3\x00\x6a\x41\x2e\x49\x0d\x00\x20\x00\x41\xa3\xcf\x02\x41\x00\x10\x8a\x07\x41\x7f\x0f\x0b\x20\x03\x20\x00\x41\x20\x6a\x28\x02\x00\x10\xd9\x03\x21\x04\x41\xfd\x00\x21\x07\x20\x00\x10\x80\x07\x0d\x04\x41\xfd\x00\x21\x07\x20\x00\x20\x05\x20\x04\x41\xfd\x00\x10\xa2\x07\x0d\x04\x20\x03\x20\x04\x10\xe4\x02\x0c\x01\x0b\x20\x00\x10\x80\x07\x0d\x07\x02\x40\x03\x40\x20\x00\x28\x02\x10\x22\x04\x41\xfd\x00\x46\x0d\x01\x02\x40\x20\x04\x41\x83\x7f\x46\x0d\x00\x20\x04\x41\xd3\x00\x6a\x41\x2e\x49\x0d\x00\x20\x00\x41\xa3\xcf\x02\x41\x00\x10\x8a\x07\x41\x7f\x0f\x0b\x20\x03\x20\x00\x28\x02\x20\x10\xd9\x03\x21\x07\x41\x00\x21\x04\x20\x00\x10\x80\x07\x0d\x05\x02\x40\x02\x40\x20\x00\x41\xf9\x00\x10\x92\x07\x45\x0d\x00\x20\x00\x10\x80\x07\x0d\x07\x02\x40\x20\x00\x28\x02\x10\x22\x04\x41\x83\x7f\x46\x0d\x00\x20\x04\x41\xd3\x00\x6a\x41\x2e\x49\x0d\x00\x41\x00\x21\x04\x20\x00\x41\xa3\xcf\x02\x41\x00\x10\x8a\x07\x0c\x08\x0b\x20\x03\x20\x00\x28\x02\x20\x10\xd9\x03\x21\x04\x20\x00\x10\x80\x07\x45\x0d\x01\x0c\x07\x0b\x20\x03\x20\x07\x10\xd9\x03\x21\x04\x0b\x20\x00\x20\x05\x20\x04\x20\x07\x10\xa2\x07\x0d\x05\x20\x03\x20\x04\x10\xe4\x02\x20\x03\x20\x07\x10\xe4\x02\x20\x00\x28\x02\x10\x41\x2c\x47\x0d\x01\x20\x00\x10\x80\x07\x45\x0d\x00\x0c\x09\x0b\x00\x0b\x20\x00\x41\xfd\x00\x10\x98\x07\x0d\x07\x0b\x20\x00\x10\x99\x07\x22\x07\x45\x0d\x06\x0b\x20\x03\x20\x05\x20\x07\x10\x9a\x07\x21\x04\x20\x03\x20\x07\x10\xe4\x02\x20\x04\x41\x00\x48\x0d\x05\x20\x02\x41\x0c\x6c\x41\x08\x6a\x21\x03\x20\x05\x28\x02\x38\x21\x07\x02\x40\x03\x40\x20\x02\x20\x07\x4e\x0d\x01\x20\x05\x28\x02\x34\x20\x03\x6a\x20\x04\x36\x02\x00\x20\x03\x41\x0c\x6a\x21\x03\x20\x02\x41\x01\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x20\x00\x10\x9f\x07\x45\x0d\x04\x0c\x05\x0b\x41\x7f\x21\x01\x20\x00\x41\x07\x10\xa3\x07\x0d\x04\x0c\x03\x0b\x20\x03\x20\x04\x10\xe4\x02\x20\x03\x20\x07\x10\xe4\x02\x41\x7f\x0f\x0b\x20\x02\x20\x05\x10\xe4\x02\x41\x7f\x0f\x0b\x20\x00\x0d\x01\x0b\x41\x00\x21\x01\x0b\x20\x01\x0b\x9f\x01\x01\x02\x7f\x02\x40\x02\x40\x02\x40\x20\x01\x28\x02\x00\x22\x02\x41\x80\x01\x6a\x22\x03\x41\x04\x4d\x0d\x00\x20\x02\x41\xab\x7f\x47\x0d\x01\x0c\x02\x0b\x02\x40\x02\x40\x02\x40\x20\x03\x0e\x05\x00\x01\x01\x04\x02\x00\x0b\x20\x00\x28\x02\x00\x20\x01\x29\x03\x10\x10\xcd\x01\x0f\x0b\x20\x00\x28\x02\x00\x20\x01\x29\x03\x10\x10\xcd\x01\x0f\x0b\x20\x00\x28\x02\x00\x20\x01\x29\x03\x10\x10\xcd\x01\x20\x00\x28\x02\x00\x20\x01\x41\x18\x6a\x29\x03\x00\x10\xcd\x01\x0f\x0b\x02\x40\x20\x02\x41\xd3\x00\x6a\x41\x2d\x4b\x0d\x00\x20\x00\x28\x02\x00\x20\x01\x28\x02\x10\x10\xe4\x02\x0b\x0f\x0b\x20\x00\x28\x02\x00\x20\x01\x28\x02\x10\x10\xe4\x02\x0b\xed\x05\x01\x03\x7f\x20\x01\x41\x10\x6a\x21\x02\x20\x01\x41\x14\x6a\x28\x02\x00\x21\x03\x02\x40\x03\x40\x20\x03\x20\x02\x46\x0d\x01\x20\x03\x41\x68\x6a\x21\x04\x20\x03\x28\x02\x04\x21\x03\x20\x00\x20\x04\x10\x85\x07\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x10\x20\x01\x28\x02\x80\x02\x20\x01\x41\x84\x02\x6a\x28\x02\x00\x20\x01\x28\x02\xa0\x02\x10\xdb\x02\x20\x01\x41\x80\x02\x6a\x10\xa6\x07\x20\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x01\x28\x02\xcc\x02\x20\x03\x28\x02\x04\x11\x00\x00\x20\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x01\x28\x02\xa4\x02\x20\x03\x28\x02\x04\x11\x00\x00\x20\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x01\x28\x02\xd8\x02\x20\x03\x28\x02\x04\x11\x00\x00\x41\x00\x21\x04\x41\x00\x21\x03\x02\x40\x03\x40\x20\x01\x28\x02\xb4\x02\x21\x02\x20\x03\x20\x01\x28\x02\xb8\x02\x4e\x0d\x01\x20\x00\x20\x02\x20\x04\x6a\x29\x03\x00\x10\xcd\x01\x20\x04\x41\x08\x6a\x21\x04\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x02\x20\x03\x28\x02\x04\x11\x00\x00\x20\x00\x20\x01\x28\x02\x70\x10\xe4\x02\x41\x00\x21\x04\x41\x00\x21\x03\x02\x40\x03\x40\x20\x01\x28\x02\x74\x21\x02\x20\x03\x20\x01\x28\x02\x7c\x4e\x0d\x01\x20\x00\x20\x02\x20\x04\x6a\x28\x02\x00\x10\xe4\x02\x20\x04\x41\x10\x6a\x21\x04\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x02\x20\x03\x28\x02\x04\x11\x00\x00\x41\x00\x21\x04\x41\x00\x21\x03\x02\x40\x03\x40\x20\x01\x28\x02\x80\x01\x21\x02\x20\x03\x20\x01\x28\x02\x88\x01\x4e\x0d\x01\x20\x00\x20\x02\x20\x04\x6a\x28\x02\x00\x10\xe4\x02\x20\x04\x41\x10\x6a\x21\x04\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x02\x20\x03\x28\x02\x04\x11\x00\x00\x41\x00\x21\x03\x41\x0c\x21\x04\x02\x40\x03\x40\x20\x01\x28\x02\xfc\x01\x21\x02\x20\x03\x20\x01\x28\x02\xf4\x01\x4e\x0d\x01\x20\x00\x20\x02\x20\x04\x6a\x28\x02\x00\x10\xe4\x02\x20\x04\x41\x10\x6a\x21\x04\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x02\x20\x03\x28\x02\x04\x11\x00\x00\x41\x00\x21\x03\x41\x04\x21\x04\x02\x40\x03\x40\x20\x03\x20\x01\x28\x02\xc0\x02\x4e\x0d\x01\x20\x00\x20\x01\x28\x02\xc8\x02\x20\x04\x6a\x28\x02\x00\x10\xe4\x02\x20\x04\x41\x08\x6a\x21\x04\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x01\x28\x02\xc8\x02\x20\x03\x28\x02\x04\x11\x00\x00\x02\x40\x20\x01\x28\x02\xcc\x01\x22\x03\x20\x01\x41\xd0\x01\x6a\x46\x0d\x00\x20\x00\x28\x02\x10\x22\x04\x41\x10\x6a\x20\x03\x20\x04\x28\x02\x04\x11\x00\x00\x0b\x20\x00\x20\x01\x28\x02\xec\x02\x10\xe4\x02\x20\x01\x41\xf4\x02\x6a\x10\xa6\x07\x20\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x01\x28\x02\x8c\x03\x20\x03\x28\x02\x04\x11\x00\x00\x02\x40\x20\x01\x28\x02\x04\x45\x0d\x00\x20\x01\x41\x1c\x6a\x22\x03\x28\x02\x00\x22\x04\x20\x01\x28\x02\x18\x22\x02\x36\x02\x00\x20\x02\x20\x04\x36\x02\x04\x20\x01\x41\x00\x36\x02\x18\x20\x03\x41\x00\x36\x02\x00\x0b\x20\x00\x28\x02\x10\x22\x00\x41\x10\x6a\x20\x01\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x55\x01\x02\x7f\x20\x00\x28\x02\x40\x22\x02\x41\x80\x02\x6a\x21\x03\x02\x40\x20\x02\x28\x02\x9c\x02\x20\x00\x28\x02\x04\x46\x0d\x00\x20\x03\x41\xc2\x01\x10\xcd\x02\x20\x03\x20\x00\x28\x02\x04\x10\xa4\x07\x20\x02\x20\x00\x28\x02\x04\x36\x02\x9c\x02\x0b\x20\x02\x20\x02\x41\x84\x02\x6a\x28\x02\x00\x36\x02\x98\x02\x20\x03\x20\x01\x10\xcd\x02\x0b\x28\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x20\x02\x20\x01\x3b\x01\x0e\x20\x00\x20\x02\x41\x0e\x6a\x41\x02\x10\xa5\x07\x1a\x20\x02\x41\x10\x6a\x24\x00\x0b\xae\x80\x01\x02\x12\x7f\x01\x7e\x23\x00\x41\xe0\x06\x6b\x22\x02\x24\x00\x20\x01\x28\x02\xc8\x01\x21\x03\x41\x00\x21\x04\x41\x04\x21\x05\x02\x40\x03\x40\x20\x04\x20\x03\x4e\x0d\x01\x20\x01\x28\x02\xcc\x01\x20\x05\x6a\x41\x7f\x36\x02\x00\x20\x05\x41\x08\x6a\x21\x05\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x02\x40\x20\x01\x28\x02\x3c\x45\x0d\x00\x20\x01\x28\x02\xcc\x01\x41\x0c\x6a\x41\x7e\x36\x02\x00\x0b\x20\x01\x28\x02\x7c\x21\x06\x41\x00\x21\x04\x41\x04\x21\x05\x02\x40\x02\x40\x02\x40\x03\x40\x02\x40\x20\x04\x20\x06\x48\x0d\x00\x41\x02\x21\x04\x41\x14\x21\x05\x02\x40\x03\x40\x02\x40\x20\x04\x20\x03\x48\x0d\x00\x41\x00\x21\x04\x41\x08\x21\x05\x03\x40\x20\x04\x20\x06\x4e\x0d\x03\x02\x40\x20\x01\x28\x02\x74\x20\x05\x6a\x22\x03\x28\x02\x00\x41\x7f\x4a\x0d\x00\x20\x03\x41\x7c\x6a\x28\x02\x00\x22\x07\x41\x02\x48\x0d\x00\x20\x03\x20\x01\x28\x02\xcc\x01\x22\x08\x20\x08\x20\x07\x41\x03\x74\x6a\x28\x02\x00\x41\x03\x74\x6a\x28\x02\x04\x36\x02\x00\x0b\x20\x05\x41\x10\x6a\x21\x05\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x02\x40\x20\x01\x28\x02\xcc\x01\x22\x08\x20\x05\x6a\x22\x07\x28\x02\x00\x41\x7f\x4a\x0d\x00\x20\x07\x20\x08\x20\x07\x41\x7c\x6a\x28\x02\x00\x41\x03\x74\x6a\x28\x02\x04\x36\x02\x00\x0b\x20\x05\x41\x08\x6a\x21\x05\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x02\x40\x02\x40\x20\x01\x28\x02\x44\x45\x0d\x00\x02\x40\x20\x01\x28\x02\x20\x0d\x00\x20\x01\x2d\x00\x6e\x41\x01\x71\x0d\x00\x20\x01\x20\x00\x20\x01\x41\xd2\x00\x10\x82\x07\x36\x02\x90\x01\x20\x01\x28\x02\x3c\x45\x0d\x00\x20\x01\x20\x00\x20\x01\x41\xd3\x00\x10\x82\x07\x36\x02\x94\x01\x0b\x02\x40\x20\x01\x28\x02\x4c\x22\x08\x45\x0d\x00\x02\x40\x20\x01\x28\x02\xa8\x01\x41\x7f\x4a\x0d\x00\x20\x01\x20\x00\x20\x01\x10\xa7\x07\x36\x02\xa8\x01\x0b\x02\x40\x20\x01\x28\x02\xac\x01\x41\x7f\x4a\x0d\x00\x20\x01\x20\x00\x20\x01\x41\xf1\x00\x10\x82\x07\x36\x02\xac\x01\x0b\x02\x40\x20\x01\x28\x02\x60\x45\x0d\x00\x20\x01\x28\x02\xb0\x01\x41\x7f\x4a\x0d\x00\x20\x01\x20\x00\x20\x01\x41\xf2\x00\x10\x82\x07\x36\x02\xb0\x01\x0b\x20\x01\x28\x02\x30\x45\x0d\x00\x20\x01\x28\x02\xb4\x01\x41\x7f\x4a\x0d\x00\x20\x01\x20\x00\x20\x01\x41\xf3\x00\x10\x82\x07\x36\x02\xb4\x01\x0b\x02\x40\x20\x01\x28\x02\x48\x22\x09\x45\x0d\x00\x20\x00\x20\x01\x10\xa8\x07\x1a\x20\x01\x28\x02\x3c\x45\x0d\x00\x20\x01\x2d\x00\x6e\x41\x01\x71\x0d\x00\x20\x01\x28\x02\x9c\x01\x41\x7f\x4a\x0d\x00\x20\x01\x28\x02\xcc\x01\x41\x0c\x6a\x21\x04\x02\x40\x03\x40\x20\x04\x28\x02\x00\x22\x04\x41\x00\x48\x0d\x01\x20\x01\x28\x02\x74\x20\x04\x41\x04\x74\x6a\x22\x04\x28\x02\x04\x41\x01\x47\x0d\x01\x20\x04\x28\x02\x00\x41\xcd\x00\x46\x0d\x02\x20\x04\x41\x08\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x00\x20\x01\x41\xcd\x00\x10\x82\x07\x22\x04\x41\x00\x48\x0d\x00\x20\x01\x28\x02\xcc\x01\x41\x0c\x6a\x22\x05\x28\x02\x00\x21\x03\x20\x05\x20\x04\x36\x02\x00\x20\x01\x28\x02\x74\x20\x04\x41\x04\x74\x6a\x22\x05\x20\x05\x28\x02\x0c\x41\x02\x72\x36\x02\x0c\x20\x05\x41\x01\x36\x02\x04\x20\x05\x20\x03\x36\x02\x08\x20\x01\x20\x04\x36\x02\x9c\x01\x0b\x02\x40\x20\x01\x28\x02\x2c\x45\x0d\x00\x20\x01\x28\x02\x70\x22\x04\x45\x0d\x00\x20\x00\x20\x01\x20\x04\x10\xa9\x07\x1a\x0b\x02\x40\x02\x40\x20\x01\x28\x02\x20\x45\x0d\x00\x20\x01\x21\x05\x0c\x01\x0b\x20\x01\x21\x05\x20\x01\x28\x02\xc0\x02\x0d\x02\x0b\x03\x40\x20\x05\x28\x02\x04\x22\x04\x45\x0d\x01\x20\x05\x28\x02\x0c\x21\x05\x02\x40\x20\x08\x0d\x00\x02\x40\x20\x04\x28\x02\x4c\x0d\x00\x41\x00\x21\x08\x0c\x01\x0b\x02\x40\x20\x04\x28\x02\xa8\x01\x41\x7f\x4a\x0d\x00\x20\x04\x20\x00\x20\x04\x10\xa7\x07\x36\x02\xa8\x01\x0b\x02\x40\x20\x04\x28\x02\xac\x01\x41\x7f\x4a\x0d\x00\x20\x04\x20\x00\x20\x04\x41\xf1\x00\x10\x82\x07\x36\x02\xac\x01\x0b\x02\x40\x20\x04\x28\x02\x60\x45\x0d\x00\x20\x04\x28\x02\xb0\x01\x41\x7f\x4a\x0d\x00\x20\x04\x20\x00\x20\x04\x41\xf2\x00\x10\x82\x07\x36\x02\xb0\x01\x0b\x41\x01\x21\x08\x20\x04\x28\x02\x30\x45\x0d\x00\x20\x04\x28\x02\xb4\x01\x41\x7f\x4a\x0d\x00\x20\x04\x20\x00\x20\x04\x41\xf3\x00\x10\x82\x07\x36\x02\xb4\x01\x0b\x02\x40\x20\x09\x0d\x00\x02\x40\x20\x04\x28\x02\x48\x0d\x00\x41\x00\x21\x09\x0c\x01\x0b\x20\x00\x20\x04\x10\xa8\x07\x1a\x41\x01\x21\x09\x0b\x02\x40\x20\x04\x28\x02\x2c\x45\x0d\x00\x20\x04\x28\x02\x70\x22\x03\x45\x0d\x00\x20\x00\x20\x04\x20\x03\x10\xa9\x07\x1a\x0b\x20\x04\x28\x02\xcc\x01\x20\x05\x41\x03\x74\x6a\x41\x04\x6a\x21\x05\x02\x40\x03\x40\x20\x05\x28\x02\x00\x22\x06\x41\x00\x48\x0d\x01\x20\x04\x28\x02\x74\x20\x06\x41\x04\x74\x6a\x22\x05\x20\x05\x28\x02\x0c\x22\x03\x41\x04\x72\x36\x02\x0c\x20\x00\x20\x01\x20\x04\x41\x00\x20\x06\x20\x05\x28\x02\x00\x20\x03\x41\x01\x71\x20\x03\x41\x01\x76\x41\x01\x71\x20\x03\x41\x03\x76\x41\x0f\x71\x10\xaa\x07\x1a\x20\x05\x41\x08\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x02\x40\x02\x40\x20\x06\x41\x7e\x46\x0d\x00\x41\x00\x21\x03\x41\x00\x21\x05\x03\x40\x02\x40\x20\x05\x20\x04\x28\x02\x88\x01\x48\x0d\x00\x41\x04\x21\x03\x41\x00\x21\x05\x03\x40\x20\x05\x20\x04\x28\x02\x7c\x4e\x0d\x04\x02\x40\x20\x04\x28\x02\x74\x20\x03\x6a\x22\x06\x28\x02\x00\x0d\x00\x20\x06\x41\x7c\x6a\x28\x02\x00\x22\x06\x45\x0d\x00\x20\x06\x41\xd1\x00\x46\x0d\x00\x20\x00\x20\x01\x20\x04\x41\x00\x20\x05\x20\x06\x41\x00\x41\x00\x41\x00\x10\xaa\x07\x1a\x0b\x20\x03\x41\x10\x6a\x21\x03\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x02\x40\x20\x04\x28\x02\x80\x01\x20\x03\x6a\x28\x02\x00\x22\x06\x45\x0d\x00\x20\x00\x20\x01\x20\x04\x41\x01\x20\x05\x20\x06\x41\x00\x41\x00\x41\x00\x10\xaa\x07\x1a\x0b\x20\x03\x41\x10\x6a\x21\x03\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x41\x00\x21\x03\x41\x00\x21\x05\x03\x40\x20\x05\x20\x04\x28\x02\x7c\x4e\x0d\x01\x02\x40\x20\x04\x28\x02\x74\x20\x03\x6a\x22\x06\x41\x04\x6a\x28\x02\x00\x0d\x00\x20\x06\x10\xfe\x06\x45\x0d\x00\x20\x00\x20\x01\x20\x04\x41\x00\x20\x05\x20\x06\x28\x02\x00\x41\x00\x41\x00\x41\x00\x10\xaa\x07\x1a\x0b\x20\x03\x41\x10\x6a\x21\x03\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x04\x21\x05\x20\x04\x28\x02\x20\x45\x0d\x00\x41\x00\x21\x06\x41\x00\x21\x05\x03\x40\x02\x40\x20\x05\x20\x04\x28\x02\xc0\x02\x48\x0d\x00\x20\x04\x21\x05\x0c\x02\x0b\x20\x00\x20\x01\x20\x04\x41\x00\x20\x04\x28\x02\xc8\x02\x20\x06\x6a\x22\x07\x2d\x00\x00\x22\x03\x41\x01\x76\x41\x01\x71\x20\x05\x20\x07\x41\x04\x6a\x28\x02\x00\x20\x03\x41\x02\x76\x41\x01\x71\x20\x03\x41\x03\x76\x41\x01\x71\x20\x03\x41\x04\x76\x10\xab\x07\x1a\x20\x06\x41\x08\x6a\x21\x06\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x00\x0b\x20\x01\x28\x02\x94\x03\x22\x09\x45\x0d\x03\x41\x0c\x21\x05\x41\x00\x21\x04\x02\x40\x03\x40\x02\x40\x20\x04\x20\x01\x28\x02\xf4\x01\x48\x0d\x00\x41\x00\x21\x08\x03\x40\x20\x08\x20\x09\x28\x02\x20\x4e\x0d\x07\x02\x40\x20\x09\x28\x02\x1c\x20\x08\x41\x14\x6c\x6a\x22\x0a\x28\x02\x08\x0d\x00\x20\x0a\x28\x02\x0c\x21\x06\x20\x01\x28\x02\xc0\x02\x21\x07\x41\x7f\x21\x05\x41\x04\x21\x04\x03\x40\x20\x05\x41\x01\x6a\x22\x05\x20\x07\x4e\x0d\x05\x20\x01\x28\x02\xc8\x02\x20\x04\x6a\x21\x03\x20\x04\x41\x08\x6a\x21\x04\x20\x03\x28\x02\x00\x20\x06\x47\x0d\x00\x0b\x20\x0a\x20\x05\x36\x02\x00\x0b\x20\x08\x41\x01\x6a\x21\x08\x0c\x00\x0b\x00\x0b\x20\x00\x20\x01\x41\x01\x41\x00\x20\x04\x20\x01\x28\x02\xfc\x01\x20\x05\x6a\x22\x03\x28\x02\x00\x20\x03\x41\x78\x6a\x2d\x00\x00\x22\x03\x41\x02\x76\x41\x01\x71\x20\x03\x41\x01\x76\x41\x01\x71\x41\x00\x10\xac\x07\x21\x03\x20\x05\x41\x10\x6a\x21\x05\x20\x04\x41\x01\x6a\x21\x04\x20\x03\x41\x00\x4e\x0d\x00\x0c\x06\x0b\x00\x0b\x20\x00\x20\x06\x41\x9c\xc9\x02\x10\xdf\x03\x0c\x04\x0b\x41\xe1\xc8\x02\x41\xae\xb7\x01\x41\xed\xec\x01\x41\x89\xc9\x02\x10\x4a\x00\x0b\x20\x01\x28\x02\x74\x20\x05\x6a\x22\x07\x41\x04\x6a\x20\x01\x28\x02\xcc\x01\x20\x07\x28\x02\x00\x41\x03\x74\x6a\x22\x07\x28\x02\x04\x36\x02\x00\x20\x07\x20\x04\x36\x02\x04\x20\x05\x41\x10\x6a\x21\x05\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x01\x41\x10\x6a\x21\x06\x20\x01\x41\x14\x6a\x28\x02\x00\x21\x04\x02\x40\x02\x40\x03\x40\x20\x04\x20\x06\x46\x0d\x01\x20\x04\x28\x02\x04\x21\x03\x20\x04\x41\x70\x6a\x28\x02\x00\x21\x05\x20\x00\x20\x04\x41\x68\x6a\x10\x88\x07\x22\x14\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x05\x41\x7f\x4c\x0d\x02\x20\x01\x28\x02\xb4\x02\x20\x05\x41\x03\x74\x6a\x20\x14\x37\x03\x00\x20\x03\x21\x04\x0c\x00\x0b\x00\x0b\x20\x02\x41\xc0\x06\x6a\x41\x08\x6a\x42\x00\x37\x03\x00\x20\x02\x42\x00\x37\x03\xc0\x06\x20\x02\x41\xef\x00\x36\x02\xd0\x06\x20\x02\x20\x01\x28\x02\x80\x02\x22\x0b\x36\x02\x98\x06\x20\x02\x20\x01\x41\x84\x02\x6a\x28\x02\x00\x22\x0c\x36\x02\x9c\x06\x20\x02\x20\x00\x28\x02\x10\x36\x02\xd4\x06\x20\x01\x41\x80\x02\x6a\x21\x0d\x41\x00\x21\x09\x02\x40\x03\x40\x02\x40\x20\x09\x20\x01\x28\x02\xf4\x01\x48\x0d\x00\x41\x00\x21\x0e\x41\x00\x21\x08\x0c\x02\x0b\x20\x01\x28\x02\xfc\x01\x20\x09\x41\x04\x74\x6a\x22\x0a\x41\x0c\x6a\x21\x06\x20\x01\x28\x02\xc0\x02\x21\x07\x41\x00\x21\x05\x41\x00\x21\x04\x02\x40\x02\x40\x03\x40\x20\x04\x20\x07\x4e\x0d\x01\x02\x40\x20\x01\x28\x02\xc8\x02\x20\x05\x6a\x22\x08\x41\x04\x6a\x28\x02\x00\x22\x03\x20\x06\x28\x02\x00\x47\x0d\x00\x20\x01\x28\x02\x24\x41\x02\x47\x0d\x03\x20\x08\x2d\x00\x00\x41\x08\x71\x45\x0d\x03\x20\x02\x41\xc0\x06\x6a\x41\x30\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x00\x20\x06\x28\x02\x00\x10\xd9\x03\x10\xa4\x07\x20\x02\x41\xc0\x06\x6a\x41\x01\x10\xcd\x02\x0c\x03\x0b\x20\x03\x41\x7e\x71\x41\xd2\x00\x46\x0d\x02\x20\x05\x41\x08\x6a\x21\x05\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x02\x41\xc0\x06\x6a\x41\x3f\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x00\x20\x06\x28\x02\x00\x10\xd9\x03\x10\xa4\x07\x20\x02\x41\xc0\x06\x6a\x20\x0a\x2d\x00\x04\x41\x06\x74\x22\x04\x41\xc0\x00\x72\x20\x04\x41\x80\x01\x71\x20\x0a\x28\x02\x00\x41\x7f\x4a\x1b\x41\xc0\x01\x71\x10\xcd\x02\x0b\x20\x09\x41\x01\x6a\x21\x09\x0c\x00\x0b\x00\x0b\x02\x40\x03\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x08\x22\x04\x20\x0c\x4e\x0d\x00\x20\x04\x20\x0b\x20\x04\x6a\x22\x07\x2d\x00\x00\x22\x05\x41\x02\x74\x41\x90\xb9\x01\x6a\x2d\x00\x00\x22\x0a\x6a\x21\x08\x02\x40\x20\x05\x41\xcd\x7e\x6a\x22\x03\x41\x0f\x4d\x0d\x00\x20\x05\x41\x6f\x6a\x22\x04\x41\x1f\x4b\x0d\x09\x41\x01\x20\x04\x74\x41\x80\x80\xd0\x8c\x7c\x71\x0d\x0a\x02\x40\x20\x04\x45\x0d\x00\x20\x04\x41\x05\x47\x0d\x0a\x20\x02\x41\x7f\x36\x02\x18\x20\x02\x42\xc9\xfa\x80\x80\xe0\x01\x37\x03\x10\x20\x02\x41\x98\x06\x6a\x20\x08\x20\x02\x41\x10\x6a\x10\xad\x07\x45\x0d\x0d\x20\x02\x41\xc0\x06\x6a\x20\x02\x2d\x00\xa8\x06\x10\xcd\x02\x20\x02\x28\x02\xa0\x06\x21\x08\x20\x02\x28\x02\xa4\x06\x22\x04\x41\x7f\x46\x0d\x0e\x20\x04\x20\x0e\x46\x0d\x0e\x20\x01\x20\x01\x28\x02\xdc\x02\x41\x01\x6a\x36\x02\xdc\x02\x20\x02\x41\xc0\x06\x6a\x41\xc2\x01\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x04\x10\xa4\x07\x20\x04\x21\x0e\x0c\x0e\x0b\x20\x02\x41\x7f\x36\x02\x48\x20\x02\x42\xe9\xd4\x81\x80\xe0\x01\x37\x03\x40\x20\x02\x41\x98\x06\x6a\x20\x08\x20\x02\x41\xc0\x00\x6a\x10\xad\x07\x45\x0d\x0c\x02\x40\x20\x02\x28\x02\xb0\x06\x22\x0f\x41\x00\x48\x0d\x00\x20\x0f\x20\x01\x28\x02\xac\x02\x4e\x0d\x00\x20\x02\x28\x02\xa4\x06\x21\x10\x20\x02\x28\x02\xa0\x06\x21\x11\x20\x02\x28\x02\xa8\x06\x21\x12\x20\x0f\x21\x05\x03\x40\x20\x01\x28\x02\x80\x02\x21\x03\x20\x01\x28\x02\xa4\x02\x21\x13\x41\x00\x21\x09\x02\x40\x03\x40\x20\x09\x41\x14\x46\x0d\x01\x20\x13\x20\x05\x41\x14\x6c\x6a\x28\x02\x04\x21\x04\x03\x40\x02\x40\x20\x03\x20\x04\x6a\x22\x06\x2d\x00\x00\x22\x05\x41\xb6\x01\x46\x0d\x00\x20\x05\x41\xc2\x01\x46\x0d\x00\x20\x05\x41\xeb\x00\x47\x0d\x03\x20\x09\x41\x01\x6a\x21\x09\x20\x06\x41\x01\x6a\x28\x00\x00\x21\x05\x0c\x02\x0b\x20\x04\x41\x05\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x00\x0b\x20\x02\x42\x8e\x80\x80\x80\x70\x37\x03\x38\x20\x02\x20\x12\x36\x02\x34\x20\x02\x41\x11\x36\x02\x30\x02\x40\x20\x02\x41\x98\x06\x6a\x20\x04\x20\x02\x41\x30\x6a\x10\xad\x07\x45\x0d\x00\x20\x02\x28\x02\xb0\x06\x21\x05\x0c\x01\x0b\x0b\x20\x02\x41\x7f\x36\x02\x24\x20\x02\x20\x12\x36\x02\x20\x20\x02\x41\x98\x06\x6a\x20\x04\x20\x02\x41\x20\x6a\x10\xad\x07\x45\x0d\x0d\x20\x01\x20\x01\x28\x02\xd0\x02\x41\x01\x6a\x36\x02\xd0\x02\x20\x01\x20\x0f\x41\x7f\x10\xae\x07\x1a\x20\x01\x20\x02\x28\x02\xb0\x06\x22\x04\x41\x01\x10\xae\x07\x1a\x20\x02\x41\xc0\x06\x6a\x20\x12\x41\xff\x01\x71\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x04\x10\xa4\x07\x20\x11\x21\x08\x20\x10\x41\x7f\x46\x0d\x0e\x20\x11\x21\x08\x20\x10\x20\x0e\x46\x0d\x0e\x20\x01\x20\x01\x28\x02\xdc\x02\x41\x01\x6a\x36\x02\xdc\x02\x20\x02\x41\xc0\x06\x6a\x41\xc2\x01\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x10\x10\xa4\x07\x20\x10\x21\x0e\x20\x11\x21\x08\x0c\x0e\x0b\x41\xf3\xca\x02\x41\xae\xb7\x01\x41\x95\xf3\x01\x41\xe1\xca\x02\x10\x4a\x00\x0b\x20\x03\x0e\x10\x0c\x03\x02\x04\x07\x07\x07\x07\x06\x07\x07\x05\x05\x05\x0c\x01\x0c\x0b\x20\x0d\x10\xa6\x07\x20\x0d\x41\x10\x6a\x20\x02\x41\xc0\x06\x6a\x41\x10\x6a\x29\x03\x00\x37\x02\x00\x20\x0d\x41\x08\x6a\x20\x02\x41\xc0\x06\x6a\x41\x08\x6a\x22\x04\x29\x03\x00\x37\x02\x00\x20\x0d\x20\x02\x29\x03\xc0\x06\x37\x02\x00\x02\x40\x20\x01\x41\x8c\x02\x6a\x28\x02\x00\x0d\x00\x20\x04\x42\x00\x37\x03\x00\x20\x02\x42\x00\x37\x03\xc0\x06\x20\x02\x41\xef\x00\x36\x02\xd0\x06\x20\x02\x20\x01\x28\x02\xf0\x02\x36\x02\xd8\x06\x20\x02\x20\x01\x28\x02\x80\x02\x22\x0a\x36\x02\x98\x06\x20\x02\x20\x01\x28\x02\x84\x02\x22\x08\x36\x02\x9c\x06\x20\x02\x20\x00\x28\x02\x10\x36\x02\xd4\x06\x20\x01\x28\x02\xa4\x02\x21\x0b\x02\x40\x20\x01\x28\x02\xd0\x02\x22\x04\x45\x0d\x00\x20\x01\x20\x01\x28\x02\x00\x20\x04\x41\x04\x74\x10\xe2\x03\x22\x04\x36\x02\xcc\x02\x20\x04\x45\x0d\x10\x0b\x02\x40\x20\x01\x28\x02\xdc\x02\x22\x04\x45\x0d\x00\x20\x01\x2d\x00\x6e\x41\x02\x71\x0d\x00\x20\x01\x20\x01\x28\x02\x00\x20\x04\x41\x03\x74\x10\xe2\x03\x22\x04\x36\x02\xd8\x02\x20\x04\x45\x0d\x10\x20\x01\x41\x00\x36\x02\xe8\x02\x20\x01\x20\x01\x28\x02\xf0\x02\x36\x02\xe4\x02\x0b\x02\x40\x20\x01\x28\x02\xb4\x01\x41\x00\x48\x0d\x00\x20\x02\x41\xc0\x06\x6a\x41\x0c\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\x04\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\xd9\x00\x20\x01\x28\x02\xb4\x01\x10\xaf\x07\x0b\x02\x40\x20\x01\x28\x02\xb0\x01\x41\x00\x48\x0d\x00\x20\x02\x41\xc0\x06\x6a\x41\x0c\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\x02\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\xd9\x00\x20\x01\x28\x02\xb0\x01\x10\xaf\x07\x0b\x02\x40\x20\x01\x28\x02\xac\x01\x41\x00\x48\x0d\x00\x20\x02\x41\xc0\x06\x6a\x41\x0c\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\x03\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\xd9\x00\x20\x01\x28\x02\xac\x01\x10\xaf\x07\x0b\x02\x40\x20\x01\x28\x02\xa8\x01\x41\x00\x48\x0d\x00\x02\x40\x20\x01\x28\x02\x60\x45\x0d\x00\x20\x02\x41\xc0\x06\x6a\x41\xe1\x00\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x01\x2f\x01\xa8\x01\x10\x87\x07\x0c\x01\x0b\x20\x02\x41\xc0\x06\x6a\x41\x08\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\xd9\x00\x20\x01\x28\x02\xa8\x01\x10\xaf\x07\x0b\x02\x40\x20\x01\x28\x02\x98\x01\x41\x00\x48\x0d\x00\x41\x00\x21\x04\x02\x40\x20\x01\x2d\x00\x6e\x41\x01\x71\x0d\x00\x20\x01\x28\x02\x38\x41\x00\x47\x21\x04\x0b\x20\x02\x41\xc0\x06\x6a\x41\x0c\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x04\x10\xcd\x02\x02\x40\x20\x01\x28\x02\x9c\x01\x22\x04\x41\x00\x48\x0d\x00\x20\x02\x41\xc0\x06\x6a\x41\xda\x00\x20\x04\x10\xaf\x07\x0b\x20\x02\x41\xc0\x06\x6a\x41\xd9\x00\x20\x01\x28\x02\x98\x01\x10\xaf\x07\x0b\x02\x40\x20\x01\x28\x02\xa0\x01\x41\x00\x48\x0d\x00\x20\x02\x41\xc0\x06\x6a\x41\x0c\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\x02\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\xd9\x00\x20\x01\x28\x02\xa0\x01\x10\xaf\x07\x0b\x02\x40\x20\x01\x28\x02\x90\x01\x41\x00\x48\x0d\x00\x20\x02\x41\xc0\x06\x6a\x41\x0c\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\x05\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\xd9\x00\x20\x01\x28\x02\x90\x01\x10\xaf\x07\x0b\x02\x40\x20\x01\x28\x02\x94\x01\x41\x00\x48\x0d\x00\x20\x02\x41\xc0\x06\x6a\x41\x0c\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\x05\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\xd9\x00\x20\x01\x28\x02\x94\x01\x10\xaf\x07\x0b\x20\x02\x41\xd8\x03\x6a\x21\x0f\x41\x00\x21\x04\x02\x40\x02\x40\x03\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x04\x20\x08\x48\x0d\x00\x20\x0b\x41\x10\x6a\x21\x04\x20\x01\x28\x02\xac\x02\x21\x06\x41\x7f\x21\x05\x03\x40\x20\x05\x41\x01\x6a\x22\x05\x20\x06\x4e\x0d\x02\x20\x04\x28\x02\x00\x21\x03\x20\x04\x41\x14\x6a\x21\x04\x20\x03\x45\x0d\x00\x0b\x41\xdf\xcb\x02\x41\xae\xb7\x01\x41\xb5\xfb\x01\x41\x96\xcb\x02\x10\x4a\x00\x0b\x20\x04\x20\x0a\x20\x04\x6a\x22\x06\x2d\x00\x00\x22\x05\x41\x02\x74\x41\x90\xb9\x01\x6a\x2d\x00\x00\x22\x09\x6a\x21\x03\x20\x05\x41\xa8\x7f\x6a\x22\x07\x41\x1f\x4d\x0d\x02\x20\x05\x41\x7f\x6a\x22\x07\x41\x14\x4d\x0d\x01\x20\x05\x41\x5e\x6a\x22\x07\x41\x1f\x4b\x0d\x15\x02\x40\x41\x01\x20\x07\x74\x22\x0c\x41\xc0\xe1\x01\x71\x0d\x00\x02\x40\x20\x0c\x41\x05\x71\x0d\x00\x20\x07\x41\x1f\x47\x0d\x17\x20\x06\x28\x00\x01\x41\x30\x47\x0d\x18\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x02\x28\x02\xd8\x06\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x41\xe9\x01\x10\xcd\x02\x20\x03\x21\x04\x0c\x20\x0b\x20\x06\x2f\x00\x01\x21\x04\x20\x02\x42\xa8\x80\x80\x80\x70\x37\x03\x50\x02\x40\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\xd0\x00\x6a\x10\xad\x07\x45\x0d\x00\x02\x40\x02\x40\x20\x02\x28\x02\xa4\x06\x22\x03\x41\x7f\x4a\x0d\x00\x20\x02\x28\x02\xd8\x06\x21\x03\x0c\x01\x0b\x20\x02\x20\x03\x36\x02\xd8\x06\x0b\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x03\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x20\x05\x41\x01\x6a\x20\x04\x10\xaf\x07\x20\x01\x20\x0a\x20\x08\x20\x02\x28\x02\xa0\x06\x20\x02\x41\xd8\x06\x6a\x10\xb1\x07\x21\x04\x0c\x20\x0b\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x02\x28\x02\xd8\x06\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x20\x05\x20\x04\x10\xaf\x07\x20\x03\x21\x04\x0c\x1f\x0b\x20\x01\x20\x0a\x20\x08\x20\x03\x20\x02\x41\xd8\x06\x6a\x10\xb1\x07\x21\x03\x0c\x16\x0b\x20\x01\x28\x02\xcc\x02\x22\x0c\x41\x18\x6a\x21\x13\x20\x01\x28\x02\xd4\x02\x21\x09\x41\x00\x21\x0b\x41\x01\x21\x12\x41\x00\x21\x0f\x03\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x0b\x20\x09\x4e\x0d\x00\x41\x03\x21\x06\x02\x40\x20\x0c\x28\x02\x00\x22\x04\x41\x97\x7f\x6a\x41\x03\x49\x0d\x00\x20\x04\x41\xed\x01\x47\x0d\x04\x41\x01\x21\x06\x0b\x02\x40\x20\x01\x28\x02\xa4\x02\x20\x0c\x28\x02\x0c\x41\x14\x6c\x6a\x28\x02\x0c\x20\x0c\x28\x02\x08\x22\x05\x6b\x22\x03\x41\x80\x7f\x48\x0d\x00\x20\x03\x20\x06\x41\xff\x00\x6a\x4a\x0d\x00\x20\x0c\x41\x01\x36\x02\x04\x02\x40\x20\x04\x41\xed\x01\x47\x0d\x00\x41\xec\x01\x21\x04\x0c\x03\x0b\x20\x04\x41\x81\x01\x6a\x21\x04\x0c\x02\x0b\x20\x04\x41\xeb\x00\x47\x0d\x03\x20\x03\x41\x80\x80\x02\x6a\x41\xff\xff\x03\x4b\x0d\x03\x20\x0c\x42\xed\x81\x80\x80\x20\x37\x02\x00\x41\x02\x21\x06\x41\xed\x01\x21\x04\x0c\x02\x0b\x02\x40\x20\x0f\x45\x0d\x00\x20\x01\x28\x02\xcc\x02\x41\x0c\x6a\x21\x04\x41\x00\x21\x05\x03\x40\x20\x05\x20\x09\x4e\x0d\x01\x02\x40\x20\x04\x41\x78\x6a\x28\x02\x00\x41\x7f\x6a\x22\x03\x41\x03\x4b\x0d\x00\x20\x01\x28\x02\xa4\x02\x20\x04\x28\x02\x00\x41\x14\x6c\x6a\x28\x02\x0c\x20\x04\x41\x7c\x6a\x28\x02\x00\x22\x06\x6b\x21\x07\x02\x40\x02\x40\x02\x40\x20\x03\x0e\x04\x00\x01\x03\x02\x00\x0b\x20\x02\x28\x02\xc0\x06\x20\x06\x6a\x20\x07\x3a\x00\x00\x20\x01\x28\x02\xd4\x02\x21\x09\x0c\x02\x0b\x20\x02\x28\x02\xc0\x06\x20\x06\x6a\x20\x07\x3b\x00\x00\x0c\x01\x0b\x20\x02\x28\x02\xc0\x06\x20\x06\x6a\x20\x07\x36\x00\x00\x0b\x20\x04\x41\x10\x6a\x21\x04\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x10\x22\x04\x41\x10\x6a\x20\x01\x28\x02\xcc\x02\x20\x04\x28\x02\x04\x11\x00\x00\x20\x01\x41\x00\x36\x02\xcc\x02\x20\x00\x28\x02\x10\x22\x04\x41\x10\x6a\x20\x01\x28\x02\xa4\x02\x20\x04\x28\x02\x04\x11\x00\x00\x20\x01\x41\x00\x36\x02\xa4\x02\x02\x40\x20\x01\x2d\x00\x6e\x41\x02\x71\x0d\x00\x20\x01\x28\x02\xd8\x02\x45\x0d\x00\x20\x01\x41\x84\x03\x6a\x41\xef\x00\x36\x02\x00\x20\x01\x28\x02\x00\x28\x02\x10\x21\x04\x20\x01\x42\x00\x37\x02\xf4\x02\x20\x01\x41\xfc\x02\x6a\x42\x00\x37\x02\x00\x20\x01\x41\x88\x03\x6a\x20\x04\x36\x02\x00\x20\x01\x41\xf4\x02\x6a\x21\x0c\x20\x01\x28\x02\xf0\x02\x21\x0a\x41\x00\x21\x05\x41\x00\x21\x04\x41\x00\x21\x08\x03\x40\x20\x04\x20\x01\x28\x02\xe0\x02\x4e\x0d\x01\x02\x40\x20\x01\x28\x02\xd8\x02\x20\x05\x6a\x22\x06\x41\x04\x6a\x28\x02\x00\x22\x03\x41\x00\x48\x0d\x00\x20\x06\x28\x02\x00\x22\x09\x20\x08\x6b\x22\x06\x41\x00\x48\x0d\x00\x20\x03\x20\x0a\x6b\x22\x07\x45\x0d\x00\x02\x40\x02\x40\x20\x06\x41\x32\x4a\x0d\x00\x20\x07\x41\x01\x6a\x22\x08\x41\x04\x4b\x0d\x00\x20\x0c\x20\x08\x20\x06\x41\x05\x6c\x6a\x41\x01\x6a\x41\xff\x01\x71\x10\xcd\x02\x0c\x01\x0b\x20\x0c\x41\x00\x10\xcd\x02\x20\x0c\x20\x06\x10\xb2\x07\x20\x0c\x20\x07\x41\x01\x74\x20\x07\x41\x1f\x75\x73\x10\xb2\x07\x0b\x20\x09\x21\x08\x20\x03\x21\x0a\x0b\x20\x05\x41\x08\x6a\x21\x05\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x10\x22\x04\x41\x10\x6a\x20\x01\x28\x02\xd8\x02\x20\x04\x28\x02\x04\x11\x00\x00\x20\x01\x41\x00\x36\x02\xd8\x02\x20\x0d\x10\xa6\x07\x20\x0d\x41\x10\x6a\x20\x02\x41\xc0\x06\x6a\x41\x10\x6a\x29\x03\x00\x37\x02\x00\x20\x0d\x41\x08\x6a\x20\x02\x41\xc0\x06\x6a\x41\x08\x6a\x29\x03\x00\x37\x02\x00\x20\x01\x41\x01\x36\x02\xa0\x02\x20\x0d\x20\x02\x29\x03\xc0\x06\x37\x02\x00\x20\x01\x28\x02\x8c\x02\x0d\x24\x20\x02\x20\x01\x28\x02\x84\x02\x22\x03\x36\x02\x98\x06\x20\x01\x28\x02\x80\x02\x21\x0c\x20\x02\x20\x00\x20\x03\x41\x01\x74\x10\xc0\x02\x22\x04\x36\x02\xa0\x06\x20\x04\x45\x0d\x33\x41\x00\x21\x05\x02\x40\x03\x40\x20\x05\x20\x03\x4e\x0d\x01\x20\x04\x41\xff\xff\x03\x3b\x01\x00\x20\x04\x41\x02\x6a\x21\x04\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x02\x41\x00\x36\x02\xac\x06\x20\x02\x42\x00\x37\x02\xa4\x06\x20\x02\x41\x00\x36\x02\x9c\x06\x02\x40\x20\x00\x20\x02\x41\x98\x06\x6a\x41\x00\x41\x00\x41\x00\x10\xb3\x07\x0d\x00\x03\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x28\x02\xa8\x06\x22\x04\x41\x01\x48\x0d\x00\x20\x02\x20\x04\x41\x7f\x6a\x22\x04\x36\x02\xa8\x06\x02\x40\x20\x0c\x20\x02\x28\x02\xa4\x06\x20\x04\x41\x02\x74\x6a\x28\x02\x00\x22\x03\x6a\x22\x08\x2d\x00\x00\x22\x04\x41\x7f\x6a\x41\xff\x01\x71\x41\xf5\x01\x49\x0d\x00\x20\x02\x20\x03\x36\x02\xd4\x05\x20\x02\x20\x04\x36\x02\xd0\x05\x20\x00\x41\x82\xcc\x02\x20\x02\x41\xd0\x05\x6a\x10\xc2\x02\x0c\x08\x0b\x02\x40\x20\x03\x20\x04\x41\x0f\x6a\x20\x04\x20\x04\x41\xb3\x01\x4b\x1b\x22\x09\x41\x02\x74\x22\x06\x41\x90\xb9\x01\x6a\x2d\x00\x00\x6a\x22\x0b\x20\x02\x28\x02\x98\x06\x4c\x0d\x00\x20\x02\x20\x03\x36\x02\xe4\x05\x20\x02\x20\x04\x36\x02\xe0\x05\x20\x00\x41\xa0\xcc\x02\x20\x02\x41\xe0\x05\x6a\x10\xc2\x02\x0c\x08\x0b\x20\x02\x28\x02\xa0\x06\x20\x03\x41\x01\x74\x6a\x2f\x01\x00\x21\x07\x20\x06\x41\x91\xb9\x01\x6a\x2d\x00\x00\x21\x05\x02\x40\x02\x40\x20\x09\x41\x5f\x6a\x22\x0a\x41\x10\x4b\x0d\x00\x41\x01\x20\x0a\x74\x41\xbf\x80\x04\x71\x45\x0d\x00\x20\x08\x2f\x00\x01\x20\x05\x6a\x21\x05\x0c\x01\x0b\x20\x09\x41\x83\x7e\x6a\x41\x03\x4b\x0d\x00\x20\x04\x20\x05\x6a\x41\x92\x7e\x6a\x21\x05\x0b\x02\x40\x20\x05\x20\x07\x4c\x0d\x00\x20\x02\x20\x03\x36\x02\xf4\x05\x20\x02\x20\x04\x36\x02\xf0\x05\x20\x00\x41\xc8\xcc\x02\x20\x02\x41\xf0\x05\x6a\x10\xc2\x02\x0c\x08\x0b\x02\x40\x20\x06\x41\x92\xb9\x01\x6a\x2d\x00\x00\x20\x05\x6b\x20\x07\x6a\x22\x05\x20\x02\x28\x02\x9c\x06\x4c\x0d\x00\x20\x02\x20\x05\x36\x02\x9c\x06\x20\x05\x41\xff\xff\x03\x48\x0d\x00\x20\x02\x20\x03\x36\x02\x84\x06\x20\x02\x20\x04\x36\x02\x80\x06\x20\x00\x41\xe7\xcc\x02\x20\x02\x41\x80\x06\x6a\x10\xc2\x02\x0c\x08\x0b\x20\x04\x41\x5d\x6a\x22\x06\x41\x0d\x4d\x0d\x01\x0c\x05\x0b\x20\x00\x28\x02\x10\x22\x04\x41\x10\x6a\x20\x02\x28\x02\xa0\x06\x20\x04\x28\x02\x04\x11\x00\x00\x20\x00\x28\x02\x10\x22\x04\x41\x10\x6a\x20\x02\x28\x02\xa4\x06\x20\x04\x28\x02\x04\x11\x00\x00\x20\x02\x28\x02\x9c\x06\x21\x08\x41\xc0\x00\x41\xd8\x00\x20\x01\x2d\x00\x6e\x41\x02\x71\x22\x04\x1b\x22\x09\x20\x01\x28\x02\xb8\x02\x41\x03\x74\x6a\x21\x05\x02\x40\x02\x40\x20\x04\x45\x0d\x00\x20\x05\x21\x07\x20\x01\x28\x02\x44\x45\x0d\x01\x0b\x20\x01\x28\x02\x7c\x20\x01\x28\x02\x88\x01\x6a\x41\x04\x74\x20\x05\x6a\x21\x07\x0b\x20\x00\x20\x01\x28\x02\xc0\x02\x41\x03\x74\x20\x07\x6a\x22\x03\x20\x01\x28\x02\x84\x02\x6a\x10\xe2\x03\x22\x04\x45\x0d\x3a\x20\x04\x41\x01\x36\x02\x00\x20\x04\x20\x04\x20\x03\x6a\x22\x03\x36\x02\x14\x20\x04\x20\x01\x28\x02\x84\x02\x22\x06\x36\x02\x18\x20\x03\x20\x01\x28\x02\x80\x02\x20\x06\x10\x70\x1a\x20\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x01\x28\x02\x80\x02\x20\x03\x28\x02\x04\x11\x00\x00\x20\x01\x41\x00\x36\x02\x80\x02\x20\x04\x20\x01\x28\x02\x70\x36\x02\x1c\x20\x01\x28\x02\x7c\x22\x06\x20\x01\x28\x02\x88\x01\x22\x03\x6a\x41\x01\x48\x0d\x03\x20\x01\x2d\x00\x6e\x41\x02\x71\x45\x0d\x01\x20\x01\x28\x02\x44\x0d\x01\x41\x00\x21\x03\x41\x00\x21\x05\x03\x40\x02\x40\x20\x05\x20\x06\x48\x0d\x00\x41\x00\x21\x03\x41\x00\x21\x05\x03\x40\x02\x40\x20\x05\x20\x01\x28\x02\x88\x01\x48\x0d\x00\x41\x04\x21\x05\x41\x00\x21\x03\x03\x40\x20\x03\x20\x01\x28\x02\xc0\x02\x4e\x0d\x07\x20\x00\x20\x01\x28\x02\xc8\x02\x20\x05\x6a\x28\x02\x00\x10\xe4\x02\x20\x01\x28\x02\xc8\x02\x20\x05\x6a\x41\x00\x36\x02\x00\x20\x05\x41\x08\x6a\x21\x05\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x20\x01\x28\x02\x80\x01\x20\x03\x6a\x28\x02\x00\x10\xe4\x02\x20\x03\x41\x10\x6a\x21\x03\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x00\x20\x01\x28\x02\x74\x20\x03\x6a\x28\x02\x00\x10\xe4\x02\x20\x03\x41\x10\x6a\x21\x03\x20\x05\x41\x01\x6a\x21\x05\x20\x01\x28\x02\x7c\x21\x06\x0c\x00\x0b\x00\x0b\x41\x01\x20\x06\x74\x41\xe5\xf0\x00\x71\x0d\x04\x0c\x03\x0b\x20\x04\x20\x04\x20\x05\x6a\x22\x05\x36\x02\x20\x20\x05\x20\x01\x28\x02\x80\x01\x20\x03\x41\x04\x74\x10\x70\x1a\x20\x04\x28\x02\x20\x20\x01\x28\x02\x88\x01\x41\x04\x74\x6a\x20\x01\x28\x02\x74\x20\x01\x28\x02\x7c\x41\x04\x74\x10\x70\x1a\x0b\x20\x04\x20\x01\x28\x02\x7c\x3b\x01\x2a\x20\x04\x20\x01\x28\x02\x88\x01\x3b\x01\x28\x20\x04\x20\x01\x28\x02\x8c\x01\x3b\x01\x2c\x20\x00\x28\x02\x10\x22\x05\x41\x10\x6a\x20\x01\x28\x02\x80\x01\x20\x05\x28\x02\x04\x11\x00\x00\x20\x00\x28\x02\x10\x22\x05\x41\x10\x6a\x20\x01\x28\x02\x74\x20\x05\x28\x02\x04\x11\x00\x00\x0b\x20\x04\x20\x01\x28\x02\xb8\x02\x22\x05\x36\x02\x38\x02\x40\x20\x05\x45\x0d\x00\x20\x04\x20\x04\x20\x09\x6a\x22\x03\x36\x02\x34\x20\x03\x20\x01\x28\x02\xb4\x02\x20\x05\x41\x03\x74\x10\x70\x1a\x0b\x20\x00\x28\x02\x10\x22\x05\x41\x10\x6a\x20\x01\x28\x02\xb4\x02\x20\x05\x28\x02\x04\x11\x00\x00\x20\x04\x20\x08\x3b\x01\x2e\x20\x01\x41\x00\x36\x02\xb4\x02\x02\x40\x02\x40\x20\x01\x2d\x00\x6e\x41\x02\x71\x45\x0d\x00\x20\x00\x20\x01\x28\x02\xec\x02\x10\xe4\x02\x20\x01\x41\xf4\x02\x6a\x10\xa6\x07\x0c\x01\x0b\x20\x04\x20\x04\x2f\x00\x11\x41\x80\x08\x72\x3b\x00\x11\x20\x04\x20\x01\x29\x02\xec\x02\x37\x02\x40\x20\x04\x20\x00\x20\x01\x28\x02\xf4\x02\x20\x01\x41\xf8\x02\x6a\x28\x02\x00\x10\xcc\x03\x22\x05\x36\x02\x50\x02\x40\x20\x05\x0d\x00\x20\x04\x20\x01\x28\x02\xf4\x02\x36\x02\x50\x0b\x20\x04\x20\x01\x28\x02\xf8\x02\x36\x02\x4c\x20\x04\x20\x01\x28\x02\x8c\x03\x36\x02\x54\x20\x04\x20\x01\x28\x02\x90\x03\x36\x02\x48\x0b\x02\x40\x20\x01\x28\x02\xcc\x01\x22\x05\x20\x01\x41\xd0\x01\x6a\x46\x0d\x00\x20\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x05\x20\x03\x28\x02\x04\x11\x00\x00\x0b\x20\x04\x20\x01\x28\x02\xc0\x02\x22\x05\x36\x02\x3c\x02\x40\x20\x05\x45\x0d\x00\x20\x04\x20\x04\x20\x07\x6a\x22\x03\x36\x02\x24\x20\x03\x20\x01\x28\x02\xc8\x02\x20\x05\x41\x03\x74\x10\x70\x1a\x0b\x20\x00\x28\x02\x10\x22\x05\x41\x10\x6a\x20\x01\x28\x02\xc8\x02\x20\x05\x28\x02\x04\x11\x00\x00\x20\x01\x41\x00\x36\x02\xc8\x02\x20\x04\x20\x04\x2f\x00\x11\x41\x7e\x71\x20\x01\x2f\x01\x34\x41\x01\x71\x72\x22\x05\x3b\x00\x11\x20\x04\x20\x01\x2f\x01\x38\x41\x01\x74\x41\x02\x71\x20\x05\x41\x7d\x71\x72\x22\x05\x3b\x00\x11\x20\x04\x20\x01\x2d\x00\x6e\x3a\x00\x10\x20\x04\x20\x01\x2f\x01\x60\x41\x02\x74\x41\x04\x71\x20\x05\x41\x7b\x71\x72\x22\x05\x3b\x00\x11\x20\x04\x20\x05\x41\x4f\x71\x20\x01\x2f\x01\x6c\x41\x04\x74\x41\x30\x71\x72\x22\x03\x3b\x00\x11\x41\x08\x21\x05\x02\x40\x20\x01\x28\x02\xb4\x01\x41\x7f\x4a\x0d\x00\x20\x01\x28\x02\xb8\x01\x41\x00\x47\x41\x03\x74\x21\x05\x0b\x20\x04\x20\x05\x20\x03\x41\x77\x71\x72\x22\x05\x3b\x00\x11\x20\x04\x20\x01\x2f\x01\x50\x41\x06\x74\x41\xc0\x00\x71\x20\x05\x41\xbf\x7f\x71\x72\x22\x05\x3b\x00\x11\x20\x04\x20\x05\x41\xff\x7e\x71\x20\x01\x2f\x01\x54\x41\x07\x74\x41\x80\x01\x71\x72\x22\x05\x3b\x00\x11\x20\x04\x20\x05\x41\xff\x7d\x71\x20\x01\x2f\x01\x58\x41\x08\x74\x41\x80\x02\x71\x72\x22\x05\x3b\x00\x11\x20\x04\x20\x05\x41\xff\x7b\x71\x20\x01\x2f\x01\x5c\x41\x09\x74\x41\x80\x04\x71\x72\x22\x05\x3b\x00\x11\x20\x04\x20\x05\x41\xff\xef\x03\x71\x20\x01\x2f\x01\x68\x41\x0b\x74\x41\x80\x10\x71\x72\x3b\x00\x11\x20\x00\x20\x00\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x20\x00\x28\x02\x10\x21\x05\x20\x04\x41\x01\x3a\x00\x04\x20\x04\x20\x05\x28\x02\x50\x22\x03\x36\x02\x08\x20\x04\x20\x00\x36\x02\x30\x20\x03\x20\x04\x41\x08\x6a\x22\x06\x36\x02\x04\x20\x05\x20\x06\x36\x02\x50\x20\x04\x20\x05\x41\xd0\x00\x6a\x36\x02\x0c\x02\x40\x20\x01\x28\x02\x04\x45\x0d\x00\x20\x01\x41\x1c\x6a\x22\x05\x28\x02\x00\x22\x03\x20\x01\x28\x02\x18\x22\x06\x36\x02\x00\x20\x06\x20\x03\x36\x02\x04\x20\x01\x41\x00\x36\x02\x18\x20\x05\x41\x00\x36\x02\x00\x0b\x20\x00\x28\x02\x10\x22\x05\x41\x10\x6a\x20\x01\x20\x05\x28\x02\x04\x11\x00\x00\x20\x04\xad\x42\x80\x80\x80\x80\x60\x84\x21\x14\x0c\x37\x0b\x02\x40\x02\x40\x20\x04\x41\x97\x7f\x6a\x22\x06\x41\x0e\x4d\x0d\x00\x20\x04\x41\x96\x7e\x6a\x22\x06\x41\x03\x4b\x0d\x01\x02\x40\x02\x40\x02\x40\x20\x06\x0e\x04\x02\x02\x01\x00\x02\x0b\x20\x03\x20\x08\x2e\x00\x01\x6a\x41\x01\x6a\x21\x0b\x0c\x03\x0b\x20\x03\x41\x01\x6a\x22\x03\x20\x0c\x20\x03\x6a\x2c\x00\x00\x6a\x21\x0b\x0c\x02\x0b\x20\x00\x20\x02\x41\x98\x06\x6a\x20\x03\x41\x01\x6a\x22\x03\x20\x0c\x20\x03\x6a\x2c\x00\x00\x6a\x20\x04\x20\x05\x10\xb3\x07\x45\x0d\x01\x0c\x03\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x06\x0e\x0f\x04\x04\x05\x04\x03\x07\x06\x06\x06\x02\x00\x02\x01\x01\x01\x04\x0b\x20\x00\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x08\x28\x00\x05\x6a\x41\x05\x6a\x20\x04\x20\x05\x41\x7f\x6a\x10\xb3\x07\x0d\x07\x0c\x05\x0b\x20\x00\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x08\x28\x00\x05\x6a\x41\x05\x6a\x20\x04\x20\x05\x41\x02\x6a\x10\xb3\x07\x45\x0d\x04\x0c\x06\x0b\x20\x00\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x08\x28\x00\x05\x6a\x41\x05\x6a\x20\x04\x20\x05\x41\x01\x6a\x10\xb3\x07\x45\x0d\x03\x0c\x05\x0b\x20\x00\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x08\x28\x00\x01\x6a\x41\x01\x6a\x20\x04\x20\x05\x41\x01\x6a\x10\xb3\x07\x45\x0d\x02\x0c\x04\x0b\x20\x00\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x08\x28\x00\x01\x6a\x41\x01\x6a\x20\x04\x20\x05\x10\xb3\x07\x45\x0d\x01\x0c\x03\x0b\x20\x03\x20\x08\x28\x00\x01\x6a\x41\x01\x6a\x21\x0b\x0b\x20\x00\x20\x02\x41\x98\x06\x6a\x20\x0b\x20\x04\x20\x05\x10\xb3\x07\x45\x0d\x00\x0b\x0b\x20\x00\x28\x02\x10\x22\x04\x41\x10\x6a\x20\x02\x28\x02\xa0\x06\x20\x04\x28\x02\x04\x11\x00\x00\x20\x00\x28\x02\x10\x22\x04\x41\x10\x6a\x20\x02\x28\x02\xa4\x06\x20\x04\x28\x02\x04\x11\x00\x00\x0c\x33\x0b\x20\x0c\x20\x04\x36\x02\x00\x0b\x20\x05\x20\x02\x28\x02\xc0\x06\x6a\x41\x7f\x6a\x20\x04\x3a\x00\x00\x20\x02\x28\x02\xc0\x06\x20\x05\x6a\x20\x0c\x28\x02\x04\x22\x04\x6a\x22\x03\x20\x03\x20\x06\x6a\x20\x02\x28\x02\xc4\x06\x20\x06\x20\x05\x6a\x20\x04\x6a\x6b\x10\xad\x01\x1a\x20\x02\x20\x02\x28\x02\xc4\x06\x20\x06\x6b\x36\x02\xc4\x06\x20\x01\x28\x02\xa4\x02\x41\x0c\x6a\x21\x04\x20\x01\x28\x02\xac\x02\x21\x08\x41\x00\x21\x03\x03\x40\x02\x40\x20\x03\x20\x08\x48\x0d\x00\x20\x01\x28\x02\xd4\x02\x21\x09\x20\x12\x21\x03\x20\x13\x21\x04\x02\x40\x03\x40\x02\x40\x20\x03\x20\x09\x48\x0d\x00\x20\x01\x28\x02\xe0\x02\x21\x0a\x41\x00\x21\x03\x41\x00\x21\x04\x03\x40\x20\x04\x20\x0a\x4e\x0d\x03\x02\x40\x20\x01\x28\x02\xd8\x02\x20\x03\x6a\x22\x07\x28\x02\x00\x22\x08\x20\x05\x4d\x0d\x00\x20\x07\x20\x08\x20\x06\x6b\x36\x02\x00\x0b\x20\x03\x41\x08\x6a\x21\x03\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x02\x40\x20\x04\x28\x02\x00\x22\x07\x20\x05\x4c\x0d\x00\x20\x04\x20\x07\x20\x06\x6b\x36\x02\x00\x0b\x20\x03\x41\x01\x6a\x21\x03\x20\x04\x41\x10\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x0f\x41\x01\x6a\x21\x0f\x0c\x02\x0b\x02\x40\x20\x04\x28\x02\x00\x22\x07\x20\x05\x4c\x0d\x00\x20\x04\x20\x07\x20\x06\x6b\x36\x02\x00\x0b\x20\x04\x41\x14\x6a\x21\x04\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x12\x41\x01\x6a\x21\x12\x20\x13\x41\x10\x6a\x21\x13\x20\x0c\x41\x10\x6a\x21\x0c\x20\x0b\x41\x01\x6a\x21\x0b\x0c\x00\x0b\x00\x0b\x20\x07\x0e\x15\x07\x06\x06\x05\x14\x03\x08\x14\x09\x09\x14\x14\x14\x0b\x14\x14\x01\x14\x14\x14\x02\x07\x0b\x02\x40\x02\x40\x02\x40\x20\x07\x0e\x20\x02\x00\x16\x01\x00\x16\x01\x00\x16\x16\x16\x16\x16\x16\x16\x16\x16\x0f\x0f\x13\x10\x11\x16\x16\x06\x06\x0e\x0e\x0e\x0e\x0e\x0e\x02\x0b\x20\x02\x20\x06\x2f\x00\x01\x22\x04\x36\x02\xe4\x04\x20\x02\x41\x7f\x36\x02\xe8\x04\x20\x02\x20\x05\x41\x7f\x6a\x36\x02\xe0\x04\x02\x40\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\xe0\x04\x6a\x10\xad\x07\x45\x0d\x00\x02\x40\x02\x40\x20\x02\x28\x02\xa4\x06\x22\x03\x41\x7f\x4a\x0d\x00\x20\x02\x28\x02\xd8\x06\x21\x03\x0c\x01\x0b\x20\x02\x20\x03\x36\x02\xd8\x06\x0b\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x03\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x20\x05\x41\x01\x6a\x20\x04\x10\xaf\x07\x0c\x1b\x0b\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x02\x28\x02\xd8\x06\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x20\x05\x20\x04\x10\xaf\x07\x20\x03\x21\x04\x0c\x1d\x0b\x20\x06\x2f\x00\x01\x21\x04\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x02\x28\x02\xd8\x06\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x20\x05\x20\x04\x10\xaf\x07\x20\x03\x21\x04\x0c\x1c\x0b\x20\x06\x2f\x00\x01\x22\x04\x41\xff\x01\x4b\x0d\x13\x20\x02\x42\x8e\x80\x80\x80\x70\x37\x02\xcc\x04\x20\x02\x20\x04\x36\x02\xc8\x04\x20\x02\x42\x90\xa3\x82\x80\x90\x0b\x37\x03\xc0\x04\x02\x40\x02\x40\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\xc0\x04\x6a\x10\xad\x07\x0d\x00\x20\x02\x41\xa0\x04\x6a\x41\x10\x6a\x42\x8e\x80\x80\x80\x70\x37\x03\x00\x20\x02\x20\x04\x36\x02\xac\x04\x20\x02\x41\xd9\x00\x36\x02\xa8\x04\x20\x02\x42\x8e\x9f\x82\x80\x90\x02\x37\x03\xa0\x04\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\xa0\x04\x6a\x10\xad\x07\x45\x0d\x01\x0b\x02\x40\x02\x40\x20\x02\x28\x02\xa4\x06\x22\x05\x41\x7f\x4a\x0d\x00\x20\x02\x28\x02\xd8\x06\x21\x05\x0c\x01\x0b\x20\x02\x20\x05\x36\x02\xd8\x06\x0b\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x05\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x41\x93\x01\x41\x93\x01\x41\x92\x01\x20\x02\x28\x02\xa8\x06\x22\x05\x41\x91\x01\x46\x1b\x20\x05\x41\x8f\x01\x46\x1b\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x04\x41\xff\x01\x71\x10\xcd\x02\x0c\x19\x0b\x20\x02\x41\x80\x04\x6a\x41\x14\x6a\x42\x8e\x80\x80\x80\x70\x37\x02\x00\x20\x02\x41\x80\x04\x6a\x41\x10\x6a\x20\x04\x36\x02\x00\x20\x02\x42\x91\x80\x80\x80\x90\x0b\x37\x03\x88\x04\x20\x02\x42\x84\x80\x80\x80\xd0\x13\x37\x03\x80\x04\x02\x40\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\x80\x04\x6a\x10\xad\x07\x45\x0d\x00\x02\x40\x02\x40\x20\x02\x28\x02\xa4\x06\x22\x05\x41\x7f\x4a\x0d\x00\x20\x02\x28\x02\xd8\x06\x21\x05\x0c\x01\x0b\x20\x02\x20\x05\x36\x02\xd8\x06\x0b\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x05\x10\xb0\x07\x02\x40\x02\x40\x20\x02\x28\x02\xb8\x06\x41\x2f\x47\x0d\x00\x20\x02\x41\xc0\x06\x6a\x41\xc1\x01\x10\xcd\x02\x0c\x01\x0b\x20\x02\x41\xc0\x06\x6a\x41\x04\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x02\x28\x02\xb8\x06\x10\xa4\x07\x0b\x20\x02\x41\xc0\x06\x6a\x41\x94\x01\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x04\x41\xff\x01\x71\x10\xcd\x02\x0c\x19\x0b\x20\x02\x41\xe0\x03\x6a\x41\x14\x6a\x42\x8e\x80\x80\x80\x70\x37\x02\x00\x20\x02\x41\xe0\x03\x6a\x41\x10\x6a\x20\x04\x36\x02\x00\x20\x02\x42\x91\x80\x80\x80\x90\x0b\x37\x03\xe8\x03\x20\x02\x42\x81\x80\x80\x80\xd0\x13\x37\x03\xe0\x03\x02\x40\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\xe0\x03\x6a\x10\xad\x07\x45\x0d\x00\x02\x40\x02\x40\x20\x02\x28\x02\xa4\x06\x22\x05\x41\x7f\x4a\x0d\x00\x20\x02\x28\x02\xd8\x06\x21\x05\x0c\x01\x0b\x20\x02\x20\x05\x36\x02\xd8\x06\x0b\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x05\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x20\x02\x28\x02\xb0\x06\x10\xb4\x07\x20\x02\x41\xc0\x06\x6a\x41\x94\x01\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x04\x41\xff\x01\x71\x10\xcd\x02\x0c\x19\x0b\x20\x0f\x42\x8e\x80\x80\x80\x70\x37\x03\x00\x20\x02\x41\xc0\x03\x6a\x41\x14\x6a\x20\x04\x36\x02\x00\x20\x02\x41\xc0\x03\x6a\x41\x10\x6a\x41\xd9\x00\x36\x02\x00\x20\x02\x42\x9d\x81\x80\x80\x90\x02\x37\x03\xc8\x03\x20\x02\x42\xd8\xb6\xf9\x82\x70\x37\x03\xc0\x03\x02\x40\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\xc0\x03\x6a\x10\xad\x07\x45\x0d\x00\x02\x40\x02\x40\x20\x02\x28\x02\xa4\x06\x22\x05\x41\x7f\x4a\x0d\x00\x20\x02\x28\x02\xd8\x06\x21\x05\x0c\x01\x0b\x20\x02\x20\x05\x36\x02\xd8\x06\x0b\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x05\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x20\x02\x28\x02\xa8\x06\x20\x02\x28\x02\xac\x06\x10\xaf\x07\x20\x02\x41\xc0\x06\x6a\x41\x94\x01\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x04\x41\xff\x01\x71\x10\xcd\x02\x0c\x19\x0b\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x02\x28\x02\xd8\x06\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x20\x05\x20\x04\x10\xaf\x07\x20\x03\x21\x04\x0c\x1b\x0b\x20\x02\x41\x7f\x36\x02\xb8\x03\x20\x02\x42\xd9\xb8\xfd\x82\x70\x37\x03\xb0\x03\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\xb0\x03\x6a\x10\xad\x07\x45\x0d\x12\x02\x40\x20\x02\x28\x02\xa4\x06\x22\x04\x41\x00\x48\x0d\x00\x20\x02\x20\x04\x36\x02\xd8\x06\x0b\x20\x02\x42\x8e\x80\x80\x80\x70\x37\x03\xa0\x03\x20\x02\x28\x02\xa8\x06\x22\x05\x41\x01\x6a\x21\x06\x02\x40\x02\x40\x02\x40\x20\x02\x41\x98\x06\x6a\x20\x02\x28\x02\xa0\x06\x22\x04\x20\x02\x41\xa0\x03\x6a\x10\xad\x07\x0d\x00\x41\x7f\x21\x03\x0c\x01\x0b\x02\x40\x20\x02\x28\x02\xa4\x06\x22\x04\x41\x00\x48\x0d\x00\x20\x02\x20\x04\x36\x02\xd8\x06\x0b\x20\x02\x20\x02\x28\x02\xac\x06\x36\x02\x94\x03\x41\x7f\x21\x03\x20\x02\x41\x7f\x36\x02\x98\x03\x20\x02\x20\x05\x41\x7f\x6a\x36\x02\x90\x03\x20\x02\x41\x98\x06\x6a\x20\x02\x28\x02\xa0\x06\x22\x04\x20\x02\x41\x90\x03\x6a\x10\xad\x07\x45\x0d\x01\x20\x02\x28\x02\xa0\x06\x21\x04\x20\x02\x28\x02\xa4\x06\x21\x03\x0b\x20\x06\x21\x05\x0b\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x02\x28\x02\xd8\x06\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x20\x05\x20\x02\x28\x02\xac\x06\x10\xaf\x07\x20\x03\x41\x00\x48\x0d\x1a\x20\x02\x20\x03\x36\x02\xd8\x06\x0c\x1a\x0b\x20\x02\x41\x7f\x36\x02\x88\x03\x20\x02\x42\xc3\xf6\x80\x80\xe0\x01\x37\x03\x80\x03\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\x80\x03\x6a\x10\xad\x07\x45\x0d\x11\x02\x40\x02\x40\x20\x02\x28\x02\xa4\x06\x22\x04\x41\x7f\x4a\x0d\x00\x20\x02\x28\x02\xd8\x06\x21\x04\x0c\x01\x0b\x20\x02\x20\x04\x36\x02\xd8\x06\x0b\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x04\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x20\x02\x2d\x00\xa8\x06\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x02\x28\x02\xb8\x06\x10\xa4\x07\x0c\x16\x0b\x20\x02\x42\x8e\x80\x80\x80\x70\x37\x03\xf0\x02\x02\x40\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\xf0\x02\x6a\x10\xad\x07\x45\x0d\x00\x20\x02\x28\x02\xa4\x06\x22\x04\x41\x00\x48\x0d\x16\x20\x02\x20\x04\x36\x02\xd8\x06\x0c\x16\x0b\x20\x02\x42\xa8\x80\x80\x80\x70\x37\x03\xe0\x02\x02\x40\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\xe0\x02\x6a\x10\xad\x07\x45\x0d\x00\x02\x40\x02\x40\x20\x02\x28\x02\xa4\x06\x22\x04\x41\x7f\x4a\x0d\x00\x20\x02\x28\x02\xd8\x06\x21\x04\x0c\x01\x0b\x20\x02\x20\x04\x36\x02\xd8\x06\x0b\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x04\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x41\x29\x10\xcd\x02\x0c\x16\x0b\x20\x02\x42\xe9\xd4\x81\x80\x70\x37\x03\xd0\x02\x41\x00\x21\x0c\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\xd0\x02\x6a\x10\xad\x07\x0d\x06\x20\x02\x42\xab\x81\x80\x80\x70\x37\x03\xc0\x02\x02\x40\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\xc0\x02\x6a\x10\xad\x07\x45\x0d\x00\x02\x40\x02\x40\x20\x02\x28\x02\xa4\x06\x22\x04\x41\x7f\x4a\x0d\x00\x20\x02\x28\x02\xd8\x06\x21\x04\x0c\x01\x0b\x20\x02\x20\x04\x36\x02\xd8\x06\x0b\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x04\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x41\xf2\x01\x10\xcd\x02\x0c\x16\x0b\x20\x02\x41\x7f\x36\x02\xb8\x02\x20\x02\x42\xac\x81\x80\x80\x90\xcd\x1a\x37\x03\xb0\x02\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\xb0\x02\x6a\x10\xad\x07\x45\x0d\x10\x02\x40\x02\x40\x20\x02\x28\x02\xa4\x06\x22\x05\x41\x7f\x4a\x0d\x00\x20\x02\x28\x02\xd8\x06\x21\x05\x0c\x01\x0b\x20\x02\x20\x05\x36\x02\xd8\x06\x0b\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x05\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x41\xf2\x01\x10\xcd\x02\x20\x02\x28\x02\xa8\x06\x41\x03\x73\x21\x05\x0c\x16\x0b\x20\x02\x42\xc9\x80\x80\x80\x70\x37\x03\xa8\x02\x20\x02\x42\xd8\xb6\xf9\x82\x70\x37\x03\xa0\x02\x20\x03\x21\x04\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\xa0\x02\x6a\x10\xad\x07\x0d\x17\x20\x02\x41\x7f\x36\x02\x98\x02\x20\x02\x42\x81\x84\x90\x80\x90\x09\x37\x03\x90\x02\x20\x03\x21\x04\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\x90\x02\x6a\x10\xad\x07\x0d\x17\x20\x02\x41\x7f\x36\x02\x88\x02\x20\x02\x42\x86\x8e\xa8\xc8\x90\x09\x37\x03\x80\x02\x20\x03\x21\x04\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\x80\x02\x6a\x10\xad\x07\x0d\x17\x0c\x0f\x0b\x20\x06\x28\x00\x01\x21\x04\x20\x02\x42\x8e\x80\x80\x80\x70\x37\x03\xf0\x01\x02\x40\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\xf0\x01\x6a\x10\xad\x07\x45\x0d\x00\x20\x00\x20\x04\x10\xe4\x02\x20\x02\x28\x02\xa4\x06\x22\x04\x41\x00\x48\x0d\x14\x20\x02\x20\x04\x36\x02\xd8\x06\x0c\x14\x0b\x20\x04\x41\x2f\x47\x0d\x0e\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x02\x28\x02\xd8\x06\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x41\xc1\x01\x10\xcd\x02\x20\x03\x21\x04\x0c\x16\x0b\x20\x06\x28\x00\x01\x22\x04\x41\xff\x01\x4a\x0d\x0d\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x02\x28\x02\xd8\x06\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x20\x05\x41\xbd\x7f\x6a\x41\xff\x01\x71\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x04\x41\xff\x01\x71\x10\xcd\x02\x20\x03\x21\x04\x0c\x15\x0b\x02\x40\x20\x06\x28\x00\x01\x22\x05\x41\xff\xff\xff\xff\x07\x71\x45\x0d\x00\x20\x02\x42\x8c\x81\x80\x80\x70\x37\x03\xe0\x01\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\xe0\x01\x6a\x10\xad\x07\x45\x0d\x00\x02\x40\x20\x02\x28\x02\xa4\x06\x22\x04\x41\x00\x48\x0d\x00\x20\x02\x20\x04\x36\x02\xd8\x06\x0b\x20\x02\x42\x8e\x80\x80\x80\x70\x37\x03\xd0\x01\x02\x40\x20\x02\x41\x98\x06\x6a\x20\x02\x28\x02\xa0\x06\x20\x02\x41\xd0\x01\x6a\x10\xad\x07\x45\x0d\x00\x20\x02\x28\x02\xa4\x06\x22\x04\x41\x00\x48\x0d\x13\x20\x02\x20\x04\x36\x02\xd8\x06\x0c\x13\x0b\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x02\x28\x02\xd8\x06\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x41\x00\x20\x05\x6b\x10\xb4\x07\x0c\x12\x0b\x20\x02\x42\x8e\x80\x80\x80\x70\x37\x03\xc0\x01\x02\x40\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\xc0\x01\x6a\x10\xad\x07\x45\x0d\x00\x20\x02\x28\x02\xa4\x06\x22\x04\x41\x00\x48\x0d\x12\x20\x02\x20\x04\x36\x02\xd8\x06\x0c\x12\x0b\x20\x02\x42\xe9\xd4\x81\x80\x70\x37\x03\xb0\x01\x02\x40\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\xb0\x01\x6a\x10\xad\x07\x45\x0d\x00\x20\x05\x41\x00\x47\x21\x0c\x0c\x03\x0b\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x02\x28\x02\xd8\x06\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x20\x05\x10\xb4\x07\x20\x03\x21\x04\x0c\x14\x0b\x20\x02\x42\xab\x81\x80\x80\x70\x37\x03\xa0\x01\x02\x40\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\xa0\x01\x6a\x10\xad\x07\x45\x0d\x00\x02\x40\x02\x40\x20\x02\x28\x02\xa4\x06\x22\x04\x41\x7f\x4a\x0d\x00\x20\x02\x28\x02\xd8\x06\x21\x04\x0c\x01\x0b\x20\x02\x20\x04\x36\x02\xd8\x06\x0b\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x04\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x41\xf3\x01\x10\xcd\x02\x0c\x11\x0b\x20\x02\x41\x7f\x36\x02\x98\x01\x20\x02\x42\xac\x81\x80\x80\x90\xcd\x1a\x37\x03\x90\x01\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\x90\x01\x6a\x10\xad\x07\x45\x0d\x00\x02\x40\x02\x40\x20\x02\x28\x02\xa4\x06\x22\x05\x41\x7f\x4a\x0d\x00\x20\x02\x28\x02\xd8\x06\x21\x05\x0c\x01\x0b\x20\x02\x20\x05\x36\x02\xd8\x06\x0b\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x05\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x41\xf3\x01\x10\xcd\x02\x20\x02\x28\x02\xa8\x06\x41\x03\x73\x21\x05\x0c\x11\x0b\x20\x02\x42\xe9\xd4\x81\x80\x70\x37\x03\x80\x01\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\x80\x01\x6a\x10\xad\x07\x45\x0d\x0a\x20\x05\x41\x0a\x46\x21\x0c\x0b\x02\x40\x20\x02\x28\x02\xa4\x06\x22\x05\x41\x00\x48\x0d\x00\x20\x02\x20\x05\x36\x02\xd8\x06\x0b\x20\x02\x28\x02\xb0\x06\x21\x05\x20\x02\x28\x02\xa0\x06\x21\x07\x20\x02\x28\x02\xa8\x06\x41\x97\x7f\x6a\x20\x0c\x46\x0d\x07\x20\x01\x20\x05\x41\x7f\x10\xae\x07\x1a\x20\x07\x21\x04\x0c\x11\x0b\x20\x02\x42\xa9\x80\x80\x80\x70\x37\x03\x70\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\xf0\x00\x6a\x10\xad\x07\x45\x0d\x08\x20\x03\x21\x04\x20\x02\x28\x02\xa4\x06\x22\x05\x41\x00\x48\x0d\x10\x20\x02\x20\x05\x36\x02\xd8\x06\x20\x03\x21\x04\x0c\x10\x0b\x20\x06\x41\x09\x6a\x2d\x00\x00\x21\x09\x20\x06\x28\x00\x01\x21\x07\x02\x40\x20\x01\x20\x06\x28\x00\x05\x20\x02\x41\xdc\x06\x6a\x41\x00\x10\xb5\x07\x22\x04\x41\x00\x48\x0d\x00\x20\x04\x20\x01\x28\x02\xac\x02\x4e\x0d\x00\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x02\x28\x02\xd8\x06\x10\xb0\x07\x20\x01\x20\x01\x28\x02\xd4\x02\x22\x06\x41\x01\x6a\x36\x02\xd4\x02\x20\x01\x28\x02\xcc\x02\x20\x06\x41\x04\x74\x6a\x22\x06\x41\x04\x36\x02\x04\x20\x06\x20\x05\x36\x02\x00\x20\x06\x20\x04\x36\x02\x0c\x20\x06\x20\x02\x28\x02\xc4\x06\x41\x05\x6a\x36\x02\x08\x20\x02\x41\xc0\x06\x6a\x20\x05\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x07\x10\xa4\x07\x20\x02\x41\xc0\x06\x6a\x20\x0b\x20\x04\x41\x14\x6c\x6a\x22\x04\x28\x02\x0c\x20\x02\x28\x02\xc4\x06\x6b\x10\xa4\x07\x02\x40\x20\x04\x28\x02\x0c\x41\x7f\x47\x0d\x00\x20\x00\x20\x04\x20\x02\x28\x02\xc4\x06\x41\x7c\x6a\x41\x04\x10\xb6\x07\x45\x0d\x12\x0b\x20\x02\x41\xc0\x06\x6a\x20\x09\x41\xff\x01\x71\x10\xcd\x02\x20\x03\x21\x04\x0c\x10\x0b\x41\xbc\xca\x02\x41\xae\xb7\x01\x41\xe4\xf7\x01\x41\x96\xcb\x02\x10\x4a\x00\x0b\x20\x01\x20\x06\x28\x00\x01\x20\x02\x41\xdc\x06\x6a\x41\x00\x10\xb5\x07\x21\x06\x02\x40\x20\x02\x28\x02\x98\x06\x20\x02\x28\x02\x9c\x06\x20\x03\x20\x06\x10\xb7\x07\x45\x0d\x00\x20\x01\x20\x06\x41\x7f\x10\xae\x07\x1a\x20\x02\x41\xc0\x06\x6a\x41\x0e\x10\xcd\x02\x20\x03\x21\x04\x0c\x0f\x0b\x20\x02\x42\xeb\x80\x80\x80\x70\x37\x03\x60\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\xe0\x00\x6a\x10\xad\x07\x45\x0d\x02\x20\x02\x28\x02\xa4\x06\x21\x09\x20\x02\x28\x02\x98\x06\x20\x02\x28\x02\x9c\x06\x20\x02\x28\x02\xa0\x06\x22\x07\x20\x06\x10\xb7\x07\x45\x0d\x02\x02\x40\x20\x09\x41\x00\x48\x0d\x00\x20\x02\x20\x09\x36\x02\xd8\x06\x0b\x20\x01\x20\x06\x41\x7f\x10\xae\x07\x1a\x20\x05\x41\x03\x73\x21\x05\x20\x02\x28\x02\xb0\x06\x21\x06\x0c\x0d\x0b\x20\x06\x28\x00\x01\x21\x06\x41\xec\x00\x21\x05\x0c\x01\x0b\x20\x06\x28\x00\x01\x21\x06\x41\xed\x00\x21\x05\x0b\x20\x03\x21\x07\x0c\x0a\x0b\x20\x06\x28\x00\x01\x21\x05\x20\x03\x21\x07\x0b\x20\x02\x41\x7f\x36\x02\x94\x06\x20\x01\x20\x05\x20\x02\x41\xdc\x06\x6a\x20\x02\x41\x94\x06\x6a\x10\xb5\x07\x21\x06\x02\x40\x20\x02\x28\x02\x98\x06\x20\x02\x28\x02\x9c\x06\x20\x07\x20\x06\x10\xb7\x07\x45\x0d\x00\x20\x01\x20\x06\x41\x7f\x10\xae\x07\x1a\x20\x07\x21\x04\x0c\x0a\x0b\x02\x40\x20\x02\x28\x02\xdc\x06\x22\x03\x41\x58\x6a\x22\x05\x41\x07\x4b\x0d\x00\x41\x01\x20\x05\x74\x41\x83\x01\x71\x45\x0d\x00\x20\x01\x20\x06\x41\x7f\x10\xae\x07\x1a\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x02\x28\x02\xd8\x06\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x20\x03\x41\xff\x01\x71\x10\xcd\x02\x20\x01\x20\x0a\x20\x08\x20\x07\x20\x02\x41\xd8\x06\x6a\x10\xb1\x07\x21\x04\x0c\x0a\x0b\x41\xeb\x00\x21\x05\x0c\x08\x0b\x02\x40\x02\x40\x20\x05\x41\xf0\x7e\x6a\x41\x02\x49\x0d\x00\x20\x05\x41\x97\x01\x46\x0d\x01\x02\x40\x20\x05\x41\xb6\x01\x46\x0d\x00\x20\x05\x41\xc2\x01\x47\x0d\x03\x20\x02\x20\x06\x28\x00\x01\x36\x02\xd8\x06\x20\x03\x21\x04\x0c\x0b\x0b\x20\x06\x28\x00\x01\x22\x04\x41\x00\x48\x0d\x03\x20\x04\x20\x01\x28\x02\xac\x02\x4e\x0d\x03\x20\x0b\x20\x04\x41\x14\x6c\x6a\x22\x04\x28\x02\x0c\x41\x7f\x47\x0d\x04\x20\x04\x41\x0c\x6a\x22\x0c\x20\x02\x28\x02\xc4\x06\x36\x02\x00\x20\x04\x41\x10\x6a\x21\x13\x20\x04\x28\x02\x10\x21\x06\x02\x40\x03\x40\x20\x06\x22\x04\x45\x0d\x01\x20\x04\x28\x02\x00\x21\x06\x02\x40\x20\x04\x28\x02\x08\x41\x7f\x6a\x22\x07\x41\x03\x4b\x0d\x00\x20\x0c\x28\x02\x00\x20\x04\x28\x02\x04\x22\x09\x6b\x21\x05\x02\x40\x02\x40\x02\x40\x20\x07\x0e\x04\x02\x01\x03\x00\x02\x0b\x20\x02\x28\x02\xc0\x06\x20\x09\x6a\x20\x05\x36\x00\x00\x0c\x02\x0b\x20\x05\x41\x80\x80\x02\x6a\x41\x80\x80\x04\x4f\x0d\x09\x20\x02\x28\x02\xc0\x06\x20\x09\x6a\x20\x05\x3b\x00\x00\x0c\x01\x0b\x20\x05\x41\x80\x01\x6a\x41\x80\x02\x4f\x0d\x09\x20\x02\x28\x02\xc0\x06\x20\x09\x6a\x20\x05\x3a\x00\x00\x0b\x20\x00\x28\x02\x10\x22\x05\x41\x10\x6a\x20\x04\x20\x05\x28\x02\x04\x11\x00\x00\x0c\x00\x0b\x00\x0b\x20\x13\x41\x00\x36\x02\x00\x20\x03\x21\x04\x0c\x0a\x0b\x20\x02\x42\x8e\x80\x80\x80\x70\x37\x03\xa8\x05\x20\x02\x42\xd9\xb8\xfd\x82\x70\x37\x03\xa0\x05\x02\x40\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\xa0\x05\x6a\x10\xad\x07\x45\x0d\x00\x02\x40\x20\x02\x28\x02\xa4\x06\x22\x04\x41\x00\x48\x0d\x00\x20\x02\x20\x04\x36\x02\xd8\x06\x0b\x20\x02\x20\x02\x28\x02\xac\x06\x22\x06\x36\x02\x94\x05\x20\x02\x41\x7f\x36\x02\x98\x05\x20\x02\x20\x02\x28\x02\xa8\x06\x22\x03\x41\x7f\x6a\x36\x02\x90\x05\x02\x40\x20\x02\x41\x98\x06\x6a\x20\x02\x28\x02\xa0\x06\x22\x04\x20\x02\x41\x90\x05\x6a\x10\xad\x07\x45\x0d\x00\x02\x40\x20\x02\x28\x02\xa4\x06\x22\x04\x41\x00\x48\x0d\x00\x20\x02\x20\x04\x36\x02\xd8\x06\x0b\x20\x03\x41\x01\x6a\x21\x03\x20\x02\x28\x02\xa0\x06\x21\x04\x0b\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x02\x28\x02\xd8\x06\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x20\x05\x41\x7e\x6a\x41\xff\x01\x71\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x03\x20\x06\x10\xaf\x07\x0c\x0a\x0b\x20\x02\x42\x8e\x80\x80\x80\x70\x37\x03\x88\x05\x20\x02\x42\x98\x80\x80\x80\xb0\xe8\x0e\x37\x03\x80\x05\x02\x40\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\x80\x05\x6a\x10\xad\x07\x45\x0d\x00\x02\x40\x02\x40\x20\x02\x28\x02\xa4\x06\x22\x04\x41\x7f\x4a\x0d\x00\x20\x02\x28\x02\xd8\x06\x21\x04\x0c\x01\x0b\x20\x02\x20\x04\x36\x02\xd8\x06\x0b\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x04\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x20\x05\x41\x7e\x6a\x41\xff\x01\x71\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x02\x2d\x00\xa8\x06\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x02\x28\x02\xb8\x06\x10\xa4\x07\x0c\x07\x0b\x20\x02\x42\x8e\x80\x80\x80\x70\x37\x03\xf8\x04\x20\x02\x42\x99\x80\x80\x80\x90\x09\x37\x03\xf0\x04\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\xf0\x04\x6a\x10\xad\x07\x45\x0d\x01\x02\x40\x02\x40\x20\x02\x28\x02\xa4\x06\x22\x04\x41\x7f\x4a\x0d\x00\x20\x02\x28\x02\xd8\x06\x21\x04\x0c\x01\x0b\x20\x02\x20\x04\x36\x02\xd8\x06\x0b\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x04\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x20\x05\x41\x7e\x6a\x41\xff\x01\x71\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\xc9\x00\x10\xcd\x02\x0c\x06\x0b\x20\x02\x41\x7f\x36\x02\xc8\x05\x20\x02\x42\x84\x80\x80\x80\xb0\x95\xeb\xd4\xaa\x7f\x37\x03\xc0\x05\x20\x02\x41\x98\x06\x6a\x20\x03\x20\x02\x41\xc0\x05\x6a\x10\xad\x07\x45\x0d\x00\x02\x40\x20\x02\x28\x02\xa4\x06\x22\x05\x41\x00\x48\x0d\x00\x20\x02\x20\x05\x36\x02\xd8\x06\x0b\x41\xf4\x01\x41\xf5\x01\x41\x7f\x20\x02\x28\x02\xb8\x06\x22\x05\x41\x1b\x46\x1b\x20\x05\x41\xc5\x00\x46\x1b\x22\x05\x41\x00\x48\x0d\x00\x02\x40\x20\x02\x28\x02\xa8\x06\x41\x02\x72\x41\xab\x01\x47\x0d\x00\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x02\x28\x02\xd8\x06\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x20\x05\x41\xff\x01\x71\x10\xcd\x02\x20\x00\x20\x02\x28\x02\xb8\x06\x10\xe4\x02\x0c\x06\x0b\x20\x02\x42\xe9\x80\x80\x80\x70\x37\x03\xb0\x05\x20\x02\x41\x98\x06\x6a\x20\x02\x28\x02\xa0\x06\x20\x02\x41\xb0\x05\x6a\x10\xad\x07\x45\x0d\x00\x02\x40\x02\x40\x20\x02\x28\x02\xa4\x06\x22\x03\x41\x7f\x4a\x0d\x00\x20\x02\x28\x02\xd8\x06\x21\x03\x0c\x01\x0b\x20\x02\x20\x03\x36\x02\xd8\x06\x0b\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x03\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x20\x05\x41\xff\x01\x71\x10\xcd\x02\x20\x00\x20\x02\x28\x02\xb8\x06\x10\xe4\x02\x41\xea\x00\x21\x05\x0c\x06\x0b\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x02\x28\x02\xd8\x06\x10\xb0\x07\x20\x02\x41\xc0\x06\x6a\x20\x06\x20\x09\x10\xa5\x07\x1a\x20\x03\x21\x04\x0c\x07\x0b\x41\xbc\xca\x02\x41\xae\xb7\x01\x41\x9b\xf6\x01\x41\x96\xcb\x02\x10\x4a\x00\x0b\x41\xa5\xcb\x02\x41\xae\xb7\x01\x41\x9d\xf6\x01\x41\x96\xcb\x02\x10\x4a\x00\x0b\x41\xb4\xcb\x02\x41\xae\xb7\x01\x41\xa8\xf6\x01\x41\x96\xcb\x02\x10\x4a\x00\x0b\x41\xca\xcb\x02\x41\xae\xb7\x01\x41\xac\xf6\x01\x41\x96\xcb\x02\x10\x4a\x00\x0b\x20\x02\x28\x02\xa0\x06\x21\x04\x0c\x02\x0b\x20\x02\x28\x02\xb0\x06\x21\x06\x20\x02\x28\x02\xa0\x06\x21\x07\x0b\x20\x01\x20\x02\x28\x02\xc4\x06\x20\x02\x28\x02\xd8\x06\x10\xb0\x07\x02\x40\x20\x05\x41\xeb\x00\x47\x22\x12\x0d\x00\x20\x01\x20\x0a\x20\x08\x20\x07\x20\x02\x41\xd8\x06\x6a\x10\xb1\x07\x21\x07\x0b\x20\x06\x41\x00\x48\x0d\x02\x20\x06\x20\x01\x28\x02\xac\x02\x4e\x0d\x02\x20\x01\x20\x01\x28\x02\xd4\x02\x22\x03\x41\x01\x6a\x36\x02\xd4\x02\x20\x01\x28\x02\xcc\x02\x20\x03\x41\x04\x74\x6a\x22\x03\x41\x04\x36\x02\x04\x20\x03\x20\x05\x36\x02\x00\x20\x03\x20\x06\x36\x02\x0c\x20\x03\x20\x02\x28\x02\xc4\x06\x22\x0c\x41\x01\x6a\x36\x02\x08\x20\x03\x41\x04\x6a\x21\x09\x02\x40\x02\x40\x20\x0b\x20\x06\x41\x14\x6c\x6a\x22\x06\x28\x02\x0c\x22\x13\x41\x7f\x47\x0d\x00\x20\x06\x28\x02\x08\x20\x04\x41\x7f\x73\x6a\x21\x04\x02\x40\x20\x05\x41\x97\x7f\x6a\x41\x02\x4b\x0d\x00\x20\x04\x41\xff\x00\x4a\x0d\x00\x20\x09\x41\x01\x36\x02\x00\x20\x03\x20\x05\x41\x81\x01\x6a\x22\x04\x36\x02\x00\x20\x02\x41\xc0\x06\x6a\x20\x04\x41\xff\x01\x71\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\x00\x10\xcd\x02\x20\x07\x21\x04\x20\x00\x20\x06\x20\x02\x28\x02\xc4\x06\x41\x7f\x6a\x41\x01\x10\xb6\x07\x0d\x03\x0c\x04\x0b\x20\x12\x0d\x01\x20\x04\x41\xff\xff\x01\x4a\x0d\x01\x20\x03\x41\xed\x01\x36\x02\x00\x20\x09\x41\x02\x36\x02\x00\x20\x02\x41\xc0\x06\x6a\x41\xed\x01\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\x00\x10\x87\x07\x20\x07\x21\x04\x20\x00\x20\x06\x20\x02\x28\x02\xc4\x06\x41\x7e\x6a\x41\x02\x10\xb6\x07\x0d\x02\x0c\x03\x0b\x20\x13\x20\x0c\x41\x7f\x73\x6a\x21\x04\x02\x40\x20\x05\x41\x97\x7f\x6a\x41\x02\x4b\x0d\x00\x20\x04\x41\x80\x01\x6a\x41\xff\x01\x4b\x0d\x00\x20\x09\x41\x01\x36\x02\x00\x20\x03\x20\x05\x41\x81\x01\x6a\x22\x05\x36\x02\x00\x20\x02\x41\xc0\x06\x6a\x20\x05\x41\xff\x01\x71\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x04\x41\xff\x01\x71\x10\xcd\x02\x20\x07\x21\x04\x0c\x02\x0b\x20\x12\x0d\x00\x20\x04\x41\x80\x80\x02\x6a\x41\xff\xff\x03\x4b\x0d\x00\x20\x03\x41\xed\x01\x36\x02\x00\x20\x09\x41\x02\x36\x02\x00\x20\x02\x41\xc0\x06\x6a\x41\xed\x01\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x04\x41\xff\xff\x03\x71\x10\x87\x07\x20\x07\x21\x04\x0c\x01\x0b\x20\x02\x41\xc0\x06\x6a\x20\x05\x41\xff\x01\x71\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x06\x41\x0c\x6a\x22\x05\x28\x02\x00\x20\x02\x28\x02\xc4\x06\x6b\x10\xa4\x07\x20\x07\x21\x04\x20\x05\x28\x02\x00\x41\x7f\x47\x0d\x00\x20\x07\x21\x04\x20\x00\x20\x06\x20\x02\x28\x02\xc4\x06\x41\x7c\x6a\x41\x04\x10\xb6\x07\x0d\x00\x0b\x0b\x20\x02\x28\x02\xc0\x06\x22\x04\x45\x0d\x10\x20\x02\x28\x02\xd4\x06\x20\x04\x41\x00\x20\x02\x28\x02\xd0\x06\x11\x01\x00\x1a\x0c\x10\x0b\x41\xbc\xca\x02\x41\xae\xb7\x01\x41\x9d\xf7\x01\x41\x96\xcb\x02\x10\x4a\x00\x0b\x20\x00\x10\xc1\x02\x0c\x0e\x0b\x20\x01\x20\x01\x28\x02\xdc\x02\x41\x01\x6a\x36\x02\xdc\x02\x20\x07\x28\x00\x01\x21\x0e\x0c\x09\x0b\x20\x01\x28\x02\xcc\x01\x20\x07\x2f\x00\x01\x22\x03\x41\x03\x74\x6a\x41\x04\x6a\x21\x04\x03\x40\x20\x04\x28\x02\x00\x22\x05\x41\x00\x48\x0d\x0a\x20\x01\x28\x02\x74\x20\x05\x41\x04\x74\x6a\x22\x04\x28\x02\x04\x20\x03\x47\x0d\x0a\x02\x40\x20\x04\x2d\x00\x0c\x41\x04\x71\x45\x0d\x00\x20\x02\x41\xc0\x06\x6a\x41\xe8\x00\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x05\x41\xff\xff\x03\x71\x10\x87\x07\x0b\x20\x04\x41\x08\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x02\x40\x20\x01\x28\x02\xf0\x01\x20\x07\x2f\x00\x01\x22\x0f\x47\x0d\x00\x41\x00\x21\x04\x41\x0c\x21\x05\x02\x40\x03\x40\x02\x40\x20\x04\x20\x01\x28\x02\x88\x01\x48\x0d\x00\x41\x00\x21\x04\x41\x0c\x21\x05\x03\x40\x20\x04\x20\x01\x28\x02\x7c\x4e\x0d\x03\x02\x40\x20\x01\x28\x02\x74\x20\x05\x6a\x22\x03\x41\x78\x6a\x28\x02\x00\x0d\x00\x20\x03\x41\x03\x6a\x2d\x00\x00\x41\xc0\x00\x71\x0d\x00\x20\x02\x41\xc0\x06\x6a\x41\x03\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x03\x28\x02\x00\x41\x01\x74\x41\x08\x75\x10\xa4\x07\x20\x02\x41\xc0\x06\x6a\x41\xd9\x00\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x04\x41\xff\xff\x03\x71\x10\x87\x07\x0b\x20\x05\x41\x10\x6a\x21\x05\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x02\x40\x20\x01\x28\x02\x80\x01\x20\x05\x6a\x22\x03\x41\x03\x6a\x2d\x00\x00\x41\xc0\x00\x71\x0d\x00\x20\x02\x41\xc0\x06\x6a\x41\x03\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x03\x28\x02\x00\x41\x01\x74\x41\x08\x75\x10\xa4\x07\x20\x02\x41\xc0\x06\x6a\x41\xdc\x00\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x04\x41\xff\xff\x03\x71\x10\x87\x07\x0b\x20\x05\x41\x10\x6a\x21\x05\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x02\x40\x02\x40\x20\x01\x28\x02\x94\x03\x0d\x00\x41\x7f\x21\x10\x0c\x01\x0b\x20\x01\x41\x7f\x10\xb8\x07\x21\x10\x20\x02\x41\xc0\x06\x6a\x41\x08\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\xe9\x00\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x10\x10\xa4\x07\x20\x01\x20\x10\x41\x01\x10\xae\x07\x1a\x20\x01\x20\x01\x28\x02\xd0\x02\x41\x01\x6a\x36\x02\xd0\x02\x0b\x41\x00\x21\x09\x03\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x09\x20\x01\x28\x02\xf4\x01\x4e\x0d\x00\x41\x04\x21\x05\x20\x01\x28\x02\xfc\x01\x20\x09\x41\x04\x74\x6a\x22\x0a\x41\x0c\x6a\x21\x06\x20\x0a\x2d\x00\x04\x22\x12\x41\x01\x71\x21\x13\x20\x01\x28\x02\xc0\x02\x21\x07\x41\x00\x21\x04\x02\x40\x02\x40\x02\x40\x03\x40\x20\x04\x20\x07\x4e\x0d\x01\x02\x40\x20\x01\x28\x02\xc8\x02\x20\x05\x6a\x28\x02\x00\x22\x03\x20\x06\x28\x02\x00\x47\x0d\x00\x41\x02\x21\x05\x41\x00\x21\x13\x0c\x03\x0b\x02\x40\x20\x03\x41\x7e\x71\x41\xd2\x00\x47\x0d\x00\x20\x02\x41\xc0\x06\x6a\x41\xde\x00\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x04\x41\xff\xff\x03\x71\x10\x87\x07\x41\x01\x21\x05\x20\x0a\x28\x02\x00\x41\x7f\x4a\x0d\x04\x0c\x06\x0b\x20\x05\x41\x08\x6a\x21\x05\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x01\x28\x02\x24\x41\x00\x47\x21\x03\x02\x40\x20\x12\x41\x02\x71\x22\x07\x0d\x00\x20\x0a\x28\x02\x00\x41\x00\x48\x0d\x00\x20\x02\x41\xc0\x06\x6a\x41\x03\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x0a\x28\x02\x00\x10\xa4\x07\x20\x02\x41\xc0\x06\x6a\x41\xc0\x00\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x00\x20\x06\x28\x02\x00\x10\xd9\x03\x10\xa4\x07\x20\x02\x41\xc0\x06\x6a\x20\x03\x10\xcd\x02\x0c\x06\x0b\x20\x02\x41\xc0\x06\x6a\x41\x3e\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x00\x20\x06\x28\x02\x00\x10\xd9\x03\x10\xa4\x07\x41\x00\x21\x05\x20\x02\x41\xc0\x06\x6a\x41\x80\x7f\x41\x82\x7f\x20\x12\x41\x04\x71\x1b\x41\x00\x20\x07\x1b\x20\x03\x72\x41\x83\x01\x71\x10\xcd\x02\x0b\x20\x0a\x28\x02\x00\x21\x03\x02\x40\x20\x13\x0d\x00\x20\x03\x41\x00\x48\x0d\x05\x0b\x20\x03\x41\x00\x48\x0d\x02\x0b\x20\x02\x41\xc0\x06\x6a\x41\x03\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x0a\x28\x02\x00\x10\xa4\x07\x20\x06\x28\x02\x00\x41\xfc\x00\x47\x0d\x02\x20\x02\x41\xc0\x06\x6a\x41\xcd\x00\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\x16\x10\xa4\x07\x0c\x02\x0b\x02\x40\x20\x01\x28\x02\x94\x03\x45\x0d\x00\x20\x02\x41\xc0\x06\x6a\x41\x29\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\xb6\x01\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x10\x10\xa4\x07\x20\x01\x28\x02\xa4\x02\x20\x10\x41\x14\x6c\x6a\x20\x02\x28\x02\xc4\x06\x36\x02\x08\x0b\x20\x00\x28\x02\x10\x22\x04\x41\x10\x6a\x20\x01\x28\x02\xfc\x01\x20\x04\x28\x02\x04\x11\x00\x00\x20\x01\x42\x00\x37\x02\xf4\x01\x20\x01\x41\x00\x36\x02\xfc\x01\x0c\x04\x0b\x20\x02\x41\xc0\x06\x6a\x41\x06\x10\xcd\x02\x0b\x02\x40\x20\x05\x41\x7f\x6a\x22\x05\x41\x01\x4b\x0d\x00\x02\x40\x02\x40\x20\x05\x0e\x02\x01\x00\x01\x0b\x20\x02\x41\xc0\x06\x6a\x41\xdf\x00\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x04\x41\xff\xff\x03\x71\x10\x87\x07\x0c\x02\x0b\x20\x02\x41\xc0\x06\x6a\x41\xcc\x00\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x00\x20\x06\x28\x02\x00\x10\xd9\x03\x10\xa4\x07\x20\x02\x41\xc0\x06\x6a\x41\x0e\x10\xcd\x02\x0c\x01\x0b\x20\x02\x41\xc0\x06\x6a\x41\x39\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x00\x20\x06\x28\x02\x00\x10\xd9\x03\x10\xa4\x07\x0b\x20\x00\x20\x06\x28\x02\x00\x10\xe4\x02\x20\x09\x41\x01\x6a\x21\x09\x0c\x00\x0b\x00\x0b\x20\x01\x28\x02\xcc\x01\x20\x0f\x41\x03\x74\x6a\x41\x04\x6a\x21\x04\x03\x40\x20\x04\x28\x02\x00\x22\x04\x41\x00\x48\x0d\x09\x20\x01\x28\x02\x74\x20\x04\x41\x04\x74\x6a\x22\x05\x28\x02\x04\x20\x0f\x47\x0d\x09\x02\x40\x20\x04\x20\x01\x28\x02\x9c\x01\x46\x0d\x00\x02\x40\x02\x40\x20\x05\x28\x02\x0c\x41\x03\x76\x41\x0f\x71\x41\x7f\x6a\x41\x02\x49\x0d\x00\x20\x02\x41\xc0\x06\x6a\x41\xe1\x00\x10\xcd\x02\x0c\x01\x0b\x20\x02\x41\xc0\x06\x6a\x41\x03\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x05\x41\x0c\x6a\x28\x02\x00\x41\x01\x74\x41\x08\x75\x10\xa4\x07\x20\x02\x41\xc0\x06\x6a\x41\xd9\x00\x10\xcd\x02\x0b\x20\x02\x41\xc0\x06\x6a\x20\x04\x41\xff\xff\x03\x71\x10\x87\x07\x0b\x20\x05\x41\x08\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x02\x40\x20\x07\x28\x00\x01\x22\x04\x41\x00\x48\x0d\x00\x20\x04\x20\x01\x28\x02\xac\x02\x4e\x0d\x00\x20\x01\x28\x02\xa4\x02\x20\x04\x41\x14\x6c\x6a\x20\x02\x28\x02\xc4\x06\x20\x0a\x6a\x36\x02\x08\x0c\x07\x0b\x41\xbc\xca\x02\x41\xae\xb7\x01\x41\xc4\xf2\x01\x41\xe1\xca\x02\x10\x4a\x00\x0b\x02\x40\x02\x40\x02\x40\x20\x00\x20\x02\x41\xd8\x06\x6a\x20\x02\x41\xdc\x06\x6a\x20\x01\x20\x07\x28\x00\x01\x22\x03\x20\x07\x2f\x00\x05\x22\x0a\x10\xb9\x07\x22\x09\x41\x00\x48\x0d\x00\x20\x02\x28\x02\xdc\x06\x22\x06\x45\x0d\x01\x02\x40\x02\x40\x02\x40\x20\x05\x41\xc2\x7e\x6a\x22\x07\x41\x02\x4b\x0d\x00\x02\x40\x02\x40\x20\x07\x0e\x03\x00\x00\x01\x00\x0b\x20\x06\x41\x7b\x6a\x22\x04\x41\x04\x4b\x0d\x01\x02\x40\x02\x40\x02\x40\x20\x04\x0e\x05\x00\x01\x02\x05\x02\x00\x0b\x02\x40\x20\x05\x41\xbf\x01\x47\x0d\x00\x20\x02\x41\xc0\x06\x6a\x41\x11\x10\xcd\x02\x0b\x20\x02\x41\xc0\x06\x6a\x20\x02\x28\x02\xd8\x06\x20\x09\x10\xba\x07\x20\x02\x41\xc0\x06\x6a\x41\xc4\x00\x10\xcd\x02\x0c\x05\x0b\x20\x02\x41\xc0\x06\x6a\x20\x02\x28\x02\xd8\x06\x20\x09\x10\xba\x07\x20\x02\x41\xc0\x06\x6a\x41\x2c\x10\xcd\x02\x20\x05\x41\xbf\x01\x46\x0d\x04\x20\x02\x41\xc0\x06\x6a\x41\x0f\x10\xcd\x02\x0c\x04\x0b\x02\x40\x20\x05\x41\xbf\x01\x47\x0d\x00\x20\x02\x41\xc0\x06\x6a\x41\x11\x10\xcd\x02\x0b\x20\x02\x41\xc0\x06\x6a\x20\x02\x28\x02\xd8\x06\x20\x09\x10\xba\x07\x20\x02\x41\xc0\x06\x6a\x41\x2c\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\x24\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\x00\x10\x87\x07\x0c\x03\x0b\x20\x06\x41\x7b\x6a\x22\x05\x41\x04\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x05\x0e\x05\x00\x01\x01\x02\x02\x00\x0b\x20\x02\x41\xc0\x06\x6a\x20\x02\x28\x02\xd8\x06\x20\x09\x10\xba\x07\x20\x02\x41\xc0\x06\x6a\x41\xc5\x00\x10\xcd\x02\x0c\x04\x0b\x20\x02\x41\xc0\x06\x6a\x41\x30\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x00\x20\x03\x10\xd9\x03\x10\xa4\x07\x20\x02\x41\xc0\x06\x6a\x41\x00\x10\xcd\x02\x0c\x03\x0b\x20\x00\x20\x03\x10\xbb\x07\x22\x05\x45\x0d\x03\x20\x00\x20\x02\x41\xd8\x06\x6a\x20\x02\x41\xdc\x06\x6a\x20\x01\x20\x05\x20\x0a\x10\xb9\x07\x21\x06\x20\x00\x20\x05\x10\xe4\x02\x20\x06\x41\x00\x48\x0d\x03\x20\x02\x28\x02\xdc\x06\x41\x08\x47\x0d\x05\x20\x02\x41\xc0\x06\x6a\x20\x02\x28\x02\xd8\x06\x20\x06\x10\xba\x07\x20\x02\x41\xc0\x06\x6a\x41\x1b\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\x1e\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\x2c\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\x1d\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\x24\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x41\x01\x10\x87\x07\x0c\x02\x0b\x10\x40\x00\x0b\x20\x02\x41\xc0\x06\x6a\x41\x30\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x00\x20\x03\x10\xd9\x03\x10\xa4\x07\x20\x02\x41\xc0\x06\x6a\x41\x00\x10\xcd\x02\x0b\x20\x00\x20\x03\x10\xe4\x02\x0c\x09\x0b\x02\x40\x03\x40\x20\x04\x20\x0c\x4e\x0d\x01\x20\x02\x41\xc0\x06\x6a\x20\x0b\x20\x04\x6a\x22\x05\x20\x05\x2d\x00\x00\x41\x02\x74\x41\x90\xb9\x01\x6a\x2d\x00\x00\x22\x05\x10\xa5\x07\x1a\x20\x04\x20\x05\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x0d\x10\xa6\x07\x20\x0d\x41\x10\x6a\x20\x02\x41\xc0\x06\x6a\x41\x10\x6a\x29\x03\x00\x37\x02\x00\x20\x0d\x41\x08\x6a\x20\x02\x41\xc0\x06\x6a\x41\x08\x6a\x29\x03\x00\x37\x02\x00\x20\x0d\x20\x02\x29\x03\xc0\x06\x37\x02\x00\x0c\x0b\x0b\x41\xe4\xc9\x02\x41\xae\xb7\x01\x41\xd3\xeb\x01\x41\xfe\xc9\x02\x10\x4a\x00\x0b\x41\x9a\xca\x02\x41\xae\xb7\x01\x41\x90\xec\x01\x41\xfe\xc9\x02\x10\x4a\x00\x0b\x20\x01\x28\x02\xa4\x02\x20\x07\x28\x00\x05\x41\x14\x6c\x6a\x22\x04\x20\x04\x28\x02\x00\x41\x7f\x6a\x36\x02\x00\x20\x00\x20\x01\x20\x07\x28\x00\x01\x22\x03\x20\x07\x2f\x00\x09\x20\x05\x20\x02\x41\xc0\x06\x6a\x20\x0b\x20\x04\x20\x08\x10\xbc\x07\x21\x08\x20\x00\x20\x03\x10\xe4\x02\x0c\x05\x0b\x20\x00\x20\x01\x20\x07\x28\x00\x01\x22\x04\x20\x07\x2f\x00\x05\x20\x05\x20\x02\x41\xc0\x06\x6a\x41\x00\x41\x00\x20\x08\x10\xbc\x07\x21\x08\x20\x00\x20\x04\x10\xe4\x02\x0c\x04\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x20\x05\x41\x97\x7f\x6a\x22\x04\x41\x05\x4d\x0d\x00\x20\x05\x41\x31\x47\x0d\x01\x20\x07\x2f\x00\x01\x21\x04\x20\x01\x20\x07\x41\x03\x6a\x2f\x00\x00\x22\x05\x10\xbd\x07\x20\x02\x41\xc0\x06\x6a\x41\x31\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x04\x10\x87\x07\x20\x02\x41\xc0\x06\x6a\x20\x01\x28\x02\xcc\x01\x20\x05\x41\x03\x74\x6a\x2f\x01\x04\x41\x01\x6a\x41\xff\xff\x03\x71\x10\x87\x07\x0c\x07\x0b\x20\x04\x0e\x06\x04\x04\x02\x04\x01\x03\x04\x0b\x02\x40\x20\x05\x41\x32\x47\x0d\x00\x20\x01\x20\x07\x2f\x00\x01\x22\x04\x10\xbd\x07\x20\x02\x41\xc0\x06\x6a\x41\x32\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x01\x28\x02\xcc\x01\x20\x04\x41\x03\x74\x6a\x2f\x01\x04\x41\x01\x6a\x41\xff\xff\x03\x71\x10\x87\x07\x0c\x06\x0b\x20\x05\x41\xcd\x00\x47\x0d\x04\x20\x07\x28\x00\x01\x45\x0d\x05\x0c\x04\x0b\x20\x01\x20\x01\x28\x02\xd0\x02\x41\x01\x6a\x36\x02\xd0\x02\x20\x07\x28\x00\x01\x22\x04\x41\x00\x48\x0d\x05\x20\x04\x20\x01\x28\x02\xac\x02\x4e\x0d\x05\x20\x01\x28\x02\xa4\x02\x20\x04\x41\x14\x6c\x6a\x22\x04\x28\x02\x04\x21\x05\x20\x02\x42\xee\x80\x80\x80\x70\x37\x03\x00\x20\x02\x41\x98\x06\x6a\x20\x05\x20\x02\x10\xad\x07\x45\x0d\x03\x20\x04\x20\x04\x28\x02\x00\x41\x7f\x6a\x36\x02\x00\x0c\x04\x0b\x20\x01\x20\x01\x28\x02\xd0\x02\x41\x01\x6a\x36\x02\xd0\x02\x0b\x20\x02\x41\x7f\x36\x02\xdc\x06\x20\x02\x41\xc0\x06\x6a\x20\x07\x20\x0a\x10\xa5\x07\x1a\x20\x01\x20\x0b\x20\x0c\x20\x08\x20\x02\x41\xdc\x06\x6a\x10\xb1\x07\x21\x08\x20\x0e\x20\x02\x28\x02\xdc\x06\x22\x04\x46\x0d\x02\x20\x08\x20\x0c\x4e\x0d\x02\x20\x04\x41\x00\x48\x0d\x02\x20\x01\x20\x01\x28\x02\xdc\x02\x41\x01\x6a\x36\x02\xdc\x02\x20\x02\x41\xc0\x06\x6a\x41\xc2\x01\x10\xcd\x02\x20\x02\x41\xc0\x06\x6a\x20\x04\x10\xa4\x07\x20\x04\x21\x0e\x0c\x02\x0b\x20\x01\x20\x01\x28\x02\xd0\x02\x41\x01\x6a\x36\x02\xd0\x02\x0b\x20\x02\x41\xc0\x06\x6a\x20\x07\x20\x0a\x10\xa5\x07\x1a\x0c\x00\x0b\x00\x0b\x41\xbc\xca\x02\x41\xae\xb7\x01\x41\xf4\xf1\x01\x41\xe1\xca\x02\x10\x4a\x00\x0b\x41\xc2\xc9\x02\x41\xae\xb7\x01\x41\xbb\xfe\x01\x41\xd1\xc9\x02\x10\x4a\x00\x0b\x20\x00\x20\x01\x10\x85\x07\x42\x80\x80\x80\x80\xe0\x00\x21\x14\x0b\x20\x02\x41\xe0\x06\x6a\x24\x00\x20\x14\x0b\x0d\x00\x20\x00\x41\x80\x02\x6a\x20\x01\x10\x87\x07\x0b\x67\x01\x03\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x20\x00\x28\x02\x00\x21\x04\x20\x03\x20\x02\x36\x02\x0c\x41\x00\x21\x05\x20\x04\x41\x03\x20\x01\x20\x02\x41\x00\x10\xc5\x02\x02\x40\x20\x00\x28\x02\x40\x22\x02\x45\x0d\x00\x20\x02\x28\x02\x68\x41\x00\x47\x41\x01\x74\x21\x05\x0b\x20\x04\x20\x04\x28\x02\x10\x29\x03\x80\x01\x20\x00\x28\x02\x0c\x20\x00\x28\x02\x08\x20\x05\x10\xc8\x02\x20\x03\x41\x10\x6a\x24\x00\x0b\xbc\x03\x02\x04\x7f\x01\x7e\x23\x00\x41\x20\x6b\x22\x02\x24\x00\x02\x40\x02\x40\x20\x00\x28\x02\x00\x20\x02\x41\x08\x6a\x41\x20\x10\xb3\x04\x0d\x00\x02\x40\x02\x40\x03\x40\x20\x01\x22\x03\x20\x00\x28\x02\x3c\x4f\x0d\x01\x20\x03\x41\x01\x6a\x21\x01\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x03\x2d\x00\x00\x22\x04\x41\xa4\x7f\x6a\x22\x05\x41\x04\x4d\x0d\x00\x20\x04\x41\x24\x47\x0d\x03\x41\x24\x21\x05\x20\x01\x2d\x00\x00\x41\xfb\x00\x47\x0d\x04\x20\x03\x41\x02\x6a\x21\x01\x41\x24\x21\x03\x0c\x01\x0b\x02\x40\x20\x05\x0e\x05\x02\x03\x03\x03\x00\x02\x0b\x41\xe0\x00\x21\x03\x0b\x20\x00\x41\x82\x7f\x36\x02\x10\x20\x00\x41\x28\x6a\x20\x03\x36\x02\x00\x20\x02\x41\x08\x6a\x10\xf6\x03\x21\x06\x20\x00\x20\x01\x36\x02\x38\x20\x00\x41\x20\x6a\x20\x06\x37\x03\x00\x41\x00\x21\x01\x0c\x07\x0b\x20\x02\x41\x08\x6a\x41\xdc\x00\x10\xb4\x04\x0d\x05\x20\x01\x20\x00\x28\x02\x3c\x4f\x0d\x03\x20\x03\x41\x02\x6a\x21\x01\x20\x03\x2d\x00\x01\x21\x04\x0b\x02\x40\x20\x04\x41\xff\x01\x71\x22\x05\x41\x76\x6a\x22\x03\x41\x03\x4b\x0d\x00\x02\x40\x02\x40\x20\x03\x0e\x04\x01\x02\x02\x00\x01\x0b\x20\x01\x41\x01\x6a\x20\x01\x20\x01\x2d\x00\x00\x41\x0a\x46\x1b\x21\x01\x0b\x20\x00\x20\x00\x28\x02\x08\x41\x01\x6a\x36\x02\x08\x41\x0a\x21\x05\x0c\x01\x0b\x20\x04\x41\x18\x74\x41\x18\x75\x41\x7f\x4a\x0d\x00\x20\x01\x41\x7f\x6a\x41\x06\x20\x02\x41\x04\x6a\x10\x9e\x04\x22\x05\x41\xff\xff\xc3\x00\x4b\x0d\x03\x20\x02\x28\x02\x04\x21\x01\x0b\x20\x02\x41\x08\x6a\x20\x05\x10\xf0\x05\x45\x0d\x00\x0c\x03\x0b\x00\x0b\x20\x00\x41\xcb\xdd\x02\x41\x00\x10\x8a\x07\x0c\x01\x0b\x20\x00\x41\xe8\xdc\x02\x41\x00\x10\x8a\x07\x0b\x20\x02\x28\x02\x08\x28\x02\x10\x22\x01\x41\x10\x6a\x20\x02\x28\x02\x0c\x20\x01\x28\x02\x04\x11\x00\x00\x20\x02\x41\x00\x36\x02\x0c\x41\x7f\x21\x01\x0b\x20\x02\x41\x20\x6a\x24\x00\x20\x01\x0b\x81\x07\x01\x06\x7f\x23\x00\x41\x30\x6b\x22\x06\x24\x00\x20\x06\x20\x03\x36\x02\x2c\x02\x40\x02\x40\x20\x00\x28\x02\x00\x20\x06\x41\x10\x6a\x41\x20\x10\xb3\x04\x0d\x00\x20\x01\x41\xe0\x00\x47\x21\x07\x03\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x03\x20\x00\x28\x02\x3c\x22\x08\x4f\x0d\x00\x02\x40\x20\x03\x2d\x00\x00\x22\x09\x41\x1f\x4b\x0d\x00\x02\x40\x20\x00\x28\x02\x40\x0d\x00\x20\x02\x45\x0d\x0c\x20\x00\x41\xe4\xdd\x02\x41\x00\x10\x8a\x07\x0c\x0c\x0b\x02\x40\x20\x07\x0d\x00\x20\x09\x41\x0d\x47\x0d\x01\x41\x0a\x21\x09\x20\x03\x2d\x00\x01\x41\x0a\x47\x0d\x01\x20\x06\x20\x03\x41\x01\x6a\x22\x03\x36\x02\x2c\x0c\x01\x0b\x20\x09\x41\x76\x6a\x22\x0a\x41\x03\x4b\x0d\x00\x20\x0a\x0e\x04\x01\x00\x00\x01\x01\x0b\x20\x06\x20\x03\x41\x01\x6a\x22\x0a\x36\x02\x2c\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x09\x20\x01\x47\x0d\x00\x20\x01\x21\x09\x0c\x01\x0b\x20\x09\x41\xdc\x00\x46\x0d\x01\x20\x09\x41\x24\x47\x0d\x02\x41\x24\x21\x08\x20\x07\x0d\x0a\x20\x0a\x2d\x00\x00\x41\xff\x01\x71\x41\xfb\x00\x47\x0d\x0a\x20\x06\x20\x03\x41\x02\x6a\x22\x0a\x36\x02\x2c\x0b\x20\x04\x41\x81\x7f\x36\x02\x00\x20\x04\x41\x18\x6a\x20\x09\x36\x02\x00\x20\x04\x20\x06\x41\x10\x6a\x10\xf6\x03\x37\x03\x10\x20\x05\x20\x0a\x36\x02\x00\x41\x00\x21\x03\x0c\x0e\x0b\x20\x0a\x2d\x00\x00\x22\x09\x41\x76\x6a\x22\x0b\x41\x03\x4d\x0d\x03\x20\x09\x41\xdc\x00\x46\x0d\x01\x20\x09\x41\x22\x46\x0d\x01\x20\x09\x41\x27\x46\x0d\x01\x20\x09\x0d\x04\x20\x0a\x20\x08\x4f\x0d\x02\x20\x06\x20\x03\x41\x02\x6a\x36\x02\x2c\x41\x00\x21\x08\x0c\x08\x0b\x20\x09\x21\x08\x20\x09\x41\x80\x01\x49\x0d\x07\x20\x03\x41\x06\x20\x06\x41\x0c\x6a\x10\x9e\x04\x22\x08\x41\xff\xff\xc3\x00\x4b\x0d\x05\x20\x06\x20\x06\x28\x02\x0c\x36\x02\x2c\x0c\x07\x0b\x20\x06\x20\x03\x41\x02\x6a\x36\x02\x2c\x0c\x03\x0b\x20\x02\x45\x0d\x09\x20\x00\x41\xcb\xdd\x02\x41\x00\x10\x8a\x07\x0c\x09\x0b\x41\x01\x21\x08\x20\x0b\x0e\x04\x06\x00\x00\x05\x06\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x20\x09\x41\x18\x74\x41\x18\x75\x22\x08\x41\x50\x6a\x41\xff\x01\x71\x41\x09\x4b\x0d\x00\x20\x00\x28\x02\x40\x22\x0a\x45\x0d\x02\x02\x40\x20\x01\x41\xe0\x00\x46\x0d\x00\x20\x0a\x2d\x00\x6e\x41\x01\x71\x45\x0d\x02\x0b\x02\x40\x20\x08\x41\x30\x47\x0d\x00\x20\x03\x2d\x00\x02\x41\x50\x6a\x41\xff\x01\x71\x41\x0a\x4f\x0d\x07\x41\x30\x21\x08\x0b\x20\x01\x41\xe0\x00\x46\x0d\x02\x20\x08\x41\xff\x01\x71\x41\x37\x4b\x0d\x02\x20\x02\x45\x0d\x0b\x20\x00\x41\x87\xde\x02\x41\x00\x10\x8a\x07\x0c\x0b\x0b\x20\x08\x41\x7f\x4a\x0d\x00\x20\x0a\x41\x06\x20\x06\x41\x0c\x6a\x10\x9e\x04\x22\x08\x41\x80\x80\xc4\x00\x4f\x0d\x04\x20\x06\x20\x06\x28\x02\x0c\x22\x03\x36\x02\x2c\x20\x08\x41\x01\x72\x41\xa9\xc0\x00\x46\x0d\x09\x0c\x06\x0b\x20\x06\x41\x2c\x6a\x41\x01\x10\x8f\x07\x22\x08\x41\x7f\x47\x0d\x01\x0b\x20\x02\x45\x0d\x08\x20\x00\x41\xbd\xde\x02\x41\x00\x10\x8a\x07\x0c\x08\x0b\x20\x08\x41\x7f\x4a\x0d\x03\x20\x06\x20\x06\x28\x02\x2c\x41\x01\x6a\x36\x02\x2c\x0b\x20\x09\x21\x08\x0c\x02\x0b\x20\x02\x45\x0d\x05\x20\x00\x41\xe8\xdc\x02\x41\x00\x10\x8a\x07\x0c\x05\x0b\x20\x06\x20\x03\x41\x02\x6a\x36\x02\x2c\x41\x00\x21\x08\x0b\x20\x06\x41\x10\x6a\x20\x08\x10\xf0\x05\x0d\x03\x20\x06\x28\x02\x2c\x21\x03\x0c\x02\x0b\x20\x03\x2d\x00\x02\x41\x0a\x47\x0d\x00\x20\x06\x20\x03\x41\x02\x6a\x36\x02\x2c\x41\x02\x21\x08\x0b\x20\x06\x20\x0a\x20\x08\x6a\x22\x03\x36\x02\x2c\x20\x01\x41\xe0\x00\x46\x0d\x00\x20\x00\x20\x00\x28\x02\x08\x41\x01\x6a\x36\x02\x08\x0c\x00\x0b\x00\x0b\x20\x06\x28\x02\x10\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x06\x28\x02\x14\x20\x03\x28\x02\x04\x11\x00\x00\x20\x06\x41\x00\x36\x02\x14\x41\x7f\x21\x03\x0b\x20\x06\x41\x30\x6a\x24\x00\x20\x03\x0b\x30\x00\x02\x40\x20\x00\x41\xff\x00\x4b\x0d\x00\x20\x00\x41\x03\x76\x41\xfc\xff\xff\xff\x01\x71\x41\xc0\xa2\x03\x6a\x28\x02\x00\x20\x00\x41\x1f\x71\x76\x41\x01\x71\x0f\x0b\x20\x00\x10\xfa\x07\x0b\x3e\x00\x02\x40\x20\x00\x41\xff\x00\x4b\x0d\x00\x20\x00\x41\x03\x76\x41\xfc\xff\xff\xff\x01\x71\x41\xd0\xa2\x03\x6a\x28\x02\x00\x20\x00\x41\x1f\x71\x76\x41\x01\x71\x0f\x0b\x20\x00\x41\x01\x72\x41\x8d\xc0\x00\x46\x20\x00\x10\xf9\x07\x41\x00\x47\x72\x0b\x84\x05\x01\x07\x7f\x20\x00\x28\x02\x00\x22\x02\x41\x01\x6a\x21\x03\x41\x08\x21\x04\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x2d\x00\x00\x22\x05\x41\x50\x6a\x22\x06\x41\x08\x49\x0d\x00\x41\x7e\x21\x07\x20\x05\x41\x92\x7f\x6a\x22\x06\x41\x0a\x4d\x0d\x01\x20\x05\x41\x9e\x7f\x6a\x22\x02\x41\x04\x4b\x0d\x03\x02\x40\x20\x02\x0e\x05\x03\x04\x04\x04\x00\x03\x0b\x41\x0c\x21\x04\x0c\x02\x0b\x02\x40\x20\x01\x41\x02\x47\x0d\x00\x41\x7f\x21\x07\x20\x06\x0d\x03\x41\x00\x21\x04\x20\x03\x2d\x00\x00\x41\x50\x6a\x41\x09\x4b\x0d\x02\x0c\x03\x0b\x02\x40\x20\x03\x2d\x00\x00\x41\x50\x6a\x22\x04\x41\x07\x4d\x0d\x00\x20\x06\x21\x04\x0c\x02\x0b\x20\x02\x41\x02\x6a\x21\x03\x20\x04\x20\x06\x41\x03\x74\x72\x22\x04\x41\x1f\x4b\x0d\x01\x20\x03\x2d\x00\x00\x41\x50\x6a\x22\x07\x41\x07\x4b\x0d\x01\x20\x02\x41\x03\x6a\x21\x03\x20\x07\x20\x04\x41\x03\x74\x72\x21\x04\x0c\x01\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x06\x0e\x0b\x04\x06\x06\x06\x03\x06\x02\x00\x01\x06\x00\x04\x0b\x02\x40\x20\x01\x45\x0d\x00\x20\x03\x2d\x00\x00\x41\xff\x01\x71\x41\xfb\x00\x47\x0d\x00\x20\x02\x41\x03\x6a\x21\x05\x20\x02\x2d\x00\x02\x21\x02\x41\x00\x21\x04\x03\x40\x41\x7f\x21\x07\x20\x02\x41\xff\x01\x71\x10\xc9\x09\x22\x03\x41\x00\x48\x0d\x07\x20\x03\x20\x04\x41\x04\x74\x72\x22\x04\x41\xff\xff\xc3\x00\x4b\x0d\x07\x20\x05\x2d\x00\x00\x21\x02\x20\x05\x41\x01\x6a\x22\x03\x21\x05\x20\x02\x41\xfd\x00\x47\x0d\x00\x0c\x06\x0b\x00\x0b\x20\x02\x41\x02\x41\x04\x20\x05\x41\xf8\x00\x46\x1b\x22\x06\x41\x01\x72\x6a\x21\x08\x20\x06\x21\x07\x41\x00\x21\x04\x02\x40\x03\x40\x20\x07\x45\x0d\x01\x02\x40\x20\x03\x2d\x00\x00\x10\xc9\x09\x22\x05\x41\x00\x4e\x0d\x00\x41\x7f\x0f\x0b\x20\x07\x41\x7f\x6a\x21\x07\x20\x03\x41\x01\x6a\x21\x03\x20\x05\x20\x04\x41\x04\x74\x72\x21\x04\x0c\x00\x0b\x00\x0b\x02\x40\x20\x01\x41\x02\x47\x0d\x00\x20\x04\x41\x80\x78\x71\x41\x80\xb0\x03\x47\x0d\x00\x20\x08\x2d\x00\x00\x41\xdc\x00\x47\x0d\x00\x20\x08\x2d\x00\x01\x41\xf5\x00\x47\x0d\x00\x20\x06\x20\x02\x6a\x41\x03\x6a\x21\x05\x41\x00\x21\x03\x41\x00\x21\x07\x02\x40\x03\x40\x20\x03\x41\x04\x46\x0d\x01\x20\x05\x20\x03\x6a\x2d\x00\x00\x10\xc9\x09\x22\x02\x41\x00\x48\x0d\x02\x20\x03\x41\x01\x6a\x21\x03\x20\x02\x20\x07\x41\x04\x74\x72\x21\x07\x0c\x00\x0b\x00\x0b\x20\x07\x41\x80\x78\x71\x41\x80\xb8\x03\x47\x0d\x00\x20\x07\x41\xff\x07\x71\x20\x04\x41\x0a\x74\x41\x80\xf8\x3f\x71\x72\x41\x80\x80\x04\x6a\x21\x04\x20\x08\x41\x06\x6a\x21\x03\x0c\x05\x0b\x20\x08\x21\x03\x0c\x04\x0b\x41\x0b\x21\x04\x0c\x03\x0b\x41\x09\x21\x04\x0c\x02\x0b\x41\x0d\x21\x04\x0c\x01\x0b\x41\x0a\x21\x04\x0b\x20\x00\x20\x03\x36\x02\x00\x20\x04\x21\x07\x0b\x20\x07\x0b\xf6\x02\x01\x05\x7f\x23\x00\x41\xa0\x01\x6b\x22\x05\x24\x00\x20\x05\x41\x80\x01\x36\x02\x08\x20\x05\x20\x05\x41\x10\x6a\x36\x02\x0c\x20\x01\x28\x02\x00\x21\x06\x02\x40\x02\x40\x20\x04\x0d\x00\x41\x00\x21\x04\x0c\x01\x0b\x20\x05\x41\x23\x3a\x00\x10\x41\x01\x21\x04\x0b\x02\x40\x02\x40\x03\x40\x20\x05\x20\x06\x36\x02\x9c\x01\x02\x40\x02\x40\x20\x03\x41\xff\x00\x4a\x0d\x00\x20\x05\x28\x02\x0c\x22\x07\x20\x04\x6a\x20\x03\x3a\x00\x00\x20\x04\x41\x01\x6a\x21\x04\x0c\x01\x0b\x20\x05\x28\x02\x0c\x22\x07\x20\x04\x6a\x20\x03\x10\xe8\x02\x20\x04\x6a\x21\x04\x0b\x20\x05\x20\x06\x41\x01\x6a\x22\x08\x36\x02\x9c\x01\x02\x40\x02\x40\x20\x06\x2c\x00\x00\x22\x09\x41\xff\x01\x71\x22\x03\x41\xdc\x00\x47\x0d\x00\x41\xdc\x00\x21\x03\x20\x08\x2d\x00\x00\x41\xf5\x00\x47\x0d\x01\x20\x05\x41\x9c\x01\x6a\x41\x01\x10\x8f\x07\x21\x03\x20\x02\x41\x01\x36\x02\x00\x0c\x01\x0b\x20\x09\x41\x7f\x4a\x0d\x00\x20\x06\x41\x06\x20\x05\x41\x9c\x01\x6a\x10\x9e\x04\x21\x03\x0b\x20\x03\x10\x8e\x07\x45\x0d\x01\x20\x05\x28\x02\x9c\x01\x21\x06\x20\x04\x20\x05\x28\x02\x08\x41\x7a\x6a\x49\x0d\x00\x20\x00\x28\x02\x00\x20\x05\x41\x0c\x6a\x20\x05\x41\x08\x6a\x20\x05\x41\x10\x6a\x10\xfb\x07\x45\x0d\x00\x0b\x41\x00\x21\x03\x20\x05\x28\x02\x0c\x21\x07\x0c\x01\x0b\x20\x00\x28\x02\x00\x20\x07\x20\x04\x10\xb0\x04\x21\x03\x0b\x02\x40\x20\x07\x20\x05\x41\x10\x6a\x46\x0d\x00\x20\x00\x28\x02\x00\x28\x02\x10\x22\x04\x41\x10\x6a\x20\x07\x20\x04\x28\x02\x04\x11\x00\x00\x0b\x20\x01\x20\x06\x36\x02\x00\x20\x05\x41\xa0\x01\x6a\x24\x00\x20\x03\x0b\x32\x00\x20\x00\x41\x14\x6a\x20\x01\x28\x02\x00\x36\x02\x00\x20\x00\x20\x01\x28\x02\x04\x36\x02\x08\x20\x00\x20\x01\x28\x02\x0c\x36\x02\x38\x20\x00\x20\x01\x28\x02\x08\x36\x02\x30\x20\x00\x10\x80\x07\x0b\x2d\x01\x01\x7f\x41\x00\x21\x02\x02\x40\x20\x00\x28\x02\x10\x41\x83\x7f\x47\x0d\x00\x20\x00\x41\x20\x6a\x28\x02\x00\x20\x01\x47\x0d\x00\x20\x00\x28\x02\x24\x45\x21\x02\x0b\x20\x02\x0b\xab\x05\x01\x03\x7f\x20\x00\x28\x02\x38\x21\x00\x02\x40\x03\x40\x20\x00\x22\x02\x41\x01\x6a\x21\x00\x02\x40\x20\x02\x2d\x00\x00\x22\x03\x41\x77\x6a\x22\x04\x41\x17\x4b\x0d\x00\x41\x01\x20\x04\x74\x22\x04\x41\x8d\x80\x80\x04\x71\x0d\x01\x20\x04\x41\x12\x71\x45\x0d\x00\x20\x01\x45\x0d\x01\x0c\x02\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x03\x41\x2f\x46\x0d\x00\x41\x3d\x21\x04\x20\x03\x41\x3d\x47\x0d\x01\x41\xa6\x7f\x21\x02\x20\x00\x2d\x00\x00\x41\x3e\x47\x0d\x02\x0c\x03\x0b\x20\x00\x2d\x00\x00\x22\x04\x41\x2f\x46\x0d\x03\x02\x40\x20\x04\x41\x2a\x47\x0d\x00\x20\x02\x41\x02\x6a\x21\x00\x03\x40\x02\x40\x02\x40\x20\x00\x2d\x00\x00\x22\x04\x41\x76\x6a\x22\x02\x41\x03\x4d\x0d\x00\x02\x40\x20\x04\x41\x2a\x46\x0d\x00\x20\x04\x45\x0d\x09\x0c\x02\x0b\x20\x00\x41\x01\x6a\x2d\x00\x00\x41\x2f\x47\x0d\x01\x20\x00\x41\x02\x6a\x21\x00\x0c\x08\x0b\x02\x40\x20\x02\x0e\x04\x00\x01\x01\x00\x00\x0b\x20\x01\x0d\x08\x0b\x20\x00\x41\x01\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x41\x2f\x21\x04\x0c\x01\x0b\x20\x03\x21\x04\x20\x03\x10\x8d\x07\x45\x0d\x00\x02\x40\x02\x40\x20\x03\x41\x9b\x7f\x6a\x22\x04\x41\x04\x4d\x0d\x00\x20\x03\x41\xef\x00\x47\x0d\x01\x20\x00\x2d\x00\x00\x41\xe6\x00\x47\x0d\x01\x20\x02\x2d\x00\x02\x10\x8e\x07\x0d\x01\x41\x5b\x0f\x0b\x02\x40\x02\x40\x02\x40\x20\x04\x0e\x05\x01\x02\x03\x03\x00\x01\x0b\x02\x40\x20\x00\x2d\x00\x00\x22\x04\x41\xee\x00\x47\x0d\x00\x02\x40\x20\x02\x2d\x00\x02\x10\x8e\x07\x0d\x00\x41\xb9\x7f\x0f\x0b\x20\x00\x2d\x00\x00\x21\x04\x0b\x20\x04\x41\xff\x01\x71\x41\xed\x00\x47\x0d\x02\x20\x02\x2d\x00\x02\x41\xf0\x00\x47\x0d\x02\x20\x02\x2d\x00\x03\x41\xef\x00\x47\x0d\x02\x20\x02\x2d\x00\x04\x41\xf2\x00\x47\x0d\x02\x20\x02\x2d\x00\x05\x41\xf4\x00\x47\x0d\x02\x20\x02\x2d\x00\x06\x10\x8e\x07\x0d\x02\x41\x4f\x0f\x0b\x20\x00\x2d\x00\x00\x41\xf8\x00\x47\x0d\x01\x20\x02\x2d\x00\x02\x41\xf0\x00\x47\x0d\x01\x20\x02\x2d\x00\x03\x41\xef\x00\x47\x0d\x01\x20\x02\x2d\x00\x04\x41\xf2\x00\x47\x0d\x01\x20\x02\x2d\x00\x05\x41\xf4\x00\x47\x0d\x01\x20\x02\x2d\x00\x06\x10\x8e\x07\x0d\x01\x41\x4d\x0f\x0b\x20\x00\x2d\x00\x00\x41\xf5\x00\x47\x0d\x00\x20\x02\x2d\x00\x02\x41\xee\x00\x47\x0d\x00\x20\x02\x2d\x00\x03\x41\xe3\x00\x47\x0d\x00\x20\x02\x2d\x00\x04\x41\xf4\x00\x47\x0d\x00\x20\x02\x2d\x00\x05\x41\xe9\x00\x47\x0d\x00\x20\x02\x2d\x00\x06\x41\xef\x00\x47\x0d\x00\x20\x02\x2d\x00\x07\x41\xee\x00\x47\x0d\x00\x20\x02\x2d\x00\x08\x10\x8e\x07\x0d\x00\x41\x47\x0f\x0b\x41\x83\x7f\x0f\x0b\x20\x04\x21\x02\x0b\x20\x02\x0f\x0b\x20\x01\x0d\x01\x41\x2f\x21\x02\x03\x40\x02\x40\x02\x40\x20\x02\x41\xff\x01\x71\x22\x04\x41\x76\x6a\x22\x02\x41\x03\x4d\x0d\x00\x20\x04\x45\x0d\x03\x0c\x01\x0b\x20\x02\x0e\x04\x02\x00\x00\x02\x02\x0b\x20\x00\x2d\x00\x01\x21\x02\x20\x00\x41\x01\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x00\x0b\x41\x0a\x0b\x13\x00\x20\x00\x20\x01\x20\x02\x20\x03\x20\x04\x41\x00\x41\x00\x10\x96\x07\x0b\xa4\x15\x01\x14\x7f\x23\x00\x41\xd0\x00\x6b\x22\x03\x24\x00\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x21\x04\x20\x00\x28\x02\x00\x21\x05\x41\x00\x21\x06\x20\x03\x41\x00\x36\x02\x3c\x20\x00\x41\x18\x6a\x28\x02\x00\x21\x07\x20\x04\x20\x04\x2d\x00\x6e\x22\x08\x41\x01\x72\x3a\x00\x6e\x02\x40\x02\x40\x02\x40\x20\x00\x10\x80\x07\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x00\x28\x02\x10\x41\x83\x7f\x47\x0d\x00\x20\x00\x41\x28\x6a\x28\x02\x00\x45\x0d\x01\x20\x00\x10\xa1\x07\x0c\x03\x0b\x41\x00\x21\x09\x20\x01\x0d\x01\x20\x02\x41\x02\x46\x0d\x01\x41\x00\x21\x06\x20\x00\x41\xda\xe9\x02\x41\x00\x10\x8a\x07\x0c\x02\x0b\x20\x05\x20\x00\x41\x20\x6a\x28\x02\x00\x10\xd9\x03\x21\x09\x20\x00\x10\x80\x07\x0d\x02\x0b\x41\x00\x21\x06\x02\x40\x20\x01\x0d\x00\x20\x05\x20\x09\x41\xfc\x00\x20\x09\x1b\x10\xd9\x03\x21\x06\x0b\x20\x00\x10\xff\x06\x1a\x02\x40\x02\x40\x20\x00\x28\x02\x10\x41\x4e\x47\x0d\x00\x20\x00\x10\x80\x07\x0d\x03\x20\x00\x10\xc5\x07\x0d\x03\x41\x01\x21\x0a\x0c\x01\x0b\x20\x00\x41\x06\x10\x86\x07\x41\x00\x21\x0a\x0b\x02\x40\x20\x09\x45\x0d\x00\x20\x00\x20\x04\x20\x09\x41\x02\x10\x9d\x07\x41\x00\x48\x0d\x02\x0b\x20\x00\x41\xfb\x00\x10\x98\x07\x0d\x01\x20\x00\x10\xff\x06\x1a\x20\x00\x41\x02\x10\x86\x07\x20\x04\x41\x84\x02\x6a\x28\x02\x00\x21\x0b\x20\x00\x41\xc0\x00\x6a\x22\x01\x28\x02\x00\x41\x00\x10\xc6\x07\x20\x00\x41\xd6\x00\x10\x86\x07\x20\x00\x20\x09\x41\x16\x41\x2f\x20\x06\x1b\x20\x09\x1b\x10\x9e\x07\x20\x01\x28\x02\x00\x20\x0a\x10\xc7\x07\x20\x04\x28\x02\x98\x02\x21\x0c\x41\x00\x21\x01\x02\x40\x03\x40\x20\x01\x41\x20\x46\x0d\x01\x20\x03\x41\x10\x6a\x20\x01\x6a\x22\x0d\x42\x00\x37\x03\x00\x20\x0d\x41\x08\x6a\x41\x00\x36\x02\x00\x20\x01\x41\x10\x6a\x21\x01\x0c\x00\x0b\x00\x0b\x20\x03\x41\x00\x36\x02\x34\x41\x08\x41\x07\x20\x0a\x1b\x21\x0e\x20\x00\x41\xc0\x00\x6a\x21\x0f\x02\x40\x02\x40\x03\x40\x02\x40\x02\x40\x02\x40\x20\x00\x28\x02\x10\x22\x01\x41\x58\x46\x0d\x00\x02\x40\x20\x01\x41\x3b\x46\x0d\x00\x41\x00\x21\x10\x41\x00\x21\x11\x20\x01\x41\xfd\x00\x47\x0d\x02\x02\x40\x20\x03\x28\x02\x34\x22\x01\x0d\x00\x20\x00\x41\xf9\xea\x02\x41\xf4\xea\x02\x20\x0a\x1b\x22\x01\x36\x02\x38\x20\x00\x28\x02\x3c\x21\x10\x20\x00\x20\x01\x41\x18\x41\x04\x20\x0a\x1b\x6a\x36\x02\x3c\x20\x03\x20\x00\x28\x02\x04\x36\x02\x40\x20\x03\x20\x00\x28\x02\x14\x22\x12\x36\x02\x44\x20\x03\x20\x00\x28\x02\x18\x36\x02\x4c\x20\x03\x20\x00\x28\x02\x30\x36\x02\x48\x02\x40\x20\x00\x10\x80\x07\x22\x0d\x0d\x00\x20\x00\x20\x0e\x41\x00\x20\x01\x20\x12\x41\x00\x20\x03\x41\x34\x6a\x10\x96\x07\x21\x0d\x0b\x20\x00\x20\x10\x36\x02\x3c\x20\x00\x20\x03\x41\xc0\x00\x6a\x10\x91\x07\x20\x0d\x72\x0d\x09\x20\x03\x28\x02\x34\x21\x01\x0b\x20\x04\x28\x02\x80\x02\x20\x0b\x6a\x20\x01\x28\x02\x08\x36\x00\x00\x02\x40\x20\x04\x2d\x00\x6e\x41\x02\x71\x0d\x00\x20\x05\x28\x02\x10\x22\x0d\x41\x10\x6a\x20\x01\x28\x02\x8c\x03\x20\x0d\x28\x02\x04\x11\x00\x00\x20\x03\x28\x02\x34\x20\x00\x28\x02\x38\x20\x07\x6b\x22\x01\x36\x02\x90\x03\x20\x05\x20\x07\x20\x01\x10\xd3\x04\x21\x01\x20\x03\x28\x02\x34\x20\x01\x36\x02\x8c\x03\x20\x01\x45\x0d\x09\x0b\x20\x00\x10\x80\x07\x0d\x08\x20\x00\x20\x04\x41\xf6\x00\x41\x02\x10\x9d\x07\x41\x00\x48\x0d\x08\x20\x03\x28\x02\x10\x45\x0d\x05\x20\x00\x20\x03\x41\x10\x6a\x10\xc8\x07\x0c\x06\x0b\x20\x00\x10\x80\x07\x45\x0d\x03\x0c\x07\x0b\x20\x00\x10\x80\x07\x0d\x06\x02\x40\x20\x00\x28\x02\x10\x41\x45\x6a\x22\x01\x41\x02\x4b\x0d\x00\x02\x40\x20\x01\x0e\x03\x00\x01\x00\x00\x0b\x41\x2c\x21\x01\x20\x03\x41\x2c\x36\x02\x3c\x20\x00\x28\x02\x18\x21\x13\x41\x00\x21\x11\x41\x00\x21\x10\x41\x00\x21\x12\x0c\x02\x0b\x20\x00\x41\x1b\x10\x86\x07\x41\x01\x21\x10\x41\x01\x21\x11\x0b\x20\x00\x28\x02\x18\x21\x13\x20\x00\x20\x03\x41\x3c\x6a\x41\x01\x41\x00\x41\x01\x10\xc9\x07\x22\x12\x41\x00\x48\x0d\x05\x20\x03\x28\x02\x3c\x21\x01\x0b\x20\x10\x20\x01\x41\x3c\x47\x72\x21\x14\x02\x40\x02\x40\x02\x40\x20\x12\x41\x6f\x71\x22\x0d\x45\x0d\x00\x20\x14\x45\x0d\x01\x0b\x20\x01\x41\xf8\x00\x46\x0d\x00\x20\x10\x20\x01\x41\x3b\x46\x71\x45\x0d\x01\x0b\x20\x00\x41\xfa\xe9\x02\x41\x00\x10\x8a\x07\x0c\x05\x0b\x20\x12\x41\x10\x71\x21\x12\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x0d\x41\x01\x72\x41\x03\x47\x0d\x00\x02\x40\x20\x12\x45\x0d\x00\x02\x40\x02\x40\x20\x04\x20\x01\x20\x04\x28\x02\xbc\x01\x10\xca\x07\x22\x14\x41\x00\x48\x0d\x00\x02\x40\x20\x04\x28\x02\x74\x20\x14\x41\x04\x74\x6a\x22\x14\x28\x02\x0c\x22\x15\x41\x03\x76\x41\x0f\x71\x22\x01\x41\x09\x4b\x0d\x00\x41\x01\x20\x01\x74\x41\xe0\x04\x71\x0d\x05\x0b\x20\x01\x20\x0d\x41\x05\x6a\x46\x0d\x04\x20\x14\x41\x0c\x6a\x20\x15\x41\x87\x7f\x71\x41\xc8\x00\x72\x36\x02\x00\x0c\x01\x0b\x20\x00\x28\x02\x00\x20\x04\x20\x01\x20\x0d\x41\x05\x6a\x10\xcb\x07\x41\x00\x48\x0d\x0b\x0b\x20\x00\x20\x03\x41\x10\x6a\x20\x11\x41\x04\x74\x6a\x10\xcc\x07\x41\x00\x48\x0d\x0a\x0b\x20\x00\x20\x0d\x41\x02\x6a\x41\x00\x20\x13\x20\x00\x28\x02\x14\x41\x00\x20\x03\x41\xc0\x00\x6a\x10\x96\x07\x0d\x09\x02\x40\x20\x12\x45\x0d\x00\x20\x03\x28\x02\x40\x41\x01\x36\x02\xb8\x01\x20\x00\x41\xd0\x00\x10\x86\x07\x20\x00\x41\xbd\x01\x10\x86\x07\x20\x03\x28\x02\x3c\x21\x01\x02\x40\x02\x40\x20\x0d\x41\x02\x46\x0d\x00\x20\x05\x20\x01\x10\xbb\x07\x22\x01\x45\x0d\x0c\x20\x00\x20\x01\x10\x9e\x07\x20\x00\x28\x02\x00\x20\x04\x20\x01\x41\x08\x10\xcb\x07\x21\x0d\x20\x05\x20\x01\x10\xe4\x02\x20\x0d\x41\x00\x4e\x0d\x01\x0c\x0c\x0b\x20\x00\x20\x01\x10\x9e\x07\x0b\x20\x0f\x28\x02\x00\x22\x01\x20\x01\x2f\x01\xbc\x01\x10\x89\x07\x0c\x05\x0b\x02\x40\x02\x40\x20\x03\x28\x02\x3c\x0d\x00\x20\x00\x41\xd5\x00\x10\x86\x07\x0c\x01\x0b\x20\x00\x41\xd4\x00\x10\x86\x07\x20\x00\x20\x03\x28\x02\x3c\x10\x9e\x07\x0b\x20\x0f\x28\x02\x00\x20\x0d\x41\x7f\x6a\x41\xff\x01\x71\x10\xc7\x07\x0c\x04\x0b\x41\x06\x21\x15\x02\x40\x02\x40\x02\x40\x20\x0d\x41\x06\x4b\x0d\x00\x41\x01\x21\x16\x02\x40\x02\x40\x20\x0d\x0e\x07\x00\x02\x02\x02\x04\x03\x01\x00\x0b\x20\x00\x28\x02\x10\x41\x28\x46\x0d\x01\x02\x40\x20\x01\x41\x45\x6a\x41\x01\x4b\x0d\x00\x20\x00\x41\x8e\xea\x02\x41\x00\x10\x8a\x07\x0c\x0d\x0b\x02\x40\x20\x12\x45\x0d\x00\x20\x04\x20\x01\x20\x04\x28\x02\xbc\x01\x10\xca\x07\x41\x7f\x4a\x0d\x05\x20\x00\x28\x02\x00\x20\x04\x20\x01\x41\x05\x10\xcb\x07\x41\x00\x48\x0d\x0d\x20\x00\x41\x05\x10\x86\x07\x20\x00\x20\x03\x28\x02\x3c\x10\x9e\x07\x20\x00\x41\xbd\x01\x10\x86\x07\x20\x00\x20\x03\x28\x02\x3c\x10\x9e\x07\x20\x0f\x28\x02\x00\x22\x01\x20\x01\x2f\x01\xbc\x01\x10\x89\x07\x0b\x02\x40\x20\x03\x41\x10\x6a\x20\x11\x41\x04\x74\x6a\x22\x01\x28\x02\x00\x0d\x00\x20\x00\x20\x01\x10\xcd\x07\x0d\x0d\x0b\x41\x00\x21\x0d\x02\x40\x20\x03\x28\x02\x3c\x0d\x00\x20\x03\x20\x01\x28\x02\x04\x36\x02\x00\x20\x03\x41\xc0\x00\x6a\x41\x10\x41\xaa\xc2\x01\x20\x03\x10\x5f\x1a\x20\x05\x20\x11\x41\xf4\x00\x72\x20\x03\x41\xc0\x00\x6a\x10\xc3\x07\x22\x0d\x45\x0d\x0d\x02\x40\x20\x00\x20\x04\x20\x0d\x41\x02\x10\x9d\x07\x41\x7f\x4a\x0d\x00\x20\x05\x20\x0d\x10\xe4\x02\x0c\x0e\x0b\x20\x00\x41\xf0\x00\x10\x86\x07\x20\x00\x41\xbd\x01\x10\x86\x07\x20\x00\x20\x0d\x10\x9e\x07\x20\x0f\x28\x02\x00\x22\x13\x20\x13\x2f\x01\xbc\x01\x10\x89\x07\x0b\x20\x0f\x20\x01\x28\x02\x00\x36\x02\x00\x20\x00\x41\xb8\x01\x10\x86\x07\x20\x00\x41\x08\x10\x9e\x07\x20\x0f\x28\x02\x00\x41\x00\x10\x89\x07\x02\x40\x02\x40\x20\x03\x28\x02\x3c\x0d\x00\x20\x00\x41\xb8\x01\x10\x86\x07\x20\x00\x20\x0d\x10\x9e\x07\x20\x0f\x28\x02\x00\x22\x13\x20\x13\x2f\x01\xbc\x01\x10\x89\x07\x20\x01\x20\x01\x28\x02\x04\x41\x01\x6a\x36\x02\x04\x20\x05\x20\x0d\x10\xe4\x02\x0c\x01\x0b\x20\x12\x45\x0d\x00\x20\x00\x41\xb8\x01\x10\x86\x07\x20\x00\x20\x03\x28\x02\x3c\x10\x9e\x07\x20\x0f\x28\x02\x00\x22\x01\x20\x01\x2f\x01\xbc\x01\x10\x89\x07\x0b\x02\x40\x02\x40\x20\x00\x28\x02\x10\x41\x3d\x47\x0d\x00\x20\x00\x10\x80\x07\x0d\x0e\x20\x00\x10\x9b\x07\x45\x0d\x01\x0c\x0e\x0b\x20\x00\x41\x06\x10\x86\x07\x0b\x02\x40\x02\x40\x20\x12\x45\x0d\x00\x20\x00\x10\xce\x07\x20\x00\x41\xc6\x00\x10\x86\x07\x0c\x01\x0b\x02\x40\x20\x03\x28\x02\x3c\x22\x01\x0d\x00\x20\x00\x10\xce\x07\x20\x00\x41\xd1\x00\x10\x86\x07\x20\x00\x41\x0e\x10\x86\x07\x0c\x01\x0b\x20\x00\x20\x01\x10\x9c\x07\x20\x00\x41\xcc\x00\x10\x86\x07\x20\x00\x20\x03\x28\x02\x3c\x10\x9e\x07\x0b\x20\x0f\x20\x0f\x28\x02\x00\x28\x02\x04\x36\x02\x00\x20\x00\x10\x9f\x07\x45\x0d\x07\x0c\x0c\x0b\x41\x03\x21\x16\x0c\x02\x0b\x41\x00\x21\x16\x20\x14\x0d\x01\x20\x0e\x21\x15\x20\x03\x28\x02\x34\x45\x0d\x01\x20\x00\x41\xa1\xea\x02\x41\x00\x10\x8a\x07\x0c\x0a\x0b\x41\x02\x21\x16\x0b\x02\x40\x20\x12\x45\x0d\x00\x20\x00\x20\x03\x41\x10\x6a\x20\x11\x41\x04\x74\x6a\x10\xcc\x07\x41\x00\x48\x0d\x09\x0b\x20\x00\x20\x15\x20\x16\x20\x13\x20\x00\x28\x02\x14\x41\x00\x20\x03\x41\x38\x6a\x10\x96\x07\x0d\x08\x02\x40\x20\x15\x41\x79\x6a\x41\x01\x4b\x0d\x00\x20\x03\x20\x03\x28\x02\x38\x36\x02\x34\x0c\x04\x0b\x20\x12\x45\x0d\x02\x20\x03\x28\x02\x38\x41\x01\x36\x02\xb8\x01\x20\x04\x20\x03\x28\x02\x3c\x22\x01\x20\x04\x28\x02\xbc\x01\x10\xca\x07\x41\x00\x48\x0d\x01\x0b\x20\x00\x41\xcd\xea\x02\x41\x00\x10\x8a\x07\x0c\x07\x0b\x20\x00\x28\x02\x00\x20\x04\x20\x01\x41\x06\x10\xcb\x07\x41\x00\x48\x0d\x06\x20\x00\x41\xd0\x00\x10\x86\x07\x20\x00\x41\xcd\x00\x10\x86\x07\x20\x00\x20\x03\x28\x02\x3c\x10\x9e\x07\x20\x00\x41\xbd\x01\x10\x86\x07\x20\x00\x20\x03\x28\x02\x3c\x10\x9e\x07\x20\x0f\x28\x02\x00\x22\x01\x20\x01\x2f\x01\xbc\x01\x10\x89\x07\x0c\x01\x0b\x02\x40\x02\x40\x20\x03\x28\x02\x3c\x0d\x00\x20\x00\x41\xd5\x00\x10\x86\x07\x0c\x01\x0b\x20\x00\x41\xd4\x00\x10\x86\x07\x20\x00\x20\x03\x28\x02\x3c\x10\x9e\x07\x0b\x20\x0f\x28\x02\x00\x41\x00\x10\xc7\x07\x0b\x02\x40\x20\x10\x45\x0d\x00\x20\x00\x41\x1b\x10\x86\x07\x0b\x20\x05\x20\x03\x28\x02\x3c\x10\xe4\x02\x20\x03\x41\x00\x36\x02\x3c\x0c\x00\x0b\x00\x0b\x20\x00\x41\x06\x10\x86\x07\x0b\x20\x00\x41\xbd\x01\x10\x86\x07\x20\x00\x41\xf6\x00\x10\x9e\x07\x20\x00\x41\xc0\x00\x6a\x22\x0d\x28\x02\x00\x22\x01\x20\x01\x2f\x01\xbc\x01\x10\x89\x07\x20\x00\x41\x0e\x10\x86\x07\x02\x40\x20\x03\x28\x02\x20\x45\x0d\x00\x20\x00\x41\x11\x10\x86\x07\x20\x00\x20\x03\x41\x20\x6a\x10\xc8\x07\x20\x00\x41\x24\x10\x86\x07\x20\x0d\x28\x02\x00\x41\x00\x10\x89\x07\x20\x00\x41\x0e\x10\x86\x07\x0b\x02\x40\x20\x09\x45\x0d\x00\x20\x00\x41\x11\x10\x86\x07\x20\x00\x41\xbd\x01\x10\x86\x07\x20\x00\x20\x09\x10\x9e\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x20\x04\x2f\x01\xbc\x01\x10\x89\x07\x0b\x20\x00\x10\xcf\x07\x20\x00\x10\xcf\x07\x02\x40\x02\x40\x20\x06\x45\x0d\x00\x20\x00\x20\x04\x20\x06\x41\x01\x10\x9d\x07\x41\x00\x48\x0d\x03\x20\x00\x41\xbd\x01\x10\x86\x07\x20\x00\x20\x06\x10\x9e\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x20\x04\x2f\x01\xbc\x01\x10\x89\x07\x0c\x01\x0b\x20\x09\x0d\x00\x20\x00\x41\xc1\x01\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x20\x04\x28\x02\x98\x02\x20\x0c\x6b\x41\x01\x6a\x10\xc6\x07\x0b\x02\x40\x20\x02\x0d\x00\x41\x00\x21\x01\x0c\x03\x0b\x41\x00\x21\x01\x20\x00\x20\x04\x28\x02\x94\x03\x20\x06\x20\x06\x41\x16\x20\x02\x41\x01\x46\x1b\x41\x00\x10\x97\x07\x0d\x02\x0c\x01\x0b\x41\x00\x21\x09\x0b\x20\x05\x20\x03\x28\x02\x3c\x10\xe4\x02\x41\x7f\x21\x01\x0b\x20\x05\x20\x09\x10\xe4\x02\x20\x05\x20\x06\x10\xe4\x02\x20\x04\x20\x08\x3a\x00\x6e\x20\x03\x41\xd0\x00\x6a\x24\x00\x20\x01\x0b\xcf\x18\x01\x0b\x7f\x23\x00\x41\x10\x6b\x22\x07\x24\x00\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x21\x08\x20\x00\x28\x02\x00\x21\x09\x41\x00\x21\x0a\x02\x40\x02\x40\x02\x40\x20\x01\x41\x02\x4b\x0d\x00\x02\x40\x20\x02\x0d\x00\x41\x00\x21\x02\x20\x00\x41\x85\x01\x10\x92\x07\x45\x0d\x00\x20\x00\x41\x01\x10\x93\x07\x41\x0a\x46\x0d\x00\x41\x7f\x21\x0b\x20\x00\x10\x80\x07\x0d\x03\x41\x02\x21\x02\x0b\x41\x7f\x21\x0b\x20\x00\x10\x80\x07\x0d\x02\x02\x40\x20\x00\x28\x02\x10\x22\x0c\x41\x2a\x47\x0d\x00\x20\x00\x10\x80\x07\x0d\x03\x20\x02\x41\x01\x72\x21\x02\x20\x00\x28\x02\x10\x21\x0c\x0b\x02\x40\x02\x40\x02\x40\x20\x0c\x41\x27\x6a\x22\x0d\x41\x01\x4d\x0d\x00\x20\x0c\x41\x83\x7f\x47\x0d\x01\x02\x40\x20\x00\x41\x28\x6a\x28\x02\x00\x0d\x00\x20\x00\x41\x20\x6a\x28\x02\x00\x21\x0a\x02\x40\x20\x02\x41\x01\x71\x45\x0d\x00\x20\x01\x41\x02\x47\x0d\x00\x20\x0a\x41\x2d\x46\x0d\x01\x0b\x20\x02\x41\x02\x71\x45\x0d\x03\x20\x01\x41\x02\x47\x0d\x03\x20\x0a\x41\x2e\x47\x0d\x03\x0b\x20\x00\x10\xa1\x07\x0c\x05\x0b\x02\x40\x02\x40\x20\x0d\x0e\x02\x01\x00\x01\x0b\x20\x00\x28\x02\x44\x0d\x01\x20\x01\x41\x02\x47\x0d\x01\x0c\x02\x0b\x20\x08\x2d\x00\x6e\x41\x01\x71\x0d\x00\x20\x01\x41\x02\x46\x0d\x01\x0b\x20\x01\x41\x02\x46\x0d\x01\x20\x05\x41\x02\x46\x0d\x01\x20\x00\x41\xf4\xe6\x02\x41\x00\x10\x8a\x07\x0c\x03\x0b\x20\x09\x20\x00\x41\x20\x6a\x28\x02\x00\x10\xd9\x03\x21\x0a\x20\x00\x10\x80\x07\x0d\x01\x0b\x02\x40\x02\x40\x02\x40\x20\x08\x28\x02\x20\x22\x0b\x45\x0d\x00\x20\x01\x41\x01\x4b\x0d\x00\x20\x08\x28\x02\x24\x41\x01\x47\x0d\x00\x20\x08\x20\x0a\x10\xd0\x07\x22\x0c\x45\x0d\x00\x20\x0c\x28\x02\x08\x20\x08\x28\x02\xbc\x01\x47\x0d\x00\x20\x00\x41\x8b\xe7\x02\x41\x00\x10\x8a\x07\x0c\x01\x0b\x41\x7f\x21\x0c\x02\x40\x02\x40\x20\x01\x41\x01\x46\x0d\x00\x41\x00\x21\x0d\x0c\x01\x0b\x41\x00\x21\x0d\x02\x40\x20\x02\x0d\x00\x20\x08\x2d\x00\x6e\x41\x01\x71\x0d\x00\x41\x00\x21\x0d\x20\x08\x20\x0a\x20\x08\x28\x02\xc0\x01\x41\x00\x10\xd1\x07\x41\x7f\x4a\x0d\x00\x20\x08\x20\x0a\x10\xbf\x07\x41\x80\x80\x80\x80\x7a\x71\x41\x80\x80\x80\x80\x02\x46\x0d\x00\x02\x40\x20\x0a\x41\xcd\x00\x47\x0d\x00\x20\x08\x28\x02\x48\x0d\x01\x0b\x41\x01\x21\x0d\x0b\x02\x40\x20\x0b\x45\x0d\x00\x20\x08\x28\x02\x24\x41\x01\x4b\x0d\x00\x20\x08\x28\x02\xbc\x01\x22\x0b\x20\x08\x28\x02\xf0\x01\x47\x0d\x00\x20\x08\x20\x0a\x10\xd0\x07\x22\x0e\x45\x0d\x01\x20\x0e\x28\x02\x08\x20\x0b\x47\x0d\x01\x20\x00\x41\x88\xe6\x02\x41\x00\x10\x8a\x07\x0c\x02\x0b\x41\x7f\x21\x0b\x20\x00\x20\x08\x20\x0a\x41\x04\x41\x03\x20\x02\x1b\x10\x9d\x07\x22\x0c\x41\x7f\x4c\x0d\x03\x0b\x20\x09\x20\x08\x41\x00\x20\x01\x41\x01\x4b\x20\x00\x28\x02\x0c\x20\x04\x10\xfc\x06\x22\x08\x0d\x01\x0b\x20\x09\x20\x0a\x10\xe4\x02\x41\x7f\x21\x0b\x0c\x02\x0b\x02\x40\x20\x06\x45\x0d\x00\x20\x06\x20\x08\x36\x02\x00\x0b\x20\x08\x20\x0a\x36\x02\x70\x20\x00\x41\xc0\x00\x6a\x20\x08\x36\x02\x00\x20\x08\x20\x01\x41\x08\x46\x22\x04\x36\x02\x60\x20\x08\x20\x01\x41\x03\x47\x22\x0b\x36\x02\x4c\x20\x08\x20\x0b\x36\x02\x48\x20\x08\x20\x01\x41\x03\x49\x20\x02\x45\x71\x36\x02\x34\x20\x08\x20\x01\x41\x7c\x6a\x41\x05\x49\x22\x0e\x36\x02\x30\x41\x01\x21\x0f\x41\x01\x21\x10\x02\x40\x20\x0b\x0d\x00\x20\x08\x28\x02\x04\x22\x0b\x28\x02\x5c\x21\x10\x20\x0b\x28\x02\x58\x21\x0e\x20\x0b\x28\x02\x54\x21\x04\x20\x0b\x28\x02\x50\x21\x0f\x0b\x20\x08\x20\x10\x36\x02\x5c\x20\x08\x20\x0e\x36\x02\x58\x20\x08\x20\x04\x36\x02\x54\x20\x08\x20\x0f\x36\x02\x50\x20\x08\x20\x02\x41\xff\x01\x71\x20\x01\x41\x08\x74\x72\x3b\x01\x6c\x02\x40\x20\x01\x41\x79\x6a\x22\x0f\x41\x01\x4b\x0d\x00\x20\x00\x41\x2b\x10\x86\x07\x0b\x02\x40\x20\x01\x41\x07\x47\x0d\x00\x20\x00\x10\xd2\x07\x0b\x20\x08\x42\x01\x37\x02\x38\x20\x00\x28\x02\x10\x21\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x41\x03\x47\x0d\x00\x20\x0b\x41\x83\x7f\x47\x0d\x00\x20\x00\x41\x28\x6a\x28\x02\x00\x0d\x03\x20\x09\x20\x08\x20\x00\x41\x20\x6a\x28\x02\x00\x10\xd3\x07\x41\x00\x48\x0d\x04\x20\x08\x41\x01\x36\x02\x8c\x01\x0c\x01\x0b\x02\x40\x02\x40\x20\x0b\x41\x28\x47\x0d\x00\x20\x00\x20\x07\x41\x0c\x6a\x41\x00\x10\xd4\x07\x1a\x02\x40\x20\x07\x2d\x00\x0c\x41\x04\x71\x45\x0d\x00\x20\x08\x41\x01\x36\x02\x3c\x0b\x20\x00\x10\x80\x07\x45\x0d\x01\x0c\x05\x0b\x20\x00\x41\x28\x10\x98\x07\x0d\x04\x0b\x02\x40\x20\x08\x28\x02\x3c\x45\x0d\x00\x41\x7f\x21\x0b\x20\x08\x41\x7f\x36\x02\xbc\x01\x20\x00\x10\xff\x06\x41\x00\x48\x0d\x06\x0b\x20\x00\x41\xc0\x00\x6a\x21\x10\x41\x00\x21\x0e\x02\x40\x03\x40\x02\x40\x02\x40\x20\x00\x28\x02\x10\x22\x0b\x41\xa7\x7f\x46\x0d\x00\x41\x00\x21\x04\x20\x0b\x41\x29\x47\x0d\x01\x0c\x03\x0b\x20\x08\x41\x00\x36\x02\x38\x20\x00\x10\x80\x07\x0d\x06\x20\x00\x28\x02\x10\x21\x0b\x41\x01\x21\x04\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x0b\x41\x83\x7f\x46\x0d\x00\x02\x40\x20\x0b\x41\xfb\x00\x46\x0d\x00\x20\x0b\x41\xdb\x00\x47\x0d\x05\x0b\x20\x08\x41\x00\x36\x02\x38\x02\x40\x02\x40\x20\x04\x45\x0d\x00\x20\x00\x41\x0d\x10\x86\x07\x20\x08\x28\x02\x88\x01\x21\x0b\x0c\x01\x0b\x20\x09\x20\x08\x41\x00\x10\xd3\x07\x21\x0b\x20\x00\x41\xdb\x00\x10\x86\x07\x0b\x20\x10\x28\x02\x00\x20\x0b\x41\xff\xff\x03\x71\x10\x89\x07\x20\x00\x41\x53\x41\xb3\x7f\x20\x08\x28\x02\x3c\x1b\x41\x01\x41\x01\x41\x7f\x41\x01\x10\xd5\x07\x22\x0b\x41\x00\x48\x0d\x0a\x02\x40\x41\x01\x20\x0e\x20\x0b\x1b\x22\x0e\x0d\x00\x20\x08\x20\x08\x28\x02\x8c\x01\x41\x01\x6a\x36\x02\x8c\x01\x0b\x20\x04\x0d\x01\x0c\x03\x0b\x20\x00\x28\x02\x28\x0d\x08\x02\x40\x20\x00\x28\x02\x20\x22\x0b\x41\x2d\x47\x0d\x00\x20\x08\x2d\x00\x6c\x41\x01\x46\x0d\x09\x0b\x02\x40\x20\x08\x28\x02\x3c\x45\x0d\x00\x20\x00\x20\x08\x20\x0b\x41\x01\x10\x9d\x07\x41\x00\x48\x0d\x0a\x0b\x20\x09\x20\x08\x20\x0b\x10\xd3\x07\x22\x11\x41\x00\x48\x0d\x09\x20\x00\x10\x80\x07\x0d\x09\x20\x04\x45\x0d\x01\x20\x00\x41\x0d\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x22\x04\x28\x02\x00\x20\x11\x41\xff\xff\x03\x71\x22\x0e\x10\x89\x07\x02\x40\x20\x08\x28\x02\x3c\x45\x0d\x00\x20\x00\x41\x11\x10\x86\x07\x20\x00\x41\xbd\x01\x10\x86\x07\x20\x00\x20\x0b\x10\x9e\x07\x20\x04\x28\x02\x00\x20\x08\x2f\x01\xbc\x01\x10\x89\x07\x0b\x20\x00\x41\xdc\x00\x10\x86\x07\x20\x04\x28\x02\x00\x20\x0e\x10\x89\x07\x20\x08\x41\x00\x36\x02\x38\x0b\x20\x00\x28\x02\x10\x41\x29\x46\x0d\x04\x20\x00\x41\x29\x10\x98\x07\x1a\x0c\x08\x0b\x02\x40\x20\x00\x28\x02\x10\x41\x3d\x47\x0d\x00\x20\x08\x41\x00\x36\x02\x38\x20\x00\x10\x80\x07\x0d\x08\x20\x10\x28\x02\x00\x10\xd6\x07\x21\x04\x20\x00\x41\xdb\x00\x10\x86\x07\x20\x10\x28\x02\x00\x20\x11\x41\xff\xff\x03\x71\x22\x0e\x10\x89\x07\x20\x00\x41\x11\x10\x86\x07\x20\x00\x41\x06\x10\x86\x07\x20\x00\x41\xab\x01\x10\x86\x07\x20\x00\x41\xe9\x00\x20\x04\x10\xd7\x07\x1a\x20\x00\x41\x0e\x10\x86\x07\x20\x00\x10\x9b\x07\x0d\x08\x20\x00\x20\x0b\x10\x9c\x07\x20\x00\x41\x11\x10\x86\x07\x20\x00\x41\xdc\x00\x10\x86\x07\x20\x10\x28\x02\x00\x20\x0e\x10\x89\x07\x20\x00\x20\x04\x10\xd8\x07\x20\x00\x41\xbd\x01\x10\x86\x07\x20\x00\x20\x0b\x10\x9e\x07\x20\x10\x28\x02\x00\x20\x08\x2f\x01\xbc\x01\x10\x89\x07\x41\x01\x21\x0e\x0c\x01\x0b\x02\x40\x20\x0e\x0d\x00\x20\x08\x20\x08\x28\x02\x8c\x01\x41\x01\x6a\x36\x02\x8c\x01\x0b\x20\x08\x28\x02\x3c\x45\x0d\x00\x20\x00\x41\xdb\x00\x10\x86\x07\x20\x10\x28\x02\x00\x20\x11\x41\xff\xff\x03\x71\x10\x89\x07\x20\x00\x41\xbd\x01\x10\x86\x07\x20\x00\x20\x0b\x10\x9e\x07\x20\x10\x28\x02\x00\x20\x08\x2f\x01\xbc\x01\x10\x89\x07\x0b\x20\x00\x28\x02\x10\x41\x29\x46\x0d\x02\x20\x00\x41\x2c\x10\x98\x07\x45\x0d\x01\x0c\x06\x0b\x0b\x20\x00\x41\xc4\xe7\x02\x41\x00\x10\x8a\x07\x0c\x04\x0b\x20\x01\x41\x7c\x6a\x22\x0b\x41\x01\x4b\x0d\x00\x02\x40\x02\x40\x20\x0b\x0e\x02\x01\x00\x01\x0b\x20\x08\x28\x02\x88\x01\x41\x01\x46\x0d\x01\x0c\x02\x0b\x20\x08\x28\x02\x88\x01\x0d\x01\x0b\x02\x40\x20\x08\x28\x02\x3c\x45\x0d\x00\x20\x08\x28\x02\xcc\x01\x20\x08\x28\x02\xbc\x01\x41\x03\x74\x6a\x41\x04\x6a\x21\x0b\x20\x00\x41\xc0\x00\x6a\x21\x10\x02\x40\x03\x40\x20\x0b\x28\x02\x00\x22\x04\x41\x00\x48\x0d\x01\x20\x08\x28\x02\x74\x22\x0b\x20\x04\x41\x04\x74\x22\x04\x6a\x22\x0e\x28\x02\x04\x20\x08\x28\x02\xbc\x01\x47\x0d\x01\x02\x40\x20\x08\x20\x0e\x28\x02\x00\x22\x0e\x10\xbf\x07\x41\x7f\x4a\x0d\x00\x20\x09\x20\x08\x20\x0e\x10\x82\x07\x41\x00\x48\x0d\x06\x20\x08\x28\x02\x74\x21\x0b\x20\x00\x41\xb8\x01\x10\x86\x07\x20\x00\x20\x0b\x20\x04\x6a\x22\x0e\x28\x02\x00\x10\x9e\x07\x20\x10\x28\x02\x00\x20\x08\x2f\x01\xbc\x01\x10\x89\x07\x20\x00\x41\xb9\x01\x10\x86\x07\x20\x00\x20\x0e\x28\x02\x00\x10\x9e\x07\x20\x10\x28\x02\x00\x41\x00\x10\x89\x07\x0b\x20\x0b\x20\x04\x6a\x41\x08\x6a\x21\x0b\x0c\x00\x0b\x00\x0b\x20\x00\x41\xb5\x01\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x20\x08\x2f\x01\xbc\x01\x10\x89\x07\x20\x08\x41\x00\x36\x02\xbc\x01\x20\x08\x20\x08\x28\x02\xcc\x01\x28\x02\x04\x36\x02\xc0\x01\x0b\x20\x00\x10\x80\x07\x0d\x02\x02\x40\x20\x02\x41\x02\x72\x41\x03\x47\x0d\x00\x20\x00\x41\x87\x01\x10\x86\x07\x0b\x20\x08\x41\x01\x36\x02\x64\x20\x00\x10\xff\x06\x1a\x20\x08\x20\x08\x28\x02\xbc\x01\x36\x02\xf0\x01\x02\x40\x02\x40\x20\x00\x28\x02\x10\x41\xa6\x7f\x47\x0d\x00\x20\x00\x10\x80\x07\x0d\x04\x20\x00\x28\x02\x10\x41\xfb\x00\x46\x0d\x00\x20\x00\x20\x08\x20\x0a\x10\xd9\x07\x0d\x04\x20\x00\x10\x9b\x07\x0d\x04\x20\x00\x41\x2e\x41\x28\x20\x02\x1b\x10\x86\x07\x20\x08\x2d\x00\x6e\x41\x02\x71\x0d\x01\x20\x08\x20\x00\x28\x02\x34\x20\x03\x6b\x22\x02\x36\x02\x90\x03\x20\x08\x20\x09\x20\x03\x20\x02\x10\xd3\x04\x22\x02\x36\x02\x8c\x03\x20\x02\x0d\x01\x0c\x04\x0b\x20\x00\x41\xfb\x00\x10\x98\x07\x0d\x03\x20\x00\x10\x81\x07\x0d\x03\x20\x00\x20\x08\x20\x0a\x10\xd9\x07\x0d\x03\x02\x40\x03\x40\x20\x00\x28\x02\x10\x41\xfd\x00\x46\x0d\x01\x20\x00\x10\x83\x07\x45\x0d\x00\x0c\x05\x0b\x00\x0b\x02\x40\x20\x08\x2d\x00\x6e\x41\x02\x71\x0d\x00\x20\x08\x20\x00\x28\x02\x38\x20\x03\x6b\x22\x02\x36\x02\x90\x03\x20\x08\x20\x09\x20\x03\x20\x02\x10\xd3\x04\x22\x02\x36\x02\x8c\x03\x20\x02\x45\x0d\x04\x0b\x20\x00\x10\x80\x07\x0d\x03\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x10\xda\x07\x45\x0d\x00\x20\x00\x41\x00\x10\xdb\x07\x0b\x20\x00\x41\xc0\x00\x6a\x20\x08\x28\x02\x04\x22\x0b\x36\x02\x00\x20\x08\x28\x02\x70\x21\x02\x20\x08\x20\x00\x28\x02\x00\x20\x0b\x42\x80\x80\x80\x80\x20\x10\xdc\x07\x22\x0a\x36\x02\x08\x02\x40\x20\x01\x41\x02\x49\x0d\x00\x41\x00\x21\x0b\x20\x0f\x41\x02\x49\x0d\x05\x20\x00\x41\x03\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x22\x08\x28\x02\x00\x20\x0a\x10\xc6\x07\x20\x02\x0d\x05\x20\x00\x41\xcd\x00\x10\x86\x07\x41\x00\x21\x0b\x20\x08\x28\x02\x00\x41\x00\x10\xc6\x07\x0c\x05\x0b\x02\x40\x20\x01\x41\x01\x47\x0d\x00\x20\x00\x41\x03\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x22\x01\x28\x02\x00\x20\x0a\x10\xc6\x07\x02\x40\x20\x0d\x45\x0d\x00\x02\x40\x02\x40\x20\x01\x28\x02\x00\x22\x01\x28\x02\x28\x45\x0d\x00\x20\x09\x20\x01\x20\x02\x10\xdd\x07\x22\x01\x45\x0d\x06\x20\x01\x41\x00\x36\x02\x08\x20\x01\x20\x01\x2d\x00\x04\x41\xfe\x01\x71\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x2d\x00\x6e\x41\x01\x71\x72\x3a\x00\x04\x0c\x01\x0b\x20\x01\x20\x02\x10\xbf\x07\x41\x7f\x4a\x0d\x00\x20\x09\x20\x01\x20\x02\x10\x82\x07\x41\x00\x48\x0d\x05\x0b\x20\x00\x41\x11\x10\x86\x07\x20\x00\x41\xb9\x01\x10\x86\x07\x20\x00\x20\x02\x10\x9e\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x41\x00\x10\x89\x07\x0b\x41\x00\x21\x0b\x02\x40\x20\x0c\x41\x00\x48\x0d\x00\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x28\x02\x74\x20\x0c\x41\x04\x74\x6a\x22\x08\x20\x08\x28\x02\x0c\x41\xff\x80\x80\x80\x78\x71\x20\x0a\x41\x07\x74\x41\x80\xff\xff\xff\x07\x71\x72\x36\x02\x0c\x20\x00\x41\x0e\x10\x86\x07\x0c\x06\x0b\x20\x00\x41\xbd\x01\x10\x86\x07\x20\x00\x20\x02\x10\x9e\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x22\x00\x20\x00\x2f\x01\xbc\x01\x10\x89\x07\x0c\x05\x0b\x02\x40\x02\x40\x02\x40\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x22\x01\x28\x02\x28\x0d\x00\x20\x00\x20\x01\x20\x02\x41\x06\x10\x9d\x07\x22\x01\x41\x00\x48\x0d\x05\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x21\x00\x02\x40\x20\x01\x41\x80\x80\x80\x80\x02\x71\x45\x0d\x00\x20\x00\x28\x02\x80\x01\x20\x01\x41\x04\x74\x6a\x22\x00\x20\x00\x28\x02\x0c\x41\xff\x80\x80\x80\x78\x71\x20\x0a\x41\x07\x74\x41\x80\xff\xff\xff\x07\x71\x72\x36\x02\x0c\x0c\x02\x0b\x20\x00\x28\x02\x74\x20\x01\x41\x04\x74\x6a\x22\x00\x20\x00\x28\x02\x0c\x41\xff\x80\x80\x80\x78\x71\x20\x0a\x41\x07\x74\x41\x80\xff\xff\xff\x07\x71\x72\x36\x02\x0c\x0c\x01\x0b\x20\x09\x20\x01\x20\x02\x41\xfc\x00\x20\x02\x1b\x22\x02\x10\xdd\x07\x22\x01\x45\x0d\x04\x20\x01\x20\x0a\x36\x02\x00\x20\x05\x0d\x01\x0b\x41\x00\x21\x0b\x0c\x05\x0b\x41\x00\x21\x0b\x20\x00\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x28\x02\x94\x03\x20\x02\x20\x02\x41\x16\x20\x05\x41\x01\x46\x1b\x41\x00\x10\x97\x07\x0d\x04\x0c\x02\x0b\x20\x00\x41\xdd\xe7\x02\x41\x00\x10\x8a\x07\x0c\x01\x0b\x20\x00\x10\xa1\x07\x0b\x20\x00\x41\xc0\x00\x6a\x20\x08\x28\x02\x04\x36\x02\x00\x20\x09\x20\x08\x10\x85\x07\x41\x7f\x21\x0b\x20\x06\x45\x0d\x01\x20\x06\x41\x00\x36\x02\x00\x0c\x01\x0b\x20\x09\x20\x0a\x10\xe4\x02\x0b\x20\x07\x41\x10\x6a\x24\x00\x20\x0b\x0b\xd2\x01\x01\x03\x7f\x23\x00\x41\xd0\x00\x6b\x22\x05\x24\x00\x20\x00\x28\x02\x00\x21\x06\x02\x40\x02\x40\x20\x01\x20\x03\x10\xc6\x04\x45\x0d\x00\x20\x05\x20\x06\x41\x10\x6a\x28\x02\x00\x20\x05\x41\x10\x6a\x20\x03\x10\xdc\x01\x36\x02\x00\x20\x00\x41\xd7\xe6\x02\x20\x05\x10\x8a\x07\x41\x00\x21\x00\x0c\x01\x0b\x41\x00\x21\x00\x20\x06\x20\x01\x41\x1c\x6a\x41\x14\x20\x01\x41\x24\x6a\x20\x01\x28\x02\x20\x41\x01\x6a\x10\xc3\x04\x0d\x00\x20\x01\x20\x01\x28\x02\x20\x22\x00\x41\x01\x6a\x36\x02\x20\x20\x01\x28\x02\x1c\x20\x00\x41\x14\x6c\x6a\x22\x00\x42\x00\x37\x02\x00\x20\x00\x41\x10\x6a\x22\x01\x41\x00\x36\x02\x00\x20\x00\x41\x08\x6a\x22\x07\x42\x00\x37\x02\x00\x20\x00\x20\x06\x20\x02\x10\xd9\x03\x36\x02\x0c\x20\x06\x20\x03\x10\xd9\x03\x21\x03\x20\x07\x20\x04\x36\x02\x00\x20\x01\x20\x03\x36\x02\x00\x0b\x20\x05\x41\xd0\x00\x6a\x24\x00\x20\x00\x0b\x45\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x02\x40\x02\x40\x20\x00\x28\x02\x10\x20\x01\x46\x0d\x00\x20\x02\x20\x01\x36\x02\x00\x20\x00\x41\xe0\xa2\x03\x20\x02\x10\x8a\x07\x41\x7f\x21\x00\x0c\x01\x0b\x20\x00\x10\x80\x07\x21\x00\x0b\x20\x02\x41\x10\x6a\x24\x00\x20\x00\x0b\x73\x01\x01\x7f\x02\x40\x20\x00\x41\xfa\x00\x10\x92\x07\x0d\x00\x20\x00\x41\xc2\xe6\x02\x41\x00\x10\x8a\x07\x41\x00\x0f\x0b\x02\x40\x20\x00\x10\x80\x07\x0d\x00\x02\x40\x20\x00\x28\x02\x10\x41\x81\x7f\x46\x0d\x00\x20\x00\x41\xac\xe3\x01\x41\x00\x10\x8a\x07\x41\x00\x0f\x0b\x20\x00\x28\x02\x00\x20\x00\x41\x20\x6a\x29\x03\x00\x10\xa3\x03\x22\x01\x45\x0d\x00\x02\x40\x20\x00\x10\x80\x07\x0d\x00\x20\x01\x0f\x0b\x20\x00\x28\x02\x00\x20\x01\x10\xe4\x02\x0b\x41\x00\x0b\xa2\x01\x01\x04\x7f\x20\x01\x41\x10\x6a\x21\x03\x20\x01\x28\x02\x14\x21\x04\x41\x00\x21\x05\x41\x00\x21\x06\x02\x40\x02\x40\x02\x40\x03\x40\x20\x06\x20\x04\x4e\x0d\x01\x20\x03\x28\x02\x00\x20\x05\x6a\x28\x02\x00\x20\x02\x46\x0d\x02\x20\x05\x41\x08\x6a\x21\x05\x20\x06\x41\x01\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x41\x7f\x21\x05\x20\x00\x20\x03\x41\x08\x20\x01\x41\x18\x6a\x20\x04\x41\x01\x6a\x10\xc3\x04\x0d\x01\x20\x01\x20\x01\x28\x02\x14\x22\x05\x41\x01\x6a\x36\x02\x14\x20\x01\x28\x02\x10\x21\x04\x20\x00\x20\x02\x10\xd9\x03\x21\x03\x20\x04\x20\x05\x41\x03\x74\x6a\x22\x05\x41\x00\x36\x02\x04\x20\x05\x20\x03\x36\x02\x00\x0b\x20\x06\x21\x05\x0b\x20\x05\x0b\x09\x00\x20\x00\x41\x01\x10\xde\x07\x0b\xc4\x01\x01\x05\x7f\x02\x40\x02\x40\x20\x00\x28\x02\x40\x22\x02\x28\x02\x98\x02\x22\x03\x41\x00\x48\x0d\x00\x02\x40\x20\x02\x28\x02\x80\x02\x22\x04\x20\x03\x6a\x22\x05\x2d\x00\x00\x22\x06\x41\xc1\x01\x46\x0d\x00\x20\x06\x41\xcd\x00\x47\x0d\x01\x20\x02\x41\x7f\x36\x02\x98\x02\x20\x02\x41\x84\x02\x6a\x20\x03\x36\x02\x00\x20\x00\x41\xcd\x00\x10\x86\x07\x20\x00\x20\x01\x10\x9e\x07\x0f\x0b\x20\x04\x20\x03\x20\x05\x28\x00\x01\x6b\x41\x01\x6a\x22\x03\x6a\x22\x06\x2d\x00\x00\x41\xd6\x00\x47\x0d\x01\x20\x00\x28\x02\x00\x20\x06\x28\x00\x01\x10\xe4\x02\x20\x02\x28\x02\x80\x02\x21\x06\x20\x00\x28\x02\x00\x20\x01\x10\xd9\x03\x21\x00\x20\x02\x41\x7f\x36\x02\x98\x02\x20\x06\x20\x03\x6a\x20\x00\x36\x00\x01\x0b\x0f\x0b\x41\xe9\xdb\x02\x41\xae\xb7\x01\x41\x8b\xb1\x01\x41\xb2\xe6\x02\x10\x4a\x00\x0b\xc1\x06\x01\x06\x7f\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x03\x41\x06\x4b\x0d\x00\x20\x00\x28\x02\x00\x21\x04\x02\x40\x02\x40\x02\x40\x20\x03\x0e\x07\x04\x00\x00\x00\x00\x01\x02\x04\x0b\x02\x40\x20\x01\x20\x02\x20\x01\x28\x02\xc0\x01\x41\x01\x10\xd1\x07\x22\x05\x41\x7f\x4a\x0d\x00\x20\x01\x28\x02\xbc\x01\x21\x06\x0c\x06\x0b\x02\x40\x02\x40\x20\x05\x41\xff\xff\xff\xff\x03\x4a\x0d\x00\x02\x40\x20\x01\x28\x02\x74\x22\x07\x20\x05\x41\x04\x74\x6a\x22\x08\x28\x02\x04\x22\x09\x20\x01\x28\x02\xbc\x01\x22\x06\x47\x0d\x00\x20\x03\x41\x03\x47\x0d\x02\x20\x01\x2d\x00\x6e\x41\x01\x71\x0d\x02\x20\x07\x20\x05\x41\x04\x74\x6a\x28\x02\x0c\x41\xf8\x00\x71\x41\x08\x47\x0d\x02\x0c\x09\x0b\x20\x09\x41\x02\x6a\x20\x06\x47\x0d\x07\x20\x08\x28\x02\x0c\x41\xf8\x00\x71\x41\x18\x47\x0d\x07\x0c\x01\x0b\x20\x01\x28\x02\xbc\x01\x22\x06\x20\x01\x28\x02\xf0\x01\x47\x0d\x06\x0b\x20\x00\x41\x93\xe5\x02\x41\x00\x10\x8a\x07\x0c\x07\x0b\x20\x04\x20\x01\x20\x02\x41\x03\x10\xdf\x07\x0f\x0b\x20\x01\x20\x02\x20\x01\x28\x02\xc0\x01\x41\x00\x10\xd1\x07\x41\x00\x4e\x0d\x02\x02\x40\x20\x01\x28\x02\x28\x45\x0d\x00\x02\x40\x20\x01\x20\x02\x10\xd0\x07\x22\x06\x45\x0d\x00\x20\x06\x2d\x00\x04\x41\x02\x71\x45\x0d\x00\x20\x06\x28\x02\x08\x20\x01\x28\x02\xbc\x01\x47\x0d\x00\x20\x01\x28\x02\x24\x41\x01\x46\x0d\x04\x0b\x41\x80\x80\x80\x80\x04\x41\x7f\x20\x04\x20\x01\x20\x02\x10\xdd\x07\x1b\x0f\x0b\x20\x01\x20\x02\x10\xbf\x07\x22\x06\x41\x7f\x4a\x0d\x08\x20\x04\x20\x01\x20\x02\x10\x82\x07\x22\x06\x41\x00\x48\x0d\x08\x02\x40\x20\x02\x41\xcd\x00\x47\x0d\x00\x20\x01\x28\x02\x48\x45\x0d\x00\x20\x01\x20\x06\x36\x02\x98\x01\x0b\x20\x01\x28\x02\x74\x20\x06\x41\x04\x74\x6a\x20\x01\x28\x02\xbc\x01\x36\x02\x08\x20\x06\x0f\x0b\x10\x40\x00\x0b\x20\x04\x20\x01\x20\x02\x41\x00\x10\xdf\x07\x21\x06\x0c\x06\x0b\x20\x00\x41\x93\xe5\x02\x41\x00\x10\x8a\x07\x0c\x02\x0b\x02\x40\x20\x03\x41\x7d\x6a\x41\x02\x49\x0d\x00\x20\x06\x20\x01\x28\x02\xf0\x01\x47\x0d\x00\x20\x06\x21\x09\x20\x01\x20\x02\x10\xc4\x07\x41\x00\x48\x0d\x01\x20\x00\x41\xbe\xe5\x02\x41\x00\x10\x8a\x07\x0c\x02\x0b\x20\x06\x21\x09\x0b\x20\x01\x28\x02\x7c\x21\x07\x41\x00\x21\x05\x41\x00\x21\x06\x02\x40\x03\x40\x20\x06\x20\x07\x4e\x0d\x01\x02\x40\x02\x40\x20\x01\x28\x02\x74\x20\x05\x6a\x22\x08\x28\x02\x00\x20\x02\x47\x0d\x00\x20\x08\x41\x04\x6a\x28\x02\x00\x0d\x00\x20\x01\x20\x08\x41\x08\x6a\x28\x02\x00\x20\x09\x10\xe0\x07\x0d\x01\x0b\x20\x05\x41\x10\x6a\x21\x05\x20\x06\x41\x01\x6a\x21\x06\x0c\x01\x0b\x0b\x20\x00\x41\xe5\xe5\x02\x41\x00\x10\x8a\x07\x0c\x01\x0b\x02\x40\x20\x01\x28\x02\x28\x45\x0d\x00\x20\x01\x20\x02\x10\xd0\x07\x22\x06\x45\x0d\x00\x20\x01\x20\x06\x28\x02\x08\x20\x09\x10\xe0\x07\x45\x0d\x00\x20\x00\x41\x88\xe6\x02\x41\x00\x10\x8a\x07\x0c\x01\x0b\x20\x01\x28\x02\x20\x45\x0d\x02\x20\x01\x28\x02\x24\x41\x01\x4b\x0d\x02\x20\x09\x20\x01\x28\x02\xf0\x01\x47\x0d\x02\x20\x04\x20\x01\x20\x02\x10\xdd\x07\x22\x06\x0d\x01\x0b\x41\x7f\x0f\x0b\x20\x06\x41\x06\x41\x02\x20\x03\x41\x02\x46\x1b\x20\x06\x2d\x00\x04\x41\xf9\x01\x71\x72\x3a\x00\x04\x41\x80\x80\x80\x80\x04\x0f\x0b\x20\x04\x20\x01\x20\x02\x41\x01\x20\x03\x41\x04\x46\x41\x01\x74\x20\x03\x41\x03\x46\x1b\x10\xdf\x07\x22\x06\x41\x00\x48\x0d\x00\x20\x01\x28\x02\x74\x20\x06\x41\x04\x74\x6a\x22\x05\x20\x05\x28\x02\x0c\x41\x7c\x71\x20\x03\x41\x02\x46\x72\x41\x02\x72\x36\x02\x0c\x20\x06\x0f\x0b\x20\x06\x0b\x1c\x00\x20\x00\x28\x02\x00\x20\x01\x10\xd9\x03\x21\x01\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x20\x01\x10\xc6\x07\x0b\x62\x01\x03\x7f\x23\x00\x41\x10\x6b\x22\x01\x24\x00\x41\x00\x21\x02\x02\x40\x20\x00\x28\x02\x10\x22\x03\x41\xac\x7f\x46\x0d\x00\x02\x40\x20\x03\x41\x3b\x46\x0d\x00\x20\x03\x41\xfd\x00\x46\x0d\x01\x20\x00\x28\x02\x30\x0d\x01\x20\x01\x41\x3b\x36\x02\x00\x20\x00\x41\xe0\xa2\x03\x20\x01\x10\x8a\x07\x41\x7f\x21\x02\x0c\x01\x0b\x20\x00\x10\x80\x07\x21\x02\x0b\x20\x01\x41\x10\x6a\x24\x00\x20\x02\x0b\xef\x04\x01\x08\x7f\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x00\x41\xc0\x00\x6a\x22\x05\x28\x02\x00\x21\x06\x20\x00\x28\x02\x00\x21\x07\x20\x02\x41\xb3\x7f\x47\x21\x08\x41\xbd\x7f\x41\xbd\x7f\x41\xb9\x7f\x20\x02\x41\x53\x46\x22\x09\x1b\x20\x02\x41\x4b\x46\x1b\x41\xff\x01\x71\x21\x0a\x02\x40\x02\x40\x02\x40\x02\x40\x03\x40\x02\x40\x02\x40\x20\x00\x28\x02\x10\x22\x0b\x41\x83\x7f\x47\x0d\x00\x02\x40\x20\x00\x28\x02\x28\x45\x0d\x00\x20\x00\x10\xa1\x07\x0c\x06\x0b\x02\x40\x20\x07\x20\x00\x28\x02\x20\x10\xd9\x03\x22\x0b\x41\x27\x47\x0d\x00\x02\x40\x20\x09\x0d\x00\x20\x02\x41\x4b\x47\x0d\x01\x0b\x20\x00\x41\xc4\xe4\x02\x41\x00\x10\x8a\x07\x41\x27\x21\x0b\x0c\x05\x0b\x20\x00\x10\x80\x07\x0d\x04\x20\x00\x20\x0b\x20\x02\x10\xe1\x07\x0d\x04\x02\x40\x20\x03\x45\x0d\x00\x20\x00\x20\x05\x28\x02\x00\x28\x02\x94\x03\x20\x0b\x20\x0b\x41\x00\x10\x97\x07\x45\x0d\x05\x0b\x02\x40\x02\x40\x20\x00\x28\x02\x10\x41\x3d\x47\x0d\x00\x20\x00\x10\x80\x07\x0d\x06\x02\x40\x20\x08\x0d\x00\x20\x00\x41\xb8\x01\x10\x86\x07\x20\x00\x20\x0b\x10\x9e\x07\x20\x05\x28\x02\x00\x20\x06\x2f\x01\xbc\x01\x10\x89\x07\x20\x00\x20\x04\x41\x0c\x6a\x20\x04\x41\x08\x6a\x20\x04\x20\x04\x41\x04\x6a\x41\x00\x41\x00\x41\x3d\x10\xe2\x07\x41\x00\x48\x0d\x07\x02\x40\x20\x00\x20\x01\x10\xde\x07\x45\x0d\x00\x20\x07\x20\x04\x28\x02\x00\x10\xe4\x02\x0c\x08\x0b\x20\x00\x20\x0b\x10\x9c\x07\x20\x00\x20\x04\x28\x02\x0c\x20\x04\x28\x02\x08\x20\x04\x28\x02\x00\x20\x04\x28\x02\x04\x41\x00\x41\x00\x10\xe3\x07\x0c\x02\x0b\x20\x00\x20\x01\x10\xde\x07\x0d\x06\x20\x00\x20\x0b\x10\x9c\x07\x20\x00\x20\x0a\x10\x86\x07\x20\x00\x20\x0b\x10\x9e\x07\x20\x05\x28\x02\x00\x20\x06\x2f\x01\xbc\x01\x10\x89\x07\x0c\x01\x0b\x02\x40\x20\x09\x0d\x00\x20\x02\x41\x4b\x47\x0d\x01\x20\x00\x41\xec\xe4\x02\x41\x00\x10\x8a\x07\x0c\x06\x0b\x20\x00\x41\x06\x10\x86\x07\x20\x00\x41\xbd\x01\x10\x86\x07\x20\x00\x20\x0b\x10\x9e\x07\x20\x05\x28\x02\x00\x20\x06\x2f\x01\xbc\x01\x10\x89\x07\x0b\x20\x07\x20\x0b\x10\xe4\x02\x0c\x01\x0b\x20\x0b\x41\x20\x72\x41\xfb\x00\x47\x0d\x02\x20\x00\x20\x04\x41\x0c\x6a\x41\x00\x10\xd4\x07\x41\x3d\x47\x0d\x02\x20\x00\x41\x06\x10\x86\x07\x41\x7f\x21\x0b\x20\x00\x20\x02\x41\x00\x41\x01\x20\x04\x28\x02\x0c\x41\x02\x71\x41\x01\x10\xd5\x07\x41\x7f\x4c\x0d\x05\x0b\x02\x40\x20\x00\x28\x02\x10\x41\x2c\x46\x0d\x00\x41\x00\x21\x0b\x0c\x05\x0b\x20\x00\x10\x80\x07\x45\x0d\x00\x0c\x03\x0b\x00\x0b\x20\x00\x41\xa2\xd1\x02\x41\x00\x10\x8a\x07\x0c\x01\x0b\x20\x07\x20\x0b\x10\xe4\x02\x0b\x41\x7f\x21\x0b\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x0b\x0b\x41\x01\x01\x7f\x23\x00\x41\xd0\x00\x6b\x22\x01\x24\x00\x20\x01\x20\x00\x28\x02\x00\x41\x10\x6a\x28\x02\x00\x20\x01\x41\x10\x6a\x20\x00\x41\x20\x6a\x28\x02\x00\x10\xdc\x01\x36\x02\x00\x20\x00\x41\xa6\xe4\x02\x20\x01\x10\x8a\x07\x20\x01\x41\xd0\x00\x6a\x24\x00\x0b\x93\x02\x01\x06\x7f\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x41\xcd\x00\x46\x0d\x00\x20\x02\x41\x3a\x46\x0d\x00\x20\x00\x28\x02\x00\x21\x04\x20\x02\x41\x16\x47\x0d\x01\x20\x00\x28\x02\x40\x21\x05\x0c\x03\x0b\x20\x00\x41\xf6\xe3\x02\x41\x00\x10\x8a\x07\x0c\x01\x0b\x20\x00\x28\x02\x40\x22\x05\x28\x02\xc0\x02\x21\x06\x41\x04\x21\x07\x41\x7f\x21\x08\x03\x40\x20\x08\x41\x01\x6a\x22\x08\x20\x06\x4e\x0d\x02\x20\x05\x28\x02\xc8\x02\x20\x07\x6a\x21\x09\x20\x07\x41\x08\x6a\x21\x07\x20\x09\x28\x02\x00\x20\x02\x47\x0d\x00\x0b\x20\x00\x41\x8d\xe4\x02\x41\x00\x10\x8a\x07\x0b\x41\x7f\x21\x07\x0c\x01\x0b\x41\x7f\x21\x07\x20\x04\x20\x05\x20\x03\x41\xfd\x00\x46\x41\x00\x20\x01\x28\x02\x38\x20\x02\x41\x01\x41\x01\x41\x00\x10\xac\x07\x22\x08\x41\x00\x48\x0d\x00\x20\x04\x20\x01\x41\x34\x6a\x41\x0c\x20\x01\x41\x3c\x6a\x20\x01\x28\x02\x38\x41\x01\x6a\x10\xc3\x04\x0d\x00\x20\x01\x20\x01\x28\x02\x38\x22\x07\x41\x01\x6a\x36\x02\x38\x20\x01\x28\x02\x34\x21\x09\x20\x04\x20\x03\x10\xd9\x03\x21\x02\x20\x09\x20\x07\x41\x0c\x6c\x6a\x22\x07\x20\x08\x36\x02\x00\x20\x07\x20\x02\x36\x02\x04\x41\x00\x0f\x0b\x20\x07\x0b\xa4\x30\x01\x12\x7f\x23\x00\x41\xa0\x01\x6b\x22\x02\x24\x00\x20\x00\x28\x02\x00\x21\x03\x41\x00\x21\x04\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x28\x02\x10\x22\x05\x41\x83\x7f\x47\x0d\x00\x41\x00\x21\x04\x20\x00\x41\x28\x6a\x28\x02\x00\x0d\x01\x41\x00\x21\x04\x02\x40\x20\x00\x41\x00\x10\x93\x07\x41\x3a\x46\x0d\x00\x20\x00\x28\x02\x10\x21\x05\x0c\x01\x0b\x20\x03\x20\x00\x41\x20\x6a\x28\x02\x00\x10\xd9\x03\x21\x04\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x41\xb0\x02\x6a\x21\x06\x02\x40\x03\x40\x20\x06\x28\x02\x00\x22\x06\x45\x0d\x01\x20\x06\x28\x02\x04\x20\x04\x47\x0d\x00\x0b\x20\x00\x41\xdc\xcf\x02\x41\x00\x10\x8a\x07\x0c\x19\x0b\x20\x00\x10\x80\x07\x0d\x18\x20\x00\x41\x3a\x10\x98\x07\x0d\x18\x20\x00\x28\x02\x10\x22\x05\x41\xc5\x00\x6a\x41\x03\x49\x0d\x00\x20\x00\x41\xc0\x00\x6a\x22\x05\x28\x02\x00\x10\xd6\x07\x21\x07\x20\x02\x41\x7f\x36\x02\x54\x20\x02\x42\xff\xff\xff\xff\x0f\x37\x02\x4c\x20\x02\x20\x07\x36\x02\x48\x20\x02\x20\x04\x36\x02\x44\x20\x02\x20\x05\x28\x02\x00\x22\x06\x28\x02\xb0\x02\x36\x02\x40\x20\x06\x20\x02\x41\xc0\x00\x6a\x36\x02\xb0\x02\x20\x02\x20\x06\x28\x02\xbc\x01\x36\x02\x58\x20\x06\x2d\x00\x6e\x21\x08\x41\x00\x21\x06\x20\x02\x41\x00\x36\x02\x5c\x20\x00\x20\x01\x41\x1e\x74\x41\x1f\x75\x41\x00\x41\x03\x20\x08\x41\x01\x71\x1b\x71\x10\xa3\x07\x0d\x18\x20\x00\x20\x07\x10\xd8\x07\x20\x05\x28\x02\x00\x22\x00\x20\x00\x28\x02\xb0\x02\x28\x02\x00\x36\x02\xb0\x02\x0c\x1a\x0b\x20\x05\x41\xd0\x00\x6a\x22\x06\x41\x23\x4d\x0d\x02\x02\x40\x20\x05\x41\x83\x7f\x46\x0d\x00\x02\x40\x20\x05\x41\x3b\x46\x0d\x00\x20\x05\x41\xfb\x00\x47\x0d\x05\x20\x00\x10\xe4\x07\x0d\x19\x0c\x1a\x0b\x20\x00\x10\x80\x07\x45\x0d\x19\x0c\x18\x0b\x20\x00\x41\x28\x6a\x28\x02\x00\x45\x0d\x01\x0b\x20\x00\x10\xa1\x07\x0c\x16\x0b\x20\x00\x20\x01\x10\xe5\x07\x22\x06\x41\x01\x4b\x0d\x15\x41\x53\x21\x05\x02\x40\x20\x06\x0e\x02\x00\x12\x00\x0b\x20\x00\x41\x85\x01\x10\x92\x07\x45\x0d\x01\x20\x00\x41\x01\x10\x93\x07\x41\x47\x47\x0d\x01\x20\x01\x41\x04\x71\x0d\x06\x0c\x07\x0b\x41\xb3\x7f\x21\x07\x20\x06\x0e\x24\x0e\x00\x13\x11\x00\x00\x00\x00\x00\x00\x00\x0c\x0d\x0b\x0a\x0a\x09\x00\x00\x12\x08\x00\x00\x04\x02\x07\x03\x10\x01\x01\x01\x00\x00\x00\x00\x10\x0e\x0b\x20\x00\x10\xe6\x07\x0d\x13\x02\x40\x02\x40\x20\x00\x28\x02\x40\x28\x02\xa4\x01\x41\x00\x48\x0d\x00\x20\x00\x41\xd9\x00\x10\x86\x07\x20\x00\x28\x02\x40\x22\x06\x20\x06\x2f\x01\xa4\x01\x10\x89\x07\x0c\x01\x0b\x20\x00\x41\x0e\x10\x86\x07\x0b\x20\x00\x10\x9f\x07\x45\x0d\x14\x0c\x13\x0b\x20\x02\x20\x00\x28\x02\x00\x41\x10\x6a\x28\x02\x00\x20\x02\x41\xc0\x00\x6a\x20\x00\x41\x20\x6a\x28\x02\x00\x10\xdc\x01\x36\x02\x10\x20\x00\x41\x92\xd5\x02\x20\x02\x41\x10\x6a\x10\x8a\x07\x0c\x12\x0b\x20\x00\x10\x80\x07\x0d\x11\x20\x00\x10\x9f\x07\x45\x0d\x12\x0c\x11\x0b\x02\x40\x20\x01\x41\x04\x71\x0d\x00\x20\x00\x41\xd6\xd4\x02\x41\x00\x10\x8a\x07\x0c\x11\x0b\x41\x00\x21\x06\x41\x7f\x21\x01\x20\x00\x41\x00\x41\x00\x10\x95\x07\x45\x0d\x12\x0c\x13\x0b\x20\x01\x41\x01\x71\x45\x0d\x01\x20\x01\x41\x04\x71\x0d\x00\x20\x00\x41\x00\x10\x93\x07\x41\x2a\x46\x0d\x01\x0b\x41\x00\x21\x06\x20\x00\x41\x01\x41\x00\x20\x00\x41\x18\x6a\x28\x02\x00\x20\x00\x41\x14\x6a\x28\x02\x00\x10\x94\x07\x0d\x0e\x0c\x10\x0b\x20\x00\x41\x97\xd4\x02\x41\x00\x10\x8a\x07\x0c\x0d\x0b\x02\x40\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x2d\x00\x6e\x41\x01\x71\x45\x0d\x00\x20\x00\x41\x81\xd4\x02\x41\x00\x10\x8a\x07\x0c\x0d\x0b\x20\x00\x10\x80\x07\x0d\x0c\x20\x00\x10\xe7\x07\x0d\x0c\x20\x00\x10\xff\x06\x1a\x20\x00\x20\x00\x41\xc0\x00\x6a\x22\x06\x28\x02\x00\x41\xd4\x00\x41\x00\x10\x9d\x07\x22\x01\x41\x00\x48\x0d\x0c\x20\x00\x41\xef\x00\x10\x86\x07\x20\x00\x41\xd9\x00\x10\x86\x07\x20\x06\x28\x02\x00\x20\x01\x41\xff\xff\x03\x71\x10\x89\x07\x20\x00\x10\xe8\x07\x20\x00\x10\xe9\x07\x0d\x0c\x0c\x07\x0b\x20\x00\x10\xe8\x07\x20\x00\x10\x80\x07\x0d\x0b\x20\x00\x41\xc0\x00\x6a\x22\x06\x28\x02\x00\x10\xd6\x07\x21\x07\x20\x06\x28\x02\x00\x10\xd6\x07\x21\x09\x20\x06\x28\x02\x00\x10\xd6\x07\x21\x05\x20\x06\x28\x02\x00\x10\xd6\x07\x21\x08\x20\x00\x41\xec\x00\x20\x07\x10\xd7\x07\x1a\x20\x02\x42\xff\xff\xff\xff\x1f\x37\x02\x4c\x20\x02\x42\x80\x80\x80\x80\x70\x37\x02\x44\x20\x02\x41\x00\x36\x02\x5c\x20\x02\x20\x05\x36\x02\x54\x20\x02\x20\x06\x28\x02\x00\x22\x01\x28\x02\xb0\x02\x36\x02\x40\x20\x01\x20\x02\x41\xc0\x00\x6a\x36\x02\xb0\x02\x20\x02\x20\x01\x28\x02\xbc\x01\x36\x02\x58\x20\x00\x10\xe4\x07\x0d\x0b\x20\x06\x28\x02\x00\x22\x06\x20\x06\x28\x02\xb0\x02\x28\x02\x00\x36\x02\xb0\x02\x02\x40\x20\x06\x10\xda\x07\x45\x0d\x00\x20\x00\x41\x0e\x10\x86\x07\x20\x00\x41\x06\x10\x86\x07\x20\x00\x41\xed\x00\x20\x05\x10\xd7\x07\x1a\x20\x00\x41\x0e\x10\x86\x07\x20\x00\x41\xeb\x00\x20\x08\x10\xd7\x07\x1a\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x28\x02\x10\x41\x3b\x6a\x22\x06\x41\x01\x4b\x0d\x00\x02\x40\x20\x06\x0e\x02\x00\x05\x00\x0b\x20\x00\x10\x80\x07\x0d\x10\x20\x00\x10\xff\x06\x1a\x20\x00\x20\x07\x10\xd8\x07\x02\x40\x20\x00\x28\x02\x10\x41\xfb\x00\x47\x0d\x00\x20\x00\x41\x0e\x10\x86\x07\x0c\x04\x0b\x20\x00\x41\x28\x10\x98\x07\x0d\x10\x20\x00\x28\x02\x10\x22\x06\x41\xfb\x00\x46\x0d\x01\x20\x06\x41\xdb\x00\x46\x0d\x01\x02\x40\x02\x40\x20\x06\x41\x83\x7f\x47\x0d\x00\x20\x00\x41\x28\x6a\x28\x02\x00\x45\x0d\x01\x0b\x20\x00\x41\xa3\xcf\x02\x41\x00\x10\x8a\x07\x0c\x11\x0b\x20\x03\x20\x00\x41\x20\x6a\x28\x02\x00\x10\xd9\x03\x21\x06\x02\x40\x02\x40\x20\x00\x10\x80\x07\x0d\x00\x20\x00\x20\x06\x41\x45\x10\xe1\x07\x41\x7f\x4a\x0d\x01\x0b\x20\x03\x20\x06\x10\xe4\x02\x0c\x11\x0b\x20\x00\x41\xb9\x01\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x22\x01\x28\x02\x00\x20\x06\x10\xc6\x07\x20\x01\x28\x02\x00\x22\x06\x20\x06\x2f\x01\xbc\x01\x10\x89\x07\x0c\x02\x0b\x20\x00\x41\xe6\xd3\x02\x41\x00\x10\x8a\x07\x0c\x0f\x0b\x20\x00\x41\x53\x41\x00\x41\x01\x41\x7f\x41\x01\x10\xd5\x07\x41\x00\x48\x0d\x0e\x0b\x20\x00\x41\x29\x10\x98\x07\x0d\x0d\x0b\x20\x00\x41\xec\x00\x20\x09\x10\xd7\x07\x1a\x20\x00\x10\xff\x06\x1a\x20\x02\x42\xff\xff\xff\xff\x1f\x37\x02\x4c\x20\x02\x42\x80\x80\x80\x80\x70\x37\x02\x44\x20\x02\x41\x00\x36\x02\x5c\x20\x02\x20\x05\x36\x02\x54\x20\x02\x20\x00\x41\xc0\x00\x6a\x22\x01\x28\x02\x00\x22\x06\x28\x02\xb0\x02\x36\x02\x40\x20\x06\x20\x02\x41\xc0\x00\x6a\x36\x02\xb0\x02\x20\x02\x20\x06\x28\x02\xbc\x01\x36\x02\x58\x20\x00\x10\xe4\x07\x0d\x0c\x20\x01\x28\x02\x00\x22\x06\x20\x06\x28\x02\xb0\x02\x28\x02\x00\x36\x02\xb0\x02\x20\x00\x10\xcf\x07\x20\x00\x10\xcf\x07\x02\x40\x20\x01\x28\x02\x00\x10\xda\x07\x45\x0d\x00\x20\x00\x41\x0e\x10\x86\x07\x20\x00\x41\x06\x10\x86\x07\x20\x00\x41\xed\x00\x20\x05\x10\xd7\x07\x1a\x20\x00\x41\x0e\x10\x86\x07\x20\x00\x41\xeb\x00\x20\x08\x10\xd7\x07\x1a\x0b\x20\x09\x21\x07\x0b\x20\x00\x20\x07\x10\xd8\x07\x20\x00\x41\xed\x00\x20\x05\x10\xd7\x07\x1a\x20\x00\x41\x2f\x10\x86\x07\x20\x00\x20\x05\x10\xd8\x07\x02\x40\x20\x00\x28\x02\x10\x41\x46\x47\x0d\x00\x20\x00\x10\x80\x07\x0d\x0c\x20\x02\x41\x7f\x36\x02\x54\x20\x02\x42\xff\xff\xff\xff\x2f\x37\x02\x4c\x20\x02\x42\x80\x80\x80\x80\x70\x37\x02\x44\x41\x00\x21\x01\x20\x02\x41\x00\x36\x02\x5c\x20\x02\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x22\x06\x28\x02\xb0\x02\x36\x02\x40\x20\x06\x20\x02\x41\xc0\x00\x6a\x36\x02\xb0\x02\x20\x02\x20\x06\x28\x02\xbc\x01\x36\x02\x58\x02\x40\x20\x06\x28\x02\xa4\x01\x41\x00\x48\x0d\x00\x20\x00\x28\x02\x00\x20\x06\x41\xd1\x00\x10\x82\x07\x22\x01\x41\x00\x48\x0d\x0d\x20\x00\x41\xd8\x00\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x22\x06\x28\x02\x00\x22\x05\x20\x05\x2f\x01\xa4\x01\x10\x89\x07\x20\x00\x41\xd9\x00\x10\x86\x07\x20\x06\x28\x02\x00\x20\x01\x41\xff\xff\x03\x71\x10\x89\x07\x20\x00\x10\xe8\x07\x0b\x20\x00\x10\xe4\x07\x0d\x0c\x02\x40\x20\x00\x41\xc0\x00\x6a\x22\x05\x28\x02\x00\x22\x06\x28\x02\xa4\x01\x41\x00\x48\x0d\x00\x20\x00\x41\xd8\x00\x10\x86\x07\x20\x05\x28\x02\x00\x20\x01\x41\xff\xff\x03\x71\x10\x89\x07\x20\x00\x41\xd9\x00\x10\x86\x07\x20\x05\x28\x02\x00\x22\x06\x20\x06\x2f\x01\xa4\x01\x10\x89\x07\x20\x05\x28\x02\x00\x21\x06\x0b\x20\x06\x20\x06\x28\x02\xb0\x02\x28\x02\x00\x36\x02\xb0\x02\x0b\x20\x00\x41\xee\x00\x10\x86\x07\x20\x00\x20\x08\x10\xd8\x07\x0c\x0c\x0b\x20\x00\x10\x80\x07\x0d\x0a\x20\x00\x10\xe8\x07\x20\x00\x10\xe7\x07\x0d\x0a\x20\x00\x10\xff\x06\x1a\x20\x00\x41\xc0\x00\x6a\x22\x07\x28\x02\x00\x10\xd6\x07\x21\x08\x20\x02\x41\x7f\x36\x02\x54\x20\x02\x42\xff\xff\xff\xff\x1f\x37\x02\x4c\x20\x02\x20\x08\x36\x02\x48\x20\x02\x20\x04\x36\x02\x44\x20\x02\x41\x00\x36\x02\x5c\x20\x02\x20\x07\x28\x02\x00\x22\x06\x28\x02\xb0\x02\x36\x02\x40\x20\x06\x20\x02\x41\xc0\x00\x6a\x36\x02\xb0\x02\x20\x02\x20\x06\x28\x02\xbc\x01\x36\x02\x58\x20\x00\x41\xfb\x00\x10\x98\x07\x0d\x0a\x41\x7f\x21\x01\x41\x7f\x21\x09\x02\x40\x02\x40\x03\x40\x02\x40\x02\x40\x20\x00\x28\x02\x10\x22\x06\x41\x3f\x6a\x22\x05\x41\x01\x4d\x0d\x00\x20\x06\x41\xfd\x00\x47\x0d\x01\x20\x00\x41\xfd\x00\x10\x98\x07\x0d\x0f\x20\x09\x41\x00\x48\x0d\x03\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x22\x06\x28\x02\x80\x02\x20\x09\x6a\x20\x01\x36\x00\x00\x20\x06\x28\x02\xa4\x02\x20\x01\x41\x14\x6c\x6a\x20\x09\x41\x04\x6a\x36\x02\x04\x0c\x04\x0b\x02\x40\x02\x40\x20\x05\x0e\x02\x00\x01\x00\x0b\x02\x40\x02\x40\x20\x01\x41\x00\x4e\x0d\x00\x41\x7f\x21\x06\x0c\x01\x0b\x20\x00\x41\xeb\x00\x41\x7f\x10\xd7\x07\x21\x06\x0b\x20\x00\x20\x01\x10\xd8\x07\x03\x40\x20\x00\x10\x80\x07\x0d\x10\x20\x00\x41\x11\x10\x86\x07\x20\x00\x10\xe6\x07\x0d\x10\x20\x00\x41\x3a\x10\x98\x07\x0d\x10\x20\x00\x41\xab\x01\x10\x86\x07\x02\x40\x20\x00\x28\x02\x10\x41\x41\x47\x0d\x00\x20\x00\x41\xea\x00\x20\x06\x10\xd7\x07\x21\x06\x0c\x01\x0b\x0b\x20\x00\x41\xe9\x00\x41\x7f\x10\xd7\x07\x21\x01\x20\x00\x20\x06\x10\xd8\x07\x0c\x02\x0b\x20\x00\x10\x80\x07\x0d\x0e\x20\x00\x41\x3a\x10\x98\x07\x0d\x0e\x02\x40\x20\x09\x41\x00\x48\x0d\x00\x20\x00\x41\xbb\xd3\x02\x41\x00\x10\x8a\x07\x0c\x0f\x0b\x02\x40\x20\x01\x41\x7f\x4a\x0d\x00\x20\x00\x41\xeb\x00\x41\x7f\x10\xd7\x07\x21\x01\x0b\x20\x00\x41\xb6\x01\x10\x86\x07\x20\x07\x28\x02\x00\x41\x00\x10\xc6\x07\x20\x07\x28\x02\x00\x41\x84\x02\x6a\x28\x02\x00\x41\x7c\x6a\x21\x09\x0c\x01\x0b\x02\x40\x20\x01\x41\x7f\x4a\x0d\x00\x20\x00\x41\xcd\xd3\x02\x41\x00\x10\x8a\x07\x0c\x0e\x0b\x20\x00\x41\x07\x10\xa3\x07\x45\x0d\x00\x0c\x0d\x0b\x00\x0b\x20\x00\x20\x01\x10\xd8\x07\x0b\x20\x00\x20\x08\x10\xd8\x07\x20\x00\x41\x0e\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x22\x06\x20\x06\x28\x02\xb0\x02\x28\x02\x00\x36\x02\xb0\x02\x0c\x05\x0b\x20\x00\x10\x80\x07\x0d\x09\x41\x00\x21\x08\x02\x40\x20\x00\x28\x02\x30\x0d\x00\x20\x00\x28\x02\x10\x41\x83\x7f\x47\x0d\x00\x20\x00\x41\x28\x6a\x28\x02\x00\x0d\x00\x20\x00\x41\x20\x6a\x28\x02\x00\x21\x08\x0b\x20\x00\x28\x02\x40\x22\x06\x41\xb0\x02\x6a\x21\x01\x20\x06\x28\x02\xbc\x01\x21\x07\x20\x05\x41\xbe\x7f\x46\x21\x09\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x03\x40\x20\x01\x28\x02\x00\x22\x01\x45\x0d\x01\x20\x00\x20\x07\x20\x01\x28\x02\x18\x10\xea\x07\x20\x01\x28\x02\x18\x21\x07\x02\x40\x02\x40\x20\x09\x0d\x00\x20\x01\x28\x02\x0c\x22\x06\x41\x7f\x46\x0d\x01\x20\x08\x45\x0d\x05\x20\x01\x28\x02\x04\x20\x08\x47\x0d\x01\x0c\x07\x0b\x20\x01\x28\x02\x08\x22\x06\x41\x7f\x46\x0d\x00\x20\x08\x45\x0d\x03\x20\x01\x28\x02\x04\x20\x08\x46\x0d\x06\x0b\x02\x40\x02\x40\x20\x01\x28\x02\x1c\x0d\x00\x41\x00\x21\x06\x0c\x01\x0b\x20\x00\x41\x83\x01\x10\x86\x07\x41\x03\x21\x06\x0b\x02\x40\x03\x40\x20\x06\x20\x01\x28\x02\x10\x4e\x0d\x01\x20\x00\x41\x0e\x10\x86\x07\x20\x06\x41\x01\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x20\x01\x28\x02\x14\x41\x7f\x46\x0d\x00\x20\x00\x41\x06\x10\x86\x07\x20\x00\x41\xed\x00\x20\x01\x28\x02\x14\x10\xd7\x07\x1a\x20\x00\x41\x0e\x10\x86\x07\x0c\x00\x0b\x00\x0b\x02\x40\x20\x08\x0d\x00\x20\x05\x41\xbe\x7f\x46\x0d\x03\x20\x00\x41\xdb\xd2\x02\x41\x00\x10\x8a\x07\x0c\x0f\x0b\x20\x00\x41\x9c\xd3\x02\x41\x00\x10\x8a\x07\x0c\x0e\x0b\x20\x00\x41\xeb\x00\x20\x06\x10\xd7\x07\x1a\x0c\x03\x0b\x20\x00\x41\xeb\x00\x20\x06\x10\xd7\x07\x1a\x0c\x02\x0b\x20\x00\x41\xf8\xd2\x02\x41\x00\x10\x8a\x07\x0c\x0b\x0b\x20\x00\x41\xeb\x00\x20\x06\x10\xd7\x07\x1a\x20\x00\x10\x80\x07\x0d\x0a\x0b\x20\x00\x10\x9f\x07\x45\x0d\x0a\x0c\x09\x0b\x20\x00\x10\x80\x07\x0d\x08\x20\x00\x10\xe8\x07\x41\x00\x21\x01\x20\x02\x41\x00\x36\x02\x1c\x02\x40\x02\x40\x20\x00\x28\x02\x10\x22\x06\x41\x5a\x46\x0d\x00\x20\x06\x41\x28\x47\x0d\x01\x41\x00\x21\x01\x20\x00\x20\x02\x41\x1c\x6a\x41\x00\x10\xd4\x07\x1a\x0c\x01\x0b\x02\x40\x20\x00\x28\x02\x40\x2d\x00\x6c\x41\x02\x71\x0d\x00\x20\x00\x41\xf0\xd0\x02\x41\x00\x10\x8a\x07\x0c\x0a\x0b\x20\x00\x10\x80\x07\x0d\x09\x41\x01\x21\x01\x0b\x20\x00\x41\x28\x10\x98\x07\x0d\x08\x41\x01\x21\x05\x02\x40\x02\x40\x20\x02\x2d\x00\x1c\x41\x01\x71\x0d\x00\x20\x00\x28\x02\x00\x21\x0a\x20\x00\x41\xc0\x00\x6a\x22\x06\x28\x02\x00\x22\x07\x28\x02\xbc\x01\x21\x09\x20\x07\x10\xd6\x07\x21\x08\x20\x06\x28\x02\x00\x10\xd6\x07\x21\x0b\x20\x06\x28\x02\x00\x10\xd6\x07\x21\x0c\x20\x06\x28\x02\x00\x10\xd6\x07\x21\x0d\x20\x00\x10\xff\x06\x1a\x41\x00\x21\x0e\x20\x02\x41\x00\x36\x02\x5c\x20\x02\x42\x81\x80\x80\x80\x70\x37\x03\x50\x20\x02\x20\x08\x36\x02\x4c\x20\x02\x20\x0c\x36\x02\x48\x20\x02\x20\x04\x36\x02\x44\x20\x02\x20\x09\x36\x02\x58\x20\x02\x20\x06\x28\x02\x00\x22\x0f\x28\x02\xb0\x02\x36\x02\x40\x20\x0f\x20\x02\x41\xc0\x00\x6a\x36\x02\xb0\x02\x20\x00\x41\xeb\x00\x41\x7f\x10\xd7\x07\x21\x10\x20\x06\x28\x02\x00\x41\x84\x02\x6a\x28\x02\x00\x21\x11\x20\x00\x20\x0d\x10\xd8\x07\x20\x00\x28\x02\x10\x21\x06\x20\x00\x41\x04\x10\xe5\x07\x22\x0f\x41\x01\x4b\x0d\x0a\x41\x53\x21\x12\x02\x40\x02\x40\x02\x40\x02\x40\x20\x0f\x0e\x02\x00\x01\x00\x0b\x20\x06\x41\x4b\x46\x21\x0e\x20\x06\x41\x53\x46\x21\x05\x02\x40\x20\x06\x41\xb3\x7f\x46\x0d\x00\x20\x06\x41\x53\x46\x0d\x00\x20\x06\x41\x4b\x47\x0d\x02\x0b\x20\x06\x21\x12\x0b\x20\x00\x10\x80\x07\x0d\x0c\x02\x40\x02\x40\x20\x00\x28\x02\x10\x22\x06\x41\xfb\x00\x46\x0d\x00\x20\x06\x41\xdb\x00\x46\x0d\x00\x02\x40\x20\x06\x41\x83\x7f\x47\x0d\x00\x20\x00\x41\x28\x6a\x28\x02\x00\x45\x0d\x02\x0b\x20\x00\x41\xa2\xd1\x02\x41\x00\x10\x8a\x07\x0c\x0e\x0b\x41\x01\x21\x0e\x41\x00\x21\x0f\x20\x00\x20\x12\x41\x00\x41\x01\x41\x7f\x41\x00\x10\xd5\x07\x41\x00\x48\x0d\x0d\x20\x02\x41\x00\x36\x02\x9c\x01\x20\x12\x21\x06\x0c\x02\x0b\x20\x02\x20\x0a\x20\x00\x41\x20\x6a\x28\x02\x00\x10\xd9\x03\x22\x0f\x36\x02\x9c\x01\x02\x40\x20\x00\x10\x80\x07\x45\x0d\x00\x20\x00\x28\x02\x00\x20\x0f\x10\xe4\x02\x0c\x0d\x0b\x02\x40\x20\x00\x20\x0f\x20\x12\x10\xe1\x07\x45\x0d\x00\x20\x00\x28\x02\x00\x20\x0f\x10\xe4\x02\x0c\x0d\x0b\x20\x00\x41\xbd\x01\x41\xbd\x01\x41\xb9\x01\x20\x05\x1b\x20\x0e\x1b\x10\x86\x07\x20\x00\x20\x0f\x10\x9e\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x20\x07\x2f\x01\xbc\x01\x10\x89\x07\x41\x00\x21\x0e\x20\x12\x21\x06\x0c\x01\x0b\x02\x40\x02\x40\x20\x00\x28\x02\x10\x41\x20\x72\x41\xfb\x00\x47\x0d\x00\x02\x40\x20\x00\x20\x02\x41\x90\x01\x6a\x41\x00\x10\xd4\x07\x22\x05\x41\x5b\x46\x0d\x00\x20\x05\x41\xb9\x7f\x47\x0d\x01\x0b\x20\x00\x41\x00\x41\x00\x41\x01\x20\x02\x28\x02\x90\x01\x41\x02\x71\x41\x01\x10\xd5\x07\x41\x00\x4e\x0d\x01\x0c\x0d\x0b\x20\x00\x10\xc5\x07\x0d\x0c\x20\x00\x20\x02\x41\x98\x01\x6a\x20\x02\x41\x94\x01\x6a\x20\x02\x41\x9c\x01\x6a\x20\x02\x41\x8c\x01\x6a\x41\x00\x41\x00\x41\xbd\x7f\x10\xe2\x07\x0d\x0c\x20\x00\x20\x02\x28\x02\x98\x01\x20\x02\x28\x02\x94\x01\x20\x02\x28\x02\x9c\x01\x20\x02\x28\x02\x8c\x01\x41\x04\x41\x00\x10\xe3\x07\x0b\x41\x00\x21\x0f\x20\x02\x41\x00\x36\x02\x9c\x01\x41\x00\x21\x0e\x0b\x20\x00\x41\xeb\x00\x20\x0b\x10\xd7\x07\x1a\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x41\x84\x02\x6a\x28\x02\x00\x21\x12\x20\x00\x20\x10\x10\xd8\x07\x41\x00\x21\x05\x02\x40\x20\x00\x28\x02\x10\x41\x3d\x47\x0d\x00\x02\x40\x02\x40\x20\x00\x10\x80\x07\x0d\x00\x20\x00\x41\x00\x10\xde\x07\x45\x0d\x01\x0b\x20\x0a\x20\x0f\x10\xe4\x02\x0c\x0c\x0b\x41\x01\x21\x05\x20\x0f\x45\x0d\x00\x20\x00\x41\xb9\x01\x10\x86\x07\x20\x00\x20\x0f\x10\x9e\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x20\x07\x2f\x01\xbc\x01\x10\x89\x07\x0b\x20\x0a\x20\x0f\x10\xe4\x02\x02\x40\x02\x40\x02\x40\x20\x00\x41\xc3\x00\x10\x92\x07\x45\x0d\x00\x41\x01\x21\x0a\x20\x02\x41\x01\x36\x02\x5c\x20\x02\x20\x02\x28\x02\x50\x41\x02\x6a\x36\x02\x50\x41\x95\xb3\x02\x21\x0f\x20\x05\x0d\x01\x0c\x04\x0b\x20\x00\x28\x02\x10\x41\xb9\x7f\x47\x0d\x01\x02\x40\x20\x01\x45\x0d\x00\x20\x00\x41\xb9\xd1\x02\x41\x00\x10\x8a\x07\x0c\x0d\x0b\x41\x00\x21\x0a\x20\x05\x45\x0d\x03\x41\xe3\xd1\x02\x21\x0f\x20\x06\x41\xb3\x7f\x47\x0d\x00\x20\x0e\x0d\x00\x20\x07\x2d\x00\x6e\x41\x01\x71\x45\x0d\x03\x0b\x20\x02\x20\x0f\x36\x02\x00\x20\x00\x41\xe6\xd1\x02\x20\x02\x10\x8a\x07\x0c\x0b\x0b\x20\x00\x41\xab\xd2\x02\x41\x00\x10\x8a\x07\x0c\x0a\x0b\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x28\x02\xbc\x01\x21\x01\x20\x00\x10\xff\x06\x1a\x02\x40\x20\x00\x28\x02\x10\x22\x06\x41\x3b\x46\x0d\x00\x20\x00\x41\x04\x10\xe5\x07\x22\x05\x41\x01\x4b\x0d\x0a\x41\x53\x21\x07\x02\x40\x02\x40\x02\x40\x20\x05\x0e\x02\x00\x01\x00\x0b\x02\x40\x20\x06\x41\xb3\x7f\x46\x0d\x00\x20\x06\x41\x53\x46\x0d\x00\x20\x06\x21\x07\x20\x06\x41\x4b\x46\x0d\x01\x20\x00\x41\x00\x10\xeb\x07\x0d\x0d\x20\x00\x41\x0e\x10\x86\x07\x0c\x02\x0b\x20\x06\x21\x07\x0b\x20\x00\x10\x80\x07\x0d\x0b\x20\x00\x41\x00\x20\x07\x41\x00\x10\xa0\x07\x0d\x0b\x0b\x20\x00\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x28\x02\xbc\x01\x20\x01\x10\xea\x07\x0b\x20\x00\x41\x3b\x10\x98\x07\x0d\x09\x20\x00\x41\xc0\x00\x6a\x22\x06\x28\x02\x00\x10\xd6\x07\x21\x09\x20\x06\x28\x02\x00\x10\xd6\x07\x21\x05\x20\x06\x28\x02\x00\x10\xd6\x07\x21\x07\x20\x06\x28\x02\x00\x10\xd6\x07\x21\x08\x20\x02\x42\x80\x80\x80\x80\x70\x37\x03\x30\x20\x02\x20\x05\x36\x02\x2c\x20\x02\x20\x08\x36\x02\x28\x20\x02\x20\x04\x36\x02\x24\x20\x02\x41\x00\x36\x02\x3c\x20\x02\x20\x06\x28\x02\x00\x22\x06\x28\x02\xb0\x02\x36\x02\x20\x20\x06\x20\x02\x41\x20\x6a\x36\x02\xb0\x02\x20\x02\x20\x06\x28\x02\xbc\x01\x36\x02\x38\x20\x07\x21\x06\x02\x40\x20\x00\x28\x02\x10\x41\x3b\x46\x0d\x00\x20\x00\x20\x09\x10\xd8\x07\x20\x00\x10\xe6\x07\x0d\x0a\x20\x00\x41\xe9\x00\x20\x08\x10\xd7\x07\x1a\x20\x09\x21\x06\x0b\x20\x00\x41\x3b\x10\x98\x07\x0d\x09\x02\x40\x02\x40\x20\x00\x28\x02\x10\x41\x29\x47\x0d\x00\x20\x02\x20\x06\x36\x02\x2c\x41\x00\x21\x09\x20\x06\x21\x05\x0c\x01\x0b\x20\x00\x41\xeb\x00\x20\x07\x10\xd7\x07\x1a\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x41\x84\x02\x6a\x28\x02\x00\x21\x09\x20\x00\x20\x05\x10\xd8\x07\x20\x00\x10\xe6\x07\x0d\x0a\x20\x00\x41\x0e\x10\x86\x07\x20\x06\x20\x07\x46\x0d\x00\x20\x00\x41\xeb\x00\x20\x06\x10\xd7\x07\x1a\x0b\x20\x00\x41\x29\x10\x98\x07\x0d\x09\x20\x00\x41\xc0\x00\x6a\x22\x0c\x28\x02\x00\x41\x84\x02\x6a\x28\x02\x00\x21\x0f\x20\x00\x20\x07\x10\xd8\x07\x20\x00\x10\xe9\x07\x0d\x09\x20\x00\x20\x0c\x28\x02\x00\x28\x02\xbc\x01\x20\x01\x10\xea\x07\x02\x40\x02\x40\x20\x06\x20\x07\x46\x0d\x00\x20\x05\x20\x06\x46\x0d\x00\x20\x00\x41\xc0\x00\x6a\x22\x07\x28\x02\x00\x22\x06\x41\x80\x02\x6a\x22\x0c\x20\x06\x41\x84\x02\x6a\x22\x0e\x28\x02\x00\x22\x0a\x20\x0f\x20\x09\x6b\x22\x01\x6a\x10\xec\x07\x1a\x20\x0c\x20\x06\x28\x02\x80\x02\x20\x09\x6a\x20\x01\x10\xa5\x07\x1a\x20\x06\x28\x02\x80\x02\x20\x09\x6a\x41\xb3\x01\x20\x01\x10\x74\x1a\x20\x07\x28\x02\x00\x22\x0d\x20\x0e\x28\x02\x00\x41\x7b\x6a\x36\x02\x98\x02\x20\x05\x41\x14\x6c\x41\x04\x6a\x21\x06\x20\x0a\x20\x09\x6b\x21\x0e\x20\x0d\x28\x02\xac\x02\x21\x0c\x03\x40\x20\x05\x20\x0c\x4e\x0d\x02\x02\x40\x20\x0d\x28\x02\xa4\x02\x20\x06\x6a\x22\x07\x28\x02\x00\x22\x01\x20\x09\x48\x0d\x00\x20\x01\x20\x0f\x4e\x0d\x00\x20\x07\x20\x0e\x20\x01\x6a\x36\x02\x00\x0b\x20\x06\x41\x14\x6a\x21\x06\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x00\x41\xeb\x00\x20\x05\x10\xd7\x07\x1a\x0b\x20\x00\x20\x08\x10\xd8\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x22\x06\x20\x06\x28\x02\xb0\x02\x28\x02\x00\x36\x02\xb0\x02\x0c\x04\x0b\x20\x00\x10\x80\x07\x0d\x08\x02\x40\x02\x40\x20\x0a\x45\x0d\x00\x20\x00\x10\x9b\x07\x45\x0d\x01\x0c\x0a\x0b\x20\x00\x10\xe6\x07\x0d\x09\x0b\x20\x00\x20\x00\x41\xc0\x00\x6a\x22\x06\x28\x02\x00\x28\x02\xbc\x01\x20\x09\x10\xea\x07\x20\x00\x41\xfe\x00\x41\xfd\x00\x20\x01\x1b\x41\xfc\x00\x20\x0a\x1b\x10\x86\x07\x20\x00\x41\xeb\x00\x20\x08\x10\xd7\x07\x1a\x20\x00\x41\x29\x10\x98\x07\x0d\x08\x20\x06\x28\x02\x00\x22\x05\x41\x80\x02\x6a\x22\x0f\x20\x05\x41\x84\x02\x6a\x22\x0e\x28\x02\x00\x22\x13\x20\x12\x20\x11\x6b\x22\x07\x6a\x10\xec\x07\x1a\x20\x0f\x20\x05\x28\x02\x80\x02\x20\x11\x6a\x20\x07\x10\xa5\x07\x1a\x20\x05\x28\x02\x80\x02\x20\x11\x6a\x41\xb3\x01\x20\x07\x10\x74\x1a\x20\x06\x28\x02\x00\x22\x10\x20\x0e\x28\x02\x00\x41\x7b\x6a\x36\x02\x98\x02\x20\x08\x41\x14\x6c\x41\x04\x6a\x21\x05\x20\x13\x20\x11\x6b\x21\x13\x20\x10\x28\x02\xac\x02\x21\x0e\x20\x08\x21\x06\x02\x40\x03\x40\x20\x06\x20\x0e\x4e\x0d\x01\x02\x40\x20\x10\x28\x02\xa4\x02\x20\x05\x6a\x22\x0f\x28\x02\x00\x22\x07\x20\x11\x48\x0d\x00\x20\x07\x20\x12\x4e\x0d\x00\x20\x0f\x20\x13\x20\x07\x6a\x36\x02\x00\x0b\x20\x05\x41\x14\x6a\x21\x05\x20\x06\x41\x01\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x20\x00\x20\x0b\x10\xd8\x07\x20\x00\x10\xe9\x07\x0d\x08\x20\x00\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x28\x02\xbc\x01\x20\x09\x10\xea\x07\x20\x00\x20\x08\x10\xd8\x07\x02\x40\x02\x40\x20\x0a\x45\x0d\x00\x02\x40\x20\x01\x45\x0d\x00\x20\x00\x41\x14\x10\x86\x07\x20\x00\x41\x0e\x10\x86\x07\x20\x00\x41\x24\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x41\x00\x10\x89\x07\x20\x00\x41\x8b\x01\x10\x86\x07\x20\x00\x41\x82\x01\x10\x86\x07\x0c\x02\x0b\x20\x00\x41\x80\x01\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x41\x00\x10\xc7\x07\x0c\x01\x0b\x20\x00\x41\xff\x00\x10\x86\x07\x0b\x20\x00\x41\xe9\x00\x20\x0d\x10\xd7\x07\x1a\x20\x00\x41\x0e\x10\x86\x07\x20\x00\x20\x0c\x10\xd8\x07\x20\x00\x41\x83\x01\x41\x0e\x20\x0a\x1b\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x22\x06\x20\x06\x28\x02\xb0\x02\x28\x02\x00\x36\x02\xb0\x02\x0c\x03\x0b\x20\x00\x41\xc0\x00\x6a\x22\x06\x28\x02\x00\x10\xd6\x07\x21\x01\x20\x06\x28\x02\x00\x10\xd6\x07\x21\x05\x20\x06\x28\x02\x00\x10\xd6\x07\x21\x07\x20\x02\x42\x80\x80\x80\x80\x70\x37\x03\x50\x20\x02\x20\x01\x36\x02\x4c\x20\x02\x20\x05\x36\x02\x48\x20\x02\x20\x04\x36\x02\x44\x20\x02\x41\x00\x36\x02\x5c\x20\x02\x20\x06\x28\x02\x00\x22\x06\x28\x02\xb0\x02\x36\x02\x40\x20\x06\x20\x02\x41\xc0\x00\x6a\x36\x02\xb0\x02\x20\x02\x20\x06\x28\x02\xbc\x01\x36\x02\x58\x20\x00\x10\x80\x07\x0d\x07\x20\x00\x20\x07\x10\xd8\x07\x20\x00\x10\xe8\x07\x20\x00\x10\xe9\x07\x0d\x07\x20\x00\x20\x01\x10\xd8\x07\x20\x00\x41\xbc\x7f\x10\x98\x07\x0d\x07\x20\x00\x10\xe7\x07\x0d\x07\x02\x40\x20\x00\x28\x02\x10\x41\x3b\x47\x0d\x00\x20\x00\x10\x80\x07\x0d\x08\x0b\x20\x00\x41\xea\x00\x20\x07\x10\xd7\x07\x1a\x20\x00\x20\x05\x10\xd8\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x22\x06\x20\x06\x28\x02\xb0\x02\x28\x02\x00\x36\x02\xb0\x02\x0c\x08\x0b\x20\x00\x41\xc0\x00\x6a\x22\x06\x28\x02\x00\x10\xd6\x07\x21\x01\x20\x06\x28\x02\x00\x10\xd6\x07\x21\x05\x20\x02\x42\x80\x80\x80\x80\x70\x37\x03\x50\x20\x02\x20\x01\x36\x02\x4c\x20\x02\x20\x05\x36\x02\x48\x20\x02\x20\x04\x36\x02\x44\x20\x02\x41\x00\x36\x02\x5c\x20\x02\x20\x06\x28\x02\x00\x22\x06\x28\x02\xb0\x02\x36\x02\x40\x20\x06\x20\x02\x41\xc0\x00\x6a\x36\x02\xb0\x02\x20\x02\x20\x06\x28\x02\xbc\x01\x36\x02\x58\x20\x00\x10\x80\x07\x0d\x06\x20\x00\x10\xe8\x07\x20\x00\x20\x01\x10\xd8\x07\x20\x00\x10\xe7\x07\x0d\x06\x20\x00\x41\xe9\x00\x20\x05\x10\xd7\x07\x1a\x20\x00\x10\xe9\x07\x0d\x06\x20\x00\x41\xeb\x00\x20\x01\x10\xd7\x07\x1a\x20\x00\x20\x05\x10\xd8\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x22\x06\x20\x06\x28\x02\xb0\x02\x28\x02\x00\x36\x02\xb0\x02\x0c\x07\x0b\x20\x00\x10\x80\x07\x0d\x05\x20\x00\x10\xff\x06\x1a\x20\x00\x10\xe8\x07\x20\x00\x10\xe7\x07\x0d\x05\x20\x00\x41\xe9\x00\x41\x7f\x10\xd7\x07\x21\x06\x20\x00\x20\x00\x28\x02\x40\x2d\x00\x6e\x41\x7f\x73\x41\x01\x71\x22\x01\x10\xa3\x07\x0d\x05\x02\x40\x02\x40\x20\x00\x28\x02\x10\x41\xb1\x7f\x46\x0d\x00\x20\x06\x21\x05\x0c\x01\x0b\x20\x00\x41\xeb\x00\x41\x7f\x10\xd7\x07\x21\x05\x20\x00\x10\x80\x07\x0d\x06\x20\x00\x20\x06\x10\xd8\x07\x20\x00\x20\x01\x10\xa3\x07\x0d\x06\x0b\x20\x00\x20\x05\x10\xd8\x07\x0b\x20\x00\x10\xcf\x07\x0c\x05\x0b\x20\x05\x21\x07\x20\x01\x41\x04\x71\x0d\x00\x20\x00\x41\xb2\xd0\x02\x41\x00\x10\x8a\x07\x0c\x03\x0b\x20\x00\x10\x80\x07\x0d\x02\x41\x00\x21\x06\x20\x00\x41\x01\x20\x07\x41\x00\x10\xa0\x07\x0d\x02\x20\x00\x10\x9f\x07\x0d\x02\x0c\x04\x0b\x20\x00\x10\x80\x07\x0d\x01\x02\x40\x20\x00\x28\x02\x30\x45\x0d\x00\x20\x00\x41\x8a\xd0\x02\x41\x00\x10\x8a\x07\x0c\x02\x0b\x20\x00\x10\xe6\x07\x0d\x01\x20\x00\x41\x2f\x10\x86\x07\x20\x00\x10\x9f\x07\x45\x0d\x02\x0c\x01\x0b\x02\x40\x20\x00\x28\x02\x40\x28\x02\x20\x45\x0d\x00\x20\x00\x41\xf1\xcf\x02\x41\x00\x10\x8a\x07\x0c\x01\x0b\x20\x00\x10\x80\x07\x0d\x00\x41\x00\x21\x06\x41\x00\x21\x01\x02\x40\x20\x00\x28\x02\x10\x22\x05\x41\x3b\x46\x0d\x00\x41\x00\x21\x01\x20\x05\x41\xfd\x00\x46\x0d\x00\x41\x00\x21\x01\x20\x00\x28\x02\x30\x0d\x00\x20\x00\x10\xe6\x07\x0d\x01\x41\x01\x21\x01\x0b\x20\x00\x20\x01\x10\xdb\x07\x20\x00\x10\x9f\x07\x45\x0d\x02\x0b\x41\x7f\x21\x06\x0c\x01\x0b\x41\x00\x21\x06\x0b\x20\x03\x20\x04\x10\xe4\x02\x20\x06\x21\x01\x0b\x20\x02\x41\xa0\x01\x6a\x24\x00\x20\x01\x0b\x28\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x20\x02\x20\x01\x36\x02\x0c\x20\x00\x20\x02\x41\x0c\x6a\x41\x04\x10\xa5\x07\x1a\x20\x02\x41\x10\x6a\x24\x00\x0b\x54\x01\x02\x7f\x02\x40\x02\x40\x20\x00\x28\x02\x04\x22\x03\x20\x02\x6a\x22\x04\x20\x00\x28\x02\x08\x4d\x0d\x00\x41\x7f\x21\x03\x20\x00\x20\x04\x10\xec\x07\x0d\x01\x20\x00\x28\x02\x04\x21\x03\x0b\x20\x00\x28\x02\x00\x20\x03\x6a\x20\x01\x20\x02\x10\x70\x1a\x20\x00\x20\x00\x28\x02\x04\x20\x02\x6a\x36\x02\x04\x41\x00\x21\x03\x0b\x20\x03\x0b\x3e\x01\x01\x7f\x02\x40\x20\x00\x28\x02\x00\x22\x01\x45\x0d\x00\x20\x00\x28\x02\x14\x20\x01\x41\x00\x20\x00\x28\x02\x10\x11\x01\x00\x1a\x0b\x20\x00\x42\x00\x37\x02\x00\x20\x00\x41\x10\x6a\x42\x00\x37\x02\x00\x20\x00\x41\x08\x6a\x42\x00\x37\x02\x00\x0b\x37\x00\x02\x40\x20\x00\x20\x01\x41\x08\x10\x82\x07\x22\x00\x41\x00\x48\x0d\x00\x20\x01\x28\x02\x60\x45\x0d\x00\x20\x01\x28\x02\x74\x20\x00\x41\x04\x74\x6a\x22\x01\x20\x01\x28\x02\x0c\x41\x02\x72\x36\x02\x0c\x0b\x20\x00\x0b\x2f\x01\x01\x7f\x02\x40\x20\x01\x28\x02\x98\x01\x22\x02\x41\x7f\x4a\x0d\x00\x20\x00\x20\x01\x41\xcd\x00\x10\x82\x07\x22\x02\x41\x00\x48\x0d\x00\x20\x01\x20\x02\x36\x02\x98\x01\x0b\x20\x02\x0b\x6c\x01\x01\x7f\x02\x40\x20\x01\x28\x02\xa0\x01\x22\x03\x41\x7f\x4a\x0d\x00\x20\x00\x20\x01\x20\x02\x10\x82\x07\x22\x03\x41\x00\x48\x0d\x00\x20\x01\x20\x03\x36\x02\xa0\x01\x20\x01\x28\x02\x74\x20\x03\x41\x04\x74\x22\x02\x6a\x22\x00\x20\x00\x28\x02\x0c\x41\x87\x7f\x71\x41\x20\x72\x36\x02\x0c\x20\x01\x2d\x00\x6e\x41\x01\x71\x45\x0d\x00\x20\x01\x28\x02\x74\x20\x02\x6a\x22\x01\x20\x01\x28\x02\x0c\x41\x01\x72\x36\x02\x0c\x0b\x20\x03\x0b\x19\x00\x20\x00\x20\x01\x20\x02\x41\x01\x20\x03\x20\x04\x20\x05\x20\x06\x20\x07\x20\x08\x10\xab\x07\x0b\xb9\x01\x01\x03\x7f\x02\x40\x20\x01\x28\x02\x04\x22\x0a\x20\x02\x46\x0d\x00\x20\x00\x20\x0a\x20\x02\x20\x03\x20\x04\x20\x05\x20\x06\x20\x07\x20\x08\x20\x09\x10\xab\x07\x21\x05\x41\x00\x21\x03\x20\x05\x41\x00\x4e\x0d\x00\x41\x7f\x0f\x0b\x20\x01\x28\x02\xc0\x02\x21\x0b\x41\x00\x21\x02\x41\x02\x21\x0a\x02\x40\x02\x40\x03\x40\x20\x02\x20\x0b\x4e\x0d\x01\x02\x40\x20\x05\x20\x01\x28\x02\xc8\x02\x20\x0a\x6a\x22\x0c\x2f\x01\x00\x47\x0d\x00\x20\x0c\x41\x7e\x6a\x2d\x00\x00\x22\x0c\x41\x01\x76\x41\x01\x71\x20\x04\x47\x0d\x00\x20\x03\x20\x0c\x41\x01\x71\x46\x0d\x03\x0b\x20\x0a\x41\x08\x6a\x21\x0a\x20\x02\x41\x01\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x20\x00\x20\x01\x20\x03\x20\x04\x20\x05\x20\x06\x20\x07\x20\x08\x20\x09\x10\xac\x07\x21\x02\x0b\x20\x02\x0b\xad\x01\x01\x02\x7f\x02\x40\x20\x01\x28\x02\xc0\x02\x22\x09\x41\x80\x80\x04\x48\x0d\x00\x20\x00\x41\x88\xcf\x02\x41\x00\x10\xc2\x02\x41\x7f\x0f\x0b\x41\x7f\x21\x0a\x02\x40\x20\x00\x20\x01\x41\xc8\x02\x6a\x41\x08\x20\x01\x41\xc4\x02\x6a\x20\x09\x41\x01\x6a\x10\xc3\x04\x0d\x00\x20\x01\x20\x01\x28\x02\xc0\x02\x22\x09\x41\x01\x6a\x36\x02\xc0\x02\x20\x01\x28\x02\xc8\x02\x20\x09\x41\x03\x74\x6a\x22\x09\x20\x04\x3b\x01\x02\x20\x09\x20\x03\x41\x01\x74\x41\x02\x71\x20\x02\x41\x01\x71\x72\x20\x06\x41\x02\x74\x41\x04\x71\x72\x20\x07\x41\x03\x74\x41\x08\x71\x72\x20\x08\x41\x04\x74\x72\x3a\x00\x00\x20\x09\x20\x00\x20\x05\x10\xd9\x03\x36\x02\x04\x20\x01\x28\x02\xc0\x02\x41\x7f\x6a\x21\x0a\x0b\x20\x0a\x0b\xc9\x04\x01\x0b\x7f\x23\x00\x21\x03\x20\x00\x28\x02\x00\x21\x04\x20\x03\x41\x10\x6b\x22\x05\x20\x02\x36\x02\x0c\x41\x7f\x21\x06\x02\x40\x02\x40\x03\x40\x20\x05\x20\x02\x22\x07\x41\x04\x6a\x22\x02\x36\x02\x0c\x20\x07\x28\x02\x00\x22\x08\x41\x7f\x46\x0d\x01\x20\x00\x28\x02\x04\x21\x09\x03\x40\x41\x00\x21\x0a\x20\x01\x22\x03\x20\x09\x4e\x0d\x03\x20\x03\x20\x04\x20\x03\x6a\x22\x0b\x2d\x00\x00\x22\x0c\x41\x02\x74\x22\x0d\x41\x90\xb9\x01\x6a\x2d\x00\x00\x6a\x22\x01\x20\x09\x4a\x0d\x03\x02\x40\x20\x0c\x41\xc2\x01\x47\x0d\x00\x20\x0b\x28\x00\x01\x21\x06\x0c\x01\x0b\x0b\x02\x40\x20\x08\x20\x0c\x46\x0d\x00\x20\x08\x41\x80\x02\x49\x0d\x03\x20\x0c\x45\x0d\x03\x02\x40\x20\x08\x41\xff\x01\x71\x20\x0c\x46\x0d\x00\x20\x08\x41\x08\x76\x41\xff\x01\x71\x20\x0c\x46\x0d\x00\x20\x08\x41\x10\x76\x41\xff\x01\x71\x20\x0c\x46\x0d\x00\x20\x08\x41\x18\x76\x20\x0c\x47\x0d\x04\x0b\x20\x00\x20\x0c\x36\x02\x10\x0b\x20\x0d\x41\x93\xb9\x01\x6a\x2d\x00\x00\x41\x7b\x6a\x22\x09\x41\x17\x4b\x0d\x00\x20\x03\x41\x01\x6a\x21\x03\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x09\x0e\x18\x00\x08\x00\x08\x08\x01\x08\x08\x01\x08\x08\x01\x01\x01\x02\x02\x02\x02\x04\x05\x06\x07\x08\x03\x00\x0b\x20\x04\x20\x03\x6a\x2d\x00\x00\x21\x03\x20\x05\x20\x07\x41\x08\x6a\x22\x02\x36\x02\x0c\x02\x40\x20\x07\x28\x02\x04\x22\x09\x41\x7f\x47\x0d\x00\x20\x00\x20\x03\x36\x02\x14\x0c\x08\x0b\x20\x09\x20\x03\x46\x0d\x07\x0c\x09\x0b\x20\x04\x20\x03\x6a\x2f\x00\x00\x21\x03\x20\x05\x20\x07\x41\x08\x6a\x22\x02\x36\x02\x0c\x02\x40\x20\x07\x28\x02\x04\x22\x09\x41\x7f\x47\x0d\x00\x20\x00\x20\x03\x36\x02\x14\x0c\x07\x0b\x20\x09\x20\x03\x46\x0d\x06\x0c\x08\x0b\x20\x00\x20\x04\x20\x03\x6a\x28\x00\x00\x36\x02\x18\x0c\x05\x0b\x20\x00\x20\x04\x20\x03\x6a\x22\x03\x28\x00\x00\x36\x02\x18\x20\x00\x20\x03\x2f\x00\x04\x36\x02\x1c\x0c\x04\x0b\x20\x00\x20\x04\x20\x03\x6a\x28\x00\x00\x36\x02\x20\x0c\x03\x0b\x20\x00\x20\x04\x20\x03\x6a\x22\x03\x28\x00\x00\x36\x02\x20\x20\x00\x20\x03\x2d\x00\x04\x36\x02\x1c\x0c\x02\x0b\x20\x00\x20\x04\x20\x03\x6a\x22\x03\x28\x00\x00\x36\x02\x20\x20\x00\x20\x03\x2f\x00\x04\x36\x02\x1c\x0c\x01\x0b\x20\x00\x20\x04\x20\x03\x6a\x22\x03\x28\x00\x00\x36\x02\x20\x20\x00\x20\x03\x28\x00\x04\x36\x02\x18\x20\x00\x20\x03\x2d\x00\x08\x36\x02\x1c\x0c\x00\x0b\x00\x0b\x20\x00\x20\x06\x36\x02\x0c\x20\x00\x20\x01\x36\x02\x08\x41\x01\x21\x0a\x0b\x20\x0a\x0b\x65\x00\x02\x40\x02\x40\x20\x01\x41\x00\x48\x0d\x00\x20\x00\x28\x02\xac\x02\x20\x01\x4c\x0d\x00\x20\x00\x28\x02\xa4\x02\x20\x01\x41\x14\x6c\x6a\x22\x01\x20\x01\x28\x02\x00\x20\x02\x6a\x22\x01\x36\x02\x00\x20\x01\x41\x7f\x4c\x0d\x01\x20\x01\x0f\x0b\x41\xbc\xca\x02\x41\xae\xb7\x01\x41\x80\xa9\x01\x41\xbd\xcd\x02\x10\x4a\x00\x0b\x41\xca\xcd\x02\x41\xae\xb7\x01\x41\x83\xa9\x01\x41\xbd\xcd\x02\x10\x4a\x00\x0b\xe0\x02\x01\x01\x7f\x02\x40\x02\x40\x20\x02\x41\x03\x4a\x0d\x00\x02\x40\x20\x01\x41\xa8\x7f\x6a\x22\x03\x41\x08\x4d\x0d\x00\x20\x01\x41\x22\x47\x0d\x02\x20\x00\x20\x02\x41\x6e\x6a\x41\xff\x01\x71\x10\xcd\x02\x0f\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x03\x0e\x09\x00\x01\x02\x03\x04\x05\x06\x07\x08\x00\x0b\x20\x00\x20\x02\x41\x45\x6a\x41\xff\x01\x71\x10\xcd\x02\x0f\x0b\x20\x00\x20\x02\x41\x49\x6a\x41\xff\x01\x71\x10\xcd\x02\x0f\x0b\x20\x00\x20\x02\x41\x4d\x6a\x41\xff\x01\x71\x10\xcd\x02\x0f\x0b\x20\x00\x20\x02\x41\x51\x6a\x41\xff\x01\x71\x10\xcd\x02\x0f\x0b\x20\x00\x20\x02\x41\x55\x6a\x41\xff\x01\x71\x10\xcd\x02\x0f\x0b\x20\x00\x20\x02\x41\x59\x6a\x41\xff\x01\x71\x10\xcd\x02\x0f\x0b\x20\x00\x20\x02\x41\x5d\x6a\x41\xff\x01\x71\x10\xcd\x02\x0f\x0b\x20\x00\x20\x02\x41\x61\x6a\x41\xff\x01\x71\x10\xcd\x02\x0f\x0b\x20\x00\x20\x02\x41\x65\x6a\x41\xff\x01\x71\x10\xcd\x02\x0f\x0b\x20\x02\x41\xff\x01\x4a\x0d\x00\x20\x01\x41\xa8\x7f\x6a\x22\x03\x41\x02\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x03\x0e\x03\x00\x01\x02\x00\x0b\x20\x00\x41\xc2\x01\x10\xcd\x02\x20\x00\x20\x02\x41\xff\x01\x71\x10\xcd\x02\x0f\x0b\x20\x00\x41\xc3\x01\x10\xcd\x02\x20\x00\x20\x02\x41\xff\x01\x71\x10\xcd\x02\x0f\x0b\x20\x00\x41\xc4\x01\x10\xcd\x02\x20\x00\x20\x02\x41\xff\x01\x71\x10\xcd\x02\x0f\x0b\x20\x00\x20\x01\x41\xff\x01\x71\x10\xcd\x02\x20\x00\x20\x02\x41\xff\xff\x03\x71\x10\x87\x07\x0b\x6a\x01\x02\x7f\x02\x40\x20\x00\x28\x02\xd8\x02\x22\x03\x45\x0d\x00\x20\x00\x28\x02\xe0\x02\x22\x04\x20\x00\x28\x02\xdc\x02\x4e\x0d\x00\x20\x00\x28\x02\xe8\x02\x20\x01\x4b\x0d\x00\x20\x00\x28\x02\xe4\x02\x20\x02\x46\x0d\x00\x20\x00\x20\x01\x36\x02\xe8\x02\x20\x00\x20\x02\x36\x02\xe4\x02\x20\x00\x20\x04\x41\x01\x6a\x36\x02\xe0\x02\x20\x03\x20\x04\x41\x03\x74\x6a\x22\x00\x20\x02\x36\x02\x04\x20\x00\x20\x01\x36\x02\x00\x0b\x0b\xf9\x01\x01\x03\x7f\x02\x40\x03\x40\x20\x03\x20\x02\x4e\x0d\x01\x20\x01\x20\x03\x6a\x22\x05\x2d\x00\x00\x22\x06\x41\x02\x74\x21\x07\x02\x40\x02\x40\x02\x40\x20\x06\x41\xb6\x01\x46\x0d\x00\x20\x06\x41\xc2\x01\x47\x0d\x01\x20\x04\x20\x05\x28\x00\x01\x36\x02\x00\x0c\x02\x0b\x20\x00\x20\x05\x28\x00\x01\x22\x06\x41\x00\x10\xae\x07\x41\x00\x4a\x0d\x03\x20\x00\x28\x02\xa4\x02\x20\x06\x41\x14\x6c\x6a\x28\x02\x10\x45\x0d\x01\x41\xdd\xcd\x02\x41\xae\xb7\x01\x41\xc0\xf0\x01\x41\x87\xce\x02\x10\x4a\x00\x0b\x20\x07\x41\x93\xb9\x01\x6a\x2d\x00\x00\x22\x06\x41\x1c\x4b\x0d\x00\x02\x40\x41\x01\x20\x06\x74\x22\x06\x41\x80\x80\x80\x1c\x71\x0d\x00\x02\x40\x20\x06\x41\x80\x80\x80\xe0\x00\x71\x0d\x00\x20\x06\x41\x80\x80\x80\x82\x01\x71\x45\x0d\x02\x20\x00\x20\x05\x28\x00\x01\x41\x7f\x10\xae\x07\x1a\x0c\x02\x0b\x20\x00\x20\x05\x28\x00\x05\x41\x7f\x10\xae\x07\x1a\x0b\x20\x00\x28\x02\x00\x20\x05\x28\x00\x01\x10\xe4\x02\x0b\x20\x03\x20\x07\x41\x90\xb9\x01\x6a\x2d\x00\x00\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x03\x0b\x35\x01\x01\x7f\x02\x40\x03\x40\x20\x01\x41\x07\x76\x22\x02\x45\x0d\x01\x20\x00\x20\x01\x41\x80\x01\x72\x41\xff\x01\x71\x10\xcd\x02\x20\x02\x21\x01\x0c\x00\x0b\x00\x0b\x20\x00\x20\x01\x41\xff\x00\x71\x10\xcd\x02\x0b\x9d\x02\x01\x02\x7f\x23\x00\x41\x30\x6b\x22\x05\x24\x00\x02\x40\x02\x40\x20\x01\x28\x02\x00\x20\x02\x4b\x0d\x00\x20\x05\x20\x02\x36\x02\x24\x20\x05\x20\x03\x36\x02\x20\x20\x00\x41\xa0\xcc\x02\x20\x05\x41\x20\x6a\x10\xc2\x02\x41\x7f\x21\x03\x0c\x01\x0b\x02\x40\x20\x01\x28\x02\x04\x20\x04\x4e\x0d\x00\x20\x01\x20\x04\x36\x02\x04\x20\x04\x41\xff\xff\x03\x48\x0d\x00\x20\x05\x20\x02\x36\x02\x04\x20\x05\x20\x03\x36\x02\x00\x20\x00\x41\xe7\xcc\x02\x20\x05\x10\xc2\x02\x41\x7f\x21\x03\x0c\x01\x0b\x02\x40\x20\x01\x28\x02\x08\x20\x02\x41\x01\x74\x6a\x22\x03\x2f\x01\x00\x22\x06\x41\xff\xff\x03\x46\x0d\x00\x41\x00\x21\x03\x20\x06\x20\x04\x46\x0d\x01\x20\x05\x20\x02\x36\x02\x18\x20\x05\x20\x04\x36\x02\x14\x20\x05\x20\x06\x36\x02\x10\x20\x00\x41\x85\xcd\x02\x20\x05\x41\x10\x6a\x10\xc2\x02\x41\x7f\x21\x03\x0c\x01\x0b\x20\x03\x20\x04\x3b\x01\x00\x41\x7f\x21\x03\x20\x00\x20\x01\x41\x0c\x6a\x41\x04\x20\x01\x41\x14\x6a\x20\x01\x28\x02\x10\x41\x01\x6a\x10\xc3\x04\x0d\x00\x20\x01\x20\x01\x28\x02\x10\x22\x04\x41\x01\x6a\x36\x02\x10\x20\x01\x28\x02\x0c\x20\x04\x41\x02\x74\x6a\x20\x02\x36\x02\x00\x41\x00\x21\x03\x0b\x20\x05\x41\x30\x6a\x24\x00\x20\x03\x0b\x76\x00\x02\x40\x20\x01\x41\x01\x6a\x41\x08\x4b\x0d\x00\x20\x00\x20\x01\x41\xb5\x7f\x6a\x41\xff\x01\x71\x10\xcd\x02\x0f\x0b\x02\x40\x20\x01\x41\x80\x01\x6a\x41\xff\x01\x4b\x0d\x00\x20\x00\x41\xbd\x01\x10\xcd\x02\x20\x00\x20\x01\x41\xff\x01\x71\x10\xcd\x02\x0f\x0b\x02\x40\x20\x01\x41\x80\x80\x02\x6a\x41\xff\xff\x03\x4b\x0d\x00\x20\x00\x41\xbe\x01\x10\xcd\x02\x20\x00\x20\x01\x41\xff\xff\x03\x71\x10\x87\x07\x0f\x0b\x20\x00\x41\x01\x10\xcd\x02\x20\x00\x20\x01\x10\xa4\x07\x0b\x96\x02\x01\x05\x7f\x20\x00\x20\x01\x41\x7f\x10\xae\x07\x1a\x41\x00\x21\x04\x02\x40\x03\x40\x02\x40\x20\x04\x41\x0a\x47\x0d\x00\x41\xeb\x00\x21\x05\x0c\x02\x0b\x02\x40\x20\x01\x41\x00\x48\x0d\x00\x20\x01\x20\x00\x28\x02\xac\x02\x4e\x0d\x00\x20\x00\x28\x02\xa4\x02\x20\x01\x41\x14\x6c\x6a\x28\x02\x08\x21\x06\x20\x00\x28\x02\x80\x02\x21\x07\x02\x40\x03\x40\x02\x40\x20\x07\x20\x06\x6a\x22\x08\x2d\x00\x00\x22\x05\x41\xb6\x01\x46\x0d\x00\x02\x40\x20\x05\x41\xc2\x01\x46\x0d\x00\x20\x05\x41\xeb\x00\x46\x0d\x03\x20\x05\x41\x0e\x47\x0d\x06\x20\x08\x41\x01\x6a\x21\x06\x03\x40\x20\x06\x2d\x00\x00\x21\x08\x20\x06\x41\x01\x6a\x21\x06\x20\x08\x41\x0e\x46\x0d\x00\x0b\x41\x29\x21\x05\x20\x08\x41\x29\x46\x0d\x06\x41\x0e\x21\x05\x0c\x06\x0b\x20\x03\x45\x0d\x00\x20\x03\x20\x08\x28\x00\x01\x36\x02\x00\x0b\x20\x06\x20\x05\x41\x02\x74\x41\x90\xb9\x01\x6a\x2d\x00\x00\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x20\x04\x41\x01\x6a\x21\x04\x20\x08\x28\x00\x01\x21\x01\x0c\x01\x0b\x0b\x41\xbc\xca\x02\x41\xae\xb7\x01\x41\xb7\xf4\x01\x41\xac\xcd\x02\x10\x4a\x00\x0b\x20\x02\x20\x05\x36\x02\x00\x20\x00\x20\x01\x41\x01\x10\xae\x07\x1a\x20\x01\x0b\x38\x00\x02\x40\x20\x00\x41\x0c\x10\xc0\x02\x22\x00\x0d\x00\x41\x00\x0f\x0b\x20\x00\x20\x03\x36\x02\x08\x20\x00\x20\x02\x36\x02\x04\x20\x01\x28\x02\x10\x21\x02\x20\x01\x20\x00\x36\x02\x10\x20\x00\x20\x02\x36\x02\x00\x20\x00\x0b\x6b\x01\x03\x7f\x02\x40\x03\x40\x41\x00\x21\x04\x20\x02\x20\x01\x4e\x0d\x01\x02\x40\x02\x40\x02\x40\x20\x00\x20\x02\x6a\x22\x05\x2d\x00\x00\x22\x06\x41\xb6\x01\x46\x0d\x00\x20\x06\x41\xc2\x01\x46\x0d\x01\x20\x06\x41\xeb\x00\x47\x0d\x04\x20\x05\x41\x01\x6a\x28\x00\x00\x20\x03\x47\x0d\x04\x0c\x02\x0b\x20\x05\x41\x01\x6a\x28\x00\x00\x20\x03\x46\x0d\x01\x0b\x20\x02\x41\x05\x6a\x21\x02\x0c\x01\x0b\x0b\x41\x01\x21\x04\x0b\x20\x04\x0b\x69\x00\x02\x40\x20\x01\x41\x7f\x4a\x0d\x00\x41\x7f\x21\x01\x20\x00\x28\x02\x00\x20\x00\x41\xa4\x02\x6a\x41\x14\x20\x00\x41\xa8\x02\x6a\x20\x00\x28\x02\xac\x02\x41\x01\x6a\x10\xc3\x04\x0d\x00\x20\x00\x20\x00\x28\x02\xac\x02\x22\x01\x41\x01\x6a\x36\x02\xac\x02\x20\x00\x28\x02\xa4\x02\x20\x01\x41\x14\x6c\x6a\x22\x00\x41\x00\x36\x02\x10\x20\x00\x42\x7f\x37\x02\x08\x20\x00\x42\x80\x80\x80\x80\x70\x37\x02\x00\x0b\x20\x01\x0b\xf7\x02\x01\x04\x7f\x20\x03\x21\x06\x41\x00\x21\x07\x02\x40\x03\x40\x20\x06\x28\x02\xcc\x01\x20\x05\x41\x03\x74\x6a\x41\x04\x6a\x21\x05\x02\x40\x02\x40\x03\x40\x20\x05\x28\x02\x00\x22\x05\x41\x00\x48\x0d\x01\x02\x40\x20\x06\x28\x02\x74\x22\x08\x20\x05\x41\x04\x74\x6a\x22\x09\x28\x02\x00\x20\x04\x46\x0d\x00\x20\x09\x41\x08\x6a\x21\x05\x0c\x01\x0b\x0b\x20\x08\x20\x05\x41\x04\x74\x6a\x28\x02\x0c\x41\x03\x76\x41\x0f\x71\x21\x09\x02\x40\x20\x07\x0d\x00\x41\x00\x21\x07\x0c\x02\x0b\x20\x00\x20\x03\x20\x06\x41\x00\x20\x05\x20\x04\x41\x01\x41\x01\x41\x00\x10\xaa\x07\x22\x05\x41\x00\x4e\x0d\x01\x0c\x03\x0b\x02\x40\x20\x06\x28\x02\x04\x22\x09\x0d\x00\x02\x40\x20\x06\x28\x02\x20\x45\x0d\x00\x20\x06\x28\x02\xc0\x02\x21\x08\x41\x00\x21\x09\x41\x00\x21\x05\x03\x40\x20\x05\x20\x08\x4e\x0d\x01\x02\x40\x20\x06\x28\x02\xc8\x02\x20\x09\x6a\x22\x07\x41\x04\x6a\x28\x02\x00\x20\x04\x47\x0d\x00\x20\x07\x2d\x00\x00\x22\x08\x41\x04\x76\x21\x09\x02\x40\x20\x06\x20\x03\x47\x0d\x00\x41\x01\x21\x07\x0c\x05\x0b\x41\x01\x21\x07\x20\x00\x20\x03\x20\x06\x41\x00\x20\x08\x41\x01\x76\x41\x01\x71\x20\x05\x20\x04\x20\x08\x41\x02\x76\x41\x01\x71\x20\x08\x41\x03\x76\x41\x01\x71\x20\x09\x10\xab\x07\x22\x05\x41\x00\x48\x0d\x06\x0c\x04\x0b\x20\x09\x41\x08\x6a\x21\x09\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x00\x20\x04\x41\x9c\xce\x02\x10\xdf\x03\x0c\x03\x0b\x20\x06\x28\x02\x0c\x21\x05\x41\x01\x21\x07\x20\x09\x21\x06\x0c\x01\x0b\x0b\x20\x01\x20\x07\x36\x02\x00\x20\x02\x20\x09\x36\x02\x00\x20\x05\x0f\x0b\x41\x7f\x0b\x1c\x00\x20\x00\x41\xde\x00\x41\xd8\x00\x20\x01\x1b\x10\xcd\x02\x20\x00\x20\x02\x41\xff\xff\x03\x71\x10\x87\x07\x0b\x0d\x00\x20\x00\x20\x01\x41\x96\xce\x02\x10\xc3\x07\x0b\x8f\x19\x01\x09\x7f\x23\x00\x41\x10\x6b\x22\x09\x24\x00\x20\x09\x41\x7f\x36\x02\x0c\x41\x01\x21\x0a\x02\x40\x20\x02\x41\x8f\x7f\x6a\x41\x03\x49\x0d\x00\x41\x01\x21\x0a\x20\x02\x41\x08\x46\x0d\x00\x41\x00\x21\x0a\x0b\x20\x01\x28\x02\xcc\x01\x20\x03\x41\x03\x74\x6a\x41\x04\x6a\x21\x03\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x03\x40\x20\x03\x28\x02\x00\x22\x03\x41\x00\x48\x0d\x01\x02\x40\x20\x01\x28\x02\x74\x22\x0b\x20\x03\x41\x04\x74\x6a\x22\x0c\x28\x02\x00\x22\x0d\x20\x02\x47\x0d\x00\x02\x40\x20\x04\x41\x02\x72\x41\xbb\x01\x46\x0d\x00\x20\x03\x21\x0e\x0c\x04\x0b\x20\x03\x21\x0e\x20\x0b\x20\x03\x41\x04\x74\x6a\x2d\x00\x0c\x41\x01\x71\x45\x0d\x03\x20\x05\x41\x30\x10\xcd\x02\x20\x05\x20\x00\x20\x02\x10\xd9\x03\x10\xa4\x07\x20\x05\x41\x00\x10\xcd\x02\x0c\x07\x0b\x02\x40\x20\x0a\x20\x0d\x41\xd4\x00\x47\x72\x0d\x00\x20\x05\x41\xd8\x00\x10\xcd\x02\x20\x05\x20\x03\x41\xff\xff\x03\x71\x10\x87\x07\x20\x00\x20\x01\x20\x02\x20\x04\x20\x05\x20\x09\x41\x0c\x6a\x41\x01\x10\xbe\x07\x0b\x20\x0c\x41\x08\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x41\x7f\x21\x0e\x02\x40\x20\x03\x41\x7e\x46\x0d\x00\x20\x01\x20\x02\x10\xbf\x07\x21\x0e\x0b\x02\x40\x20\x0a\x41\x01\x73\x20\x0e\x41\x7f\x4a\x72\x0d\x00\x20\x00\x20\x01\x20\x02\x10\xc0\x07\x21\x0e\x0b\x02\x40\x02\x40\x20\x02\x41\xcd\x00\x47\x0d\x00\x20\x0e\x41\x7f\x4a\x0d\x00\x20\x01\x28\x02\x48\x45\x0d\x01\x20\x00\x20\x01\x10\xa8\x07\x21\x0e\x0b\x20\x0e\x41\x7f\x4a\x0d\x01\x0b\x02\x40\x02\x40\x20\x01\x28\x02\x2c\x45\x0d\x00\x20\x01\x28\x02\x70\x20\x02\x46\x0d\x01\x0b\x20\x03\x41\x7e\x47\x0d\x03\x0c\x04\x0b\x20\x00\x20\x01\x20\x02\x10\xa9\x07\x22\x0e\x41\x00\x48\x0d\x01\x0b\x20\x0e\x41\x80\x80\x80\x80\x02\x71\x21\x03\x02\x40\x20\x04\x41\x02\x72\x41\xbb\x01\x47\x0d\x00\x20\x03\x0d\x00\x20\x01\x28\x02\x74\x20\x0e\x41\x04\x74\x6a\x2d\x00\x0c\x41\x01\x71\x45\x0d\x00\x20\x05\x41\x30\x10\xcd\x02\x20\x05\x20\x00\x20\x02\x10\xd9\x03\x10\xa4\x07\x20\x05\x41\x00\x10\xcd\x02\x0c\x04\x0b\x20\x04\x41\xc9\x7e\x6a\x22\x0c\x41\x06\x4b\x0d\x03\x02\x40\x02\x40\x02\x40\x02\x40\x20\x0c\x0e\x07\x02\x02\x02\x03\x00\x01\x02\x02\x0b\x02\x40\x20\x03\x0d\x00\x20\x01\x28\x02\x74\x20\x0e\x41\x04\x74\x6a\x28\x02\x0c\x41\xf8\x00\x71\x41\x20\x47\x0d\x00\x20\x05\x41\x0b\x10\xcd\x02\x20\x05\x41\xd8\x00\x10\xcd\x02\x20\x05\x20\x0e\x41\xff\xff\x03\x71\x10\x87\x07\x20\x05\x41\xcc\x00\x10\xcd\x02\x20\x05\x20\x00\x20\x02\x10\xd9\x03\x22\x03\x10\xa4\x07\x20\x05\x41\x04\x10\xcd\x02\x20\x05\x20\x00\x20\x03\x10\xd9\x03\x10\xa4\x07\x0c\x07\x0b\x02\x40\x20\x09\x28\x02\x0c\x41\x7f\x47\x0d\x00\x20\x06\x20\x07\x28\x02\x04\x10\xc1\x07\x45\x0d\x00\x02\x40\x02\x40\x20\x03\x45\x0d\x00\x20\x0e\x41\x80\x80\x80\x80\x7e\x6a\x21\x0e\x41\xdb\x00\x21\x03\x0c\x01\x0b\x41\xe2\x00\x41\xd8\x00\x20\x01\x28\x02\x74\x20\x0e\x41\x04\x74\x6a\x2d\x00\x0c\x41\x02\x71\x1b\x21\x03\x0b\x20\x05\x20\x06\x20\x07\x20\x08\x20\x03\x20\x0e\x10\xc2\x07\x21\x08\x0c\x07\x0b\x02\x40\x20\x03\x45\x0d\x00\x20\x05\x41\xf9\x00\x10\xcd\x02\x20\x05\x20\x00\x20\x02\x10\xd9\x03\x10\xa4\x07\x20\x05\x20\x0e\x41\xff\xff\x03\x71\x10\x87\x07\x0c\x07\x0b\x20\x05\x41\xf8\x00\x10\xcd\x02\x20\x05\x20\x00\x20\x02\x10\xd9\x03\x10\xa4\x07\x20\x05\x20\x0e\x41\xff\xff\x03\x71\x10\x87\x07\x0c\x06\x0b\x20\x05\x41\x06\x10\xcd\x02\x0b\x20\x04\x41\x04\x72\x21\x0c\x02\x40\x20\x03\x45\x0d\x00\x20\x05\x41\xdc\x00\x41\xdb\x00\x20\x0c\x41\xbd\x01\x46\x1b\x10\xcd\x02\x20\x05\x20\x0e\x41\xff\xff\x03\x71\x10\x87\x07\x0c\x05\x0b\x20\x01\x28\x02\x74\x20\x0e\x41\x04\x74\x6a\x28\x02\x0c\x41\x02\x71\x21\x03\x02\x40\x02\x40\x20\x0c\x41\xbd\x01\x47\x0d\x00\x41\xe3\x00\x41\xd9\x00\x20\x03\x1b\x21\x0c\x20\x04\x41\xbd\x01\x47\x0d\x01\x20\x03\x45\x0d\x01\x41\xe4\x00\x41\xd9\x00\x20\x02\x41\x08\x46\x1b\x21\x0c\x0c\x01\x0b\x41\xe2\x00\x41\xd8\x00\x20\x03\x1b\x21\x0c\x0b\x20\x05\x20\x0c\x10\xcd\x02\x20\x05\x20\x0e\x41\xff\xff\x03\x71\x10\x87\x07\x0c\x04\x0b\x20\x05\x41\x09\x10\xcd\x02\x0c\x03\x0b\x20\x03\x41\x7e\x46\x0d\x01\x0b\x20\x0a\x20\x01\x28\x02\x90\x01\x41\x00\x48\x72\x0d\x00\x20\x05\x41\xd8\x00\x10\xcd\x02\x20\x05\x20\x01\x2f\x01\x90\x01\x10\x87\x07\x20\x00\x20\x01\x20\x02\x20\x04\x20\x05\x20\x09\x41\x0c\x6a\x41\x00\x10\xbe\x07\x0b\x02\x40\x20\x0a\x20\x01\x28\x02\x94\x01\x41\x00\x48\x72\x0d\x00\x20\x05\x41\xd8\x00\x10\xcd\x02\x20\x05\x20\x01\x2f\x01\x94\x01\x10\x87\x07\x20\x00\x20\x01\x20\x02\x20\x04\x20\x05\x20\x09\x41\x0c\x6a\x41\x00\x10\xbe\x07\x0b\x20\x02\x41\xcd\x00\x47\x21\x0f\x20\x01\x21\x03\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x03\x40\x02\x40\x20\x03\x28\x02\x04\x22\x0d\x0d\x00\x20\x03\x21\x0d\x0c\x02\x0b\x20\x0d\x28\x02\xcc\x01\x20\x03\x28\x02\x0c\x41\x03\x74\x6a\x41\x04\x6a\x21\x03\x02\x40\x03\x40\x20\x03\x28\x02\x00\x22\x0c\x41\x00\x48\x0d\x01\x02\x40\x20\x0d\x28\x02\x74\x22\x10\x20\x0c\x41\x04\x74\x6a\x22\x03\x28\x02\x00\x22\x0b\x20\x02\x47\x0d\x00\x20\x04\x41\x02\x72\x41\xbb\x01\x47\x0d\x08\x20\x10\x20\x0c\x41\x04\x74\x6a\x2d\x00\x0c\x41\x01\x71\x45\x0d\x08\x20\x05\x41\x30\x10\xcd\x02\x20\x05\x20\x00\x20\x02\x10\xd9\x03\x10\xa4\x07\x20\x05\x41\x00\x10\xcd\x02\x0c\x0b\x0b\x02\x40\x20\x0a\x20\x0b\x41\xd4\x00\x47\x72\x0d\x00\x20\x03\x20\x03\x28\x02\x0c\x41\x04\x72\x36\x02\x0c\x20\x00\x20\x01\x20\x0d\x41\x00\x20\x0c\x41\xd4\x00\x41\x00\x41\x00\x41\x00\x10\xaa\x07\x22\x0c\x41\x00\x48\x0d\x00\x20\x05\x41\xde\x00\x10\xcd\x02\x20\x05\x20\x0c\x41\xff\xff\x03\x71\x10\x87\x07\x20\x00\x20\x01\x20\x02\x20\x04\x20\x05\x20\x09\x41\x0c\x6a\x41\x01\x10\xbe\x07\x0b\x20\x03\x41\x08\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x0e\x41\x7f\x4a\x0d\x04\x02\x40\x20\x0c\x41\x7e\x46\x22\x03\x0d\x00\x20\x0d\x20\x02\x10\xbf\x07\x22\x0e\x41\x7f\x4a\x0d\x05\x0b\x02\x40\x20\x0a\x45\x0d\x00\x20\x00\x20\x0d\x20\x02\x10\xc0\x07\x22\x0e\x41\x7f\x4a\x0d\x05\x0b\x02\x40\x20\x0f\x0d\x00\x20\x0d\x28\x02\x48\x45\x0d\x00\x20\x00\x20\x0d\x10\xa8\x07\x21\x0c\x0c\x03\x0b\x02\x40\x20\x0d\x28\x02\x2c\x45\x0d\x00\x20\x0d\x28\x02\x70\x20\x02\x47\x0d\x00\x20\x00\x20\x0d\x20\x02\x10\xa9\x07\x21\x0c\x0c\x03\x0b\x02\x40\x20\x03\x0d\x00\x20\x0a\x20\x0d\x28\x02\x90\x01\x22\x03\x41\x00\x48\x72\x0d\x00\x20\x0d\x28\x02\x74\x20\x03\x41\x04\x74\x6a\x22\x03\x20\x03\x28\x02\x0c\x41\x04\x72\x36\x02\x0c\x20\x00\x20\x01\x20\x0d\x41\x00\x20\x0d\x28\x02\x90\x01\x20\x03\x28\x02\x00\x41\x00\x41\x00\x41\x00\x10\xaa\x07\x21\x03\x20\x05\x41\xde\x00\x10\xcd\x02\x20\x05\x20\x03\x41\xff\xff\x03\x71\x10\x87\x07\x20\x00\x20\x01\x20\x02\x20\x04\x20\x05\x20\x09\x41\x0c\x6a\x41\x00\x10\xbe\x07\x0b\x02\x40\x20\x0a\x20\x0d\x28\x02\x94\x01\x22\x03\x41\x00\x48\x72\x0d\x00\x20\x0d\x28\x02\x74\x20\x03\x41\x04\x74\x6a\x22\x03\x20\x03\x28\x02\x0c\x41\x04\x72\x36\x02\x0c\x20\x00\x20\x01\x20\x0d\x41\x00\x20\x0d\x28\x02\x94\x01\x20\x03\x28\x02\x00\x41\x00\x41\x00\x41\x00\x10\xaa\x07\x21\x03\x20\x05\x41\xde\x00\x10\xcd\x02\x20\x05\x20\x03\x41\xff\xff\x03\x71\x10\x87\x07\x20\x00\x20\x01\x20\x02\x20\x04\x20\x05\x20\x09\x41\x0c\x6a\x41\x00\x10\xbe\x07\x0b\x20\x0d\x21\x03\x20\x0d\x28\x02\x20\x45\x0d\x00\x0b\x0b\x20\x0d\x20\x01\x20\x0d\x1b\x21\x0d\x20\x0e\x21\x0c\x0c\x01\x0b\x20\x0c\x41\x7f\x4a\x0d\x02\x0b\x20\x0d\x28\x02\x20\x45\x0d\x03\x41\x00\x21\x0b\x41\x00\x21\x03\x02\x40\x03\x40\x20\x03\x20\x0d\x28\x02\xc0\x02\x4e\x0d\x01\x02\x40\x20\x0d\x28\x02\xc8\x02\x20\x0b\x6a\x22\x0e\x41\x04\x6a\x28\x02\x00\x22\x10\x20\x02\x47\x0d\x00\x20\x0d\x20\x01\x46\x0d\x05\x20\x00\x20\x01\x20\x0d\x41\x00\x20\x0e\x2d\x00\x00\x22\x0c\x41\x01\x76\x41\x01\x71\x20\x03\x20\x02\x20\x0c\x41\x02\x76\x41\x01\x71\x20\x0c\x41\x03\x76\x41\x01\x71\x20\x0c\x41\x04\x76\x10\xab\x07\x21\x03\x0c\x05\x0b\x02\x40\x20\x0a\x20\x10\x41\xae\x7f\x6a\x41\x02\x4b\x72\x0d\x00\x20\x10\x41\xd4\x00\x46\x21\x11\x20\x03\x21\x0f\x02\x40\x20\x0d\x20\x01\x46\x0d\x00\x20\x00\x20\x01\x20\x0d\x41\x00\x20\x0e\x2d\x00\x00\x41\x01\x76\x41\x01\x71\x20\x03\x20\x10\x41\x00\x41\x00\x41\x00\x10\xab\x07\x21\x0f\x0b\x20\x05\x41\xde\x00\x10\xcd\x02\x20\x05\x20\x0f\x41\xff\xff\x03\x71\x10\x87\x07\x20\x00\x20\x01\x20\x02\x20\x04\x20\x05\x20\x09\x41\x0c\x6a\x20\x11\x10\xbe\x07\x0b\x20\x0b\x41\x08\x6a\x21\x0b\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x0c\x41\x00\x48\x0d\x03\x0c\x01\x0b\x20\x0e\x21\x0c\x0b\x02\x40\x02\x40\x20\x0c\x41\x80\x80\x80\x80\x02\x71\x45\x0d\x00\x20\x0d\x28\x02\x80\x01\x20\x0c\x41\x80\x80\x80\x80\x7e\x6a\x22\x03\x41\x04\x74\x6a\x22\x0c\x20\x0c\x28\x02\x0c\x41\x04\x72\x36\x02\x0c\x20\x00\x20\x01\x20\x0d\x41\x01\x20\x03\x20\x02\x41\x00\x41\x00\x41\x00\x10\xaa\x07\x21\x03\x0c\x01\x0b\x20\x0d\x28\x02\x74\x20\x0c\x41\x04\x74\x22\x03\x6a\x22\x0a\x20\x0a\x28\x02\x0c\x41\x04\x72\x36\x02\x0c\x20\x00\x20\x01\x20\x0d\x41\x00\x20\x0c\x20\x02\x20\x0d\x28\x02\x74\x20\x03\x6a\x28\x02\x0c\x22\x03\x41\x01\x71\x20\x03\x41\x01\x76\x41\x01\x71\x20\x03\x41\x03\x76\x41\x0f\x71\x10\xaa\x07\x21\x03\x0b\x20\x03\x41\x00\x48\x0d\x01\x0b\x02\x40\x20\x04\x41\x02\x72\x41\xbb\x01\x47\x0d\x00\x20\x01\x28\x02\xc8\x02\x20\x03\x41\x03\x74\x6a\x2d\x00\x00\x41\x04\x71\x45\x0d\x00\x20\x05\x41\x30\x10\xcd\x02\x20\x05\x20\x00\x20\x02\x10\xd9\x03\x10\xa4\x07\x20\x05\x41\x00\x10\xcd\x02\x0c\x02\x0b\x20\x04\x41\xc9\x7e\x6a\x22\x0c\x41\x06\x4b\x0d\x01\x02\x40\x02\x40\x02\x40\x02\x40\x20\x0c\x0e\x07\x02\x02\x02\x03\x00\x01\x02\x02\x0b\x02\x40\x20\x01\x28\x02\xc8\x02\x20\x03\x41\x03\x74\x6a\x2d\x00\x00\x22\x0c\x41\xf0\x01\x71\x41\xc0\x00\x47\x0d\x00\x20\x05\x41\x0b\x10\xcd\x02\x20\x05\x41\xde\x00\x10\xcd\x02\x20\x05\x20\x03\x41\xff\xff\x03\x71\x10\x87\x07\x20\x05\x41\xcc\x00\x10\xcd\x02\x20\x05\x20\x00\x20\x02\x10\xd9\x03\x22\x03\x10\xa4\x07\x20\x05\x41\x04\x10\xcd\x02\x20\x05\x20\x00\x20\x03\x10\xd9\x03\x10\xa4\x07\x0c\x05\x0b\x02\x40\x20\x09\x28\x02\x0c\x41\x7f\x47\x0d\x00\x20\x06\x20\x07\x28\x02\x04\x10\xc1\x07\x45\x0d\x00\x20\x05\x20\x06\x20\x07\x20\x08\x41\xe5\x00\x41\xde\x00\x20\x0c\x41\x08\x71\x1b\x20\x03\x10\xc2\x07\x21\x08\x0c\x05\x0b\x20\x05\x41\xfa\x00\x10\xcd\x02\x20\x05\x20\x00\x20\x02\x10\xd9\x03\x10\xa4\x07\x20\x05\x20\x03\x41\xff\xff\x03\x71\x10\x87\x07\x0c\x04\x0b\x20\x05\x41\x06\x10\xcd\x02\x0b\x20\x01\x28\x02\xc8\x02\x20\x03\x41\x03\x74\x6a\x2d\x00\x00\x41\x08\x71\x21\x0c\x02\x40\x02\x40\x20\x04\x41\x04\x72\x41\xbd\x01\x47\x0d\x00\x41\xe6\x00\x41\xdf\x00\x20\x0c\x1b\x21\x0d\x20\x04\x41\xbd\x01\x47\x0d\x01\x20\x0c\x45\x0d\x01\x41\xe7\x00\x41\xdf\x00\x20\x02\x41\x08\x46\x1b\x21\x0d\x0c\x01\x0b\x41\xe5\x00\x41\xde\x00\x20\x0c\x1b\x21\x0d\x0b\x20\x05\x20\x0d\x10\xcd\x02\x20\x05\x20\x03\x41\xff\xff\x03\x71\x10\x87\x07\x0c\x02\x0b\x20\x05\x41\x09\x10\xcd\x02\x0c\x01\x0b\x20\x04\x41\xc9\x7e\x6a\x22\x03\x41\x06\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x03\x0e\x07\x02\x02\x02\x04\x00\x01\x03\x02\x0b\x20\x09\x28\x02\x0c\x41\x7f\x47\x0d\x05\x20\x07\x28\x02\x04\x20\x06\x6a\x22\x03\x41\x01\x6a\x2d\x00\x00\x41\x3d\x47\x0d\x05\x20\x03\x2d\x00\x00\x22\x03\x41\x67\x6a\x22\x0c\x41\x04\x4d\x0d\x04\x20\x03\x41\xb3\x01\x46\x0d\x06\x20\x03\x41\x16\x47\x0d\x05\x0c\x06\x0b\x20\x05\x41\x06\x10\xcd\x02\x20\x05\x41\x38\x10\xcd\x02\x20\x05\x20\x00\x20\x02\x10\xd9\x03\x10\xa4\x07\x0c\x06\x0b\x20\x05\x20\x04\x41\x80\x01\x73\x41\xff\x01\x71\x10\xcd\x02\x20\x05\x20\x00\x20\x02\x10\xd9\x03\x10\xa4\x07\x0c\x05\x0b\x20\x05\x41\x3a\x10\xcd\x02\x20\x05\x20\x00\x20\x02\x10\xd9\x03\x10\xa4\x07\x0c\x04\x0b\x20\x05\x41\x99\x01\x10\xcd\x02\x20\x05\x20\x00\x20\x02\x10\xd9\x03\x10\xa4\x07\x0c\x03\x0b\x20\x0c\x0e\x05\x01\x00\x00\x00\x01\x01\x0b\x20\x05\x41\xfb\x00\x10\xcd\x02\x20\x05\x20\x00\x20\x02\x10\xd9\x03\x10\xa4\x07\x0c\x01\x0b\x02\x40\x20\x01\x2d\x00\x6e\x41\x01\x71\x22\x0a\x45\x0d\x00\x20\x05\x41\x36\x10\xcd\x02\x20\x05\x20\x00\x20\x02\x10\xd9\x03\x10\xa4\x07\x0b\x02\x40\x20\x06\x20\x08\x6a\x2d\x00\x00\x41\x3c\x47\x0d\x00\x20\x05\x41\x38\x10\xcd\x02\x20\x05\x20\x00\x20\x02\x10\xd9\x03\x10\xa4\x07\x20\x08\x41\x01\x6a\x21\x08\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x20\x06\x20\x07\x28\x02\x04\x22\x03\x41\x7b\x6a\x22\x0d\x6a\x22\x0b\x2d\x00\x00\x41\xb6\x01\x47\x0d\x00\x20\x06\x20\x03\x6a\x2d\x00\x00\x21\x0c\x02\x40\x20\x0a\x45\x0d\x00\x20\x0c\x41\x67\x6a\x22\x04\x41\x04\x4d\x0d\x02\x41\x15\x21\x04\x20\x0c\x41\x16\x46\x0d\x03\x20\x0c\x41\xb3\x01\x46\x0d\x04\x0c\x06\x0b\x20\x0c\x41\x16\x47\x0d\x03\x20\x0b\x41\x11\x3a\x00\x00\x20\x03\x41\x7c\x6a\x21\x0d\x0c\x03\x0b\x41\xb9\xce\x02\x41\xae\xb7\x01\x41\xd5\xe6\x01\x41\xd1\xce\x02\x10\x4a\x00\x0b\x02\x40\x02\x40\x20\x04\x0e\x05\x01\x05\x05\x05\x00\x01\x0b\x41\x1b\x21\x04\x0c\x01\x0b\x41\x18\x21\x04\x0b\x20\x0b\x20\x04\x3a\x00\x00\x20\x03\x41\x7c\x6a\x21\x0d\x0b\x20\x03\x41\x02\x6a\x21\x0c\x20\x06\x20\x0d\x6a\x22\x03\x41\x3b\x41\x39\x20\x0a\x1b\x3a\x00\x00\x20\x03\x20\x00\x20\x02\x10\xd9\x03\x36\x00\x01\x20\x0d\x41\x05\x6a\x21\x03\x03\x40\x20\x03\x20\x0c\x4e\x0d\x01\x20\x06\x20\x03\x6a\x41\xb3\x01\x3a\x00\x00\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x02\x40\x20\x09\x28\x02\x0c\x22\x03\x41\x00\x48\x0d\x00\x20\x05\x41\xb6\x01\x10\xcd\x02\x20\x05\x20\x03\x10\xa4\x07\x20\x01\x28\x02\xa4\x02\x20\x03\x41\x14\x6c\x6a\x20\x05\x28\x02\x04\x36\x02\x08\x0b\x20\x09\x41\x10\x6a\x24\x00\x20\x08\x0f\x0b\x10\x40\x00\x0b\x47\x00\x20\x00\x28\x02\xcc\x01\x20\x01\x41\x03\x74\x6a\x41\x04\x6a\x21\x01\x02\x40\x03\x40\x20\x01\x28\x02\x00\x22\x01\x41\x00\x48\x0d\x01\x20\x00\x28\x02\x74\x20\x01\x41\x04\x74\x6a\x22\x01\x20\x01\x28\x02\x0c\x41\x04\x72\x36\x02\x0c\x20\x01\x41\x08\x6a\x21\x01\x0c\x00\x0b\x00\x0b\x0b\x66\x00\x20\x04\x41\xf2\x00\x20\x03\x41\xba\x01\x6a\x20\x03\x41\xb7\x01\x46\x1b\x41\xff\x01\x71\x10\xcd\x02\x20\x04\x20\x00\x20\x02\x10\xd9\x03\x10\xa4\x07\x20\x05\x20\x01\x20\x05\x28\x02\x00\x10\xb8\x07\x22\x03\x36\x02\x00\x20\x04\x20\x03\x10\xa4\x07\x20\x04\x20\x06\x41\xff\x01\x71\x10\xcd\x02\x20\x01\x20\x05\x28\x02\x00\x41\x01\x10\xae\x07\x1a\x20\x01\x20\x01\x28\x02\xd0\x02\x41\x01\x6a\x36\x02\xd0\x02\x0b\x61\x01\x03\x7f\x20\x00\x28\x02\x7c\x22\x02\x41\x04\x74\x41\x70\x6a\x21\x03\x02\x40\x02\x40\x03\x40\x20\x02\x41\x01\x48\x0d\x01\x02\x40\x20\x00\x28\x02\x74\x20\x03\x6a\x22\x04\x28\x02\x00\x20\x01\x47\x0d\x00\x20\x04\x41\x04\x6a\x28\x02\x00\x45\x0d\x03\x0b\x20\x02\x41\x7f\x6a\x21\x02\x20\x03\x41\x70\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x20\x01\x10\xc4\x07\x0f\x0b\x20\x02\x41\x7f\x6a\x0b\xbf\x01\x01\x02\x7f\x41\x7f\x21\x03\x02\x40\x20\x01\x28\x02\x4c\x45\x0d\x00\x02\x40\x20\x02\x41\x8f\x7f\x6a\x22\x04\x41\x02\x4d\x0d\x00\x20\x02\x41\x08\x47\x0d\x01\x20\x01\x28\x02\xa8\x01\x22\x03\x41\x7f\x4a\x0d\x01\x20\x01\x20\x00\x20\x01\x10\xa7\x07\x22\x03\x36\x02\xa8\x01\x20\x03\x0f\x0b\x02\x40\x02\x40\x02\x40\x20\x04\x0e\x03\x02\x01\x00\x02\x0b\x20\x01\x28\x02\xb4\x01\x22\x03\x41\x7f\x4a\x0d\x02\x20\x01\x20\x00\x20\x01\x41\xf3\x00\x10\x82\x07\x22\x03\x36\x02\xb4\x01\x20\x03\x0f\x0b\x20\x01\x28\x02\xb0\x01\x22\x03\x41\x7f\x4a\x0d\x01\x20\x01\x20\x00\x20\x01\x41\xf2\x00\x10\x82\x07\x22\x03\x36\x02\xb0\x01\x20\x03\x0f\x0b\x20\x01\x28\x02\xac\x01\x22\x03\x41\x7f\x4a\x0d\x00\x20\x01\x20\x00\x20\x01\x41\xf1\x00\x10\x82\x07\x22\x03\x36\x02\xac\x01\x0b\x20\x03\x0b\x58\x01\x01\x7f\x41\x00\x21\x02\x02\x40\x20\x00\x20\x01\x6a\x22\x00\x41\x01\x6a\x2d\x00\x00\x41\x3d\x47\x0d\x00\x02\x40\x02\x40\x20\x00\x2d\x00\x00\x22\x00\x41\x6a\x6a\x22\x01\x41\x03\x4d\x0d\x00\x41\x01\x21\x02\x20\x00\x41\xb3\x01\x46\x0d\x02\x0c\x01\x0b\x41\x01\x21\x02\x20\x01\x0e\x04\x01\x00\x00\x01\x01\x0b\x20\x00\x41\x1d\x46\x21\x02\x0b\x20\x02\x0b\xc9\x01\x01\x01\x7f\x02\x40\x20\x01\x20\x03\x6a\x2d\x00\x00\x41\x3c\x47\x0d\x00\x20\x00\x20\x04\x41\xff\x01\x71\x10\xcd\x02\x20\x00\x20\x05\x41\xff\xff\x03\x71\x10\x87\x07\x20\x03\x41\x01\x6a\x21\x03\x0b\x02\x40\x20\x01\x20\x02\x28\x02\x04\x22\x00\x41\x7b\x6a\x22\x06\x6a\x22\x02\x2d\x00\x00\x41\xb6\x01\x47\x0d\x00\x02\x40\x20\x01\x20\x00\x6a\x2d\x00\x00\x41\x16\x47\x0d\x00\x20\x02\x41\x11\x3a\x00\x00\x20\x00\x41\x7c\x6a\x21\x06\x0b\x20\x00\x41\x02\x6a\x21\x02\x20\x01\x20\x06\x6a\x22\x00\x20\x05\x3b\x00\x01\x20\x00\x20\x04\x41\x01\x6a\x3a\x00\x00\x20\x06\x41\x03\x6a\x21\x00\x02\x40\x03\x40\x20\x00\x20\x02\x4e\x0d\x01\x20\x01\x20\x00\x6a\x41\xb3\x01\x3a\x00\x00\x20\x00\x41\x01\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x20\x03\x0f\x0b\x41\xb9\xce\x02\x41\xae\xb7\x01\x41\xa4\xe6\x01\x41\xf0\xce\x02\x10\x4a\x00\x0b\xca\x01\x02\x04\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x41\x00\x21\x04\x02\x40\x20\x00\x20\x01\x10\xc5\x01\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x41\x00\x21\x04\x02\x40\x20\x00\x20\x03\x41\x0c\x6a\x20\x07\x10\xe1\x03\x22\x01\x45\x0d\x00\x02\x40\x20\x00\x20\x02\x10\x71\x22\x05\x20\x03\x28\x02\x0c\x6a\x41\x01\x6a\x10\xc0\x02\x22\x06\x45\x0d\x00\x20\x06\x20\x01\x20\x03\x28\x02\x0c\x10\x70\x22\x06\x20\x03\x28\x02\x0c\x6a\x20\x02\x20\x05\x10\x70\x1a\x20\x06\x20\x03\x28\x02\x0c\x20\x05\x6a\x6a\x41\x00\x3a\x00\x00\x20\x00\x20\x06\x20\x03\x28\x02\x0c\x20\x05\x6a\x10\xb0\x04\x21\x04\x20\x00\x28\x02\x10\x22\x02\x41\x10\x6a\x20\x06\x20\x02\x28\x02\x04\x11\x00\x00\x0b\x20\x00\x20\x01\x10\xcf\x02\x0b\x20\x00\x20\x07\x10\xcd\x01\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x04\x0b\x55\x01\x03\x7f\x20\x00\x28\x02\x88\x01\x22\x02\x41\x04\x74\x41\x70\x6a\x21\x03\x02\x40\x03\x40\x41\x7f\x21\x04\x20\x02\x41\x01\x48\x0d\x01\x20\x02\x41\x7f\x6a\x21\x02\x20\x00\x28\x02\x80\x01\x20\x03\x6a\x21\x04\x20\x03\x41\x70\x6a\x21\x03\x20\x04\x28\x02\x00\x20\x01\x47\x0d\x00\x0b\x20\x02\x41\x80\x80\x80\x80\x02\x72\x21\x04\x0b\x20\x04\x0b\x09\x00\x20\x00\x41\x02\x10\xf1\x07\x0b\x0d\x00\x20\x00\x41\x80\x02\x6a\x20\x01\x10\xa4\x07\x0b\x0d\x00\x20\x00\x41\x80\x02\x6a\x20\x01\x10\xcd\x02\x0b\x5f\x01\x02\x7f\x20\x00\x41\xc0\x00\x6a\x22\x02\x20\x01\x28\x02\x00\x36\x02\x00\x20\x00\x41\x29\x10\x86\x07\x20\x02\x20\x02\x28\x02\x00\x28\x02\x04\x22\x03\x36\x02\x00\x20\x00\x28\x02\x00\x20\x03\x42\x80\x80\x80\x80\x20\x10\xdc\x07\x21\x03\x20\x01\x28\x02\x00\x20\x03\x36\x02\x08\x20\x00\x41\x03\x10\x86\x07\x20\x02\x28\x02\x00\x20\x03\x10\xc6\x07\x20\x00\x41\xd0\x00\x10\x86\x07\x0b\xbf\x06\x02\x05\x7f\x01\x7e\x41\x00\x21\x05\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x45\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x41\xc1\x00\x10\x92\x07\x0d\x00\x20\x00\x41\xc2\x00\x10\x92\x07\x45\x0d\x01\x0b\x20\x00\x28\x02\x00\x20\x00\x41\x20\x6a\x28\x02\x00\x10\xd9\x03\x21\x06\x20\x00\x10\x80\x07\x0d\x08\x41\x00\x21\x05\x41\x01\x21\x07\x20\x00\x28\x02\x10\x22\x08\x41\x58\x6a\x22\x09\x41\x04\x4d\x0d\x01\x20\x08\x41\x3a\x46\x0d\x06\x20\x08\x41\xfd\x00\x46\x0d\x06\x0c\x04\x0b\x02\x40\x20\x00\x28\x02\x10\x41\x2a\x47\x0d\x00\x20\x00\x10\x80\x07\x0d\x0c\x41\x04\x21\x05\x0c\x05\x0b\x20\x00\x41\x85\x01\x10\x92\x07\x45\x0d\x04\x20\x00\x41\x01\x10\x93\x07\x41\x0a\x46\x0d\x04\x20\x00\x28\x02\x00\x20\x00\x41\x20\x6a\x28\x02\x00\x10\xd9\x03\x21\x06\x20\x00\x10\x80\x07\x0d\x07\x41\x00\x21\x05\x41\x01\x21\x07\x20\x00\x28\x02\x10\x22\x08\x41\x58\x6a\x22\x09\x41\x04\x4d\x0d\x01\x20\x08\x41\x3a\x46\x0d\x05\x20\x08\x41\xfd\x00\x46\x0d\x05\x0c\x02\x0b\x20\x09\x0e\x05\x04\x02\x02\x02\x04\x04\x0b\x20\x09\x0e\x05\x03\x00\x00\x00\x03\x03\x0b\x20\x00\x28\x02\x00\x20\x06\x10\xe4\x02\x41\x05\x21\x05\x20\x00\x28\x02\x10\x41\x2a\x47\x0d\x01\x20\x00\x10\x80\x07\x0d\x08\x41\x06\x21\x05\x0c\x01\x0b\x20\x00\x28\x02\x00\x20\x06\x10\xe4\x02\x41\x03\x41\x02\x20\x06\x41\xc2\x00\x46\x1b\x21\x05\x0b\x02\x40\x20\x00\x28\x02\x10\x22\x06\x41\x83\x7f\x46\x0d\x00\x20\x06\x41\xd3\x00\x6a\x41\x2d\x4b\x0d\x02\x0b\x41\x00\x21\x07\x02\x40\x20\x06\x41\x83\x7f\x47\x0d\x00\x20\x00\x41\x28\x6a\x28\x02\x00\x45\x21\x07\x0b\x20\x00\x28\x02\x00\x20\x00\x41\x20\x6a\x28\x02\x00\x10\xd9\x03\x21\x06\x20\x00\x10\x80\x07\x0d\x02\x0b\x41\x00\x21\x04\x20\x03\x45\x0d\x03\x20\x07\x45\x0d\x03\x20\x05\x0d\x03\x20\x00\x28\x02\x10\x22\x00\x41\x3a\x47\x20\x02\x45\x20\x00\x41\x28\x47\x72\x71\x21\x05\x41\x00\x21\x04\x0c\x06\x0b\x02\x40\x02\x40\x20\x06\x41\x80\x01\x6a\x22\x02\x41\x01\x4d\x0d\x00\x20\x06\x41\xdb\x00\x47\x0d\x01\x20\x00\x10\x80\x07\x0d\x06\x20\x00\x10\xe6\x07\x0d\x06\x20\x00\x41\xdd\x00\x10\x98\x07\x0d\x06\x41\x00\x21\x04\x41\x00\x21\x06\x0c\x04\x0b\x02\x40\x02\x40\x20\x02\x0e\x02\x01\x00\x01\x0b\x20\x00\x28\x02\x00\x20\x00\x41\x20\x6a\x29\x03\x00\x10\xa3\x03\x22\x06\x45\x0d\x06\x20\x00\x10\x80\x07\x0d\x02\x0c\x03\x0b\x02\x40\x02\x40\x20\x00\x41\x20\x6a\x29\x03\x00\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xf0\x7e\x52\x0d\x00\x20\x00\x28\x02\x00\x22\x02\x20\x0a\xa7\x41\x04\x6a\x20\x00\x41\x28\x6a\x34\x02\x00\x20\x02\x28\x02\x10\x41\xc4\x02\x6a\x28\x02\x00\x11\x3d\x00\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x07\x20\x00\x28\x02\x00\x20\x0a\x10\xa3\x03\x21\x06\x20\x00\x28\x02\x00\x20\x0a\x10\xcd\x01\x0c\x01\x0b\x20\x00\x28\x02\x00\x20\x0a\x10\xa3\x03\x21\x06\x0b\x20\x06\x45\x0d\x05\x20\x00\x10\x80\x07\x45\x0d\x02\x0c\x01\x0b\x20\x04\x45\x0d\x03\x20\x06\x41\xab\x7f\x47\x0d\x03\x20\x00\x28\x02\x00\x20\x00\x41\x20\x6a\x28\x02\x00\x10\xd9\x03\x21\x06\x20\x00\x10\x80\x07\x0d\x00\x41\x10\x21\x04\x0c\x02\x0b\x20\x00\x28\x02\x00\x20\x06\x10\xe4\x02\x0c\x03\x0b\x41\x00\x21\x04\x0b\x20\x05\x41\x02\x49\x0d\x02\x20\x00\x28\x02\x10\x41\x28\x46\x0d\x02\x20\x00\x28\x02\x00\x20\x06\x10\xe4\x02\x0b\x20\x00\x41\xb9\xdc\x02\x41\x00\x10\x8a\x07\x0b\x20\x01\x41\x00\x36\x02\x00\x41\x7f\x0f\x0b\x20\x01\x20\x06\x36\x02\x00\x20\x04\x20\x05\x72\x0b\x5a\x01\x03\x7f\x20\x00\x28\x02\xcc\x01\x20\x02\x41\x03\x74\x6a\x41\x04\x6a\x21\x03\x02\x40\x03\x40\x41\x7f\x21\x04\x20\x03\x28\x02\x00\x22\x03\x41\x7f\x46\x0d\x01\x20\x00\x28\x02\x74\x20\x03\x41\x04\x74\x6a\x22\x05\x28\x02\x04\x20\x02\x47\x0d\x01\x20\x03\x21\x04\x20\x05\x28\x02\x00\x20\x01\x46\x0d\x01\x20\x05\x41\x08\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x04\x0b\x31\x00\x02\x40\x20\x00\x20\x01\x20\x02\x20\x03\x10\xdf\x07\x22\x00\x41\x00\x48\x0d\x00\x20\x01\x28\x02\x74\x20\x00\x41\x04\x74\x6a\x22\x01\x20\x01\x28\x02\x0c\x41\x03\x72\x36\x02\x0c\x0b\x20\x00\x0b\x50\x01\x01\x7f\x41\x00\x21\x02\x02\x40\x20\x01\x28\x02\x08\x0d\x00\x02\x40\x20\x01\x28\x02\x00\x22\x02\x0d\x00\x41\x7f\x21\x02\x20\x00\x20\x01\x10\xcd\x07\x0d\x01\x20\x01\x28\x02\x00\x21\x02\x0b\x20\x02\x28\x02\x80\x02\x20\x01\x28\x02\x0c\x6a\x41\x0a\x3a\x00\x00\x20\x01\x41\x01\x36\x02\x08\x41\x00\x21\x02\x0b\x20\x02\x0b\xe8\x01\x01\x02\x7f\x02\x40\x20\x00\x28\x02\x00\x20\x00\x41\xc0\x00\x6a\x22\x02\x28\x02\x00\x41\x00\x41\x00\x20\x00\x28\x02\x0c\x41\x00\x10\xfc\x06\x22\x03\x0d\x00\x20\x01\x41\x00\x36\x02\x00\x41\x7f\x0f\x0b\x20\x03\x41\x80\x0c\x3b\x01\x6c\x20\x03\x41\x00\x36\x02\x70\x20\x03\x41\x00\x36\x02\x60\x20\x03\x42\x80\x80\x80\x80\x10\x37\x02\x48\x20\x03\x42\x01\x37\x02\x30\x20\x03\x42\x01\x37\x02\x58\x20\x03\x42\x01\x37\x02\x50\x20\x01\x20\x03\x36\x02\x00\x20\x02\x20\x03\x36\x02\x00\x20\x00\x41\x09\x10\x86\x07\x20\x01\x20\x01\x28\x02\x00\x28\x02\x98\x02\x36\x02\x0c\x20\x00\x41\xe9\x00\x41\x7f\x10\xd7\x07\x21\x03\x20\x00\x41\xb8\x01\x10\x86\x07\x20\x00\x41\x08\x10\x9e\x07\x20\x02\x28\x02\x00\x41\x00\x10\x89\x07\x20\x00\x41\xb8\x01\x10\x86\x07\x20\x00\x41\xf3\x00\x10\x9e\x07\x20\x02\x28\x02\x00\x41\x00\x10\x89\x07\x20\x00\x41\x2d\x10\x86\x07\x20\x00\x20\x03\x10\xd8\x07\x20\x02\x20\x02\x28\x02\x00\x28\x02\x04\x36\x02\x00\x41\x00\x0b\x98\x01\x01\x05\x7f\x02\x40\x02\x40\x20\x00\x28\x02\x40\x22\x01\x28\x02\x98\x02\x22\x02\x41\x00\x48\x0d\x00\x02\x40\x20\x01\x28\x02\x80\x02\x22\x03\x20\x02\x6a\x22\x04\x2d\x00\x00\x22\x05\x41\xc1\x01\x46\x0d\x00\x20\x05\x41\xcd\x00\x47\x0d\x01\x20\x01\x41\x7f\x36\x02\x98\x02\x20\x01\x41\x84\x02\x6a\x20\x02\x36\x02\x00\x20\x00\x41\xce\x00\x10\x86\x07\x0f\x0b\x20\x02\x20\x04\x28\x00\x01\x6b\x20\x03\x6a\x41\x01\x6a\x22\x00\x2d\x00\x00\x41\xd6\x00\x47\x0d\x01\x20\x00\x41\xd7\x00\x3a\x00\x00\x20\x01\x41\x7f\x36\x02\x98\x02\x0b\x0f\x0b\x41\xe9\xdb\x02\x41\xae\xb7\x01\x41\xa5\xb1\x01\x41\xa0\xdc\x02\x10\x4a\x00\x0b\x8b\x01\x01\x03\x7f\x02\x40\x20\x00\x41\xc0\x00\x6a\x22\x01\x28\x02\x00\x22\x02\x45\x0d\x00\x20\x02\x28\x02\xbc\x01\x21\x03\x20\x00\x41\xb5\x01\x10\x86\x07\x20\x01\x28\x02\x00\x20\x03\x41\xff\xff\x03\x71\x10\x89\x07\x20\x02\x20\x02\x28\x02\xcc\x01\x22\x01\x20\x03\x41\x03\x74\x6a\x28\x02\x00\x22\x00\x36\x02\xbc\x01\x02\x40\x03\x40\x02\x40\x20\x00\x41\x00\x4e\x0d\x00\x41\x7f\x21\x03\x0c\x02\x0b\x20\x01\x20\x00\x41\x03\x74\x6a\x22\x00\x28\x02\x04\x22\x03\x41\x7f\x4a\x0d\x01\x20\x00\x28\x02\x00\x21\x00\x0c\x00\x0b\x00\x0b\x20\x02\x20\x03\x36\x02\xc0\x01\x0b\x0b\x51\x01\x06\x7f\x20\x00\x28\x02\xf4\x01\x21\x02\x41\x0c\x21\x03\x41\x7f\x21\x04\x03\x40\x02\x40\x20\x04\x41\x01\x6a\x22\x04\x20\x02\x48\x0d\x00\x41\x00\x0f\x0b\x20\x00\x28\x02\xfc\x01\x22\x05\x20\x03\x6a\x21\x06\x20\x03\x41\x10\x6a\x22\x07\x21\x03\x20\x06\x28\x02\x00\x20\x01\x47\x0d\x00\x0b\x20\x05\x20\x07\x6a\x41\x64\x6a\x0b\x8c\x01\x01\x02\x7f\x02\x40\x02\x40\x03\x40\x20\x02\x41\x00\x48\x0d\x01\x02\x40\x20\x00\x28\x02\x74\x20\x02\x41\x04\x74\x6a\x22\x04\x28\x02\x00\x20\x01\x47\x0d\x00\x20\x04\x28\x02\x0c\x22\x05\x41\x02\x71\x0d\x03\x20\x03\x45\x0d\x00\x20\x05\x41\xf8\x00\x71\x41\x18\x46\x0d\x03\x0b\x20\x04\x28\x02\x08\x21\x02\x0c\x00\x0b\x00\x0b\x41\x7f\x21\x02\x20\x00\x28\x02\x20\x45\x0d\x00\x20\x00\x28\x02\x24\x0d\x00\x02\x40\x20\x00\x20\x01\x10\xd0\x07\x22\x04\x45\x0d\x00\x41\x80\x80\x80\x80\x04\x21\x02\x20\x04\x2d\x00\x04\x41\x02\x71\x0d\x01\x0b\x41\x7f\x21\x02\x0b\x20\x02\x0b\x7c\x01\x02\x7f\x20\x00\x41\xb8\x01\x10\x86\x07\x20\x00\x41\xf6\x00\x10\x9e\x07\x20\x00\x41\xc0\x00\x6a\x22\x01\x28\x02\x00\x22\x02\x20\x02\x2f\x01\xbc\x01\x10\x89\x07\x20\x00\x41\x11\x10\x86\x07\x20\x00\x41\xe9\x00\x41\x7f\x10\xd7\x07\x21\x02\x20\x00\x41\xb8\x01\x10\x86\x07\x20\x00\x41\x08\x10\x9e\x07\x20\x01\x28\x02\x00\x41\x00\x10\x89\x07\x20\x00\x41\x1b\x10\x86\x07\x20\x00\x41\x24\x10\x86\x07\x20\x01\x28\x02\x00\x41\x00\x10\x89\x07\x20\x00\x20\x02\x10\xd8\x07\x20\x00\x41\x0e\x10\x86\x07\x0b\xa1\x01\x01\x02\x7f\x02\x40\x20\x01\x28\x02\x88\x01\x22\x03\x41\x80\x80\x04\x48\x0d\x00\x20\x00\x41\xc9\xe3\x01\x41\x00\x10\xc2\x02\x41\x7f\x0f\x0b\x41\x7f\x21\x04\x02\x40\x20\x00\x20\x01\x41\x80\x01\x6a\x41\x10\x20\x01\x41\x84\x01\x6a\x20\x03\x41\x01\x6a\x10\xc3\x04\x0d\x00\x20\x01\x20\x01\x28\x02\x88\x01\x22\x03\x41\x01\x6a\x36\x02\x88\x01\x20\x01\x28\x02\x80\x01\x20\x03\x41\x04\x74\x6a\x22\x03\x42\x00\x37\x02\x00\x20\x03\x41\x08\x6a\x42\x00\x37\x02\x00\x20\x00\x20\x02\x10\xd9\x03\x21\x00\x20\x03\x20\x03\x28\x02\x0c\x41\x80\xff\xff\xff\x07\x72\x36\x02\x0c\x20\x03\x20\x00\x36\x02\x00\x20\x01\x28\x02\x88\x01\x41\x7f\x6a\x21\x04\x0b\x20\x04\x0b\x90\x06\x01\x09\x7f\x23\x00\x41\x90\x02\x6b\x22\x03\x24\x00\x20\x03\x41\x00\x3a\x00\x10\x20\x03\x20\x00\x28\x02\x04\x36\x02\x00\x20\x03\x20\x00\x41\x14\x6a\x28\x02\x00\x36\x02\x04\x20\x03\x20\x00\x41\x18\x6a\x28\x02\x00\x36\x02\x0c\x20\x03\x20\x00\x28\x02\x30\x36\x02\x08\x20\x00\x41\x10\x6a\x21\x04\x41\xac\x7f\x21\x05\x41\x01\x21\x06\x41\x00\x21\x07\x41\x00\x21\x08\x02\x40\x03\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x04\x28\x02\x00\x22\x09\x41\xfe\x00\x6a\x22\x0a\x41\x04\x4d\x0d\x00\x20\x09\x41\x58\x6a\x22\x0a\x41\x01\x4d\x0d\x01\x20\x09\x41\x45\x6a\x22\x0a\x41\x02\x4d\x0d\x02\x20\x09\x41\xa5\x7f\x6a\x22\x0a\x41\x02\x4d\x0d\x03\x20\x09\x41\x85\x7f\x6a\x22\x0a\x41\x02\x4d\x0d\x04\x02\x40\x02\x40\x20\x09\x41\xa7\x7f\x46\x0d\x00\x20\x09\x41\x2f\x46\x0d\x01\x20\x09\x41\xac\x7f\x47\x0d\x10\x0c\x13\x0b\x20\x08\x41\x02\x72\x20\x08\x20\x06\x41\x02\x46\x1b\x21\x08\x41\xa7\x7f\x21\x07\x0c\x10\x0b\x41\x7f\x21\x0b\x0c\x05\x0b\x41\x7e\x21\x0b\x20\x0a\x0e\x05\x08\x0d\x0d\x0d\x04\x08\x0b\x20\x0a\x0e\x02\x0a\x09\x0a\x0b\x20\x0a\x0e\x03\x04\x0b\x03\x04\x0b\x20\x0a\x0e\x03\x08\x0a\x06\x08\x0b\x20\x0a\x0e\x03\x07\x09\x03\x07\x0b\x02\x40\x20\x07\x41\x80\x01\x6a\x22\x09\x41\x16\x4b\x0d\x00\x41\x01\x20\x09\x74\x41\x9b\x80\x80\x03\x71\x0d\x08\x0b\x02\x40\x20\x07\x41\xd3\x00\x6a\x22\x09\x41\x07\x4b\x0d\x00\x41\x01\x20\x09\x74\x41\x87\x01\x71\x0d\x08\x0b\x20\x07\x41\x29\x46\x0d\x07\x20\x07\x41\xdd\x00\x46\x0d\x07\x20\x07\x41\xfd\x00\x46\x0d\x07\x20\x00\x20\x00\x28\x02\x38\x20\x0b\x6a\x36\x02\x38\x20\x00\x10\xed\x07\x45\x0d\x07\x0c\x0b\x0b\x20\x08\x41\x04\x72\x21\x08\x41\x3d\x21\x07\x0c\x08\x0b\x20\x08\x20\x06\x41\x02\x46\x72\x21\x08\x41\x3b\x21\x07\x0c\x07\x0b\x41\xfd\x00\x21\x07\x20\x03\x41\x10\x6a\x20\x06\x41\x7f\x6a\x22\x06\x6a\x2d\x00\x00\x22\x09\x41\xfb\x00\x46\x0d\x06\x20\x09\x41\xe0\x00\x47\x0d\x08\x20\x00\x20\x04\x10\x84\x07\x20\x00\x41\x00\x36\x02\x30\x20\x00\x20\x00\x28\x02\x14\x36\x02\x04\x20\x00\x20\x00\x28\x02\x38\x10\x8b\x07\x0d\x08\x0b\x20\x00\x28\x02\x28\x41\xe0\x00\x46\x0d\x03\x20\x06\x41\xff\x01\x4b\x0d\x07\x20\x03\x41\x10\x6a\x20\x06\x6a\x41\xe0\x00\x3a\x00\x00\x20\x06\x41\x01\x6a\x21\x06\x0c\x03\x0b\x20\x03\x41\x10\x6a\x20\x06\x41\x7f\x6a\x22\x06\x6a\x2d\x00\x00\x41\xdb\x00\x46\x0d\x02\x0c\x06\x0b\x20\x03\x41\x10\x6a\x20\x06\x41\x7f\x6a\x22\x06\x6a\x2d\x00\x00\x41\x28\x46\x0d\x01\x0c\x05\x0b\x20\x06\x41\xff\x01\x4b\x0d\x04\x20\x03\x41\x10\x6a\x20\x06\x6a\x20\x09\x3a\x00\x00\x20\x06\x41\x01\x6a\x21\x06\x0b\x20\x04\x28\x02\x00\x21\x09\x0b\x02\x40\x20\x09\x41\x83\x7f\x46\x0d\x00\x20\x09\x21\x07\x0c\x01\x0b\x41\x5b\x21\x07\x20\x00\x41\xc3\x00\x10\x92\x07\x0d\x00\x20\x00\x41\x2d\x10\x92\x07\x0d\x00\x41\x83\x7f\x21\x07\x0b\x20\x00\x10\x80\x07\x0d\x01\x20\x06\x41\x01\x4b\x0d\x00\x0b\x41\x5b\x20\x00\x28\x02\x10\x20\x00\x41\xc3\x00\x10\x92\x07\x1b\x21\x05\x20\x02\x45\x0d\x00\x20\x05\x41\x0a\x20\x00\x28\x02\x04\x20\x00\x28\x02\x14\x46\x1b\x21\x05\x0b\x02\x40\x20\x01\x45\x0d\x00\x20\x01\x20\x08\x36\x02\x00\x0b\x20\x00\x20\x03\x10\x91\x07\x21\x09\x20\x03\x41\x90\x02\x6a\x24\x00\x41\x7f\x20\x05\x20\x09\x1b\x0b\xca\x15\x01\x0a\x7f\x23\x00\x41\xc0\x00\x6b\x22\x06\x24\x00\x02\x40\x20\x04\x41\x7f\x4a\x0d\x00\x20\x00\x20\x06\x41\x28\x6a\x41\x00\x10\xd4\x07\x1a\x20\x06\x28\x02\x28\x41\x02\x71\x21\x04\x0b\x20\x00\x41\xc0\x00\x6a\x22\x07\x28\x02\x00\x10\xd6\x07\x21\x08\x20\x07\x28\x02\x00\x10\xd6\x07\x21\x09\x20\x07\x28\x02\x00\x41\x84\x02\x6a\x28\x02\x00\x21\x0a\x02\x40\x02\x40\x20\x03\x45\x0d\x00\x20\x00\x41\x11\x10\x86\x07\x20\x00\x41\x06\x10\x86\x07\x20\x00\x41\xab\x01\x10\x86\x07\x20\x00\x41\xea\x00\x20\x08\x10\xd7\x07\x1a\x20\x00\x20\x09\x10\xd8\x07\x0c\x01\x0b\x20\x00\x41\xeb\x00\x20\x08\x10\xd7\x07\x1a\x20\x00\x20\x09\x10\xd8\x07\x20\x00\x41\x11\x10\x86\x07\x0b\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x41\x84\x02\x6a\x28\x02\x00\x21\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x28\x02\x10\x22\x07\x41\xdb\x00\x46\x0d\x00\x02\x40\x20\x07\x41\xfb\x00\x47\x0d\x00\x41\x7f\x21\x07\x20\x00\x10\x80\x07\x0d\x05\x20\x00\x41\xef\x00\x10\x86\x07\x02\x40\x20\x04\x45\x0d\x00\x20\x00\x41\x0b\x10\x86\x07\x20\x00\x41\x1b\x10\x86\x07\x0b\x20\x01\x41\x4b\x46\x20\x01\x41\x53\x46\x72\x21\x0c\x20\x01\x41\xb3\x7f\x47\x21\x0d\x02\x40\x03\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x28\x02\x10\x22\x07\x41\xa7\x7f\x46\x0d\x00\x20\x07\x41\xfd\x00\x46\x0d\x0c\x20\x00\x20\x06\x41\x38\x6a\x41\x00\x41\x01\x41\x00\x10\xc9\x07\x22\x07\x41\x00\x48\x0d\x11\x20\x06\x41\xb8\x01\x36\x02\x30\x20\x06\x41\x00\x36\x02\x34\x20\x06\x41\x7f\x36\x02\x3c\x20\x06\x41\x00\x36\x02\x08\x20\x06\x20\x00\x41\xc0\x00\x6a\x22\x0e\x28\x02\x00\x22\x0f\x28\x02\xbc\x01\x36\x02\x2c\x20\x07\x0d\x02\x20\x00\x10\x80\x07\x45\x0d\x01\x20\x06\x28\x02\x38\x21\x07\x0c\x06\x0b\x02\x40\x20\x04\x0d\x00\x20\x00\x28\x02\x00\x41\xd7\xe1\x02\x41\x00\x10\xc2\x02\x0c\x11\x0b\x41\x7f\x21\x07\x20\x00\x10\x80\x07\x0d\x11\x02\x40\x02\x40\x20\x01\x45\x0d\x00\x20\x06\x20\x00\x20\x02\x10\xee\x07\x22\x0e\x36\x02\x34\x20\x0e\x45\x0d\x13\x20\x06\x41\xb8\x01\x36\x02\x30\x20\x06\x41\x7f\x36\x02\x3c\x20\x06\x41\x00\x36\x02\x08\x20\x06\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x28\x02\xbc\x01\x36\x02\x2c\x0c\x01\x0b\x20\x00\x10\xc5\x07\x0d\x12\x20\x00\x20\x06\x41\x30\x6a\x20\x06\x41\x2c\x6a\x20\x06\x41\x34\x6a\x20\x06\x41\x3c\x6a\x20\x06\x41\x08\x6a\x41\x00\x41\xfb\x00\x10\xe2\x07\x0d\x12\x0b\x20\x00\x28\x02\x10\x41\xfd\x00\x46\x0d\x02\x20\x00\x41\xf1\xe1\x02\x41\x00\x10\x8a\x07\x0c\x0f\x0b\x02\x40\x20\x00\x28\x02\x10\x41\x20\x72\x41\xfb\x00\x47\x0d\x00\x02\x40\x20\x00\x20\x06\x41\x28\x6a\x41\x00\x10\xd4\x07\x22\x07\x41\x2c\x46\x0d\x00\x20\x07\x41\xfd\x00\x46\x0d\x00\x20\x07\x41\x3d\x47\x0d\x01\x0b\x02\x40\x02\x40\x20\x06\x28\x02\x38\x22\x07\x0d\x00\x02\x40\x20\x04\x45\x0d\x00\x20\x00\x41\xf0\x00\x10\x86\x07\x20\x00\x41\x18\x10\x86\x07\x20\x00\x41\x07\x10\x86\x07\x20\x00\x41\xd1\x00\x10\x86\x07\x20\x00\x41\x18\x10\x86\x07\x0b\x20\x00\x41\xc8\x00\x10\x86\x07\x0c\x01\x0b\x02\x40\x20\x04\x45\x0d\x00\x20\x00\x41\x1b\x10\x86\x07\x20\x00\x41\x07\x10\x86\x07\x20\x00\x41\xcc\x00\x10\x86\x07\x20\x00\x20\x07\x10\x9e\x07\x20\x00\x41\x1b\x10\x86\x07\x0b\x20\x00\x41\xc2\x00\x10\x86\x07\x20\x0e\x28\x02\x00\x20\x07\x10\xc6\x07\x0b\x41\x7f\x21\x07\x20\x00\x20\x01\x20\x02\x41\x01\x41\x7f\x41\x01\x10\xd5\x07\x41\x00\x48\x0d\x11\x20\x00\x28\x02\x10\x41\xfd\x00\x46\x0d\x0b\x20\x00\x41\x2c\x10\x98\x07\x45\x0d\x0a\x0c\x11\x0b\x02\x40\x02\x40\x20\x06\x28\x02\x38\x22\x07\x0d\x00\x20\x00\x41\xf1\x00\x10\x86\x07\x41\x12\x21\x0f\x20\x04\x45\x0d\x01\x20\x00\x41\x18\x10\x86\x07\x20\x00\x41\x07\x10\x86\x07\x20\x00\x41\xd1\x00\x10\x86\x07\x20\x00\x41\x18\x10\x86\x07\x0c\x01\x0b\x41\x11\x21\x0f\x20\x04\x45\x0d\x00\x20\x00\x41\x1b\x10\x86\x07\x20\x00\x41\x07\x10\x86\x07\x20\x00\x41\xcc\x00\x10\x86\x07\x20\x00\x20\x07\x10\x9e\x07\x20\x00\x41\x1b\x10\x86\x07\x0b\x20\x00\x20\x0f\x10\x86\x07\x02\x40\x20\x01\x45\x0d\x00\x20\x06\x20\x00\x20\x02\x10\xee\x07\x22\x0f\x36\x02\x34\x20\x0f\x45\x0d\x05\x20\x07\x0d\x04\x0c\x06\x0b\x20\x00\x10\xc5\x07\x0d\x04\x0c\x02\x0b\x02\x40\x20\x02\x45\x0d\x00\x20\x00\x20\x06\x28\x02\x38\x22\x07\x10\xef\x07\x0d\x04\x20\x0e\x28\x02\x00\x21\x0f\x0b\x02\x40\x20\x0f\x2d\x00\x6e\x41\x01\x71\x45\x0d\x00\x02\x40\x20\x06\x28\x02\x38\x22\x07\x41\xcd\x00\x46\x0d\x00\x20\x07\x41\x3a\x47\x0d\x01\x0b\x20\x00\x41\xb6\xe0\x02\x41\x00\x10\x8a\x07\x0c\x04\x0b\x02\x40\x20\x04\x45\x0d\x00\x20\x00\x41\x1b\x10\x86\x07\x20\x00\x41\x07\x10\x86\x07\x20\x00\x41\xcc\x00\x10\x86\x07\x20\x00\x20\x06\x28\x02\x38\x10\x9e\x07\x20\x00\x41\x1b\x10\x86\x07\x0b\x02\x40\x02\x40\x20\x01\x45\x0d\x00\x20\x0d\x0d\x01\x0b\x20\x00\x41\x11\x10\x86\x07\x20\x00\x41\xb8\x01\x10\x86\x07\x20\x00\x20\x06\x28\x02\x38\x22\x07\x10\x9e\x07\x20\x0e\x28\x02\x00\x22\x0f\x20\x0f\x2f\x01\xbc\x01\x10\x89\x07\x0c\x02\x0b\x20\x06\x20\x00\x28\x02\x00\x20\x06\x28\x02\x38\x10\xd9\x03\x22\x07\x36\x02\x34\x20\x00\x41\xc2\x00\x10\x86\x07\x20\x0e\x28\x02\x00\x20\x07\x10\xc6\x07\x20\x00\x20\x07\x20\x01\x10\xe1\x07\x21\x07\x0c\x06\x0b\x20\x00\x41\x0b\x10\x86\x07\x20\x00\x41\xd3\x00\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x20\x06\x28\x02\x08\x22\x07\x41\x02\x74\x41\x04\x6a\x20\x07\x41\x05\x74\x41\xc0\x00\x6a\x72\x41\xfc\x01\x71\x10\xc7\x07\x0c\x04\x0b\x20\x00\x20\x06\x41\x30\x6a\x20\x06\x41\x2c\x6a\x20\x06\x41\x34\x6a\x20\x06\x41\x3c\x6a\x20\x06\x41\x08\x6a\x41\x00\x41\xfb\x00\x10\xe2\x07\x0d\x01\x20\x06\x28\x02\x08\x21\x0f\x02\x40\x20\x07\x0d\x00\x20\x0f\x41\x7f\x6a\x22\x07\x41\x02\x4b\x0d\x03\x02\x40\x02\x40\x02\x40\x20\x07\x0e\x03\x00\x01\x02\x00\x0b\x20\x00\x41\x1e\x10\x86\x07\x0c\x05\x0b\x20\x00\x41\x1c\x10\x86\x07\x0c\x04\x0b\x20\x00\x41\x20\x10\x86\x07\x20\x00\x41\x20\x10\x86\x07\x0c\x03\x0b\x20\x0f\x41\x7f\x6a\x22\x0f\x41\x02\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x0f\x0e\x03\x02\x00\x01\x02\x0b\x20\x00\x41\x1d\x10\x86\x07\x0c\x02\x0b\x20\x00\x41\x1f\x10\x86\x07\x0c\x01\x0b\x20\x00\x41\x1b\x10\x86\x07\x0b\x20\x00\x41\xc1\x00\x10\x86\x07\x20\x0e\x28\x02\x00\x20\x07\x10\xc6\x07\x0c\x02\x0b\x20\x00\x28\x02\x00\x20\x07\x10\xe4\x02\x0c\x09\x0b\x20\x00\x41\xc7\x00\x10\x86\x07\x0b\x20\x01\x45\x0d\x01\x20\x00\x20\x06\x28\x02\x34\x20\x01\x10\xe1\x07\x21\x07\x0b\x20\x07\x0d\x06\x20\x06\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x28\x02\xbc\x01\x36\x02\x2c\x0b\x02\x40\x02\x40\x20\x00\x28\x02\x10\x41\x3d\x46\x0d\x00\x20\x06\x28\x02\x30\x21\x07\x0c\x01\x0b\x20\x00\x41\x11\x10\x86\x07\x20\x00\x41\x06\x10\x86\x07\x20\x00\x41\xab\x01\x10\x86\x07\x20\x00\x41\xe9\x00\x41\x7f\x10\xd7\x07\x21\x0e\x20\x00\x10\x80\x07\x0d\x06\x20\x00\x41\x0e\x10\x86\x07\x20\x00\x10\x9b\x07\x0d\x06\x02\x40\x02\x40\x20\x06\x28\x02\x30\x22\x07\x41\xb8\x01\x46\x0d\x00\x20\x07\x41\x3c\x47\x0d\x01\x0b\x20\x00\x20\x06\x28\x02\x34\x10\x9c\x07\x0b\x20\x00\x20\x0e\x10\xd8\x07\x0b\x20\x00\x20\x07\x20\x06\x28\x02\x2c\x20\x06\x28\x02\x34\x20\x06\x28\x02\x3c\x41\x01\x20\x0c\x10\xe3\x07\x20\x00\x28\x02\x10\x41\xfd\x00\x46\x0d\x01\x41\x7f\x21\x07\x20\x00\x41\x2c\x10\x98\x07\x45\x0d\x00\x0c\x07\x0b\x00\x0b\x20\x00\x41\x0e\x10\x86\x07\x02\x40\x20\x04\x45\x0d\x00\x20\x00\x41\x0e\x10\x86\x07\x0b\x41\x7f\x21\x07\x20\x00\x10\x80\x07\x45\x0d\x02\x0c\x05\x0b\x20\x00\x41\xfd\xe2\x02\x41\x00\x10\x8a\x07\x0c\x03\x0b\x20\x00\x10\x80\x07\x0d\x02\x20\x06\x41\x7f\x36\x02\x1c\x20\x06\x42\xff\xff\xff\xff\x2f\x37\x02\x14\x20\x06\x42\x80\x80\x80\x80\x70\x37\x02\x0c\x20\x06\x41\x01\x36\x02\x24\x20\x06\x20\x00\x41\xc0\x00\x6a\x22\x0e\x28\x02\x00\x22\x04\x28\x02\xb0\x02\x36\x02\x08\x20\x04\x20\x06\x41\x08\x6a\x36\x02\xb0\x02\x20\x06\x20\x04\x28\x02\xbc\x01\x36\x02\x20\x20\x00\x41\xfd\x00\x10\x86\x07\x20\x01\x41\x4b\x46\x20\x01\x41\x53\x46\x72\x21\x0c\x02\x40\x03\x40\x02\x40\x02\x40\x20\x00\x28\x02\x10\x22\x04\x41\xa7\x7f\x46\x0d\x00\x41\x00\x21\x07\x20\x04\x41\xdd\x00\x46\x0d\x03\x0c\x01\x0b\x20\x00\x10\x80\x07\x0d\x05\x02\x40\x20\x00\x28\x02\x10\x22\x04\x41\xdd\x00\x46\x0d\x00\x41\x01\x21\x07\x20\x04\x41\x2c\x47\x0d\x01\x0b\x20\x00\x41\x97\xe2\x02\x41\x00\x10\x8a\x07\x0c\x05\x0b\x02\x40\x02\x40\x02\x40\x20\x04\x41\xfb\x00\x46\x0d\x00\x20\x04\x41\xdb\x00\x46\x0d\x00\x20\x04\x41\x2c\x47\x0d\x01\x20\x00\x41\x80\x01\x10\x86\x07\x20\x0e\x28\x02\x00\x41\x00\x10\xc7\x07\x20\x00\x41\x0e\x10\x86\x07\x20\x00\x41\x0e\x10\x86\x07\x0c\x02\x0b\x02\x40\x20\x00\x20\x06\x41\x28\x6a\x41\x00\x10\xd4\x07\x22\x04\x41\x2c\x46\x0d\x00\x20\x04\x41\xdd\x00\x46\x0d\x00\x20\x04\x41\x3d\x47\x0d\x01\x0b\x02\x40\x02\x40\x20\x07\x45\x0d\x00\x02\x40\x20\x04\x41\x3d\x47\x0d\x00\x20\x00\x41\xb2\xe2\x02\x41\x00\x10\x8a\x07\x0c\x09\x0b\x20\x00\x41\x00\x10\xf0\x07\x0c\x01\x0b\x20\x00\x41\x80\x01\x10\x86\x07\x20\x0e\x28\x02\x00\x41\x00\x10\xc7\x07\x20\x00\x41\x0e\x10\x86\x07\x0b\x20\x00\x20\x01\x20\x02\x41\x01\x20\x06\x28\x02\x28\x41\x02\x71\x41\x01\x10\xd5\x07\x41\x00\x48\x0d\x06\x0c\x01\x0b\x20\x06\x41\x00\x36\x02\x38\x20\x06\x41\x00\x36\x02\x34\x02\x40\x02\x40\x20\x01\x45\x0d\x00\x20\x06\x20\x00\x20\x02\x10\xee\x07\x22\x04\x36\x02\x34\x20\x04\x45\x0d\x06\x20\x00\x20\x04\x20\x01\x10\xe1\x07\x0d\x06\x20\x06\x41\xb8\x01\x36\x02\x30\x20\x06\x20\x0e\x28\x02\x00\x28\x02\xbc\x01\x36\x02\x2c\x0c\x01\x0b\x20\x00\x10\xc5\x07\x0d\x06\x20\x00\x20\x06\x41\x30\x6a\x20\x06\x41\x2c\x6a\x20\x06\x41\x34\x6a\x20\x06\x41\x3c\x6a\x20\x06\x41\x38\x6a\x41\x00\x41\xdb\x00\x10\xe2\x07\x0d\x06\x0b\x02\x40\x02\x40\x20\x07\x45\x0d\x00\x20\x00\x20\x06\x28\x02\x38\x10\xf0\x07\x0c\x01\x0b\x20\x00\x41\x80\x01\x10\x86\x07\x20\x0e\x28\x02\x00\x20\x06\x2d\x00\x38\x10\xc7\x07\x20\x00\x41\x0e\x10\x86\x07\x20\x00\x28\x02\x10\x41\x3d\x47\x0d\x00\x20\x00\x41\x11\x10\x86\x07\x20\x00\x41\x06\x10\x86\x07\x20\x00\x41\xab\x01\x10\x86\x07\x20\x00\x41\xe9\x00\x41\x7f\x10\xd7\x07\x21\x04\x20\x00\x10\x80\x07\x0d\x05\x20\x00\x41\x0e\x10\x86\x07\x20\x00\x10\x9b\x07\x0d\x05\x02\x40\x02\x40\x20\x06\x28\x02\x30\x22\x0f\x41\xb8\x01\x46\x0d\x00\x20\x0f\x41\x3c\x47\x0d\x01\x0b\x20\x00\x20\x06\x28\x02\x34\x10\x9c\x07\x0b\x20\x00\x20\x04\x10\xd8\x07\x0b\x20\x00\x20\x06\x28\x02\x30\x20\x06\x28\x02\x2c\x20\x06\x28\x02\x34\x20\x06\x28\x02\x3c\x41\x01\x20\x0c\x10\xe3\x07\x0b\x20\x00\x28\x02\x10\x41\xdd\x00\x46\x0d\x01\x02\x40\x20\x07\x45\x0d\x00\x20\x00\x41\xdb\xe2\x02\x41\x00\x10\x8a\x07\x0c\x05\x0b\x20\x00\x41\x2c\x10\x98\x07\x0d\x04\x0c\x00\x0b\x00\x0b\x20\x00\x41\x83\x01\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x22\x01\x20\x01\x28\x02\xb0\x02\x28\x02\x00\x36\x02\xb0\x02\x20\x00\x10\x80\x07\x0d\x02\x0b\x02\x40\x20\x05\x45\x0d\x00\x20\x00\x28\x02\x10\x41\x3d\x47\x0d\x00\x41\x7f\x21\x07\x20\x00\x41\xeb\x00\x41\x7f\x10\xd7\x07\x21\x01\x20\x00\x10\x80\x07\x0d\x03\x20\x00\x20\x08\x10\xd8\x07\x02\x40\x20\x03\x45\x0d\x00\x20\x00\x41\x0e\x10\x86\x07\x0b\x20\x00\x10\x9b\x07\x0d\x03\x20\x00\x41\xeb\x00\x20\x09\x10\xd7\x07\x1a\x20\x00\x20\x01\x10\xd8\x07\x41\x01\x21\x07\x0c\x03\x0b\x02\x40\x20\x03\x0d\x00\x20\x00\x41\x97\xe3\x02\x41\x00\x10\x8a\x07\x0c\x02\x0b\x20\x00\x41\xc0\x00\x6a\x22\x00\x28\x02\x00\x28\x02\x80\x02\x20\x0a\x6a\x41\xb3\x01\x20\x0b\x20\x0a\x6b\x10\x74\x1a\x20\x00\x28\x02\x00\x28\x02\xa4\x02\x20\x08\x41\x14\x6c\x6a\x22\x00\x20\x00\x28\x02\x00\x41\x7f\x6a\x36\x02\x00\x41\x00\x21\x07\x0c\x02\x0b\x20\x00\x28\x02\x00\x20\x06\x28\x02\x34\x10\xe4\x02\x0b\x41\x7f\x21\x07\x0b\x20\x06\x41\xc0\x00\x6a\x24\x00\x20\x07\x0b\x09\x00\x20\x00\x41\x7f\x10\xb8\x07\x0b\x64\x01\x01\x7f\x02\x40\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x22\x03\x10\xda\x07\x0d\x00\x41\x7f\x0f\x0b\x02\x40\x20\x02\x41\x7f\x4a\x0d\x00\x20\x03\x10\xd6\x07\x21\x02\x0b\x20\x00\x20\x01\x41\xff\x01\x71\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x22\x00\x28\x02\x00\x20\x02\x10\xc6\x07\x20\x00\x28\x02\x00\x28\x02\xa4\x02\x20\x02\x41\x14\x6c\x6a\x22\x00\x20\x00\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x20\x02\x0b\x41\x00\x02\x40\x20\x01\x41\x00\x48\x0d\x00\x20\x00\x41\xb6\x01\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x22\x00\x28\x02\x00\x20\x01\x10\xc6\x07\x20\x00\x28\x02\x00\x22\x00\x28\x02\xa4\x02\x20\x01\x41\x14\x6c\x6a\x20\x00\x41\x84\x02\x6a\x28\x02\x00\x36\x02\x04\x0b\x0b\xb2\x03\x01\x08\x7f\x20\x01\x28\x02\x38\x21\x03\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x2d\x00\x6e\x41\x01\x71\x45\x0d\x00\x02\x40\x20\x03\x0d\x00\x20\x01\x28\x02\x40\x45\x0d\x00\x20\x00\x41\x8e\xe8\x02\x41\x00\x10\x8a\x07\x0c\x04\x0b\x20\x02\x41\x3a\x46\x0d\x02\x20\x02\x41\xcd\x00\x46\x0d\x02\x20\x01\x28\x02\x88\x01\x21\x04\x41\x00\x21\x02\x41\x00\x21\x03\x03\x40\x20\x03\x20\x04\x4e\x0d\x02\x02\x40\x02\x40\x20\x01\x28\x02\x80\x01\x20\x02\x6a\x28\x02\x00\x22\x05\x41\xcd\x00\x46\x0d\x00\x20\x05\x41\x3a\x47\x0d\x01\x0b\x20\x00\x41\x80\xe9\x02\x41\x00\x10\x8a\x07\x0c\x05\x0b\x20\x02\x41\x10\x6a\x21\x02\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x03\x45\x0d\x00\x20\x01\x2f\x01\x6c\x22\x03\x41\x82\x0c\x46\x0d\x00\x41\x00\x21\x06\x20\x03\x41\x08\x76\x41\x7d\x6a\x22\x03\x41\x03\x4b\x0d\x03\x20\x03\x0e\x04\x00\x03\x03\x00\x00\x0b\x20\x01\x28\x02\x88\x01\x21\x07\x41\x00\x21\x06\x41\x01\x21\x08\x41\x00\x21\x09\x03\x40\x20\x09\x20\x07\x4e\x0d\x03\x02\x40\x20\x01\x28\x02\x80\x01\x22\x03\x20\x09\x41\x04\x74\x6a\x28\x02\x00\x22\x04\x45\x0d\x00\x20\x08\x21\x02\x02\x40\x03\x40\x02\x40\x20\x02\x41\x7f\x6a\x22\x02\x0d\x00\x20\x01\x28\x02\x7c\x21\x0a\x41\x00\x21\x02\x41\x00\x21\x03\x03\x40\x20\x03\x20\x0a\x4e\x0d\x04\x02\x40\x20\x01\x28\x02\x74\x20\x02\x6a\x22\x05\x28\x02\x00\x20\x04\x47\x0d\x00\x20\x05\x41\x04\x6a\x28\x02\x00\x45\x0d\x04\x0b\x20\x02\x41\x10\x6a\x21\x02\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x03\x28\x02\x00\x21\x05\x20\x03\x41\x10\x6a\x21\x03\x20\x05\x20\x04\x47\x0d\x00\x0b\x0b\x20\x00\x41\xa5\xe9\x02\x41\x00\x10\x8a\x07\x0c\x03\x0b\x20\x08\x41\x01\x6a\x21\x08\x20\x09\x41\x01\x6a\x21\x09\x0c\x00\x0b\x00\x0b\x20\x00\x41\xdb\xe8\x02\x41\x00\x10\x8a\x07\x0b\x41\x7f\x21\x06\x0b\x20\x06\x0b\x6e\x01\x02\x7f\x41\x00\x21\x01\x02\x40\x02\x40\x20\x00\x28\x02\x98\x02\x22\x02\x41\x00\x48\x0d\x00\x02\x40\x20\x00\x28\x02\x80\x02\x20\x02\x6a\x2d\x00\x00\x22\x00\x41\x5d\x6a\x22\x02\x41\x0d\x4b\x0d\x00\x41\x01\x20\x02\x74\x41\xe5\xf0\x00\x71\x0d\x02\x0b\x02\x40\x20\x00\x41\x95\x7f\x6a\x22\x02\x41\x03\x4d\x0d\x00\x20\x00\x41\x94\x7e\x6a\x41\x02\x49\x0d\x02\x0c\x01\x0b\x20\x02\x0e\x04\x01\x00\x00\x01\x01\x0b\x41\x01\x21\x01\x0b\x20\x01\x0b\xff\x03\x01\x04\x7f\x20\x00\x41\xc0\x00\x6a\x22\x02\x28\x02\x00\x41\xb0\x02\x6a\x21\x03\x03\x40\x41\x00\x21\x04\x02\x40\x03\x40\x20\x03\x28\x02\x00\x22\x03\x45\x0d\x01\x02\x40\x20\x03\x28\x02\x1c\x45\x0d\x00\x02\x40\x20\x01\x0d\x00\x20\x00\x41\x06\x10\x86\x07\x41\x01\x21\x01\x0b\x20\x00\x41\x84\x01\x10\x86\x07\x02\x40\x02\x40\x20\x02\x28\x02\x00\x2d\x00\x6c\x41\x03\x46\x0d\x00\x20\x00\x41\x83\x01\x10\x86\x07\x0c\x01\x0b\x20\x00\x41\x0e\x10\x86\x07\x20\x00\x41\x0e\x10\x86\x07\x20\x00\x41\xc2\x00\x10\x86\x07\x20\x00\x41\x06\x10\x9e\x07\x20\x00\x41\x11\x10\x86\x07\x20\x00\x41\xb0\x01\x10\x86\x07\x20\x00\x41\xea\x00\x41\x7f\x10\xd7\x07\x21\x04\x20\x00\x41\x24\x10\x86\x07\x20\x02\x28\x02\x00\x41\x00\x10\x89\x07\x20\x00\x41\x81\x01\x10\x86\x07\x20\x00\x41\x8b\x01\x10\x86\x07\x20\x00\x41\xeb\x00\x41\x7f\x10\xd7\x07\x21\x05\x20\x00\x20\x04\x10\xd8\x07\x20\x00\x41\x0e\x10\x86\x07\x20\x00\x20\x05\x10\xd8\x07\x20\x00\x41\x0e\x10\x86\x07\x0b\x41\x7d\x21\x04\x0b\x20\x03\x28\x02\x10\x20\x04\x6a\x21\x04\x20\x03\x28\x02\x14\x41\x7f\x46\x0d\x00\x0b\x41\x0f\x41\x0e\x20\x01\x1b\x21\x05\x02\x40\x03\x40\x20\x04\x45\x0d\x01\x20\x00\x20\x05\x10\x86\x07\x20\x04\x41\x7f\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x02\x40\x20\x01\x0d\x00\x20\x00\x41\x06\x10\x86\x07\x41\x01\x21\x01\x0b\x20\x00\x41\xed\x00\x20\x03\x28\x02\x14\x10\xd7\x07\x1a\x0c\x01\x0b\x0b\x02\x40\x02\x40\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x22\x04\x28\x02\x60\x45\x0d\x00\x02\x40\x02\x40\x20\x01\x0d\x00\x41\x7f\x21\x04\x0c\x01\x0b\x20\x00\x41\x2a\x10\x86\x07\x20\x00\x41\xe9\x00\x41\x7f\x10\xd7\x07\x21\x04\x20\x00\x41\x0e\x10\x86\x07\x0b\x20\x00\x41\xb8\x01\x10\x86\x07\x20\x00\x41\x08\x10\x9e\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x41\x00\x10\x89\x07\x20\x00\x20\x04\x10\xd8\x07\x41\x28\x21\x04\x0c\x01\x0b\x02\x40\x20\x04\x2d\x00\x6c\x22\x05\x45\x0d\x00\x02\x40\x20\x01\x0d\x00\x20\x00\x41\x06\x10\x86\x07\x41\x2e\x21\x04\x0c\x02\x0b\x41\x2e\x21\x04\x20\x05\x41\x03\x47\x0d\x01\x20\x00\x41\x8b\x01\x10\x86\x07\x0c\x01\x0b\x41\x28\x41\x29\x20\x01\x1b\x21\x04\x0b\x20\x00\x20\x04\x10\x86\x07\x0b\x4d\x01\x01\x7f\x41\x7f\x21\x03\x02\x40\x20\x00\x20\x01\x41\xb4\x02\x6a\x41\x08\x20\x01\x41\xbc\x02\x6a\x20\x01\x28\x02\xb8\x02\x41\x01\x6a\x10\xc3\x04\x0d\x00\x20\x01\x20\x01\x28\x02\xb8\x02\x22\x03\x41\x01\x6a\x36\x02\xb8\x02\x20\x01\x28\x02\xb4\x02\x20\x03\x41\x03\x74\x6a\x20\x02\x37\x03\x00\x0b\x20\x03\x0b\x74\x01\x01\x7f\x41\x00\x21\x03\x02\x40\x20\x00\x20\x01\x41\xfc\x01\x6a\x41\x10\x20\x01\x41\xf8\x01\x6a\x20\x01\x28\x02\xf4\x01\x41\x01\x6a\x10\xc3\x04\x0d\x00\x20\x01\x20\x01\x28\x02\xf4\x01\x22\x03\x41\x01\x6a\x36\x02\xf4\x01\x20\x01\x28\x02\xfc\x01\x20\x03\x41\x04\x74\x6a\x22\x03\x20\x03\x2d\x00\x04\x41\xf8\x01\x71\x3a\x00\x04\x20\x03\x41\x7f\x36\x02\x00\x20\x03\x20\x01\x28\x02\xbc\x01\x36\x02\x08\x20\x03\x20\x00\x20\x02\x10\xd9\x03\x36\x02\x0c\x0b\x20\x03\x0b\x99\x0e\x01\x06\x7f\x23\x00\x41\x20\x6b\x22\x02\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x28\x02\x10\x22\x03\x41\x83\x7f\x46\x0d\x00\x41\x00\x21\x04\x20\x03\x41\x59\x47\x0d\x01\x02\x40\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x22\x03\x2d\x00\x6c\x41\x01\x71\x0d\x00\x20\x00\x41\xaa\xd5\x02\x41\x00\x10\x8a\x07\x0c\x07\x0b\x02\x40\x20\x03\x28\x02\x64\x0d\x00\x20\x00\x41\xc5\xd5\x02\x41\x00\x10\x8a\x07\x0c\x07\x0b\x41\x7f\x21\x03\x20\x00\x10\x80\x07\x0d\x0c\x20\x00\x28\x02\x10\x22\x05\x41\x57\x6a\x22\x06\x41\x03\x4d\x0d\x02\x20\x05\x41\x46\x6a\x41\x02\x49\x0d\x08\x20\x05\x41\xdd\x00\x46\x0d\x08\x20\x05\x41\xfd\x00\x46\x0d\x08\x0c\x07\x0b\x20\x00\x41\x20\x6a\x28\x02\x00\x21\x04\x0b\x41\x7f\x21\x03\x20\x00\x41\xa3\x7f\x20\x01\x41\x04\x72\x10\xf2\x07\x0d\x0a\x02\x40\x20\x00\x28\x02\x10\x22\x05\x41\xa8\x7f\x47\x0d\x00\x20\x01\x41\x7b\x71\x21\x06\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x10\xd6\x07\x21\x05\x03\x40\x20\x00\x10\x80\x07\x0d\x0c\x20\x00\x41\x11\x10\x86\x07\x20\x00\x41\xb0\x01\x10\x86\x07\x20\x00\x41\xe9\x00\x20\x05\x10\xd7\x07\x1a\x20\x00\x41\x0e\x10\x86\x07\x20\x00\x41\x08\x20\x06\x10\xf3\x07\x0d\x0c\x20\x00\x28\x02\x10\x41\xa8\x7f\x46\x0d\x00\x0b\x20\x00\x20\x05\x10\xd8\x07\x20\x00\x28\x02\x10\x21\x05\x0b\x02\x40\x20\x05\x41\x3f\x47\x0d\x00\x20\x00\x10\x80\x07\x0d\x0b\x41\x7f\x21\x03\x20\x00\x41\xe9\x00\x41\x7f\x10\xd7\x07\x21\x05\x20\x00\x10\x9b\x07\x0d\x0b\x20\x00\x41\x3a\x10\x98\x07\x0d\x0b\x41\x7f\x21\x03\x20\x00\x41\xeb\x00\x41\x7f\x10\xd7\x07\x21\x06\x20\x00\x20\x05\x10\xd8\x07\x20\x00\x20\x01\x41\x01\x71\x10\xde\x07\x0d\x0b\x20\x00\x20\x06\x10\xd8\x07\x20\x00\x28\x02\x10\x21\x05\x0b\x20\x05\x41\xfb\x00\x6a\x21\x03\x02\x40\x02\x40\x20\x05\x41\x3d\x46\x0d\x00\x20\x03\x41\x0c\x4b\x0d\x01\x0b\x20\x00\x10\x80\x07\x0d\x05\x20\x00\x20\x02\x41\x1c\x6a\x20\x02\x41\x18\x6a\x20\x02\x41\x14\x6a\x20\x02\x41\x10\x6a\x41\x00\x20\x05\x41\x3d\x47\x20\x05\x10\xe2\x07\x41\x00\x48\x0d\x05\x02\x40\x20\x00\x20\x01\x10\xde\x07\x45\x0d\x00\x20\x00\x28\x02\x00\x20\x02\x28\x02\x14\x10\xe4\x02\x0c\x06\x0b\x02\x40\x20\x05\x41\x3d\x47\x0d\x00\x20\x02\x28\x02\x1c\x22\x01\x41\x3c\x47\x0d\x05\x20\x02\x28\x02\x14\x20\x04\x47\x0d\x04\x20\x00\x20\x04\x10\x9c\x07\x0c\x04\x0b\x20\x00\x41\xb2\x7f\x20\x03\x41\xe1\xd5\x02\x6a\x2d\x00\x00\x22\x01\x20\x00\x28\x02\x40\x2d\x00\x6e\x41\x04\x71\x41\x02\x76\x1b\x20\x01\x20\x03\x41\x02\x46\x1b\x41\xff\x01\x71\x10\x86\x07\x20\x02\x28\x02\x1c\x21\x01\x0c\x04\x0b\x41\x00\x21\x03\x20\x05\x41\xee\x00\x6a\x41\x02\x4b\x0d\x0a\x20\x00\x10\x80\x07\x0d\x04\x20\x00\x20\x02\x41\x1c\x6a\x20\x02\x41\x18\x6a\x20\x02\x41\x14\x6a\x20\x02\x41\x10\x6a\x20\x02\x41\x0c\x6a\x41\x01\x20\x05\x10\xe2\x07\x41\x00\x48\x0d\x04\x20\x00\x41\x11\x10\x86\x07\x02\x40\x20\x05\x41\x94\x7f\x47\x0d\x00\x20\x00\x41\xb0\x01\x10\x86\x07\x0b\x41\x7f\x21\x03\x20\x00\x41\xea\x00\x41\xe9\x00\x20\x05\x41\x93\x7f\x46\x1b\x41\x7f\x10\xd7\x07\x21\x05\x20\x00\x41\x0e\x10\x86\x07\x02\x40\x20\x00\x20\x01\x10\xde\x07\x45\x0d\x00\x20\x00\x28\x02\x00\x20\x02\x28\x02\x14\x10\xe4\x02\x0c\x0b\x0b\x20\x02\x28\x02\x14\x21\x03\x02\x40\x20\x02\x28\x02\x1c\x22\x01\x41\x3c\x47\x0d\x00\x20\x03\x20\x04\x47\x0d\x00\x20\x00\x20\x04\x10\x9c\x07\x0b\x20\x02\x28\x02\x0c\x41\x7f\x6a\x22\x06\x41\x03\x4f\x0d\x01\x20\x00\x20\x06\x41\x15\x6a\x41\xff\x01\x71\x10\x86\x07\x20\x00\x20\x01\x20\x02\x28\x02\x18\x20\x03\x20\x02\x28\x02\x10\x41\x01\x41\x00\x10\xe3\x07\x20\x00\x41\xeb\x00\x41\x7f\x10\xd7\x07\x21\x01\x20\x00\x20\x05\x10\xd8\x07\x20\x02\x28\x02\x0c\x21\x03\x02\x40\x03\x40\x20\x03\x45\x0d\x01\x20\x00\x41\x0f\x10\x86\x07\x20\x02\x20\x02\x28\x02\x0c\x41\x7f\x6a\x22\x03\x36\x02\x0c\x0c\x00\x0b\x00\x0b\x20\x00\x20\x01\x10\xd8\x07\x0c\x09\x0b\x20\x06\x0e\x04\x05\x04\x04\x05\x05\x0b\x10\x40\x00\x0b\x41\x3c\x21\x01\x0b\x41\x00\x21\x03\x20\x00\x20\x01\x20\x02\x28\x02\x18\x20\x02\x28\x02\x14\x20\x02\x28\x02\x10\x41\x02\x41\x00\x10\xe3\x07\x0c\x06\x0b\x41\x7f\x21\x03\x0c\x05\x0b\x20\x00\x28\x02\x30\x0d\x00\x41\x00\x21\x06\x02\x40\x20\x05\x41\x2a\x47\x0d\x00\x20\x00\x10\x80\x07\x0d\x05\x41\x01\x21\x06\x0b\x20\x00\x20\x01\x10\xde\x07\x0d\x04\x20\x00\x41\xc0\x00\x6a\x22\x01\x28\x02\x00\x22\x05\x2d\x00\x6c\x21\x03\x02\x40\x20\x06\x45\x0d\x00\x20\x05\x10\xd6\x07\x21\x05\x20\x01\x28\x02\x00\x10\xd6\x07\x21\x01\x20\x00\x41\xfe\x00\x41\xfd\x00\x20\x03\x41\x03\x46\x22\x04\x1b\x10\x86\x07\x20\x00\x41\x0e\x10\x86\x07\x20\x00\x41\x06\x10\x86\x07\x20\x00\x41\x06\x10\x86\x07\x20\x00\x20\x05\x10\xd8\x07\x20\x00\x41\x85\x01\x10\x86\x07\x02\x40\x20\x03\x41\x03\x47\x0d\x00\x20\x00\x41\x8b\x01\x10\x86\x07\x0b\x20\x00\x41\x81\x01\x10\x86\x07\x20\x00\x41\xc2\x00\x10\x86\x07\x20\x00\x41\xe9\x00\x10\x9e\x07\x20\x00\x41\xea\x00\x41\x7f\x10\xd7\x07\x21\x06\x20\x00\x20\x01\x10\xd8\x07\x02\x40\x02\x40\x20\x04\x0d\x00\x20\x00\x41\x89\x01\x10\x86\x07\x0c\x01\x0b\x20\x00\x41\xc1\x00\x10\x86\x07\x20\x00\x41\xc0\x00\x10\x9e\x07\x20\x00\x41\x8b\x01\x10\x86\x07\x20\x00\x41\x8a\x01\x10\x86\x07\x0b\x20\x00\x41\x11\x10\x86\x07\x20\x00\x41\xea\x00\x41\x7f\x10\xd7\x07\x21\x04\x20\x00\x41\x0e\x10\x86\x07\x20\x00\x41\xeb\x00\x20\x05\x10\xd7\x07\x1a\x20\x00\x20\x04\x10\xd8\x07\x20\x00\x41\x01\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x22\x05\x28\x02\x00\x41\x02\x10\xc6\x07\x20\x00\x41\xab\x01\x10\x86\x07\x20\x00\x41\xea\x00\x41\x7f\x10\xd7\x07\x21\x04\x02\x40\x20\x03\x41\x03\x47\x22\x07\x0d\x00\x20\x00\x41\x8b\x01\x10\x86\x07\x0b\x20\x00\x41\x86\x01\x10\x86\x07\x20\x05\x28\x02\x00\x41\x00\x10\xc7\x07\x20\x00\x41\xea\x00\x41\x7f\x10\xd7\x07\x21\x05\x02\x40\x20\x07\x0d\x00\x20\x00\x41\x8b\x01\x10\x86\x07\x0b\x20\x00\x41\x81\x01\x10\x86\x07\x20\x00\x41\xc2\x00\x10\x86\x07\x20\x00\x41\xe9\x00\x10\x9e\x07\x20\x00\x41\xe9\x00\x20\x01\x10\xd7\x07\x1a\x20\x00\x41\xc1\x00\x10\x86\x07\x20\x00\x41\xc0\x00\x10\x9e\x07\x20\x00\x20\x05\x10\xd8\x07\x20\x00\x41\x0f\x10\x86\x07\x20\x00\x41\x0f\x10\x86\x07\x20\x00\x41\x0f\x10\x86\x07\x20\x00\x41\x01\x10\xdb\x07\x20\x00\x20\x04\x10\xd8\x07\x20\x00\x41\x86\x01\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x22\x05\x28\x02\x00\x41\x01\x10\xc7\x07\x20\x00\x41\xea\x00\x41\x7f\x10\xd7\x07\x21\x04\x02\x40\x20\x03\x41\x03\x47\x22\x03\x0d\x00\x20\x00\x41\x8b\x01\x10\x86\x07\x0b\x20\x00\x41\x81\x01\x10\x86\x07\x20\x00\x41\xc2\x00\x10\x86\x07\x20\x00\x41\xe9\x00\x10\x9e\x07\x20\x00\x41\xe9\x00\x20\x01\x10\xd7\x07\x1a\x20\x00\x41\xeb\x00\x20\x06\x10\xd7\x07\x1a\x20\x00\x20\x04\x10\xd8\x07\x20\x00\x41\x86\x01\x10\x86\x07\x20\x05\x28\x02\x00\x41\x02\x10\xc7\x07\x20\x00\x41\xea\x00\x41\x7f\x10\xd7\x07\x21\x01\x02\x40\x20\x03\x0d\x00\x20\x00\x41\x8b\x01\x10\x86\x07\x0b\x20\x00\x20\x01\x10\xd8\x07\x20\x00\x41\x30\x10\x86\x07\x41\x00\x21\x03\x20\x00\x41\x00\x10\x9e\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x41\x04\x10\xc7\x07\x20\x00\x20\x06\x10\xd8\x07\x20\x00\x41\xc1\x00\x10\x86\x07\x20\x00\x41\xc0\x00\x10\x9e\x07\x20\x00\x41\x0f\x10\x86\x07\x20\x00\x41\x0f\x10\x86\x07\x20\x00\x41\x0f\x10\x86\x07\x0c\x05\x0b\x20\x03\x41\x03\x47\x0d\x02\x0c\x01\x0b\x20\x00\x41\x06\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x2d\x00\x6c\x41\x03\x47\x0d\x01\x0b\x20\x00\x41\x8b\x01\x10\x86\x07\x0b\x20\x00\x41\x88\x01\x10\x86\x07\x20\x00\x41\xe9\x00\x41\x7f\x10\xd7\x07\x21\x03\x20\x00\x41\x01\x10\xdb\x07\x20\x00\x20\x03\x10\xd8\x07\x0b\x41\x00\x21\x03\x0b\x20\x02\x41\x20\x6a\x24\x00\x20\x03\x0b\x71\x01\x01\x7f\x02\x40\x20\x00\x20\x01\x20\x02\x10\x82\x07\x22\x00\x41\x00\x48\x0d\x00\x20\x01\x28\x02\x74\x20\x00\x41\x04\x74\x6a\x22\x02\x20\x02\x28\x02\x0c\x41\x87\x7f\x71\x20\x03\x41\x03\x74\x41\xf8\x00\x71\x72\x36\x02\x0c\x20\x02\x20\x01\x28\x02\xbc\x01\x22\x03\x36\x02\x04\x20\x01\x28\x02\xc0\x01\x21\x04\x20\x01\x20\x00\x36\x02\xc0\x01\x20\x02\x20\x04\x36\x02\x08\x20\x01\x28\x02\xcc\x01\x20\x03\x41\x03\x74\x6a\x20\x00\x36\x02\x04\x0b\x20\x00\x0b\x39\x01\x01\x7f\x03\x7f\x41\x00\x21\x03\x02\x40\x02\x40\x20\x01\x41\x00\x48\x0d\x00\x20\x01\x20\x02\x47\x0d\x01\x41\x01\x21\x03\x0b\x20\x03\x0f\x0b\x20\x00\x28\x02\xcc\x01\x20\x01\x41\x03\x74\x6a\x28\x02\x00\x21\x01\x0c\x00\x0b\x0b\xf1\x01\x01\x02\x7f\x20\x00\x28\x02\x40\x21\x03\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x41\x27\x46\x0d\x00\x02\x40\x20\x01\x41\xcd\x00\x46\x0d\x00\x20\x01\x41\x3a\x46\x0d\x00\x20\x01\x41\xc5\x00\x46\x0d\x01\x20\x01\x41\x2d\x47\x0d\x02\x20\x03\x2d\x00\x6c\x41\x01\x47\x0d\x02\x20\x00\x41\xf5\xe0\x02\x41\x00\x10\x8a\x07\x41\x7f\x0f\x0b\x02\x40\x20\x03\x2d\x00\x6e\x41\x01\x71\x45\x0d\x00\x20\x00\x41\x94\xe1\x02\x41\x00\x10\x8a\x07\x41\x7f\x0f\x0b\x20\x01\x41\xc5\x00\x47\x0d\x01\x0b\x20\x02\x41\xb3\x7f\x46\x0d\x03\x20\x02\x41\x45\x46\x0d\x01\x02\x40\x20\x02\x41\x53\x46\x0d\x00\x20\x02\x41\x4b\x47\x0d\x03\x0b\x20\x00\x41\xb9\xe1\x02\x41\x00\x10\x8a\x07\x41\x7f\x0f\x0b\x20\x02\x41\xb3\x7f\x46\x0d\x02\x20\x02\x41\x45\x46\x0d\x00\x41\x01\x21\x04\x20\x02\x41\x53\x46\x0d\x03\x20\x02\x41\x4b\x47\x0d\x01\x41\x02\x21\x04\x0c\x03\x0b\x41\x05\x21\x04\x0c\x02\x0b\x10\x40\x00\x0b\x41\x06\x21\x04\x0b\x20\x00\x20\x03\x20\x01\x20\x04\x10\x9d\x07\x41\x1f\x75\x0b\x8d\x06\x01\x08\x7f\x41\x00\x21\x08\x02\x40\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x22\x09\x28\x02\x98\x02\x22\x0a\x41\x00\x48\x0d\x00\x41\x02\x21\x0b\x02\x40\x02\x40\x20\x09\x28\x02\x80\x02\x20\x0a\x6a\x22\x0c\x2d\x00\x00\x22\x0d\x41\xb9\x7f\x6a\x22\x0e\x41\x03\x4d\x0d\x00\x02\x40\x20\x0d\x41\xc1\x00\x46\x0d\x00\x02\x40\x20\x0d\x41\xbe\x01\x46\x0d\x00\x20\x0d\x41\xb8\x01\x47\x0d\x04\x20\x0c\x28\x00\x01\x22\x0f\x41\x08\x46\x0d\x04\x20\x0c\x2f\x00\x05\x21\x08\x02\x40\x20\x0f\x41\x3a\x46\x0d\x00\x20\x0f\x41\xf1\x00\x46\x0d\x05\x20\x0f\x41\xcd\x00\x47\x0d\x04\x0b\x20\x09\x2d\x00\x6e\x41\x01\x71\x45\x0d\x03\x20\x00\x41\xd3\xdf\x02\x41\x00\x10\x8a\x07\x41\x7f\x0f\x0b\x20\x0c\x2f\x00\x05\x21\x08\x0b\x20\x0c\x28\x00\x01\x21\x0f\x41\x01\x21\x0b\x0c\x01\x0b\x41\x00\x21\x0f\x02\x40\x20\x0e\x0e\x04\x01\x02\x02\x00\x01\x0b\x41\x03\x21\x0b\x41\x00\x21\x0f\x0b\x41\x7f\x21\x07\x20\x09\x41\x7f\x36\x02\x98\x02\x20\x09\x41\x84\x02\x6a\x20\x0a\x36\x02\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x06\x45\x0d\x00\x20\x0d\x41\xb9\x7f\x6a\x22\x0a\x41\x03\x4d\x0d\x01\x02\x40\x02\x40\x20\x0d\x41\xc1\x00\x46\x0d\x00\x20\x0d\x41\xbe\x01\x46\x0d\x01\x20\x0d\x41\xb8\x01\x47\x0d\x05\x20\x09\x10\xd6\x07\x21\x07\x20\x00\x41\xbb\x01\x10\x86\x07\x20\x00\x20\x0f\x10\x9e\x07\x20\x00\x41\xc0\x00\x6a\x22\x0d\x28\x02\x00\x20\x07\x10\xc6\x07\x20\x0d\x28\x02\x00\x20\x08\x10\x89\x07\x20\x09\x20\x07\x41\x01\x10\xae\x07\x1a\x41\x3c\x21\x0d\x20\x00\x41\x3c\x10\x86\x07\x0c\x09\x0b\x20\x00\x41\xc2\x00\x10\x86\x07\x20\x00\x20\x0f\x10\x9e\x07\x41\x7f\x21\x07\x41\xc1\x00\x21\x0d\x0c\x08\x0b\x20\x00\x41\xbf\x01\x10\x86\x07\x20\x00\x20\x0f\x10\x9e\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x20\x08\x10\x89\x07\x41\x7f\x21\x07\x41\xbe\x01\x21\x0d\x0c\x07\x0b\x20\x0d\x41\xb9\x7f\x6a\x22\x0a\x41\x03\x4d\x0d\x01\x20\x0d\x41\xb8\x01\x47\x0d\x06\x20\x09\x10\xd6\x07\x21\x07\x20\x00\x41\xbb\x01\x10\x86\x07\x20\x00\x20\x0f\x10\x9e\x07\x20\x00\x41\xc0\x00\x6a\x22\x00\x28\x02\x00\x20\x07\x10\xc6\x07\x20\x00\x28\x02\x00\x20\x08\x10\x89\x07\x20\x09\x20\x07\x41\x01\x10\xae\x07\x1a\x41\x3c\x21\x0d\x0c\x06\x0b\x20\x0a\x0e\x04\x03\x01\x01\x02\x03\x0b\x02\x40\x02\x40\x20\x0a\x0e\x04\x01\x06\x06\x00\x01\x0b\x20\x00\x41\xf0\x00\x10\x86\x07\x41\xca\x00\x21\x0d\x0c\x05\x0b\x20\x00\x41\xf1\x00\x10\x86\x07\x41\xc7\x00\x21\x0d\x0c\x04\x0b\x10\x40\x00\x0b\x20\x00\x41\xf0\x00\x10\x86\x07\x20\x00\x41\x14\x10\x86\x07\x41\xca\x00\x21\x0d\x0c\x01\x0b\x20\x00\x41\xf1\x00\x10\x86\x07\x20\x00\x41\x13\x10\x86\x07\x41\xc7\x00\x21\x0d\x0b\x20\x00\x20\x0d\x10\x86\x07\x41\x7f\x21\x07\x0b\x20\x01\x20\x0d\x36\x02\x00\x20\x02\x20\x08\x36\x02\x00\x20\x03\x20\x0f\x36\x02\x00\x20\x04\x20\x07\x36\x02\x00\x02\x40\x20\x05\x45\x0d\x00\x20\x05\x20\x0b\x36\x02\x00\x0b\x41\x00\x0f\x0b\x02\x40\x20\x07\x41\xbd\x7f\x47\x0d\x00\x20\x00\x41\xf1\xdf\x02\x41\x00\x10\x8a\x07\x41\x7f\x0f\x0b\x02\x40\x20\x07\x41\xeb\x00\x6a\x41\x01\x4b\x0d\x00\x20\x00\x41\x92\xe0\x02\x41\x00\x10\x8a\x07\x41\x7f\x0f\x0b\x02\x40\x20\x07\x41\x20\x72\x41\xfb\x00\x47\x0d\x00\x20\x00\x41\xb6\xe0\x02\x41\x00\x10\x8a\x07\x41\x7f\x0f\x0b\x20\x00\x41\xd3\xe0\x02\x41\x00\x10\x8a\x07\x41\x7f\x0b\xfb\x03\x01\x01\x7f\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x41\xb9\x7f\x6a\x22\x07\x41\x03\x4d\x0d\x00\x02\x40\x02\x40\x20\x01\x41\x3c\x46\x0d\x00\x02\x40\x20\x01\x41\xbe\x01\x46\x0d\x00\x20\x01\x41\xb8\x01\x46\x0d\x06\x20\x01\x41\xc1\x00\x47\x0d\x0c\x0b\x20\x05\x41\x04\x4b\x0d\x0b\x02\x40\x02\x40\x20\x05\x0e\x05\x06\x06\x03\x00\x01\x06\x0b\x20\x00\x41\x18\x10\x86\x07\x0c\x05\x0b\x20\x00\x41\x1b\x10\x86\x07\x0c\x04\x0b\x20\x00\x28\x02\x00\x20\x03\x10\xe4\x02\x20\x00\x20\x04\x10\xd8\x07\x0c\x02\x0b\x20\x00\x41\x15\x10\x86\x07\x0c\x02\x0b\x02\x40\x20\x07\x0e\x04\x01\x09\x09\x00\x01\x0b\x20\x05\x41\x04\x4b\x0d\x08\x02\x40\x02\x40\x02\x40\x20\x05\x0e\x05\x0c\x0c\x02\x00\x01\x0c\x0b\x20\x00\x41\x1a\x10\x86\x07\x0c\x0b\x0b\x20\x00\x41\x1f\x10\x86\x07\x0c\x0a\x0b\x20\x00\x41\x17\x10\x86\x07\x0c\x09\x0b\x20\x05\x41\x04\x4b\x0d\x07\x02\x40\x02\x40\x02\x40\x02\x40\x20\x05\x0e\x05\x00\x04\x01\x02\x03\x00\x0b\x20\x00\x41\xb3\x01\x10\x86\x07\x0c\x03\x0b\x20\x00\x41\x16\x10\x86\x07\x0c\x02\x0b\x20\x00\x41\x19\x10\x86\x07\x0c\x01\x0b\x20\x00\x41\x1d\x10\x86\x07\x0b\x20\x01\x41\xb9\x7f\x6a\x22\x07\x41\x03\x4d\x0d\x04\x20\x01\x41\x3c\x46\x0d\x02\x20\x01\x41\xc1\x00\x46\x0d\x03\x20\x01\x41\xbe\x01\x46\x0d\x01\x20\x01\x41\xb8\x01\x47\x0d\x06\x0b\x20\x05\x41\x02\x4f\x0d\x04\x20\x00\x41\xbd\x01\x41\xb9\x01\x20\x06\x1b\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x22\x01\x28\x02\x00\x20\x03\x10\xc6\x07\x20\x01\x28\x02\x00\x20\x02\x41\xff\xff\x03\x71\x10\x89\x07\x0f\x0b\x20\x00\x41\xc0\x01\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x22\x01\x28\x02\x00\x20\x03\x10\xc6\x07\x20\x01\x28\x02\x00\x20\x02\x41\xff\xff\x03\x71\x10\x89\x07\x0f\x0b\x20\x00\x41\x3d\x10\x86\x07\x0f\x0b\x20\x00\x41\xc3\x00\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x20\x03\x10\xc6\x07\x0f\x0b\x20\x07\x0e\x04\x03\x01\x01\x02\x03\x0b\x41\x85\xdf\x02\x41\xae\xb7\x01\x41\xef\xb9\x01\x41\xc8\xdf\x02\x10\x4a\x00\x0b\x10\x40\x00\x0b\x20\x00\x41\xcb\x00\x10\x86\x07\x0f\x0b\x20\x00\x41\xc9\x00\x10\x86\x07\x0b\x53\x01\x01\x7f\x41\x7f\x21\x01\x02\x40\x20\x00\x41\xfb\x00\x10\x98\x07\x0d\x00\x02\x40\x20\x00\x28\x02\x10\x41\xfd\x00\x46\x0d\x00\x20\x00\x10\xff\x06\x1a\x03\x40\x20\x00\x41\x07\x10\xa3\x07\x0d\x02\x20\x00\x28\x02\x10\x41\xfd\x00\x47\x0d\x00\x0b\x20\x00\x10\xcf\x07\x0b\x41\x7f\x41\x00\x20\x00\x10\x80\x07\x1b\x21\x01\x0b\x20\x01\x0b\xe5\x01\x01\x03\x7f\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x02\x40\x02\x40\x20\x00\x41\x27\x10\x92\x07\x0d\x00\x41\x00\x21\x00\x0c\x01\x0b\x20\x02\x20\x00\x28\x02\x04\x36\x02\x00\x20\x02\x20\x00\x28\x02\x30\x36\x02\x08\x20\x02\x20\x00\x41\x14\x6a\x28\x02\x00\x36\x02\x04\x20\x02\x20\x00\x41\x18\x6a\x28\x02\x00\x36\x02\x0c\x41\x7f\x21\x03\x02\x40\x20\x00\x10\x80\x07\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x00\x28\x02\x10\x22\x03\x41\x2d\x6a\x22\x04\x41\x07\x4b\x0d\x00\x41\x01\x20\x04\x74\x41\xc1\x01\x71\x0d\x01\x0b\x20\x03\x41\xfb\x00\x46\x0d\x00\x02\x40\x20\x03\x41\xdb\x00\x47\x0d\x00\x41\x01\x21\x03\x0c\x03\x0b\x20\x03\x41\x83\x7f\x47\x0d\x01\x41\x00\x21\x03\x20\x00\x41\x28\x6a\x28\x02\x00\x0d\x02\x0b\x20\x01\x41\x02\x76\x41\x01\x71\x20\x00\x28\x02\x04\x20\x00\x28\x02\x14\x46\x72\x21\x03\x0c\x01\x0b\x41\x00\x21\x03\x0b\x41\x7f\x20\x03\x20\x00\x20\x02\x10\x91\x07\x1b\x21\x00\x0b\x20\x02\x41\x10\x6a\x24\x00\x20\x00\x0b\x09\x00\x20\x00\x41\x01\x10\xeb\x07\x0b\x2b\x01\x01\x7f\x41\x7f\x21\x01\x02\x40\x20\x00\x41\x28\x10\x98\x07\x0d\x00\x20\x00\x10\xe6\x07\x0d\x00\x41\x7f\x41\x00\x20\x00\x41\x29\x10\x98\x07\x1b\x21\x01\x0b\x20\x01\x0b\x32\x00\x02\x40\x20\x00\x28\x02\x40\x28\x02\xa4\x01\x41\x00\x48\x0d\x00\x20\x00\x41\x06\x10\x86\x07\x20\x00\x41\xd9\x00\x10\x86\x07\x20\x00\x28\x02\x40\x22\x00\x20\x00\x2f\x01\xa4\x01\x10\x89\x07\x0b\x0b\x09\x00\x20\x00\x41\x00\x10\xa3\x07\x0b\x47\x01\x01\x7f\x20\x00\x41\xc0\x00\x6a\x21\x03\x02\x40\x03\x40\x20\x01\x20\x02\x4c\x0d\x01\x20\x00\x41\xb5\x01\x10\x86\x07\x20\x03\x28\x02\x00\x20\x01\x41\xff\xff\x03\x71\x10\x89\x07\x20\x03\x28\x02\x00\x28\x02\xcc\x01\x20\x01\x41\x03\x74\x6a\x28\x02\x00\x21\x01\x0c\x00\x0b\x00\x0b\x0b\x58\x01\x02\x7f\x41\x00\x21\x02\x41\x7f\x21\x03\x02\x40\x03\x40\x20\x00\x20\x01\x10\xde\x07\x0d\x01\x02\x40\x20\x02\x45\x0d\x00\x20\x00\x28\x02\x40\x41\x7f\x36\x02\x98\x02\x0b\x02\x40\x20\x00\x28\x02\x10\x41\x2c\x46\x0d\x00\x41\x00\x21\x03\x0c\x02\x0b\x20\x00\x10\x80\x07\x0d\x01\x20\x00\x41\x0e\x10\x86\x07\x41\x01\x21\x02\x0c\x00\x0b\x00\x0b\x20\x03\x0b\x6d\x01\x02\x7f\x41\x00\x21\x02\x02\x40\x20\x00\x28\x02\x08\x22\x03\x20\x01\x4f\x0d\x00\x41\x7f\x21\x02\x20\x00\x28\x02\x0c\x0d\x00\x02\x40\x20\x00\x28\x02\x14\x20\x00\x28\x02\x00\x20\x03\x41\x03\x6c\x41\x01\x76\x22\x02\x20\x01\x20\x02\x20\x01\x4b\x1b\x22\x02\x20\x00\x28\x02\x10\x11\x01\x00\x22\x01\x0d\x00\x20\x00\x41\x01\x36\x02\x0c\x41\x7f\x0f\x0b\x20\x00\x20\x02\x36\x02\x08\x20\x00\x20\x01\x36\x02\x00\x41\x00\x21\x02\x0b\x20\x02\x0b\xf3\x05\x02\x08\x7f\x01\x7e\x23\x00\x41\xc0\x00\x6b\x22\x01\x24\x00\x20\x00\x28\x02\x38\x21\x02\x41\x7f\x21\x03\x02\x40\x20\x00\x28\x02\x00\x20\x01\x41\x28\x6a\x41\x20\x10\xb3\x04\x0d\x00\x02\x40\x20\x00\x28\x02\x00\x20\x01\x41\x10\x6a\x41\x01\x10\xb3\x04\x0d\x00\x20\x02\x41\x01\x6a\x21\x04\x41\x00\x21\x05\x02\x40\x02\x40\x03\x40\x20\x05\x21\x06\x20\x04\x22\x07\x20\x00\x28\x02\x3c\x4f\x0d\x02\x41\x01\x21\x05\x20\x07\x41\x01\x6a\x21\x04\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x07\x2d\x00\x00\x22\x02\x41\xa5\x7f\x6a\x22\x08\x41\x02\x4d\x0d\x00\x02\x40\x20\x02\x41\x2f\x46\x0d\x00\x20\x02\x41\x76\x6a\x22\x05\x41\x03\x4b\x0d\x02\x20\x05\x0e\x04\x07\x02\x02\x07\x07\x0b\x41\x2f\x21\x02\x20\x06\x0d\x03\x03\x40\x20\x01\x20\x04\x41\x01\x6a\x36\x02\x0c\x02\x40\x02\x40\x20\x04\x2c\x00\x00\x22\x02\x41\x7f\x4c\x0d\x00\x20\x02\x41\xff\x01\x71\x21\x02\x0c\x01\x0b\x20\x04\x41\x06\x20\x01\x41\x0c\x6a\x10\x9e\x04\x22\x02\x41\x80\x80\xc4\x00\x4f\x0d\x06\x0b\x02\x40\x20\x02\x10\x8e\x07\x45\x0d\x00\x20\x01\x41\x10\x6a\x20\x02\x10\xf0\x05\x21\x02\x20\x01\x28\x02\x0c\x21\x04\x20\x02\x45\x0d\x01\x0c\x0c\x0b\x0b\x20\x00\x41\x84\x7f\x36\x02\x10\x20\x00\x41\x20\x6a\x20\x01\x41\x28\x6a\x10\xf6\x03\x37\x03\x00\x20\x01\x41\x10\x6a\x10\xf6\x03\x21\x09\x20\x00\x20\x04\x36\x02\x38\x20\x00\x41\x28\x6a\x20\x09\x37\x03\x00\x41\x00\x21\x03\x0c\x0b\x0b\x41\xdb\x00\x21\x02\x02\x40\x20\x08\x0e\x03\x05\x02\x00\x05\x0b\x41\xdd\x00\x21\x02\x41\x00\x21\x05\x0c\x04\x0b\x20\x02\x41\x18\x74\x41\x18\x75\x41\x7f\x4a\x0d\x01\x20\x07\x41\x06\x20\x01\x41\x08\x6a\x10\x9e\x04\x22\x02\x41\x80\x80\xc4\x00\x4f\x0d\x02\x20\x02\x41\x01\x72\x41\xa9\xc0\x00\x46\x0d\x04\x20\x01\x28\x02\x08\x21\x04\x0c\x01\x0b\x20\x01\x41\x28\x6a\x41\xdc\x00\x10\xb4\x04\x0d\x07\x20\x07\x41\x02\x6a\x21\x08\x02\x40\x02\x40\x20\x07\x2d\x00\x01\x22\x02\x45\x0d\x00\x20\x02\x41\x76\x6a\x22\x07\x41\x03\x4b\x0d\x01\x20\x07\x0e\x04\x05\x01\x01\x05\x05\x0b\x41\x00\x21\x02\x20\x06\x21\x05\x20\x08\x21\x04\x20\x08\x20\x00\x28\x02\x3c\x4f\x0d\x07\x0c\x03\x0b\x02\x40\x20\x02\x41\x18\x74\x41\x18\x75\x41\x7f\x4c\x0d\x00\x20\x06\x21\x05\x20\x08\x21\x04\x0c\x03\x0b\x02\x40\x41\x07\x41\x06\x41\x00\x20\x04\x41\x06\x20\x01\x41\x0c\x6a\x10\x9e\x04\x22\x02\x41\x01\x72\x41\xa9\xc0\x00\x46\x1b\x20\x02\x41\xff\xff\xc3\x00\x4b\x22\x07\x1b\x22\x05\x0d\x00\x20\x08\x20\x01\x28\x02\x0c\x20\x07\x1b\x21\x04\x0c\x01\x0b\x20\x05\x41\x7a\x6a\x22\x02\x41\x01\x4b\x0d\x05\x20\x02\x0e\x02\x03\x01\x03\x0b\x20\x06\x21\x05\x0c\x01\x0b\x20\x00\x41\xe8\xdc\x02\x41\x00\x10\x8a\x07\x0c\x05\x0b\x20\x01\x41\x28\x6a\x20\x02\x10\xf0\x05\x45\x0d\x01\x0c\x04\x0b\x0b\x20\x00\x41\xff\xdc\x02\x41\x00\x10\x8a\x07\x0c\x02\x0b\x0c\x02\x0b\x20\x00\x41\xcf\xdc\x02\x41\x00\x10\x8a\x07\x0b\x20\x01\x28\x02\x28\x28\x02\x10\x22\x00\x41\x10\x6a\x20\x01\x28\x02\x2c\x20\x00\x28\x02\x04\x11\x00\x00\x20\x01\x41\x00\x36\x02\x2c\x20\x01\x28\x02\x10\x28\x02\x10\x22\x00\x41\x10\x6a\x20\x01\x28\x02\x14\x20\x00\x28\x02\x04\x11\x00\x00\x20\x01\x41\x00\x36\x02\x14\x0b\x20\x01\x41\xc0\x00\x6a\x24\x00\x20\x03\x0b\x8f\x01\x01\x01\x7f\x02\x40\x02\x40\x20\x00\x28\x02\x10\x41\x83\x7f\x47\x0d\x00\x20\x00\x41\x28\x6a\x28\x02\x00\x0d\x00\x20\x00\x41\x20\x6a\x28\x02\x00\x21\x02\x20\x00\x28\x02\x40\x2d\x00\x6e\x41\x01\x71\x45\x0d\x01\x20\x02\x41\xcd\x00\x46\x0d\x00\x20\x02\x41\x3a\x47\x0d\x01\x0b\x20\x00\x41\xb6\xe0\x02\x41\x00\x10\x8a\x07\x41\x00\x0f\x0b\x20\x00\x28\x02\x00\x20\x02\x10\xd9\x03\x21\x02\x02\x40\x02\x40\x02\x40\x20\x01\x45\x0d\x00\x20\x00\x20\x02\x10\xef\x07\x0d\x01\x0b\x20\x00\x10\x80\x07\x45\x0d\x01\x0b\x20\x00\x28\x02\x00\x20\x02\x10\xe4\x02\x41\x00\x21\x02\x0b\x20\x02\x0b\x9e\x01\x01\x06\x7f\x20\x00\x28\x02\x40\x22\x02\x28\x02\x88\x01\x21\x03\x41\x00\x21\x04\x41\x7f\x21\x05\x02\x40\x02\x40\x03\x40\x02\x40\x20\x05\x41\x01\x6a\x22\x05\x20\x03\x48\x0d\x00\x20\x02\x28\x02\x7c\x21\x03\x41\x00\x21\x06\x41\x7f\x21\x05\x41\x00\x21\x04\x03\x40\x20\x05\x41\x01\x6a\x22\x05\x20\x03\x4e\x0d\x04\x20\x02\x28\x02\x74\x20\x04\x6a\x21\x07\x20\x04\x41\x10\x6a\x21\x04\x20\x07\x28\x02\x00\x20\x01\x47\x0d\x00\x0c\x03\x0b\x00\x0b\x20\x02\x28\x02\x80\x01\x20\x04\x6a\x21\x07\x20\x04\x41\x10\x6a\x21\x04\x20\x07\x28\x02\x00\x20\x01\x47\x0d\x00\x0b\x0b\x20\x00\x41\xc0\xe3\x02\x41\x00\x10\x8a\x07\x41\x7f\x21\x06\x0b\x20\x06\x0b\x90\x01\x01\x02\x7f\x20\x00\x41\x26\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x22\x02\x28\x02\x00\x41\x00\x10\x89\x07\x20\x00\x41\x01\x10\x86\x07\x20\x02\x28\x02\x00\x41\x00\x10\xc6\x07\x20\x00\x20\x02\x28\x02\x00\x10\xd6\x07\x22\x03\x10\xd8\x07\x20\x00\x41\x80\x01\x10\x86\x07\x20\x02\x28\x02\x00\x20\x01\x41\x02\x6a\x41\xff\x01\x71\x10\xc7\x07\x20\x00\x41\xea\x00\x41\x7f\x10\xd7\x07\x21\x02\x20\x00\x41\xd1\x00\x10\x86\x07\x20\x00\x41\x8f\x01\x10\x86\x07\x20\x00\x41\xeb\x00\x20\x03\x10\xd7\x07\x1a\x20\x00\x20\x02\x10\xd8\x07\x20\x00\x41\x0e\x10\x86\x07\x20\x00\x41\x0e\x10\x86\x07\x0b\xcf\x27\x02\x0b\x7f\x01\x7e\x23\x00\x41\x20\x6b\x22\x02\x24\x00\x20\x00\x41\x10\x6a\x21\x03\x20\x01\x41\x02\x71\x22\x04\x41\x01\x76\x21\x05\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x28\x02\x10\x22\x06\x41\x80\x01\x6a\x22\x07\x41\x06\x4d\x0d\x00\x20\x06\x41\xd3\x00\x6a\x22\x07\x41\x0b\x4d\x0d\x01\x20\x06\x41\x39\x6a\x22\x07\x41\x09\x4d\x0d\x02\x02\x40\x02\x40\x20\x06\x41\x28\x46\x0d\x00\x02\x40\x20\x06\x41\x2f\x46\x0d\x00\x20\x06\x41\xdb\x00\x46\x0d\x02\x20\x06\x41\xfb\x00\x46\x0d\x02\x0c\x19\x0b\x41\x7f\x21\x06\x0c\x13\x0b\x02\x40\x20\x01\x41\x04\x71\x45\x0d\x00\x41\x00\x21\x07\x20\x00\x41\x00\x41\x01\x10\xd4\x07\x41\xa6\x7f\x47\x0d\x00\x41\x7f\x21\x06\x20\x00\x41\x03\x41\x00\x20\x00\x41\x18\x6a\x28\x02\x00\x20\x00\x41\x14\x6a\x28\x02\x00\x10\x94\x07\x45\x0d\x17\x0c\x1a\x0b\x41\x7f\x21\x06\x20\x00\x10\xe7\x07\x45\x0d\x15\x0c\x19\x0b\x02\x40\x20\x00\x20\x02\x41\x18\x6a\x41\x00\x10\xd4\x07\x41\x3d\x47\x0d\x00\x20\x00\x41\x00\x41\x00\x41\x00\x20\x02\x28\x02\x18\x41\x02\x71\x41\x01\x10\xd5\x07\x41\x00\x4e\x0d\x15\x0c\x18\x0b\x02\x40\x20\x03\x28\x02\x00\x41\xfb\x00\x47\x0d\x00\x41\x00\x21\x06\x20\x02\x41\x00\x36\x02\x1c\x20\x00\x10\x80\x07\x0d\x0a\x20\x00\x41\x0b\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x21\x07\x41\x00\x21\x08\x02\x40\x03\x40\x20\x03\x28\x02\x00\x22\x06\x41\xfd\x00\x46\x0d\x01\x02\x40\x02\x40\x02\x40\x20\x06\x41\xa7\x7f\x47\x0d\x00\x20\x00\x10\x80\x07\x0d\x1d\x20\x00\x10\x9b\x07\x0d\x1d\x20\x00\x41\x07\x10\x86\x07\x20\x00\x41\xd3\x00\x10\x86\x07\x20\x07\x28\x02\x00\x41\x06\x10\xc7\x07\x20\x00\x41\x0e\x10\x86\x07\x20\x00\x41\x0e\x10\x86\x07\x0c\x01\x0b\x20\x00\x28\x02\x14\x21\x06\x20\x00\x28\x02\x18\x21\x04\x20\x00\x20\x02\x41\x1c\x6a\x41\x01\x41\x01\x41\x00\x10\xc9\x07\x22\x01\x41\x00\x48\x0d\x01\x02\x40\x02\x40\x02\x40\x20\x01\x41\x01\x47\x0d\x00\x20\x00\x41\xb8\x01\x10\x86\x07\x20\x00\x20\x02\x28\x02\x1c\x22\x06\x10\x9e\x07\x20\x07\x28\x02\x00\x22\x01\x20\x01\x2f\x01\xbc\x01\x10\x89\x07\x0c\x01\x0b\x02\x40\x20\x03\x28\x02\x00\x41\x28\x47\x0d\x00\x02\x40\x02\x40\x20\x01\x41\x01\x72\x22\x09\x41\x03\x47\x0d\x00\x20\x01\x41\x02\x6a\x21\x0a\x41\x00\x21\x0b\x0c\x01\x0b\x20\x01\x41\x7d\x6a\x41\x00\x20\x01\x41\x7c\x6a\x41\x03\x49\x1b\x21\x0b\x41\x06\x21\x0a\x0b\x20\x00\x20\x0a\x20\x0b\x20\x04\x20\x06\x10\x94\x07\x0d\x04\x02\x40\x02\x40\x20\x02\x28\x02\x1c\x22\x06\x0d\x00\x20\x00\x41\xd5\x00\x10\x86\x07\x0c\x01\x0b\x20\x00\x41\xd4\x00\x10\x86\x07\x20\x00\x20\x06\x10\x9e\x07\x0b\x20\x07\x28\x02\x00\x20\x01\x41\x7f\x6a\x41\x00\x20\x09\x41\x03\x46\x1b\x41\x04\x72\x41\xff\x01\x71\x10\xc7\x07\x0c\x02\x0b\x20\x00\x41\x3a\x10\x98\x07\x0d\x03\x20\x00\x10\x9b\x07\x0d\x03\x02\x40\x02\x40\x20\x02\x28\x02\x1c\x22\x06\x41\xc4\x00\x46\x0d\x00\x20\x06\x0d\x01\x20\x00\x10\xce\x07\x20\x00\x41\xd1\x00\x10\x86\x07\x20\x00\x41\x0e\x10\x86\x07\x41\x00\x21\x06\x0c\x03\x0b\x02\x40\x20\x08\x45\x0d\x00\x20\x00\x41\x9f\xd8\x02\x41\x00\x10\x8a\x07\x41\xc4\x00\x21\x06\x0c\x12\x0b\x20\x00\x41\xcf\x00\x10\x86\x07\x41\x01\x21\x08\x41\xc4\x00\x21\x06\x0c\x02\x0b\x20\x00\x20\x06\x10\x9c\x07\x0b\x20\x00\x41\xcc\x00\x10\x86\x07\x20\x00\x20\x06\x10\x9e\x07\x0b\x20\x00\x28\x02\x00\x20\x06\x10\xe4\x02\x0b\x20\x02\x41\x00\x36\x02\x1c\x20\x03\x28\x02\x00\x41\x2c\x47\x0d\x02\x20\x00\x10\x80\x07\x45\x0d\x01\x0b\x0b\x20\x02\x28\x02\x1c\x21\x06\x0c\x0b\x0b\x41\x00\x21\x06\x20\x00\x41\xfd\x00\x10\x98\x07\x45\x0d\x15\x0c\x0a\x0b\x20\x00\x10\x80\x07\x0d\x17\x41\x00\x21\x06\x02\x40\x03\x40\x20\x06\x41\x1f\x4b\x0d\x01\x20\x03\x28\x02\x00\x22\x01\x41\xdd\x00\x46\x0d\x01\x20\x01\x41\xa7\x7f\x46\x0d\x01\x20\x01\x41\x2c\x46\x0d\x01\x20\x00\x10\x9b\x07\x0d\x19\x20\x06\x41\x01\x6a\x21\x06\x20\x03\x28\x02\x00\x22\x01\x41\xdd\x00\x46\x0d\x00\x20\x01\x41\x2c\x47\x0d\x0a\x20\x00\x10\x80\x07\x45\x0d\x00\x0c\x19\x0b\x00\x0b\x20\x00\x41\x26\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x22\x04\x28\x02\x00\x20\x06\x41\xff\xff\x03\x71\x10\x89\x07\x41\x00\x21\x07\x02\x40\x02\x40\x03\x40\x20\x03\x28\x02\x00\x21\x01\x20\x06\x41\xff\xff\xff\xff\x07\x46\x0d\x01\x02\x40\x02\x40\x02\x40\x20\x01\x41\x2c\x46\x0d\x00\x20\x01\x41\xdd\x00\x46\x0d\x05\x20\x01\x41\xa7\x7f\x47\x0d\x01\x20\x00\x41\x01\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x20\x06\x10\xc6\x07\x0c\x0d\x0b\x41\x01\x21\x07\x20\x06\x41\x01\x6a\x21\x06\x0c\x01\x0b\x20\x00\x10\x9b\x07\x0d\x1b\x20\x00\x41\xcc\x00\x10\x86\x07\x20\x04\x28\x02\x00\x20\x06\x41\x80\x80\x80\x80\x78\x72\x10\xc6\x07\x20\x06\x41\x01\x6a\x21\x06\x41\x00\x21\x07\x20\x00\x28\x02\x10\x41\x2c\x47\x0d\x01\x0b\x20\x00\x10\x80\x07\x45\x0d\x00\x0c\x1a\x0b\x00\x0b\x41\xff\xff\xff\xff\x07\x21\x06\x20\x01\x41\xdd\x00\x46\x0d\x00\x20\x00\x41\x01\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x41\xff\xff\xff\xff\x07\x10\xc6\x07\x0c\x08\x0b\x20\x07\x45\x0d\x08\x20\x00\x41\x11\x10\x86\x07\x20\x00\x41\x01\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x20\x06\x10\xc6\x07\x20\x00\x41\xc3\x00\x10\x86\x07\x20\x00\x41\x30\x10\x9e\x07\x0c\x08\x0b\x41\x7e\x21\x06\x20\x07\x0e\x07\x12\x11\x02\x09\x15\x15\x10\x12\x0b\x20\x07\x0e\x0c\x0c\x0a\x09\x14\x14\x14\x14\x0b\x14\x14\x14\x04\x0c\x0b\x20\x07\x0e\x0a\x0d\x13\x13\x0c\x13\x13\x13\x13\x01\x02\x0d\x0b\x41\x00\x21\x07\x41\x7f\x21\x06\x20\x00\x41\x00\x41\x00\x10\xf6\x07\x0d\x14\x0c\x11\x0b\x41\x7f\x21\x06\x20\x00\x10\x80\x07\x0d\x13\x02\x40\x20\x03\x28\x02\x00\x41\x2e\x47\x0d\x00\x20\x00\x10\x80\x07\x0d\x14\x02\x40\x20\x00\x41\xfb\x00\x10\x92\x07\x0d\x00\x20\x00\x41\xe9\xd9\x02\x41\x00\x10\x8a\x07\x0c\x15\x0b\x02\x40\x20\x00\x28\x02\x44\x0d\x00\x20\x00\x41\xf7\xd9\x02\x41\x00\x10\x8a\x07\x0c\x15\x0b\x20\x00\x10\x80\x07\x0d\x14\x20\x00\x41\x0c\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x41\x06\x10\xc7\x07\x0c\x10\x0b\x20\x00\x41\x28\x10\x98\x07\x0d\x13\x02\x40\x20\x04\x0d\x00\x20\x00\x41\x9d\xda\x02\x41\x00\x10\x8a\x07\x0c\x14\x0b\x20\x00\x10\x9b\x07\x0d\x13\x20\x00\x41\x29\x10\x98\x07\x0d\x13\x20\x00\x41\x35\x10\x86\x07\x41\x00\x21\x07\x41\x01\x21\x05\x0c\x10\x0b\x41\x7f\x21\x06\x20\x00\x10\x80\x07\x0d\x12\x02\x40\x02\x40\x20\x03\x28\x02\x00\x22\x01\x41\xdb\x00\x46\x0d\x00\x20\x01\x41\x2e\x46\x0d\x00\x20\x01\x41\x28\x47\x0d\x01\x41\x02\x21\x07\x20\x00\x28\x02\x40\x28\x02\x54\x0d\x11\x20\x00\x41\xfb\xd8\x02\x41\x00\x10\x8a\x07\x0c\x14\x0b\x02\x40\x20\x00\x41\xc0\x00\x6a\x22\x01\x28\x02\x00\x28\x02\x58\x0d\x00\x20\x00\x41\xb0\xd9\x02\x41\x00\x10\x8a\x07\x0c\x14\x0b\x20\x00\x41\xb8\x01\x10\x86\x07\x20\x00\x41\x08\x10\x9e\x07\x41\x00\x21\x07\x20\x01\x28\x02\x00\x41\x00\x10\x89\x07\x20\x00\x41\xb8\x01\x10\x86\x07\x20\x00\x41\xf3\x00\x10\x9e\x07\x20\x01\x28\x02\x00\x41\x00\x10\x89\x07\x20\x00\x41\x34\x10\x86\x07\x0c\x10\x0b\x20\x00\x41\xd2\xd9\x02\x41\x00\x10\x8a\x07\x0c\x12\x0b\x41\x7f\x21\x06\x20\x00\x10\x80\x07\x0d\x11\x02\x40\x20\x03\x28\x02\x00\x41\x2e\x47\x0d\x00\x20\x00\x10\x80\x07\x0d\x12\x02\x40\x20\x00\x41\xd6\x00\x10\x92\x07\x0d\x00\x20\x00\x41\xc1\xd8\x02\x41\x00\x10\x8a\x07\x0c\x13\x0b\x02\x40\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x28\x02\x50\x0d\x00\x20\x00\x41\xd2\xd8\x02\x41\x00\x10\x8a\x07\x0c\x13\x0b\x20\x00\x10\x80\x07\x0d\x12\x20\x00\x41\xb8\x01\x10\x86\x07\x20\x00\x41\xf1\x00\x10\x9e\x07\x41\x00\x21\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x41\x00\x10\x89\x07\x0c\x0f\x0b\x20\x00\x41\x00\x10\xf1\x07\x0d\x11\x41\x01\x21\x05\x02\x40\x20\x03\x28\x02\x00\x41\x28\x47\x0d\x00\x41\x01\x21\x07\x0c\x0f\x0b\x20\x00\x41\x11\x10\x86\x07\x20\x00\x41\x21\x10\x86\x07\x41\x00\x21\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x41\x00\x10\x89\x07\x0c\x0e\x0b\x02\x40\x03\x40\x02\x40\x02\x40\x02\x40\x20\x03\x28\x02\x00\x22\x06\x41\xa7\x7f\x46\x0d\x00\x41\x8f\x01\x21\x01\x20\x06\x41\x2c\x47\x0d\x01\x41\x01\x21\x07\x0c\x02\x0b\x20\x00\x10\x80\x07\x0d\x13\x41\xd2\x00\x21\x01\x20\x00\x10\x9b\x07\x45\x0d\x01\x0c\x13\x0b\x20\x06\x41\xdd\x00\x46\x0d\x02\x20\x00\x10\x9b\x07\x0d\x12\x20\x00\x41\xd1\x00\x10\x86\x07\x41\x00\x21\x07\x0b\x20\x00\x20\x01\x10\x86\x07\x20\x00\x28\x02\x10\x41\x2c\x47\x0d\x01\x20\x00\x10\x80\x07\x45\x0d\x00\x0c\x11\x0b\x00\x0b\x02\x40\x20\x07\x45\x0d\x00\x20\x00\x41\x12\x10\x86\x07\x20\x00\x41\xc3\x00\x10\x86\x07\x20\x00\x41\x30\x10\x9e\x07\x0c\x01\x0b\x20\x00\x41\x0e\x10\x86\x07\x0b\x20\x00\x41\xdd\x00\x10\x98\x07\x45\x0d\x0b\x0c\x0e\x0b\x20\x00\x28\x02\x00\x20\x06\x10\xe4\x02\x0c\x0d\x0b\x02\x40\x20\x00\x41\x28\x6a\x28\x02\x00\x45\x0d\x00\x20\x00\x10\xa1\x07\x0c\x0d\x0b\x02\x40\x20\x01\x41\x04\x71\x22\x01\x45\x0d\x00\x20\x00\x41\x01\x10\x93\x07\x41\xa6\x7f\x47\x0d\x00\x41\x00\x21\x07\x41\x7f\x21\x06\x20\x00\x41\x03\x41\x00\x20\x00\x41\x18\x6a\x28\x02\x00\x20\x00\x41\x14\x6a\x28\x02\x00\x10\x94\x07\x45\x0d\x0b\x0c\x0e\x0b\x02\x40\x02\x40\x20\x00\x41\x85\x01\x10\x92\x07\x45\x0d\x00\x20\x00\x41\x01\x10\x93\x07\x41\x0a\x46\x0d\x00\x20\x00\x41\x14\x6a\x28\x02\x00\x21\x04\x20\x00\x41\x18\x6a\x28\x02\x00\x21\x0a\x41\x7f\x21\x06\x20\x00\x10\x80\x07\x0d\x0f\x02\x40\x20\x03\x28\x02\x00\x22\x0b\x41\x47\x47\x0d\x00\x20\x00\x41\x02\x41\x02\x20\x0a\x20\x04\x10\x94\x07\x45\x0d\x0c\x0c\x10\x0b\x41\x85\x01\x21\x07\x20\x01\x45\x0d\x01\x02\x40\x02\x40\x20\x0b\x41\x28\x47\x0d\x00\x20\x00\x41\x00\x41\x01\x10\xd4\x07\x41\xa6\x7f\x46\x0d\x01\x20\x03\x28\x02\x00\x21\x0b\x0b\x20\x0b\x41\x83\x7f\x47\x0d\x02\x20\x00\x28\x02\x28\x0d\x02\x20\x00\x41\x01\x10\x93\x07\x41\xa6\x7f\x47\x0d\x02\x0b\x20\x00\x41\x03\x41\x02\x20\x0a\x20\x04\x10\x94\x07\x45\x0d\x0b\x0c\x0f\x0b\x41\xcd\x00\x21\x07\x02\x40\x02\x40\x20\x00\x28\x02\x20\x22\x06\x41\xcd\x00\x46\x0d\x00\x20\x00\x28\x02\x00\x20\x06\x10\xd9\x03\x21\x07\x0c\x01\x0b\x20\x00\x28\x02\x40\x28\x02\x5c\x0d\x00\x20\x00\x41\xde\xd7\x02\x41\x00\x10\x8a\x07\x0c\x0e\x0b\x41\x7f\x21\x06\x20\x00\x10\x80\x07\x0d\x0e\x0b\x20\x00\x41\xb8\x01\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x22\x06\x28\x02\x00\x20\x07\x10\xc6\x07\x20\x06\x28\x02\x00\x22\x06\x20\x06\x2f\x01\xbc\x01\x10\x89\x07\x0c\x09\x0b\x41\x7f\x21\x06\x20\x00\x10\x80\x07\x0d\x0c\x20\x00\x41\x0a\x10\x86\x07\x0c\x08\x0b\x41\x7f\x21\x06\x20\x00\x10\x80\x07\x0d\x0b\x20\x00\x41\x09\x10\x86\x07\x0c\x07\x0b\x41\x7f\x21\x06\x20\x00\x10\x80\x07\x0d\x0a\x20\x00\x41\xb8\x01\x10\x86\x07\x20\x00\x41\x08\x10\x9e\x07\x41\x00\x21\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x41\x00\x10\x89\x07\x0c\x07\x0b\x41\x7f\x21\x06\x20\x00\x10\x80\x07\x0d\x09\x20\x00\x41\x07\x10\x86\x07\x0c\x05\x0b\x41\x00\x21\x07\x41\x7f\x21\x06\x20\x00\x41\x01\x41\x00\x10\x95\x07\x45\x0d\x05\x0c\x08\x0b\x41\x00\x21\x07\x41\x7f\x21\x06\x20\x00\x41\x02\x41\x00\x20\x00\x41\x18\x6a\x28\x02\x00\x20\x00\x41\x14\x6a\x28\x02\x00\x10\x94\x07\x45\x0d\x04\x0c\x07\x0b\x20\x00\x20\x00\x28\x02\x38\x20\x06\x6a\x36\x02\x38\x02\x40\x20\x00\x28\x02\x00\x28\x02\xfc\x01\x0d\x00\x20\x00\x41\xc5\xd7\x02\x41\x00\x10\x8a\x07\x0c\x06\x0b\x41\x7f\x21\x06\x20\x00\x10\xed\x07\x0d\x06\x41\x00\x21\x04\x20\x00\x20\x00\x41\x20\x6a\x22\x01\x29\x03\x00\x41\x00\x10\xf5\x07\x1a\x02\x40\x20\x00\x28\x02\x00\x22\x07\x20\x01\x29\x03\x00\x20\x00\x41\x28\x6a\x29\x03\x00\x20\x07\x28\x02\xfc\x01\x11\x19\x00\x22\x0d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x02\x40\x20\x00\x28\x02\x40\x22\x03\x45\x0d\x00\x20\x03\x28\x02\x68\x41\x00\x47\x41\x01\x74\x21\x04\x0b\x20\x00\x28\x02\x00\x22\x03\x20\x03\x28\x02\x10\x29\x03\x80\x01\x20\x00\x28\x02\x0c\x20\x00\x41\x14\x6a\x28\x02\x00\x20\x04\x10\xc8\x02\x0c\x07\x0b\x20\x00\x20\x0d\x41\x00\x10\xf5\x07\x21\x01\x20\x00\x28\x02\x00\x20\x0d\x10\xcd\x01\x20\x01\x0d\x06\x20\x00\x41\x33\x10\x86\x07\x20\x00\x10\x80\x07\x45\x0d\x02\x0c\x06\x0b\x41\x7f\x21\x06\x20\x00\x20\x00\x41\x20\x6a\x29\x03\x00\x41\x01\x10\xf5\x07\x0d\x05\x20\x00\x10\x80\x07\x45\x0d\x01\x0c\x05\x0b\x02\x40\x02\x40\x02\x40\x20\x00\x41\x20\x6a\x29\x03\x00\x22\x0d\x42\x20\x88\xa7\x22\x06\x41\x77\x46\x0d\x00\x20\x06\x0d\x01\x20\x00\x41\x01\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x20\x0d\xa7\x10\xc6\x07\x0c\x02\x0b\x20\x00\x20\x0d\x41\x00\x10\xf5\x07\x41\x00\x48\x0d\x05\x20\x00\x41\x28\x6a\x28\x02\x00\x21\x06\x20\x00\x41\x01\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x20\x06\x10\xc6\x07\x20\x00\x41\xb1\x01\x10\x86\x07\x0c\x01\x0b\x20\x00\x20\x0d\x41\x00\x10\xf5\x07\x41\x00\x48\x0d\x04\x0b\x41\x7f\x21\x06\x20\x00\x10\x80\x07\x0d\x04\x0b\x41\x00\x21\x07\x0b\x20\x02\x41\x7f\x36\x02\x1c\x20\x00\x41\xc0\x00\x6a\x21\x0a\x03\x40\x20\x0a\x28\x02\x00\x21\x04\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x28\x02\x10\x22\x06\x41\xa9\x7f\x47\x0d\x00\x20\x00\x10\x80\x07\x0d\x0c\x20\x03\x28\x02\x00\x21\x06\x02\x40\x20\x05\x45\x0d\x00\x41\x01\x21\x01\x20\x06\x41\x28\x46\x0d\x02\x0b\x41\x01\x21\x01\x20\x06\x41\xdb\x00\x47\x0d\x04\x0c\x09\x0b\x02\x40\x20\x07\x0d\x00\x20\x06\x41\x82\x7f\x47\x0d\x00\x41\x00\x21\x01\x41\x03\x21\x09\x20\x02\x28\x02\x1c\x41\x00\x48\x0d\x02\x20\x00\x41\xde\xda\x02\x41\x00\x10\x8a\x07\x0c\x0c\x0b\x20\x05\x45\x0d\x02\x41\x00\x21\x01\x20\x06\x41\x28\x47\x0d\x02\x0b\x20\x00\x10\x80\x07\x0d\x0a\x41\x00\x21\x09\x41\x00\x21\x0b\x20\x07\x0d\x06\x0b\x41\x00\x21\x0b\x41\x01\x21\x07\x20\x04\x28\x02\x98\x02\x22\x06\x41\x00\x48\x0d\x04\x20\x04\x28\x02\x80\x02\x20\x06\x6a\x22\x0c\x2d\x00\x00\x22\x08\x41\xb9\x7f\x6a\x22\x06\x41\x03\x4d\x0d\x03\x02\x40\x02\x40\x20\x08\x41\xbe\x01\x46\x0d\x00\x20\x08\x41\xb8\x01\x46\x0d\x01\x20\x08\x41\xc1\x00\x47\x0d\x06\x20\x0c\x41\xc2\x00\x3a\x00\x00\x41\x02\x21\x07\x41\xc1\x00\x21\x0b\x0c\x06\x0b\x20\x0c\x41\xbf\x01\x3a\x00\x00\x41\x02\x21\x07\x41\xbe\x01\x21\x0b\x0c\x05\x0b\x41\x01\x21\x07\x02\x40\x20\x09\x20\x01\x72\x0d\x00\x41\x31\x21\x0b\x20\x0c\x41\x01\x6a\x28\x00\x00\x41\x3a\x46\x0d\x05\x0b\x20\x0c\x41\x05\x6a\x2f\x00\x00\x21\x06\x20\x04\x21\x0b\x03\x40\x02\x40\x20\x0b\x0d\x00\x20\x08\x21\x0b\x0c\x06\x0b\x20\x0b\x28\x02\xcc\x01\x20\x06\x41\x03\x74\x6a\x41\x04\x6a\x21\x06\x02\x40\x02\x40\x03\x40\x20\x06\x28\x02\x00\x22\x06\x41\x00\x48\x0d\x01\x20\x0b\x28\x02\x74\x20\x06\x41\x04\x74\x6a\x22\x06\x28\x02\x00\x41\xd4\x00\x46\x0d\x02\x20\x06\x41\x08\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x20\x0b\x28\x02\x0c\x21\x06\x20\x0b\x28\x02\x04\x21\x0b\x0c\x01\x0b\x0b\x41\xbc\x01\x21\x0b\x20\x0c\x41\xbc\x01\x3a\x00\x00\x0c\x04\x0b\x41\x00\x21\x01\x20\x06\x41\xdb\x00\x46\x0d\x05\x20\x06\x41\x2e\x47\x0d\x01\x20\x00\x10\x80\x07\x0d\x08\x20\x03\x28\x02\x00\x21\x06\x41\x00\x21\x01\x0b\x02\x40\x02\x40\x20\x06\x41\xab\x7f\x47\x0d\x00\x02\x40\x20\x04\x28\x02\x98\x02\x22\x06\x41\x00\x48\x0d\x00\x20\x04\x28\x02\x80\x02\x20\x06\x6a\x2d\x00\x00\x41\x34\x47\x0d\x00\x20\x00\x41\xaa\xdb\x02\x41\x00\x10\x8a\x07\x0c\x0a\x0b\x02\x40\x20\x01\x45\x0d\x00\x20\x00\x20\x02\x41\x1c\x6a\x41\x01\x10\xf7\x07\x0b\x20\x00\x41\xbe\x01\x10\x86\x07\x20\x00\x20\x00\x28\x02\x20\x10\x9e\x07\x20\x0a\x28\x02\x00\x22\x06\x20\x06\x2f\x01\xbc\x01\x10\x89\x07\x0c\x01\x0b\x02\x40\x20\x06\x41\x83\x7f\x46\x0d\x00\x20\x06\x41\xd3\x00\x6a\x41\x2e\x49\x0d\x00\x20\x00\x41\xd4\xdb\x02\x41\x00\x10\x8a\x07\x0c\x09\x0b\x02\x40\x20\x04\x28\x02\x98\x02\x22\x06\x41\x00\x48\x0d\x00\x20\x04\x28\x02\x80\x02\x20\x06\x6a\x2d\x00\x00\x41\x34\x47\x0d\x00\x20\x00\x20\x00\x28\x02\x00\x20\x00\x28\x02\x20\x10\xdd\x01\x22\x0d\x41\x01\x10\xf5\x07\x21\x06\x20\x00\x28\x02\x00\x20\x0d\x10\xcd\x01\x20\x06\x0d\x09\x20\x00\x41\xca\x00\x10\x86\x07\x0c\x01\x0b\x02\x40\x20\x01\x45\x0d\x00\x20\x00\x20\x02\x41\x1c\x6a\x41\x01\x10\xf7\x07\x0b\x20\x00\x41\xc1\x00\x10\x86\x07\x20\x00\x20\x00\x28\x02\x20\x10\x9e\x07\x0b\x41\x7f\x21\x06\x20\x00\x10\x80\x07\x45\x0d\x05\x0c\x08\x0b\x41\x00\x21\x06\x20\x02\x28\x02\x1c\x22\x03\x41\x00\x48\x0d\x07\x20\x00\x20\x03\x10\xd8\x07\x0c\x07\x0b\x02\x40\x02\x40\x20\x06\x0e\x04\x01\x02\x02\x00\x01\x0b\x41\xc7\x00\x21\x0b\x20\x0c\x41\xc7\x00\x3a\x00\x00\x41\x02\x21\x07\x0c\x01\x0b\x20\x0c\x41\xc8\x00\x3a\x00\x00\x41\x02\x21\x07\x41\xc7\x00\x21\x0b\x0b\x02\x40\x20\x01\x45\x0d\x00\x20\x00\x20\x02\x41\x1c\x6a\x20\x07\x10\xf7\x07\x0b\x20\x09\x21\x07\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x07\x41\x03\x47\x0d\x00\x20\x00\x41\x01\x20\x02\x41\x14\x6a\x10\xf6\x07\x0d\x0c\x0c\x01\x0b\x02\x40\x02\x40\x20\x07\x41\x02\x47\x22\x09\x0d\x00\x20\x00\x41\xb8\x01\x10\x86\x07\x20\x00\x41\xf2\x00\x10\x9e\x07\x20\x0a\x28\x02\x00\x41\x00\x10\x89\x07\x20\x00\x41\x34\x10\x86\x07\x20\x00\x41\xb8\x01\x10\x86\x07\x20\x00\x41\xf1\x00\x10\x9e\x07\x20\x0a\x28\x02\x00\x41\x00\x10\x89\x07\x0c\x01\x0b\x20\x07\x41\x01\x47\x0d\x00\x20\x00\x41\x11\x10\x86\x07\x0b\x41\x00\x21\x06\x20\x02\x41\x00\x36\x02\x14\x02\x40\x02\x40\x02\x40\x03\x40\x20\x03\x28\x02\x00\x22\x01\x41\x29\x46\x0d\x03\x02\x40\x20\x06\x41\xff\xff\x03\x47\x0d\x00\x20\x02\x41\xff\xff\x03\x36\x02\x14\x20\x00\x41\x92\xdb\x02\x41\x00\x10\x8a\x07\x0c\x10\x0b\x20\x01\x41\xa7\x7f\x46\x0d\x01\x02\x40\x20\x00\x10\x9b\x07\x0d\x00\x20\x03\x28\x02\x00\x41\x29\x46\x0d\x03\x20\x06\x41\x01\x6a\x21\x06\x20\x00\x41\x2c\x10\x98\x07\x45\x0d\x01\x0b\x0b\x20\x02\x20\x06\x36\x02\x14\x0c\x0e\x0b\x20\x02\x20\x06\x36\x02\x14\x20\x00\x41\x26\x10\x86\x07\x20\x0a\x28\x02\x00\x20\x06\x41\xff\xff\x03\x71\x10\x89\x07\x20\x00\x41\x01\x10\x86\x07\x20\x0a\x28\x02\x00\x20\x06\x10\xc6\x07\x02\x40\x03\x40\x02\x40\x02\x40\x20\x03\x28\x02\x00\x22\x06\x41\xa7\x7f\x46\x0d\x00\x20\x06\x41\x29\x46\x0d\x03\x20\x00\x10\x9b\x07\x0d\x11\x20\x00\x41\xd1\x00\x10\x86\x07\x20\x00\x41\x8f\x01\x10\x86\x07\x0c\x01\x0b\x41\x7f\x21\x06\x20\x00\x10\x80\x07\x0d\x11\x20\x00\x10\x9b\x07\x0d\x11\x20\x00\x41\xd2\x00\x10\x86\x07\x0b\x20\x03\x28\x02\x00\x41\x29\x46\x0d\x01\x41\x7f\x21\x06\x20\x00\x41\x2c\x10\x98\x07\x45\x0d\x00\x0c\x10\x0b\x00\x0b\x20\x00\x10\x80\x07\x0d\x0d\x20\x00\x41\x0e\x10\x86\x07\x20\x0b\x41\xc4\x7e\x6a\x22\x06\x41\x02\x4d\x0d\x03\x02\x40\x20\x0b\x41\x31\x46\x0d\x00\x20\x0b\x41\xc7\x00\x46\x0d\x0a\x20\x0b\x41\xc1\x00\x47\x0d\x08\x0c\x0a\x0b\x20\x00\x41\x32\x10\x86\x07\x20\x0a\x28\x02\x00\x20\x04\x2f\x01\xbc\x01\x10\x89\x07\x0c\x08\x0b\x20\x06\x41\x01\x6a\x21\x06\x0b\x20\x02\x20\x06\x36\x02\x14\x20\x00\x10\x80\x07\x0d\x0b\x0b\x20\x0b\x41\xc4\x7e\x6a\x22\x06\x41\x02\x4d\x0d\x01\x02\x40\x20\x0b\x41\x31\x46\x0d\x00\x20\x0b\x41\xc7\x00\x46\x0d\x04\x20\x0b\x41\xc1\x00\x47\x0d\x03\x0c\x04\x0b\x20\x00\x41\x31\x10\x86\x07\x20\x0a\x28\x02\x00\x20\x02\x2f\x01\x14\x10\x89\x07\x20\x0a\x28\x02\x00\x20\x04\x2f\x01\xbc\x01\x10\x89\x07\x0c\x05\x0b\x20\x06\x0e\x03\x05\x03\x05\x05\x0b\x20\x06\x0e\x03\x01\x00\x01\x01\x0b\x02\x40\x20\x07\x41\x7f\x6a\x22\x06\x41\x01\x4b\x0d\x00\x02\x40\x02\x40\x20\x06\x0e\x02\x01\x00\x01\x0b\x20\x00\x41\x21\x10\x86\x07\x20\x0a\x28\x02\x00\x20\x02\x2f\x01\x14\x10\x89\x07\x20\x00\x41\x11\x10\x86\x07\x20\x00\x41\xbd\x01\x10\x86\x07\x20\x00\x41\x08\x10\x9e\x07\x41\x00\x21\x07\x20\x0a\x28\x02\x00\x41\x00\x10\x89\x07\x20\x00\x10\xd2\x07\x0c\x07\x0b\x20\x00\x41\x21\x10\x86\x07\x20\x0a\x28\x02\x00\x20\x02\x2f\x01\x14\x10\x89\x07\x41\x00\x21\x07\x0c\x06\x0b\x20\x00\x41\x22\x10\x86\x07\x20\x0a\x28\x02\x00\x20\x02\x2f\x01\x14\x10\x89\x07\x41\x00\x21\x07\x0c\x05\x0b\x20\x00\x41\x24\x10\x86\x07\x20\x0a\x28\x02\x00\x20\x02\x2f\x01\x14\x10\x89\x07\x41\x00\x21\x07\x0c\x04\x0b\x02\x40\x20\x09\x0d\x00\x20\x00\x41\x27\x10\x86\x07\x20\x0a\x28\x02\x00\x41\x01\x10\x89\x07\x20\x00\x41\x11\x10\x86\x07\x20\x00\x41\xbd\x01\x10\x86\x07\x20\x00\x41\x08\x10\x9e\x07\x41\x00\x21\x07\x20\x0a\x28\x02\x00\x41\x00\x10\x89\x07\x20\x00\x10\xd2\x07\x0c\x04\x0b\x02\x40\x20\x07\x41\x01\x47\x0d\x00\x20\x00\x41\x18\x10\x86\x07\x20\x00\x41\x27\x10\x86\x07\x20\x0a\x28\x02\x00\x41\x01\x10\x89\x07\x41\x00\x21\x07\x0c\x04\x0b\x20\x00\x41\x06\x10\x86\x07\x20\x00\x41\x1b\x10\x86\x07\x20\x00\x41\x27\x10\x86\x07\x41\x00\x21\x07\x20\x0a\x28\x02\x00\x41\x00\x10\x89\x07\x0c\x03\x0b\x20\x04\x41\x01\x36\x02\x44\x41\x00\x21\x07\x0c\x02\x0b\x20\x00\x41\x18\x10\x86\x07\x20\x00\x41\x27\x10\x86\x07\x20\x0a\x28\x02\x00\x20\x07\x41\x01\x46\x10\x89\x07\x41\x00\x21\x07\x0c\x01\x0b\x41\x00\x21\x0b\x02\x40\x20\x04\x28\x02\x98\x02\x22\x06\x41\x00\x48\x0d\x00\x20\x04\x28\x02\x80\x02\x20\x06\x6a\x2d\x00\x00\x21\x0b\x0b\x02\x40\x20\x01\x45\x0d\x00\x20\x00\x20\x02\x41\x1c\x6a\x41\x01\x10\xf7\x07\x0b\x41\x7f\x21\x06\x20\x00\x10\x80\x07\x0d\x03\x20\x00\x10\xe6\x07\x0d\x03\x20\x00\x41\xdd\x00\x10\x98\x07\x0d\x03\x02\x40\x20\x0b\x41\x34\x47\x0d\x00\x20\x00\x41\xca\x00\x10\x86\x07\x0c\x01\x0b\x20\x00\x41\xc7\x00\x10\x86\x07\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x38\x21\x03\x20\x02\x20\x00\x41\x18\x6a\x28\x02\x00\x22\x06\x36\x02\x04\x20\x02\x20\x03\x20\x06\x6b\x36\x02\x00\x20\x00\x41\xb7\xda\x02\x20\x02\x10\x8a\x07\x0b\x41\x7f\x21\x06\x0b\x20\x02\x41\x20\x6a\x24\x00\x20\x06\x0b\xe9\x01\x01\x03\x7f\x02\x40\x02\x40\x02\x40\x20\x01\x41\xa2\x7f\x47\x0d\x00\x41\x7f\x21\x03\x20\x00\x41\x08\x20\x02\x10\xf3\x07\x45\x0d\x01\x0c\x02\x0b\x41\x7f\x21\x03\x20\x00\x41\xa2\x7f\x20\x02\x10\xf2\x07\x0d\x01\x0b\x41\x00\x21\x03\x20\x00\x28\x02\x10\x20\x01\x47\x0d\x00\x41\xe9\x00\x41\xea\x00\x20\x01\x41\xa2\x7f\x46\x1b\x21\x04\x20\x02\x41\x7b\x71\x21\x05\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x10\xd6\x07\x21\x02\x03\x40\x41\x7f\x21\x03\x20\x00\x10\x80\x07\x0d\x01\x20\x00\x41\x11\x10\x86\x07\x20\x00\x20\x04\x20\x02\x10\xd7\x07\x1a\x20\x00\x41\x0e\x10\x86\x07\x02\x40\x02\x40\x20\x01\x41\xa2\x7f\x47\x0d\x00\x20\x00\x41\x08\x20\x05\x10\xf3\x07\x45\x0d\x01\x0c\x03\x0b\x20\x00\x41\xa2\x7f\x20\x05\x10\xf2\x07\x0d\x02\x0b\x20\x00\x28\x02\x10\x22\x03\x20\x01\x46\x0d\x00\x0b\x02\x40\x20\x03\x41\xa8\x7f\x47\x0d\x00\x20\x00\x41\xe9\xde\x02\x41\x00\x10\x8a\x07\x41\x7f\x0f\x0b\x20\x00\x20\x02\x10\xd8\x07\x41\x00\x21\x03\x0b\x20\x03\x0b\xf3\x03\x01\x06\x7f\x02\x40\x20\x01\x0d\x00\x20\x00\x20\x02\x41\x04\x71\x41\x08\x72\x10\xf4\x07\x0f\x0b\x41\x7f\x21\x03\x02\x40\x02\x40\x20\x00\x20\x01\x41\x7f\x6a\x22\x04\x20\x02\x10\xf3\x07\x0d\x00\x20\x02\x41\x7b\x71\x21\x05\x20\x02\x41\x01\x71\x21\x06\x20\x01\x41\x7f\x6a\x22\x07\x41\x07\x4b\x21\x08\x03\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x08\x0d\x00\x20\x00\x28\x02\x10\x21\x01\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x07\x0e\x08\x00\x01\x02\x03\x04\x05\x06\x07\x00\x0b\x02\x40\x20\x01\x41\x25\x46\x0d\x00\x41\x9a\x01\x21\x02\x20\x01\x41\x2a\x46\x0d\x0d\x20\x01\x41\x2f\x47\x0d\x10\x41\x9b\x01\x21\x02\x0c\x0d\x0b\x41\xb2\x7f\x41\x9c\x7f\x20\x00\x28\x02\x40\x2d\x00\x6e\x41\x04\x71\x1b\x21\x02\x0c\x0c\x0b\x41\x00\x21\x03\x20\x01\x41\x55\x6a\x22\x01\x41\x02\x4b\x0d\x0d\x41\x9d\x01\x21\x02\x02\x40\x20\x01\x0e\x03\x0c\x0e\x00\x0c\x0b\x41\x9e\x01\x21\x02\x0c\x0b\x0b\x20\x01\x41\xe9\x00\x6a\x22\x01\x41\x03\x4f\x0d\x0d\x20\x01\x41\xa0\x7f\x6a\x21\x02\x0c\x0a\x0b\x41\x00\x21\x03\x20\x01\x41\xe5\x00\x6a\x22\x02\x41\x02\x4d\x0d\x05\x20\x01\x41\xc7\x00\x6a\x22\x02\x41\x01\x4d\x0d\x06\x20\x01\x41\x44\x6a\x22\x01\x41\x02\x4b\x0d\x0b\x41\xa3\x01\x21\x02\x02\x40\x20\x01\x0e\x03\x0a\x0c\x00\x0a\x0b\x41\xa5\x01\x21\x02\x0c\x09\x0b\x20\x01\x41\xe2\x00\x6a\x22\x01\x41\x04\x4f\x0d\x0b\x41\xa9\xd7\xaa\xe5\x7a\x20\x01\x41\x03\x74\x76\x21\x02\x0c\x08\x0b\x41\xad\x01\x21\x02\x20\x01\x41\x26\x47\x0d\x0a\x0c\x07\x0b\x41\xae\x01\x21\x02\x20\x01\x41\xde\x00\x47\x0d\x09\x0c\x06\x0b\x41\xaf\x01\x21\x02\x20\x01\x41\xfc\x00\x47\x0d\x08\x0c\x05\x0b\x10\x40\x00\x0b\x20\x02\x0e\x03\x02\x05\x01\x02\x0b\x02\x40\x02\x40\x20\x02\x0e\x02\x00\x01\x00\x0b\x41\xa8\x01\x21\x02\x20\x06\x0d\x03\x0c\x05\x0b\x41\xa7\x01\x21\x02\x0c\x02\x0b\x41\xa6\x01\x21\x02\x0c\x01\x0b\x41\xa4\x01\x21\x02\x0b\x41\x7f\x21\x03\x20\x00\x10\x80\x07\x0d\x01\x20\x00\x20\x04\x20\x05\x10\xf3\x07\x0d\x01\x20\x00\x20\x02\x41\xff\x01\x71\x10\x86\x07\x0c\x00\x0b\x00\x0b\x20\x03\x0f\x0b\x41\x00\x0b\xdd\x08\x02\x06\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x28\x02\x10\x22\x03\x41\xcb\x00\x6a\x22\x04\x41\x02\x4d\x0d\x00\x02\x40\x02\x40\x20\x03\x41\xeb\x00\x6a\x41\x02\x49\x0d\x00\x20\x03\x41\x55\x6a\x22\x04\x41\x02\x4d\x0d\x03\x20\x03\x41\x5a\x46\x0d\x01\x20\x03\x41\xfe\x00\x46\x0d\x0e\x20\x03\x41\x21\x47\x0d\x04\x0c\x0e\x0b\x20\x00\x10\x80\x07\x0d\x06\x20\x00\x41\x00\x10\xf4\x07\x0d\x06\x20\x00\x20\x02\x41\x0c\x6a\x20\x02\x41\x08\x6a\x20\x02\x20\x02\x41\x04\x6a\x41\x00\x41\x01\x20\x03\x10\xe2\x07\x0d\x06\x20\x00\x20\x03\x41\x79\x6a\x41\xff\x01\x71\x10\x86\x07\x20\x00\x20\x02\x28\x02\x0c\x20\x02\x28\x02\x08\x20\x02\x28\x02\x00\x20\x02\x28\x02\x04\x41\x02\x41\x00\x10\xe3\x07\x0c\x04\x0b\x02\x40\x20\x00\x28\x02\x40\x22\x03\x2d\x00\x6c\x41\x02\x71\x0d\x00\x20\x00\x41\xc2\xd6\x02\x41\x00\x10\x8a\x07\x0c\x06\x0b\x02\x40\x20\x03\x28\x02\x64\x0d\x00\x20\x00\x41\xdd\xd6\x02\x41\x00\x10\x8a\x07\x0c\x06\x0b\x41\x7f\x21\x04\x20\x00\x10\x80\x07\x0d\x0e\x20\x00\x41\x10\x10\xf4\x07\x0d\x0e\x20\x00\x41\x8b\x01\x10\x86\x07\x0c\x0d\x0b\x20\x04\x0e\x03\x03\x0b\x0a\x03\x0b\x20\x04\x0e\x03\x0a\x00\x0a\x0a\x0b\x41\x7f\x21\x04\x20\x00\x20\x01\x41\x04\x71\x41\x02\x72\x10\xf1\x07\x0d\x0b\x20\x00\x28\x02\x30\x0d\x00\x20\x00\x28\x02\x10\x22\x03\x41\xeb\x00\x6a\x41\x01\x4b\x0d\x00\x20\x00\x20\x02\x41\x0c\x6a\x20\x02\x41\x08\x6a\x20\x02\x20\x02\x41\x04\x6a\x41\x00\x41\x01\x20\x03\x10\xe2\x07\x0d\x0b\x20\x00\x20\x03\x41\x7b\x6a\x41\xff\x01\x71\x10\x86\x07\x20\x00\x20\x02\x28\x02\x0c\x20\x02\x28\x02\x08\x20\x02\x28\x02\x00\x20\x02\x28\x02\x04\x41\x03\x41\x00\x10\xe3\x07\x20\x00\x10\x80\x07\x0d\x0b\x0b\x41\x00\x21\x04\x20\x01\x41\x18\x71\x45\x0d\x0a\x20\x00\x28\x02\x10\x41\x7e\x71\x41\xa4\x7f\x47\x0d\x0a\x02\x40\x20\x01\x41\x10\x71\x45\x0d\x00\x20\x00\x28\x02\x40\x2d\x00\x6e\x41\x04\x71\x0d\x00\x20\x00\x28\x02\x00\x41\xf9\xd6\x02\x41\x00\x10\xc5\x04\x0c\x02\x0b\x41\x7f\x21\x04\x20\x00\x10\x80\x07\x0d\x0a\x20\x00\x41\x08\x10\xf4\x07\x0d\x0a\x20\x00\x41\x9f\x01\x10\x86\x07\x0c\x09\x0b\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x21\x03\x41\x7f\x21\x04\x20\x00\x10\x80\x07\x0d\x09\x20\x00\x41\x10\x10\xf4\x07\x0d\x09\x41\x00\x21\x04\x20\x03\x28\x02\x98\x02\x22\x01\x41\x00\x48\x0d\x02\x20\x03\x28\x02\x80\x02\x20\x01\x6a\x22\x05\x2d\x00\x00\x22\x06\x41\xb9\x7f\x6a\x22\x07\x41\x03\x4d\x0d\x01\x02\x40\x20\x06\x41\xbe\x01\x46\x0d\x00\x02\x40\x20\x06\x41\xb8\x01\x46\x0d\x00\x20\x06\x41\xc1\x00\x47\x0d\x04\x41\x7f\x21\x04\x20\x03\x41\x7f\x36\x02\x98\x02\x20\x03\x41\x84\x02\x6a\x20\x01\x36\x02\x00\x20\x00\x20\x00\x28\x02\x00\x20\x05\x28\x00\x01\x22\x03\x10\xdd\x01\x22\x08\x41\x01\x10\xf5\x07\x21\x01\x20\x00\x28\x02\x00\x20\x08\x10\xcd\x01\x20\x00\x28\x02\x00\x20\x03\x10\xe4\x02\x20\x01\x45\x0d\x07\x0c\x0b\x0b\x20\x05\x28\x00\x01\x22\x01\x41\x08\x46\x0d\x03\x20\x01\x41\xf1\x00\x46\x0d\x03\x02\x40\x20\x03\x2d\x00\x6e\x41\x01\x71\x45\x0d\x00\x20\x00\x41\xee\xd5\x02\x41\x00\x10\x8a\x07\x0c\x02\x0b\x20\x05\x41\xba\x01\x3a\x00\x00\x0c\x09\x0b\x20\x00\x41\x9e\xd6\x02\x41\x00\x10\x8a\x07\x0b\x41\x7f\x21\x04\x0c\x08\x0b\x20\x07\x0e\x04\x02\x00\x00\x01\x02\x0b\x20\x00\x41\x0e\x10\x86\x07\x20\x00\x41\x0a\x10\x86\x07\x0c\x06\x0b\x20\x00\x41\x30\x10\x86\x07\x41\x00\x21\x04\x20\x00\x41\x00\x10\x9e\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x41\x03\x10\xc7\x07\x0c\x05\x0b\x20\x03\x41\x7f\x36\x02\x98\x02\x20\x03\x41\x84\x02\x6a\x20\x01\x36\x02\x00\x0b\x20\x00\x41\x98\x01\x10\x86\x07\x0c\x02\x0b\x41\x7f\x21\x04\x20\x00\x10\x80\x07\x0d\x02\x20\x00\x41\x10\x10\xf4\x07\x0d\x02\x41\x00\x21\x04\x02\x40\x20\x00\x28\x02\x40\x22\x03\x28\x02\x98\x02\x22\x01\x41\x00\x48\x0d\x00\x20\x03\x28\x02\x80\x02\x20\x01\x6a\x22\x03\x2d\x00\x00\x41\xb8\x01\x47\x0d\x00\x20\x03\x41\xb7\x01\x3a\x00\x00\x0b\x20\x00\x41\x97\x01\x10\x86\x07\x0c\x02\x0b\x41\x7f\x21\x04\x20\x00\x10\x80\x07\x0d\x01\x20\x00\x41\x10\x10\xf4\x07\x0d\x01\x02\x40\x02\x40\x02\x40\x02\x40\x20\x03\x41\x55\x6a\x22\x04\x41\x02\x4d\x0d\x00\x02\x40\x20\x03\x41\xb6\x7f\x46\x0d\x00\x02\x40\x20\x03\x41\x21\x46\x0d\x00\x20\x03\x41\xfe\x00\x47\x0d\x03\x20\x00\x41\x95\x01\x10\x86\x07\x0c\x06\x0b\x20\x00\x41\x96\x01\x10\x86\x07\x0c\x05\x0b\x20\x00\x41\x0e\x10\x86\x07\x20\x00\x41\x06\x10\x86\x07\x0c\x04\x0b\x20\x04\x0e\x03\x01\x00\x02\x01\x0b\x10\x40\x00\x0b\x20\x00\x41\x8d\x01\x10\x86\x07\x0c\x01\x0b\x20\x00\x41\x8c\x01\x10\x86\x07\x0b\x41\x00\x21\x04\x0b\x20\x02\x41\x10\x6a\x24\x00\x20\x04\x0b\x94\x01\x02\x01\x7e\x01\x7f\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x90\x7f\x52\x0d\x00\x20\x02\x45\x0d\x00\x20\x01\x10\xc0\x01\x21\x03\x20\x00\x28\x02\x00\x41\x10\x6a\x28\x02\x00\x20\x03\xa7\x10\xf1\x03\x22\x02\x41\x01\x48\x0d\x00\x20\x00\x41\x04\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x20\x02\x10\xc6\x07\x41\x00\x0f\x0b\x20\x01\x10\xc0\x01\x21\x01\x02\x40\x20\x00\x28\x02\x00\x20\x00\x41\xc0\x00\x6a\x22\x02\x28\x02\x00\x20\x01\x10\xdc\x07\x22\x04\x41\x00\x4e\x0d\x00\x41\x7f\x0f\x0b\x20\x00\x41\x02\x10\x86\x07\x20\x02\x28\x02\x00\x20\x04\x10\xc6\x07\x41\x00\x0b\xe1\x05\x02\x05\x7f\x03\x7e\x23\x00\x41\x30\x6b\x22\x03\x24\x00\x20\x00\x28\x02\x00\x21\x04\x42\x80\x80\x80\x80\x30\x21\x08\x42\x80\x80\x80\x80\x30\x21\x09\x02\x40\x02\x40\x20\x01\x45\x0d\x00\x41\x7f\x21\x05\x20\x04\x10\x85\x03\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x09\x41\x00\x10\xf5\x07\x21\x06\x20\x04\x20\x09\x10\xcd\x01\x20\x06\x0d\x01\x20\x04\x10\x85\x03\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x04\x20\x09\x41\xf0\x00\x20\x08\x41\x80\x80\x01\x10\xc4\x01\x41\x00\x48\x0d\x01\x0b\x20\x00\x41\x10\x6a\x21\x05\x41\x00\x21\x06\x02\x40\x02\x40\x02\x40\x03\x40\x20\x05\x28\x02\x00\x41\x82\x7f\x47\x0d\x01\x20\x03\x41\x10\x6a\x41\x08\x6a\x20\x05\x41\x08\x6a\x29\x03\x00\x37\x03\x00\x20\x03\x41\x10\x6a\x41\x10\x6a\x20\x05\x41\x10\x6a\x29\x03\x00\x37\x03\x00\x20\x03\x41\x10\x6a\x41\x18\x6a\x20\x05\x41\x18\x6a\x29\x03\x00\x37\x03\x00\x20\x03\x20\x05\x29\x03\x00\x37\x03\x10\x20\x03\x20\x00\x28\x02\x18\x41\x01\x6a\x22\x07\x36\x02\x0c\x20\x00\x29\x03\x20\x21\x0a\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x45\x0d\x00\x20\x04\x20\x08\x20\x06\x20\x0a\x10\xc0\x01\x41\x84\x80\x01\x10\x80\x03\x41\x00\x48\x0d\x02\x02\x40\x02\x40\x20\x00\x41\xe0\x00\x41\x00\x20\x07\x20\x03\x41\x10\x6a\x20\x03\x41\x0c\x6a\x10\x8c\x07\x0d\x00\x20\x03\x29\x03\x20\x21\x0a\x0c\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x0a\x20\x03\x42\x80\x80\x80\x80\x30\x37\x03\x20\x0b\x20\x04\x20\x09\x20\x06\x20\x0a\x41\x84\x80\x01\x10\x80\x03\x41\x00\x4e\x0d\x01\x0c\x02\x0b\x20\x04\x20\x0a\x10\xcd\x01\x20\x00\x42\x80\x80\x80\x80\x30\x37\x03\x20\x20\x00\x41\xe0\x00\x41\x01\x20\x07\x20\x03\x41\x10\x6a\x20\x03\x41\x0c\x6a\x10\x8c\x07\x0d\x01\x20\x03\x29\x03\x20\x21\x0a\x02\x40\x02\x40\x20\x06\x45\x0d\x00\x20\x0a\xa7\x29\x02\x04\x42\xff\xff\xff\xff\x07\x83\x50\x0d\x01\x0b\x20\x00\x20\x0a\x41\x01\x10\xf5\x07\x21\x07\x20\x00\x28\x02\x00\x20\x0a\x10\xcd\x01\x20\x07\x0d\x02\x02\x40\x20\x06\x0d\x00\x20\x00\x28\x02\x28\x41\xe0\x00\x46\x0d\x08\x20\x00\x41\xc2\x00\x10\x86\x07\x20\x00\x41\xdc\x00\x10\x9e\x07\x0b\x20\x06\x41\x01\x6a\x21\x06\x0c\x01\x0b\x20\x00\x28\x02\x00\x20\x0a\x10\xcd\x01\x0b\x20\x00\x28\x02\x28\x41\xe0\x00\x46\x0d\x04\x20\x00\x10\x80\x07\x0d\x00\x20\x00\x10\xe6\x07\x0d\x00\x02\x40\x20\x05\x28\x02\x00\x41\xfd\x00\x46\x0d\x00\x20\x00\x41\xa4\xdd\x02\x41\x00\x10\x8a\x07\x0c\x01\x0b\x20\x00\x20\x05\x10\x84\x07\x20\x00\x41\x00\x36\x02\x30\x20\x00\x20\x00\x28\x02\x14\x36\x02\x04\x20\x00\x20\x00\x28\x02\x38\x10\x8b\x07\x45\x0d\x01\x0b\x41\x7f\x21\x05\x0c\x05\x0b\x20\x06\x41\x01\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x20\x00\x41\x82\x7f\x10\x98\x07\x21\x05\x0c\x02\x0b\x02\x40\x20\x01\x45\x0d\x00\x20\x04\x20\x08\x10\xf8\x07\x20\x04\x20\x09\x10\xf8\x07\x20\x02\x20\x06\x41\x01\x6a\x36\x02\x00\x0c\x01\x0b\x20\x00\x41\x24\x10\x86\x07\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x20\x06\x41\x7f\x6a\x41\xff\xff\x03\x71\x10\x89\x07\x0b\x20\x00\x10\x80\x07\x21\x05\x0b\x20\x03\x41\x30\x6a\x24\x00\x20\x05\x0b\x7b\x01\x02\x7f\x02\x40\x20\x01\x28\x02\x00\x41\x7f\x4a\x0d\x00\x20\x01\x20\x00\x41\xc0\x00\x6a\x28\x02\x00\x10\xd6\x07\x36\x02\x00\x0b\x20\x00\x41\x11\x10\x86\x07\x20\x00\x41\xb0\x01\x10\x86\x07\x20\x00\x41\xe9\x00\x41\x7f\x10\xd7\x07\x21\x03\x41\x00\x21\x04\x02\x40\x03\x40\x20\x04\x20\x02\x4e\x0d\x01\x20\x00\x41\x0e\x10\x86\x07\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x00\x41\x06\x10\x86\x07\x20\x00\x41\xeb\x00\x20\x01\x28\x02\x00\x10\xd7\x07\x1a\x20\x00\x20\x03\x10\xd8\x07\x0b\xa8\x01\x01\x05\x7f\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x20\x01\xa7\x22\x03\x28\x02\x10\x22\x04\x20\x04\x28\x02\x18\x41\x7f\x73\x41\x02\x74\x41\xbc\x7e\x72\x6a\x28\x02\x00\x21\x05\x02\x40\x02\x40\x03\x40\x02\x40\x20\x05\x0d\x00\x20\x02\x41\x00\x36\x02\x0c\x0c\x02\x0b\x20\x05\x41\x03\x74\x20\x04\x6a\x22\x06\x41\x28\x6a\x21\x05\x02\x40\x20\x06\x41\x2c\x6a\x28\x02\x00\x41\x30\x46\x0d\x00\x20\x05\x28\x02\x00\x41\xff\xff\xff\x1f\x71\x21\x05\x0c\x01\x0b\x0b\x20\x02\x20\x05\x36\x02\x0c\x20\x00\x20\x03\x20\x02\x41\x0c\x6a\x20\x05\x28\x02\x00\x41\x1a\x76\x41\x3c\x71\x10\xd8\x03\x0d\x01\x0b\x20\x03\x20\x03\x2d\x00\x05\x41\xfe\x01\x71\x3a\x00\x05\x0b\x20\x02\x41\x10\x6a\x24\x00\x0b\x28\x01\x01\x7f\x41\x01\x21\x01\x02\x40\x20\x00\x10\xfa\x07\x0d\x00\x20\x00\x41\xd0\xc3\x03\x41\xd0\xc8\x03\x41\x14\x10\xeb\x09\x41\x00\x47\x21\x01\x0b\x20\x01\x0b\x11\x00\x20\x00\x41\xc0\xba\x03\x41\xe0\xc2\x03\x41\x21\x10\xeb\x09\x0b\x71\x01\x04\x7f\x41\x7f\x21\x04\x41\x7f\x20\x02\x28\x02\x00\x22\x05\x41\x01\x76\x20\x05\x6a\x20\x05\x41\xa9\xd5\xaa\xd5\x7a\x4b\x1b\x21\x06\x02\x40\x02\x40\x02\x40\x20\x01\x28\x02\x00\x22\x07\x20\x03\x47\x0d\x00\x20\x00\x20\x06\x10\xc0\x02\x22\x00\x45\x0d\x02\x20\x00\x20\x03\x20\x05\x10\x70\x1a\x0c\x01\x0b\x20\x00\x20\x07\x20\x06\x10\xcc\x03\x22\x00\x45\x0d\x01\x0b\x20\x02\x20\x06\x36\x02\x00\x20\x01\x20\x00\x36\x02\x00\x41\x00\x21\x04\x0b\x20\x04\x0b\xc8\x0b\x02\x11\x7f\x01\x7e\x23\x00\x41\x30\x6b\x22\x04\x24\x00\x02\x40\x20\x00\x20\x01\x10\xfc\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x02\x40\x20\x00\x20\x01\x10\xe6\x02\x22\x15\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x41\x7f\x21\x05\x0c\x01\x0b\x02\x40\x02\x40\x20\x00\x20\x15\xa7\x22\x06\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x22\x07\x41\x01\x20\x07\x41\x01\x4b\x1b\x41\x02\x74\x10\xc0\x02\x22\x08\x0d\x00\x41\x7f\x21\x05\x41\x00\x21\x08\x0c\x01\x0b\x41\x00\x21\x09\x20\x04\x41\x00\x36\x02\x10\x20\x08\x21\x0a\x41\x00\x21\x05\x03\x40\x20\x09\x20\x07\x4e\x0d\x01\x20\x0a\x20\x06\x20\x04\x41\x10\x6a\x10\xcc\x05\x36\x02\x00\x20\x0a\x41\x04\x6a\x21\x0a\x20\x05\x41\x01\x6a\x21\x05\x20\x04\x28\x02\x10\x21\x09\x0c\x00\x0b\x00\x0b\x20\x00\x20\x15\x10\xcd\x01\x0b\x20\x00\x20\x01\x10\xcd\x01\x41\x00\x21\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x20\x05\x41\x00\x48\x0d\x00\x02\x40\x20\x02\x45\x0d\x00\x20\x03\x29\x03\x00\x22\x15\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x0c\x6a\x20\x15\x10\xe1\x03\x22\x0a\x45\x0d\x00\x02\x40\x20\x0a\x2d\x00\x00\x41\xce\x00\x47\x0d\x00\x20\x0a\x2d\x00\x01\x41\xc6\x00\x47\x0d\x00\x20\x0a\x41\x03\x41\x02\x20\x0a\x2d\x00\x02\x41\xcb\x00\x46\x22\x09\x1b\x6a\x2d\x00\x00\x22\x07\x41\xbd\x7f\x6a\x41\xff\x01\x71\x41\x01\x4b\x0d\x00\x20\x0a\x41\x03\x6a\x20\x0a\x41\x02\x6a\x20\x09\x1b\x20\x0a\x6b\x41\x01\x6a\x20\x04\x28\x02\x0c\x46\x0d\x02\x0b\x20\x00\x20\x0a\x10\xcf\x02\x20\x00\x41\x8a\xed\x02\x41\x00\x10\xa6\x04\x0b\x20\x00\x28\x02\x10\x22\x0a\x41\x10\x6a\x20\x08\x20\x0a\x28\x02\x04\x11\x00\x00\x0c\x02\x0b\x20\x00\x20\x0a\x10\xcf\x02\x20\x07\x20\x09\x41\x01\x74\x6a\x41\xbd\x7f\x6a\x21\x0b\x0b\x20\x00\x28\x02\x10\x21\x0a\x20\x04\x41\x18\x6a\x42\x00\x37\x03\x00\x20\x04\x42\x00\x37\x03\x10\x20\x04\x20\x0a\x36\x02\x24\x20\x04\x41\xef\x00\x36\x02\x20\x41\x7f\x21\x0c\x02\x40\x02\x40\x20\x04\x41\x10\x6a\x20\x05\x41\x02\x74\x22\x06\x10\xec\x07\x45\x0d\x00\x41\x00\x21\x0d\x0c\x01\x0b\x02\x40\x02\x40\x20\x0b\x0d\x00\x41\x7f\x21\x09\x20\x08\x21\x0a\x03\x40\x20\x09\x41\x01\x6a\x22\x09\x20\x05\x4e\x0d\x02\x20\x0a\x28\x02\x00\x21\x07\x20\x0a\x41\x04\x6a\x21\x0a\x20\x07\x41\xff\x01\x4d\x0d\x00\x0b\x0b\x20\x04\x41\x10\x6a\x20\x08\x20\x05\x20\x0b\x41\x01\x76\x10\xfd\x07\x41\x00\x21\x0d\x20\x04\x28\x02\x1c\x0d\x01\x20\x04\x28\x02\x14\x22\x0e\x41\x02\x76\x22\x0c\x41\x7f\x6a\x21\x0f\x41\x00\x21\x09\x20\x04\x28\x02\x10\x21\x0d\x03\x40\x02\x40\x02\x40\x20\x09\x20\x0c\x4e\x0d\x00\x20\x0d\x20\x09\x41\x02\x74\x6a\x22\x06\x28\x02\x00\x10\xfe\x07\x45\x0d\x01\x20\x09\x21\x05\x03\x40\x02\x40\x20\x05\x20\x0f\x47\x0d\x00\x20\x0c\x21\x09\x0c\x03\x0b\x02\x40\x20\x0d\x20\x05\x41\x01\x6a\x22\x02\x41\x02\x74\x6a\x28\x02\x00\x22\x03\x10\xfe\x07\x22\x07\x0d\x00\x20\x02\x21\x09\x0c\x03\x0b\x20\x06\x21\x0a\x02\x40\x03\x40\x20\x05\x20\x09\x48\x0d\x01\x20\x0a\x28\x02\x00\x10\xfe\x07\x20\x07\x4c\x0d\x01\x20\x0a\x41\x04\x6a\x20\x0a\x28\x02\x00\x36\x02\x00\x20\x0a\x41\x7c\x6a\x21\x0a\x20\x05\x41\x7f\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x0a\x41\x04\x6a\x20\x03\x36\x02\x00\x20\x06\x41\x04\x6a\x21\x06\x20\x02\x21\x05\x0c\x00\x0b\x00\x0b\x20\x0b\x41\x01\x71\x0d\x03\x20\x0e\x41\x08\x49\x0d\x03\x20\x0d\x41\x7c\x6a\x21\x10\x41\x01\x21\x11\x41\x01\x21\x12\x03\x40\x02\x40\x20\x11\x20\x0c\x49\x0d\x00\x20\x12\x21\x0c\x0c\x05\x0b\x20\x12\x41\x01\x6a\x21\x05\x20\x10\x20\x12\x41\x02\x74\x22\x13\x6a\x21\x0a\x20\x0d\x20\x11\x41\x02\x74\x6a\x22\x14\x28\x02\x00\x10\xfe\x07\x21\x09\x02\x40\x02\x40\x03\x40\x20\x05\x41\x7f\x6a\x22\x05\x41\x01\x48\x0d\x01\x02\x40\x20\x0a\x28\x02\x00\x10\xfe\x07\x22\x07\x45\x0d\x00\x20\x0a\x41\x7c\x6a\x21\x0a\x20\x07\x20\x09\x48\x21\x07\x41\x80\x02\x21\x09\x20\x07\x0d\x01\x0c\x02\x0b\x0b\x20\x14\x28\x02\x00\x21\x0b\x02\x40\x02\x40\x20\x0a\x28\x02\x00\x22\x0e\x41\x80\x5e\x6a\x41\x12\x4b\x0d\x00\x20\x0b\x41\x9f\x5d\x6a\x41\x14\x4b\x0d\x00\x20\x0e\x41\xcc\x04\x6c\x20\x0b\x41\x1c\x6c\x6a\x41\xe4\xf2\xde\x7e\x6a\x21\x06\x0c\x01\x0b\x02\x40\x20\x0e\x41\x80\xa8\x7d\x6a\x22\x05\x41\xa3\xd7\x00\x4b\x0d\x00\x20\x05\x41\xff\xff\x03\x71\x41\x1c\x70\x21\x05\x20\x0b\x41\xd9\x5c\x6a\x22\x09\x41\x1b\x4b\x0d\x00\x20\x05\x0d\x00\x20\x09\x20\x0e\x6a\x21\x06\x0c\x01\x0b\x41\xb0\x07\x21\x05\x41\x00\x21\x07\x03\x40\x20\x07\x20\x05\x4a\x0d\x02\x20\x04\x41\x28\x6a\x20\x05\x20\x07\x6a\x41\x02\x6d\x22\x0f\x41\x01\x74\x41\x90\xc9\x03\x6a\x2f\x01\x00\x22\x06\x41\x06\x76\x22\x02\x41\x02\x74\x41\x80\xd8\x03\x6a\x28\x02\x00\x22\x09\x41\x0e\x76\x22\x03\x20\x06\x41\x3f\x71\x6a\x22\x06\x20\x02\x20\x03\x20\x09\x41\x07\x76\x41\xff\x00\x71\x20\x09\x41\x01\x76\x41\x3f\x71\x10\xff\x07\x1a\x02\x40\x20\x0e\x20\x04\x28\x02\x28\x6b\x22\x09\x20\x0b\x20\x04\x28\x02\x2c\x6b\x20\x09\x1b\x22\x09\x41\x7f\x4a\x0d\x00\x20\x0f\x41\x7f\x6a\x21\x05\x0c\x01\x0b\x02\x40\x20\x09\x45\x0d\x00\x20\x0f\x41\x01\x6a\x21\x07\x0c\x01\x0b\x0b\x20\x06\x45\x0d\x01\x0b\x20\x0a\x20\x06\x36\x02\x00\x0c\x01\x0b\x20\x0d\x20\x13\x6a\x20\x14\x28\x02\x00\x36\x02\x00\x20\x12\x41\x01\x6a\x21\x12\x0b\x20\x11\x41\x01\x6a\x21\x11\x0c\x00\x0b\x00\x0b\x20\x09\x41\x01\x6a\x21\x09\x0c\x00\x0b\x00\x0b\x20\x04\x28\x02\x10\x22\x0d\x20\x08\x20\x06\x10\x70\x1a\x20\x05\x21\x0c\x0b\x20\x00\x28\x02\x10\x22\x0a\x41\x10\x6a\x20\x08\x20\x0a\x28\x02\x04\x11\x00\x00\x20\x0c\x41\x00\x48\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x02\x40\x20\x00\x20\x04\x41\x10\x6a\x20\x0c\x10\xb3\x04\x0d\x00\x20\x0c\x41\x01\x6a\x21\x05\x20\x0d\x21\x0a\x02\x40\x03\x40\x20\x05\x41\x7f\x6a\x22\x05\x45\x0d\x01\x20\x0a\x28\x02\x00\x21\x09\x20\x0a\x41\x04\x6a\x21\x0a\x20\x04\x41\x10\x6a\x20\x09\x10\xf0\x05\x45\x0d\x00\x0b\x20\x04\x28\x02\x10\x28\x02\x10\x22\x0a\x41\x10\x6a\x20\x04\x28\x02\x14\x20\x0a\x28\x02\x04\x11\x00\x00\x20\x04\x41\x00\x36\x02\x14\x0c\x01\x0b\x20\x04\x41\x10\x6a\x10\xf6\x03\x21\x01\x0b\x20\x00\x28\x02\x10\x22\x0a\x41\x10\x6a\x20\x0d\x20\x0a\x28\x02\x04\x11\x00\x00\x0b\x20\x04\x41\x30\x6a\x24\x00\x20\x01\x0b\xb6\x02\x01\x08\x7f\x23\x00\x41\xd0\x00\x6b\x22\x04\x24\x00\x41\x00\x21\x05\x03\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x05\x20\x02\x4e\x0d\x00\x20\x01\x20\x05\x41\x02\x74\x6a\x28\x02\x00\x22\x06\x41\x80\xa8\x7d\x6a\x22\x07\x41\xa4\xd7\x00\x49\x0d\x01\x41\xb1\x05\x21\x07\x41\x00\x21\x08\x03\x40\x20\x08\x20\x07\x4a\x0d\x03\x02\x40\x20\x07\x20\x08\x6a\x41\x02\x6d\x22\x09\x41\x02\x74\x41\x80\xd8\x03\x6a\x28\x02\x00\x22\x0a\x41\x0e\x76\x22\x0b\x20\x06\x4d\x0d\x00\x20\x09\x41\x7f\x6a\x21\x07\x0c\x01\x0b\x02\x40\x20\x0a\x41\x07\x76\x41\xff\x00\x71\x22\x08\x20\x0b\x6a\x20\x06\x4b\x0d\x00\x20\x09\x41\x01\x6a\x21\x08\x0c\x01\x0b\x0b\x20\x0a\x41\x01\x71\x20\x03\x4b\x0d\x02\x20\x04\x20\x06\x20\x09\x20\x0b\x20\x08\x20\x0a\x41\x01\x76\x41\x3f\x71\x10\xff\x07\x22\x07\x45\x0d\x02\x20\x00\x20\x04\x20\x07\x20\x03\x10\xfd\x07\x0c\x03\x0b\x20\x04\x41\xd0\x00\x6a\x24\x00\x0f\x0b\x20\x00\x20\x07\x41\xff\xff\x03\x71\x22\x08\x41\xcc\x04\x6e\x22\x09\x41\x80\x22\x72\x10\xef\x09\x20\x00\x20\x09\x41\xb4\x7b\x6c\x20\x07\x6a\x41\xff\xff\x03\x71\x41\x1c\x6e\x41\xe1\x22\x6a\x10\xef\x09\x20\x08\x41\x1c\x70\x22\x07\x45\x0d\x01\x20\x00\x20\x07\x41\xa7\x23\x6a\x10\xef\x09\x0c\x01\x0b\x20\x00\x20\x06\x10\xef\x09\x0b\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\xbe\x02\x01\x08\x7f\x23\x00\x41\x10\x6b\x22\x01\x24\x00\x41\x00\x21\x02\x02\x40\x20\x01\x41\x0c\x6a\x20\x00\x41\xa0\xc0\x04\x41\x1b\x10\xec\x09\x22\x03\x41\x00\x48\x0d\x00\x20\x03\x41\x80\xc1\x04\x6a\x21\x03\x03\x40\x20\x03\x41\x01\x6a\x21\x04\x20\x03\x2d\x00\x00\x22\x05\x41\x18\x74\x41\x18\x75\x21\x06\x02\x40\x02\x40\x20\x05\x41\x3f\x71\x22\x05\x41\x30\x4f\x0d\x00\x20\x04\x21\x03\x0c\x01\x0b\x20\x05\x41\x08\x74\x21\x07\x02\x40\x02\x40\x20\x05\x41\x37\x4b\x0d\x00\x20\x07\x41\x80\xa0\x7f\x6a\x21\x05\x41\x30\x21\x07\x41\x02\x21\x08\x0c\x01\x0b\x20\x03\x2d\x00\x01\x41\x08\x74\x20\x07\x41\x80\x90\x7f\x6a\x72\x21\x05\x20\x03\x41\x02\x6a\x21\x04\x41\xb0\x10\x21\x07\x41\x03\x21\x08\x0b\x20\x03\x20\x08\x6a\x21\x03\x20\x05\x20\x04\x2d\x00\x00\x72\x20\x07\x6a\x21\x05\x0b\x20\x03\x41\x01\x6a\x20\x03\x20\x06\x41\x7f\x4a\x1b\x21\x03\x02\x40\x02\x40\x20\x05\x20\x01\x28\x02\x0c\x22\x04\x6a\x41\x01\x6a\x22\x05\x20\x00\x4d\x0d\x00\x02\x40\x20\x06\x41\xc0\x01\x71\x41\x06\x76\x22\x05\x41\x02\x4b\x0d\x00\x02\x40\x20\x05\x0e\x03\x03\x00\x05\x03\x0b\x20\x00\x20\x04\x6b\x20\x03\x41\x7f\x6a\x2d\x00\x00\x6a\x21\x02\x0c\x04\x0b\x41\xe6\x01\x21\x02\x0c\x03\x0b\x20\x01\x20\x05\x36\x02\x0c\x0c\x01\x0b\x0b\x20\x03\x41\x7f\x6a\x2d\x00\x00\x21\x02\x0b\x20\x01\x41\x10\x6a\x24\x00\x20\x02\x0b\xe2\x06\x01\x05\x7f\x41\x01\x21\x06\x20\x02\x41\x01\x74\x41\xd0\xed\x03\x6a\x2f\x01\x00\x21\x02\x02\x40\x20\x05\x0d\x00\x20\x00\x20\x02\x36\x02\x00\x41\x01\x0f\x0b\x41\x00\x21\x07\x02\x40\x20\x05\x41\x7f\x6a\x22\x08\x41\x21\x4b\x0d\x00\x20\x02\x41\xc0\xf8\x03\x6a\x21\x09\x41\x12\x21\x0a\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x08\x0e\x22\x00\x00\x00\x00\x00\x00\x00\x01\x01\x09\x09\x09\x09\x09\x08\x07\x07\x07\x07\x07\x07\x05\x05\x05\x05\x05\x05\x05\x05\x06\x04\x03\x02\x02\x00\x0b\x20\x01\x20\x03\x6b\x20\x05\x6c\x41\x01\x74\x20\x02\x6a\x41\xc0\xf8\x03\x6a\x21\x02\x41\x7f\x21\x0a\x03\x40\x02\x40\x20\x0a\x41\x01\x6a\x22\x0a\x20\x05\x48\x0d\x00\x20\x05\x0f\x0b\x20\x00\x20\x02\x2f\x00\x00\x22\x06\x36\x02\x00\x20\x00\x41\x04\x6a\x21\x00\x20\x02\x41\x02\x6a\x21\x02\x20\x06\x0d\x00\x0c\x0b\x0b\x00\x0b\x20\x05\x41\x79\x6a\x22\x07\x20\x01\x20\x03\x6b\x6c\x22\x06\x41\x01\x74\x21\x05\x20\x02\x41\xc0\xf8\x03\x6a\x21\x01\x20\x04\x20\x07\x6c\x41\x01\x74\x21\x03\x41\x00\x21\x02\x03\x40\x20\x02\x20\x07\x4e\x0d\x0a\x20\x01\x20\x05\x6a\x2f\x00\x00\x20\x09\x20\x06\x20\x02\x6a\x41\x02\x76\x20\x03\x6a\x6a\x2d\x00\x00\x20\x05\x41\x06\x71\x76\x41\x10\x74\x41\x80\x80\x0c\x71\x72\x22\x0a\x45\x0d\x09\x20\x00\x20\x0a\x36\x02\x00\x20\x05\x41\x02\x6a\x21\x05\x20\x00\x41\x04\x6a\x21\x00\x20\x02\x41\x01\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x20\x01\x20\x03\x6b\x21\x07\x02\x40\x02\x40\x20\x05\x41\x21\x47\x0d\x00\x20\x09\x20\x07\x41\x7e\x71\x6a\x22\x02\x41\x01\x6a\x21\x05\x20\x02\x2d\x00\x00\x10\xf0\x09\x21\x02\x0c\x01\x0b\x20\x09\x20\x07\x41\x01\x76\x41\x03\x6c\x6a\x22\x02\x41\x02\x6a\x21\x05\x20\x02\x2f\x00\x00\x21\x02\x0b\x02\x40\x20\x07\x41\x01\x71\x45\x0d\x00\x41\x20\x41\x20\x41\x01\x20\x02\x41\xf0\x77\x6a\x41\x20\x49\x1b\x20\x02\x41\x80\x02\x49\x1b\x20\x02\x6a\x21\x02\x0b\x20\x00\x20\x02\x36\x02\x00\x20\x00\x20\x05\x2d\x00\x00\x10\xf0\x09\x36\x02\x04\x41\x02\x0f\x0b\x20\x00\x20\x09\x2f\x00\x02\x36\x02\x08\x20\x00\x20\x09\x2f\x00\x00\x36\x02\x00\x20\x00\x20\x01\x20\x03\x6b\x41\x01\x74\x20\x09\x6a\x41\x04\x6a\x2f\x00\x00\x36\x02\x04\x41\x03\x0f\x0b\x20\x00\x20\x09\x20\x01\x20\x03\x6b\x41\x03\x6c\x6a\x22\x05\x2f\x00\x00\x22\x02\x36\x02\x00\x20\x02\x45\x0d\x06\x20\x00\x20\x05\x2d\x00\x02\x10\xf0\x09\x36\x02\x04\x41\x02\x0f\x0b\x20\x05\x41\x6b\x6a\x21\x0a\x0b\x20\x0a\x20\x01\x20\x03\x6b\x6c\x20\x02\x6a\x41\xc2\xf8\x03\x6a\x21\x07\x20\x02\x41\xc0\xf8\x03\x6a\x2f\x00\x00\x21\x06\x41\x00\x21\x02\x03\x40\x02\x40\x20\x02\x20\x0a\x48\x0d\x00\x20\x0a\x0f\x0b\x20\x00\x41\x20\x20\x06\x20\x07\x20\x02\x6a\x2d\x00\x00\x22\x05\x6a\x20\x05\x41\xff\x01\x46\x1b\x36\x02\x00\x20\x00\x41\x04\x6a\x21\x00\x20\x02\x41\x01\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x20\x05\x41\x70\x6a\x22\x05\x41\x01\x71\x20\x05\x41\x01\x76\x22\x05\x41\x00\x47\x6a\x21\x07\x20\x05\x41\x02\x6a\x21\x06\x0b\x20\x02\x41\xc0\xf8\x03\x6a\x21\x05\x20\x01\x20\x03\x6b\x21\x0a\x41\x00\x21\x02\x03\x40\x02\x40\x20\x02\x20\x06\x48\x0d\x00\x20\x06\x0f\x0b\x20\x00\x20\x05\x2f\x00\x00\x20\x0a\x41\x00\x20\x07\x20\x02\x46\x1b\x6a\x36\x02\x00\x20\x00\x41\x04\x6a\x21\x00\x20\x05\x41\x02\x6a\x21\x05\x20\x02\x41\x01\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x20\x05\x41\x77\x6a\x22\x07\x20\x01\x20\x03\x6b\x6c\x20\x02\x6a\x41\xc0\xf8\x03\x6a\x21\x0a\x41\x00\x21\x02\x03\x40\x20\x02\x20\x07\x4e\x0d\x02\x20\x00\x20\x0a\x20\x02\x6a\x2d\x00\x00\x10\xf0\x09\x22\x05\x36\x02\x00\x20\x00\x41\x04\x6a\x21\x00\x20\x02\x41\x01\x6a\x21\x02\x20\x05\x0d\x00\x0b\x0b\x41\x00\x21\x07\x0b\x20\x07\x0b\x18\x00\x20\x00\x28\x02\x10\x22\x00\x41\x10\x6a\x20\x01\x20\x02\x20\x00\x28\x02\x08\x11\x01\x00\x0b\x28\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x20\x02\x20\x01\x36\x02\x0c\x20\x00\x20\x02\x41\x0c\x6a\x41\x04\x10\xa5\x07\x1a\x20\x02\x41\x10\x6a\x24\x00\x0b\x1d\x00\x20\x00\x20\x01\x41\xff\x01\x71\x10\xcd\x02\x20\x00\x28\x02\x04\x21\x01\x20\x00\x20\x02\x10\x81\x08\x20\x01\x0b\x18\x00\x20\x00\x20\x01\x41\xff\x01\x71\x10\xcd\x02\x20\x00\x20\x02\x41\xff\x01\x71\x10\xcd\x02\x0b\xdf\x01\x01\x05\x7f\x23\x00\x21\x02\x02\x40\x02\x40\x20\x00\x28\x02\x40\x28\x02\x10\x28\x02\x78\x20\x02\x22\x03\x4d\x0d\x00\x20\x00\x41\x98\x9d\x03\x41\x00\x10\x85\x08\x41\x7f\x21\x04\x0c\x01\x0b\x20\x00\x28\x02\x04\x21\x02\x41\x7f\x21\x04\x20\x00\x20\x01\x10\xca\x09\x0d\x00\x41\x05\x20\x02\x6b\x21\x05\x03\x40\x02\x40\x20\x00\x28\x02\x18\x22\x06\x2d\x00\x00\x41\xfc\x00\x46\x0d\x00\x41\x00\x21\x04\x0c\x02\x0b\x20\x00\x20\x06\x41\x01\x6a\x36\x02\x18\x20\x00\x28\x02\x04\x21\x06\x02\x40\x20\x00\x20\x02\x41\x05\x10\xcb\x09\x45\x0d\x00\x20\x00\x10\x86\x08\x0c\x02\x0b\x20\x00\x28\x02\x00\x20\x02\x6a\x41\x09\x3a\x00\x00\x20\x00\x28\x02\x00\x20\x02\x6a\x20\x05\x20\x06\x6a\x36\x00\x01\x20\x00\x41\x07\x41\x00\x10\x82\x08\x21\x06\x20\x00\x20\x01\x10\xca\x09\x0d\x01\x20\x00\x28\x02\x00\x20\x06\x6a\x20\x00\x28\x02\x04\x20\x06\x6b\x41\x7c\x6a\x36\x00\x00\x0c\x00\x0b\x00\x0b\x20\x03\x24\x00\x20\x04\x0b\x2b\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x20\x03\x20\x02\x36\x02\x0c\x20\x00\x41\xdc\x00\x6a\x41\x80\x01\x20\x01\x20\x02\x10\x4e\x1a\x20\x03\x41\x10\x6a\x24\x00\x0b\x0d\x00\x20\x00\x41\x8a\x9d\x03\x41\x00\x10\x85\x08\x0b\x4e\x01\x01\x7f\x02\x40\x20\x01\x41\x01\x48\x0d\x00\x20\x00\x20\x01\x6a\x41\x7f\x6a\x21\x03\x02\x40\x03\x40\x20\x02\x2d\x00\x00\x22\x01\x45\x0d\x01\x20\x00\x20\x03\x4f\x0d\x01\x20\x00\x20\x01\x3a\x00\x00\x20\x00\x41\x01\x6a\x21\x00\x20\x02\x41\x01\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x20\x00\x41\x00\x3a\x00\x00\x0b\x0b\xb3\x03\x02\x02\x7f\x03\x7e\x23\x00\x41\x10\x6b\x22\x06\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x20\x01\x41\x2e\x10\xfe\x03\x22\x07\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x01\x0c\x01\x0b\x02\x40\x20\x07\x28\x02\x18\x45\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x01\x41\x01\x21\x00\x0c\x05\x0b\x20\x00\x20\x07\x29\x03\x00\x22\x08\x20\x07\x29\x03\x08\x22\x09\x10\x89\x08\x22\x01\x42\x80\x80\x80\x80\x70\x83\x22\x0a\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x0a\x0c\x01\x0b\x02\x40\x20\x0a\x42\x80\x80\x80\x80\x20\x52\x0d\x00\x41\x01\x21\x00\x20\x07\x41\x01\x36\x02\x18\x42\x80\x80\x80\x80\x30\x21\x01\x0c\x03\x0b\x02\x40\x20\x07\x28\x02\x10\x45\x0d\x00\x20\x00\x20\x00\x20\x01\x42\x00\x10\xbb\x03\x10\xf2\x03\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x02\x40\x20\x0a\x10\xa3\x05\x45\x0d\x00\x20\x00\x20\x06\x41\x08\x6a\x20\x00\x20\x08\x41\xd5\x00\x20\x08\x41\x00\x10\xb4\x01\x10\xfc\x05\x41\x00\x48\x0d\x02\x02\x40\x02\x40\x20\x09\xa7\x20\x06\x29\x03\x08\x20\x07\x28\x02\x14\x10\x8a\x08\x22\x09\x42\x80\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x09\x42\xff\xff\xff\xff\x0f\x83\x21\x09\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x09\xb9\xbd\x22\x09\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x09\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x09\x0b\x20\x00\x20\x08\x41\xd5\x00\x20\x09\x10\x82\x04\x41\x7f\x4c\x0d\x02\x0b\x20\x00\x20\x0a\x10\xcd\x01\x0c\x02\x0b\x20\x07\x41\x01\x36\x02\x18\x0c\x01\x0b\x20\x00\x20\x01\x10\xcd\x01\x20\x00\x20\x0a\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x41\x00\x21\x00\x0b\x20\x04\x20\x00\x36\x02\x00\x20\x06\x41\x10\x6a\x24\x00\x20\x01\x0b\xb9\x01\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x20\x03\x20\x02\x37\x03\x08\x02\x40\x20\x00\x20\x01\x41\x86\x01\x20\x01\x41\x00\x10\xb4\x01\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x00\x20\x02\x10\xf0\x02\x45\x0d\x00\x20\x00\x20\x02\x20\x01\x41\x01\x20\x03\x41\x08\x6a\x10\xef\x02\x22\x02\x42\x80\x80\x80\x80\xb0\x7f\x83\x42\x80\x80\x80\x80\xc0\x00\x84\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x02\x42\xff\xff\xff\xff\x6f\x56\x0d\x01\x20\x00\x20\x02\x10\xcd\x01\x20\x00\x41\x97\xf0\x02\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x02\x0c\x01\x0b\x20\x00\x20\x02\x10\xcd\x01\x20\x00\x20\x01\x41\x01\x20\x03\x41\x08\x6a\x10\x8b\x08\x21\x02\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x02\x0b\x63\x02\x01\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x02\x40\x02\x40\x02\x40\x20\x02\x45\x0d\x00\x20\x00\x29\x02\x04\x22\x04\x42\xff\xff\xff\xff\x07\x83\x20\x01\x57\x0d\x00\x20\x04\xa7\x41\x00\x48\x0d\x01\x0b\x20\x01\x42\x01\x7c\x21\x01\x0c\x01\x0b\x20\x03\x20\x01\x3e\x02\x0c\x20\x00\x20\x03\x41\x0c\x6a\x10\xcc\x05\x1a\x20\x03\x34\x02\x0c\x21\x01\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x01\x0b\xf0\x06\x02\x0a\x7f\x04\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x01\x10\x8c\x08\x22\x05\x45\x0d\x00\x02\x40\x20\x00\x20\x03\x29\x03\x00\x10\xe6\x02\x22\x0e\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x0e\x21\x01\x0c\x02\x0b\x02\x40\x20\x00\x20\x01\x41\xd5\x00\x20\x01\x41\x00\x10\xb4\x01\x22\x0f\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x0f\x10\xfc\x05\x0d\x00\x20\x05\x28\x02\x04\x22\x05\x41\x10\x6a\x21\x03\x02\x40\x20\x05\x2d\x00\x10\x41\x21\x71\x22\x05\x0d\x00\x20\x04\x42\x00\x37\x03\x08\x0b\x02\x40\x02\x40\x20\x03\x2d\x00\x01\x22\x06\x0d\x00\x41\x00\x21\x07\x0c\x01\x0b\x20\x00\x20\x06\x41\x03\x74\x10\xc0\x02\x22\x07\x45\x0d\x01\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x04\x29\x03\x08\x22\x0f\x20\x0e\xa7\x22\x08\x29\x02\x04\x22\x10\x42\xff\xff\xff\xff\x07\x83\x55\x0d\x00\x20\x07\x20\x03\x20\x08\x41\x10\x6a\x22\x09\x20\x0f\xa7\x20\x10\xa7\x22\x0a\x41\xff\xff\xff\xff\x07\x71\x20\x0a\x41\x1f\x76\x22\x0b\x20\x00\x10\x8d\x08\x22\x0a\x41\x01\x46\x0d\x03\x20\x0a\x41\x00\x48\x0d\x01\x20\x05\x0d\x00\x20\x0a\x41\x02\x47\x0d\x02\x0b\x20\x00\x20\x01\x41\xd5\x00\x42\x00\x10\x82\x04\x41\x00\x4e\x0d\x01\x0c\x04\x0b\x20\x00\x41\xc8\xf0\x02\x41\x00\x10\xc2\x02\x0c\x03\x0b\x20\x00\x20\x0e\x10\xcd\x01\x42\x80\x80\x80\x80\x20\x21\x01\x0c\x01\x0b\x02\x40\x20\x05\x45\x0d\x00\x20\x00\x20\x01\x41\xd5\x00\x20\x07\x28\x02\x04\x20\x09\x6b\x20\x0b\x75\xad\x10\x82\x04\x41\x00\x48\x0d\x02\x0b\x42\x80\x80\x80\x80\x30\x21\x10\x20\x00\x10\x85\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x42\x80\x80\x80\x80\x30\x21\x10\x41\x00\x21\x0a\x02\x40\x20\x03\x2c\x00\x00\x41\x7f\x4a\x0d\x00\x20\x03\x28\x00\x03\x21\x05\x20\x00\x42\x80\x80\x80\x80\x20\x10\xbd\x01\x22\x10\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x03\x20\x05\x6a\x41\x07\x6a\x21\x0a\x0b\x20\x07\x21\x05\x41\x00\x21\x03\x02\x40\x03\x40\x20\x06\x20\x03\x46\x0d\x01\x42\x80\x80\x80\x80\x30\x21\x0f\x02\x40\x20\x05\x28\x02\x00\x22\x0c\x45\x0d\x00\x20\x05\x41\x04\x6a\x28\x02\x00\x22\x0d\x45\x0d\x00\x20\x00\x20\x08\x20\x0c\x20\x09\x6b\x20\x0b\x75\x20\x0d\x20\x09\x6b\x20\x0b\x75\x10\xdc\x05\x22\x0f\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x05\x0b\x02\x40\x20\x03\x45\x0d\x00\x20\x0a\x45\x0d\x00\x02\x40\x20\x0a\x2d\x00\x00\x45\x0d\x00\x20\x00\x20\x10\x20\x0a\x20\x0f\x10\xc0\x01\x22\x11\x41\x87\x80\x01\x10\xd6\x01\x41\x7f\x4a\x0d\x00\x20\x00\x20\x11\x10\xcd\x01\x0c\x06\x0b\x20\x0a\x10\x71\x20\x0a\x6a\x41\x01\x6a\x21\x0a\x0b\x20\x00\x20\x01\x20\x03\x20\x0f\x41\x87\x80\x01\x10\x80\x03\x21\x0c\x20\x05\x41\x08\x6a\x21\x05\x20\x03\x41\x01\x6a\x21\x03\x20\x0c\x41\x00\x4e\x0d\x00\x0c\x04\x0b\x00\x0b\x20\x00\x20\x01\x41\x87\x01\x20\x10\x41\x87\x80\x01\x10\xc4\x01\x41\x00\x48\x0d\x02\x20\x00\x20\x01\x41\xd7\x00\x20\x07\x28\x02\x00\x20\x09\x6b\x20\x0b\x75\xad\x41\x87\x80\x01\x10\xc4\x01\x41\x00\x48\x0d\x02\x20\x00\x20\x01\x41\xd8\x00\x20\x0e\x41\x87\x80\x01\x10\xc4\x01\x41\x00\x48\x0d\x03\x0b\x20\x00\x28\x02\x10\x22\x00\x41\x10\x6a\x20\x07\x20\x00\x28\x02\x04\x11\x00\x00\x0c\x05\x0b\x42\x80\x80\x80\x80\x20\x21\x01\x42\x80\x80\x80\x80\x30\x21\x10\x0b\x20\x00\x20\x10\x10\xcd\x01\x20\x00\x20\x0e\x10\xcd\x01\x0b\x20\x00\x20\x01\x10\xcd\x01\x20\x00\x28\x02\x10\x22\x00\x41\x10\x6a\x20\x07\x20\x00\x28\x02\x04\x11\x00\x00\x0c\x01\x0b\x20\x00\x20\x0e\x10\xcd\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x01\x0b\x2e\x01\x01\x7f\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x02\x2f\x01\x06\x41\x12\x47\x0d\x00\x20\x02\x41\x20\x6a\x0f\x0b\x20\x00\x41\x12\x10\xa4\x04\x41\x00\x0b\xad\x02\x01\x03\x7f\x23\x00\x41\xc0\x00\x6b\x22\x07\x24\x00\x20\x07\x22\x08\x41\x00\x36\x02\x38\x20\x08\x20\x06\x36\x02\x28\x20\x08\x20\x02\x36\x02\x08\x20\x08\x42\x00\x37\x03\x30\x20\x08\x20\x01\x2d\x00\x01\x22\x06\x36\x02\x14\x20\x08\x20\x01\x2d\x00\x02\x22\x09\x36\x02\x18\x20\x08\x20\x02\x20\x04\x20\x05\x74\x6a\x36\x02\x0c\x20\x08\x20\x01\x2d\x00\x00\x22\x04\x41\x01\x76\x41\x01\x71\x36\x02\x20\x20\x08\x20\x04\x41\x02\x76\x41\x01\x71\x36\x02\x1c\x20\x08\x20\x06\x41\x03\x74\x20\x09\x41\x02\x74\x6a\x41\x10\x6a\x36\x02\x2c\x20\x08\x20\x04\x41\x04\x76\x41\x01\x71\x22\x04\x36\x02\x24\x20\x08\x20\x05\x41\x02\x20\x05\x20\x04\x1b\x20\x05\x41\x01\x47\x1b\x36\x02\x10\x20\x06\x41\x01\x74\x21\x06\x20\x00\x21\x04\x02\x40\x03\x40\x20\x06\x45\x0d\x01\x20\x04\x41\x00\x36\x02\x00\x20\x06\x41\x7f\x6a\x21\x06\x20\x04\x41\x04\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x07\x20\x09\x41\x02\x74\x41\x0f\x6a\x41\xf0\x0f\x71\x6b\x22\x06\x24\x00\x20\x08\x41\x08\x6a\x20\x00\x20\x06\x41\x00\x20\x01\x41\x07\x6a\x20\x02\x20\x03\x20\x05\x74\x6a\x41\x00\x10\xe7\x09\x21\x06\x20\x08\x28\x02\x28\x28\x02\x10\x22\x04\x41\x10\x6a\x20\x08\x28\x02\x30\x41\x00\x20\x04\x28\x02\x08\x11\x01\x00\x1a\x20\x08\x41\xc0\x00\x6a\x24\x00\x20\x06\x0b\xfb\x02\x02\x03\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x02\x40\x02\x40\x20\x01\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0c\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x20\x00\x20\x00\x20\x01\x41\xee\x00\x20\x01\x41\x00\x10\xb4\x01\x10\x9a\x03\x22\x03\x41\x00\x48\x0d\x00\x02\x40\x02\x40\x20\x03\x0d\x00\x20\x02\x41\x08\x6a\x21\x03\x0c\x01\x0b\x20\x02\x41\xe7\x00\x3a\x00\x08\x20\x02\x41\x09\x6a\x21\x03\x0b\x20\x00\x20\x00\x20\x01\x41\xfe\xf0\x02\x10\xb6\x01\x10\x9a\x03\x22\x04\x41\x00\x48\x0d\x00\x02\x40\x20\x04\x45\x0d\x00\x20\x03\x41\xe9\x00\x3a\x00\x00\x20\x03\x41\x01\x6a\x21\x03\x0b\x20\x00\x20\x00\x20\x01\x41\x89\xf1\x02\x10\xb6\x01\x10\x9a\x03\x22\x04\x41\x00\x48\x0d\x00\x02\x40\x20\x04\x45\x0d\x00\x20\x03\x41\xed\x00\x3a\x00\x00\x20\x03\x41\x01\x6a\x21\x03\x0b\x20\x00\x20\x00\x20\x01\x41\x93\xf1\x02\x10\xb6\x01\x10\x9a\x03\x22\x04\x41\x00\x48\x0d\x00\x02\x40\x20\x04\x45\x0d\x00\x20\x03\x41\xf3\x00\x3a\x00\x00\x20\x03\x41\x01\x6a\x21\x03\x0b\x20\x00\x20\x00\x20\x01\x41\xef\x00\x20\x01\x41\x00\x10\xb4\x01\x10\x9a\x03\x22\x04\x41\x00\x48\x0d\x00\x02\x40\x20\x04\x45\x0d\x00\x20\x03\x41\xf5\x00\x3a\x00\x00\x20\x03\x41\x01\x6a\x21\x03\x0b\x20\x00\x20\x00\x20\x01\x41\xa2\xf1\x02\x10\xb6\x01\x10\x9a\x03\x22\x04\x41\x00\x48\x0d\x00\x02\x40\x20\x04\x45\x0d\x00\x20\x03\x41\xf9\x00\x3a\x00\x00\x20\x03\x41\x01\x6a\x21\x03\x0b\x20\x00\x20\x02\x41\x08\x6a\x20\x03\x20\x02\x41\x08\x6a\x6b\x10\xcb\x02\x21\x05\x0b\x20\x02\x41\x10\x6a\x24\x00\x20\x05\x0b\xed\x04\x01\x0a\x7f\x23\x00\x41\x20\x6b\x22\x02\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x0c\x01\x0b\x20\x00\x20\x01\x20\x00\x28\x02\x28\x29\x03\x90\x01\x10\x8d\x03\x0d\x02\x20\x00\x20\x01\x10\x8c\x08\x22\x03\x0d\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0c\x03\x0b\x20\x03\x28\x02\x00\x22\x04\x29\x02\x04\xa7\x22\x03\x41\xff\xff\xff\xff\x07\x71\x22\x05\x0d\x01\x0b\x20\x00\x41\xa6\xf2\x02\x10\xc7\x02\x21\x01\x0c\x01\x0b\x20\x00\x20\x02\x41\x08\x6a\x20\x05\x20\x03\x41\x1f\x76\x10\xf3\x03\x1a\x20\x04\x41\x10\x6a\x21\x06\x20\x04\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x21\x07\x41\x00\x21\x03\x41\x00\x21\x08\x03\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x03\x20\x07\x4e\x0d\x00\x02\x40\x02\x40\x20\x04\x28\x02\x04\x41\x7f\x4a\x22\x09\x0d\x00\x20\x04\x20\x03\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x21\x00\x0c\x01\x0b\x20\x06\x20\x03\x6a\x2d\x00\x00\x21\x00\x0b\x20\x03\x41\x01\x6a\x21\x05\x20\x00\x41\xa5\x7f\x6a\x22\x0a\x41\x02\x4d\x0d\x01\x41\xdc\x00\x21\x0a\x02\x40\x02\x40\x02\x40\x20\x00\x41\x76\x6a\x22\x0b\x41\x03\x4d\x0d\x00\x20\x00\x41\x2f\x46\x0d\x01\x0c\x06\x0b\x41\xee\x00\x21\x09\x20\x05\x21\x03\x02\x40\x20\x0b\x0e\x04\x05\x07\x07\x00\x05\x0b\x41\xf2\x00\x21\x09\x0c\x01\x0b\x20\x08\x0d\x04\x41\x00\x21\x08\x41\x2f\x21\x09\x0b\x20\x05\x21\x03\x0c\x02\x0b\x20\x02\x41\x08\x6a\x10\xf6\x03\x21\x01\x0c\x05\x0b\x02\x40\x02\x40\x02\x40\x20\x0a\x0e\x03\x00\x02\x01\x00\x0b\x41\xdb\x00\x21\x00\x20\x08\x0d\x03\x41\x01\x21\x08\x20\x05\x20\x07\x4e\x0d\x03\x02\x40\x02\x40\x20\x09\x0d\x00\x20\x04\x20\x05\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x21\x0a\x0c\x01\x0b\x20\x06\x20\x05\x6a\x2d\x00\x00\x21\x0a\x0b\x20\x0a\x41\xdd\x00\x47\x0d\x03\x20\x03\x41\x02\x6a\x21\x03\x02\x40\x20\x09\x0d\x00\x41\x01\x21\x08\x20\x04\x20\x05\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x21\x09\x41\xdb\x00\x21\x0a\x0c\x03\x0b\x20\x06\x20\x05\x6a\x2d\x00\x00\x21\x09\x41\x01\x21\x08\x41\xdb\x00\x21\x0a\x0c\x02\x0b\x41\x00\x21\x08\x41\xdd\x00\x21\x00\x0c\x02\x0b\x41\xdc\x00\x21\x00\x20\x05\x20\x07\x4e\x0d\x01\x20\x03\x41\x02\x6a\x21\x03\x02\x40\x20\x09\x0d\x00\x20\x04\x20\x05\x41\x01\x74\x6a\x41\x10\x6a\x2f\x01\x00\x21\x09\x41\xdc\x00\x21\x0a\x0c\x01\x0b\x20\x06\x20\x05\x6a\x2d\x00\x00\x21\x09\x41\xdc\x00\x21\x0a\x0b\x20\x02\x41\x08\x6a\x20\x0a\x10\xb5\x04\x1a\x20\x09\x21\x00\x0c\x01\x0b\x20\x05\x21\x03\x0b\x20\x02\x41\x08\x6a\x20\x00\x10\xb5\x04\x1a\x0c\x00\x0b\x00\x0b\x20\x02\x41\x20\x6a\x24\x00\x20\x01\x0b\x7a\x02\x01\x7f\x01\x7e\x02\x40\x20\x01\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x02\x40\x02\x40\x20\x01\xa7\x22\x03\x2f\x01\x06\x41\x12\x46\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x04\x20\x00\x20\x01\x20\x00\x28\x02\x28\x29\x03\x90\x01\x10\x8d\x03\x0d\x01\x20\x00\x41\x12\x10\xa4\x04\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x03\x41\x24\x6a\x28\x02\x00\x2d\x00\x10\x20\x02\x71\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x21\x04\x0b\x20\x04\x0b\xde\x02\x02\x04\x7e\x01\x7f\x42\x80\x80\x80\x80\xe0\x00\x21\x04\x02\x40\x20\x00\x20\x01\x10\x8c\x08\x22\x08\x45\x0d\x00\x20\x03\x29\x03\x08\x21\x05\x02\x40\x02\x40\x02\x40\x20\x03\x29\x03\x00\x22\x06\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x06\xa7\x22\x03\x2f\x01\x06\x41\x12\x47\x0d\x00\x02\x40\x20\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x41\x8e\xf2\x02\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x03\x35\x02\x20\x42\x80\x80\x80\x80\x90\x7f\x84\x10\xc0\x01\x21\x06\x20\x03\x35\x02\x24\x42\x80\x80\x80\x80\x90\x7f\x84\x10\xc0\x01\x21\x07\x0c\x01\x0b\x02\x40\x02\x40\x20\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x41\x2f\x10\xc5\x01\x21\x06\x0c\x01\x0b\x20\x00\x20\x06\x10\xe6\x02\x21\x06\x0b\x42\x80\x80\x80\x80\x30\x21\x07\x20\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x06\x20\x05\x10\xe2\x01\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x0b\x20\x00\x20\x08\x35\x02\x00\x42\x80\x80\x80\x80\x90\x7f\x84\x10\xcd\x01\x20\x00\x20\x08\x35\x02\x04\x42\x80\x80\x80\x80\x90\x7f\x84\x10\xcd\x01\x20\x08\x20\x07\x3e\x02\x04\x20\x08\x20\x06\x3e\x02\x00\x20\x00\x20\x01\x41\xd5\x00\x42\x00\x10\x82\x04\x41\x00\x48\x0d\x01\x20\x01\x10\xc0\x01\x0f\x0b\x20\x00\x20\x06\x10\xcd\x01\x20\x00\x20\x07\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x04\x0b\x20\x04\x0b\x4d\x01\x02\x7e\x42\x80\x80\x80\x80\xe0\x00\x21\x04\x02\x40\x20\x00\x20\x01\x20\x03\x29\x03\x00\x10\x89\x08\x22\x01\x42\x80\x80\x80\x80\x70\x83\x22\x05\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x01\x10\xcd\x01\x20\x05\x42\x80\x80\x80\x80\x20\x52\xad\x42\x80\x80\x80\x80\x10\x84\x21\x04\x0b\x20\x04\x0b\xbd\x01\x01\x01\x7f\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x02\x40\x20\x01\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x0c\x01\x0b\x20\x00\x20\x04\x41\x08\x6a\x41\x00\x10\xb3\x04\x1a\x20\x04\x41\x08\x6a\x41\x2f\x10\xb4\x04\x1a\x02\x40\x20\x04\x41\x08\x6a\x20\x00\x20\x01\x41\xec\x00\x20\x01\x41\x00\x10\xb4\x01\x10\xe5\x05\x0d\x00\x20\x04\x41\x08\x6a\x41\x2f\x10\xb4\x04\x1a\x20\x04\x41\x08\x6a\x20\x00\x20\x01\x41\xed\x00\x20\x01\x41\x00\x10\xb4\x01\x10\xe5\x05\x0d\x00\x20\x04\x41\x08\x6a\x10\xf6\x03\x21\x01\x0c\x02\x0b\x20\x04\x28\x02\x08\x28\x02\x10\x22\x00\x41\x10\x6a\x20\x04\x28\x02\x0c\x20\x00\x28\x02\x04\x11\x00\x00\x20\x04\x41\x00\x36\x02\x0c\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x01\x0b\xa1\x16\x02\x0b\x7f\x0d\x7e\x23\x00\x41\x90\x01\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x01\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x42\x80\x80\x80\x80\xe0\x00\x21\x0f\x0c\x01\x0b\x20\x03\x29\x03\x08\x21\x10\x41\x00\x21\x05\x20\x00\x20\x04\x41\x38\x6a\x41\x00\x10\xb3\x04\x1a\x20\x04\x41\x00\x36\x02\x30\x20\x04\x42\x80\x80\x80\x80\xc0\x00\x37\x03\x28\x20\x04\x20\x00\x36\x02\x00\x20\x04\x20\x04\x41\x08\x6a\x22\x06\x36\x02\x04\x42\x80\x80\x80\x80\xe0\x00\x21\x0f\x42\x80\x80\x80\x80\x30\x21\x11\x02\x40\x02\x40\x02\x40\x20\x00\x20\x03\x29\x03\x00\x10\xe6\x02\x22\x12\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x13\x42\x80\x80\x80\x80\x30\x21\x01\x42\x80\x80\x80\x80\x30\x21\x14\x42\x80\x80\x80\x80\x30\x21\x15\x0c\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x11\x42\x80\x80\x80\x80\x30\x21\x15\x02\x40\x02\x40\x20\x00\x20\x10\x10\xf0\x02\x22\x07\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x13\x02\x40\x20\x00\x20\x10\x10\xe6\x02\x22\x15\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x0f\x42\x80\x80\x80\x80\x30\x21\x11\x0c\x02\x0b\x20\x15\xa7\x21\x05\x0b\x41\x00\x21\x08\x02\x40\x20\x00\x20\x00\x20\x01\x41\xee\x00\x20\x01\x41\x00\x10\xb4\x01\x10\x9a\x03\x22\x09\x41\x00\x48\x0d\x00\x02\x40\x20\x09\x45\x0d\x00\x20\x00\x20\x00\x20\x01\x41\xef\x00\x20\x01\x41\x00\x10\xb4\x01\x10\x9a\x03\x22\x08\x41\x00\x48\x0d\x01\x20\x00\x20\x01\x41\xd5\x00\x42\x00\x10\x82\x04\x41\x00\x48\x0d\x01\x0b\x02\x40\x02\x40\x02\x40\x20\x05\x45\x0d\x00\x20\x09\x45\x0d\x00\x20\x05\x29\x02\x04\x42\xff\xff\xff\xff\x07\x83\x42\x00\x52\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x0f\x02\x40\x20\x00\x20\x01\x41\x3c\x20\x01\x41\x00\x10\xb4\x01\x22\x14\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x14\x20\x00\x29\x03\x48\x10\x8d\x03\x21\x03\x20\x00\x20\x14\x10\xcd\x01\x20\x03\x45\x0d\x01\x20\x00\x20\x01\x41\x86\x01\x20\x01\x41\x00\x10\xb4\x01\x22\x14\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x14\x41\xf8\x00\x41\x00\x10\xb2\x03\x21\x03\x20\x00\x20\x14\x10\xcd\x01\x20\x03\x45\x0d\x01\x0b\x20\x00\x20\x01\x10\x8c\x08\x22\x03\x45\x0d\x03\x20\x00\x20\x04\x41\xd0\x00\x6a\x41\x00\x10\xb3\x04\x1a\x42\x80\x80\x80\x80\xe0\x00\x21\x0f\x41\x00\x21\x05\x20\x00\x20\x12\x10\xe6\x02\x22\x16\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x02\x40\x02\x40\x20\x03\x28\x02\x04\x22\x06\x2d\x00\x10\x22\x03\x41\x21\x71\x22\x0a\x0d\x00\x20\x04\x42\x00\x37\x03\x80\x01\x0c\x01\x0b\x41\x00\x21\x05\x20\x00\x20\x01\x41\xd5\x00\x20\x01\x41\x00\x10\xb4\x01\x22\x14\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x00\x20\x04\x41\x80\x01\x6a\x20\x14\x10\xfc\x05\x0d\x03\x0b\x41\x00\x21\x0b\x41\x00\x21\x05\x02\x40\x20\x06\x41\x10\x6a\x22\x0c\x2d\x00\x01\x22\x06\x45\x0d\x00\x20\x00\x20\x06\x41\x03\x74\x10\xc0\x02\x22\x05\x0d\x00\x41\x00\x21\x05\x0c\x03\x0b\x20\x03\x41\x10\x71\x21\x0d\x20\x03\x41\x01\x71\x21\x0e\x20\x16\xa7\x22\x07\x41\x10\x6a\x21\x06\x20\x07\x29\x02\x04\x22\x13\xa7\x41\x1f\x76\x21\x09\x20\x04\x29\x03\x80\x01\x21\x14\x03\x40\x20\x14\x20\x13\x42\xff\xff\xff\xff\x07\x83\x55\x0d\x02\x02\x40\x02\x40\x20\x05\x20\x0c\x20\x06\x20\x14\xa7\x20\x13\xa7\x41\xff\xff\xff\xff\x07\x71\x20\x09\x20\x00\x10\x8d\x08\x22\x03\x41\x01\x46\x0d\x00\x20\x03\x41\x00\x48\x0d\x01\x02\x40\x20\x0a\x0d\x00\x20\x03\x41\x02\x47\x0d\x05\x0b\x20\x00\x20\x01\x41\xd5\x00\x42\x00\x10\x82\x04\x41\x00\x48\x0d\x05\x0c\x04\x0b\x20\x04\x20\x05\x28\x02\x04\x20\x06\x6b\x20\x09\x75\x22\x03\x36\x02\x8c\x01\x20\x04\x20\x03\xac\x37\x03\x80\x01\x02\x40\x20\x0b\x20\x05\x28\x02\x00\x20\x06\x6b\x20\x09\x75\x22\x08\x4e\x0d\x00\x20\x04\x41\xd0\x00\x6a\x20\x07\x20\x0b\x20\x08\x10\xf5\x03\x0d\x05\x0b\x02\x40\x20\x0e\x0d\x00\x20\x03\x21\x0b\x20\x00\x20\x01\x41\xd5\x00\x20\x03\xad\x10\x82\x04\x41\x00\x4e\x0d\x04\x0c\x05\x0b\x20\x03\x21\x0b\x02\x40\x20\x03\x20\x08\x47\x0d\x00\x02\x40\x02\x40\x20\x0d\x45\x0d\x00\x20\x07\x28\x02\x04\x22\x0b\x41\x7f\x4a\x0d\x00\x20\x08\x20\x0b\x41\xff\xff\xff\xff\x07\x71\x49\x0d\x01\x0b\x20\x04\x20\x08\x41\x01\x6a\x22\x0b\x36\x02\x8c\x01\x0c\x01\x0b\x20\x07\x20\x04\x41\x8c\x01\x6a\x10\xcc\x05\x1a\x20\x04\x28\x02\x8c\x01\x21\x0b\x0b\x20\x04\x20\x0b\xac\x22\x14\x37\x03\x80\x01\x20\x07\x29\x02\x04\x21\x13\x20\x03\x21\x0b\x0c\x01\x0b\x0b\x20\x00\x41\xc8\xf0\x02\x41\x00\x10\xc2\x02\x0c\x02\x0b\x20\x12\xa7\x21\x0c\x42\x80\x80\x80\x80\x30\x21\x11\x42\x80\x80\x80\x80\xe0\x00\x21\x0f\x42\x80\x80\x80\x80\x30\x21\x14\x02\x40\x02\x40\x02\x40\x03\x40\x02\x40\x02\x40\x20\x00\x20\x01\x20\x12\x10\x89\x08\x22\x16\x42\x80\x80\x80\x80\x70\x83\x22\x13\x42\x80\x80\x80\x80\x20\x51\x0d\x00\x20\x13\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x04\x20\x04\x28\x02\x30\x0d\x04\x02\x40\x02\x40\x20\x04\x28\x02\x28\x22\x03\x20\x04\x28\x02\x2c\x4e\x0d\x00\x20\x04\x28\x02\x04\x21\x05\x0c\x01\x0b\x20\x03\x20\x03\x41\x01\x75\x6a\x41\x1f\x6a\x41\x6f\x71\x21\x03\x20\x04\x28\x02\x00\x21\x05\x02\x40\x02\x40\x02\x40\x20\x04\x28\x02\x04\x22\x0b\x20\x06\x47\x0d\x00\x20\x05\x41\x00\x20\x03\x41\x03\x74\x20\x04\x41\xd0\x00\x6a\x10\xbd\x04\x22\x05\x45\x0d\x01\x20\x05\x20\x06\x29\x03\x00\x37\x03\x00\x20\x05\x41\x18\x6a\x20\x06\x41\x18\x6a\x29\x03\x00\x37\x03\x00\x20\x05\x41\x10\x6a\x20\x06\x41\x10\x6a\x29\x03\x00\x37\x03\x00\x20\x05\x41\x08\x6a\x20\x06\x41\x08\x6a\x29\x03\x00\x37\x03\x00\x0c\x02\x0b\x20\x05\x20\x0b\x20\x03\x41\x03\x74\x20\x04\x41\xd0\x00\x6a\x10\xbd\x04\x22\x05\x0d\x01\x0b\x20\x04\x10\x95\x08\x20\x04\x28\x02\x00\x20\x16\x10\xcd\x01\x20\x04\x41\x7f\x36\x02\x30\x0c\x06\x0b\x20\x04\x20\x05\x36\x02\x04\x20\x04\x20\x04\x28\x02\x50\x41\x03\x76\x20\x03\x6a\x36\x02\x2c\x20\x04\x28\x02\x28\x21\x03\x0b\x20\x05\x20\x03\x41\x03\x74\x6a\x20\x16\x37\x03\x00\x20\x04\x20\x03\x41\x01\x6a\x36\x02\x28\x20\x09\x0d\x01\x42\x80\x80\x80\x80\x30\x21\x14\x0b\x42\x80\x80\x80\x80\x30\x21\x11\x41\x00\x21\x05\x41\x00\x21\x03\x42\x80\x80\x80\x80\x30\x21\x13\x42\x80\x80\x80\x80\x30\x21\x01\x02\x40\x03\x40\x20\x03\x20\x04\x28\x02\x28\x4e\x0d\x01\x20\x00\x20\x04\x41\x8c\x01\x6a\x20\x04\x28\x02\x04\x20\x03\x41\x03\x74\x6a\x29\x03\x00\x22\x17\x10\xb6\x03\x41\x00\x48\x0d\x04\x20\x00\x20\x14\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x0f\x20\x00\x20\x00\x20\x17\x42\x00\x10\xbb\x03\x10\xf2\x03\x22\x14\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x0b\x20\x00\x20\x04\x41\x80\x01\x6a\x20\x00\x20\x17\x41\xd7\x00\x20\x17\x41\x00\x10\xb4\x01\x10\xfc\x05\x0d\x0b\x02\x40\x02\x40\x20\x04\x29\x03\x80\x01\x22\x18\x20\x0c\x29\x02\x04\x42\xff\xff\xff\xff\x07\x83\x22\x0f\x57\x0d\x00\x20\x04\x20\x0f\x37\x03\x80\x01\x20\x0f\x21\x18\x0c\x01\x0b\x20\x18\x42\x7f\x55\x0d\x00\x42\x00\x21\x18\x20\x04\x42\x00\x37\x03\x80\x01\x0b\x20\x00\x20\x01\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x0f\x20\x00\x10\x85\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x0b\x20\x00\x20\x01\x42\x00\x20\x14\x10\xc0\x01\x22\x14\x41\x87\x80\x01\x10\xb8\x03\x41\x00\x48\x0d\x0b\x42\x01\x21\x16\x20\x04\x35\x02\x8c\x01\x21\x19\x02\x40\x03\x40\x20\x16\x20\x19\x5a\x0d\x01\x02\x40\x20\x00\x20\x17\x20\x16\x10\xf4\x05\x22\x1a\x42\x80\x80\x80\x80\x70\x83\x22\x1b\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x1b\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x0e\x20\x00\x20\x1a\x10\xf2\x03\x22\x1a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x07\x0b\x20\x00\x20\x01\x20\x16\x20\x1a\x10\xa7\x05\x41\x00\x48\x0d\x0d\x20\x16\x42\x01\x7c\x21\x16\x0c\x00\x0b\x00\x0b\x20\x00\x20\x11\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x0f\x20\x00\x20\x17\x41\x87\x01\x20\x17\x41\x00\x10\xb4\x01\x22\x11\x42\x80\x80\x80\x80\x70\x83\x22\x1a\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x0b\x02\x40\x02\x40\x20\x07\x45\x0d\x00\x20\x00\x20\x01\x20\x16\x20\x18\x42\xff\xff\xff\xff\x0f\x83\x10\xa7\x05\x41\x00\x48\x0d\x0d\x20\x00\x20\x01\x20\x16\x42\x01\x7c\x42\xff\xff\xff\xff\x0f\x83\x20\x12\x10\xc0\x01\x10\xa7\x05\x41\x00\x48\x0d\x0d\x02\x40\x20\x1a\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x01\x20\x16\x42\x02\x7c\x42\xff\xff\xff\xff\x0f\x83\x20\x11\x10\xc0\x01\x22\x16\x10\xa7\x05\x41\x00\x4e\x0d\x00\x20\x16\x21\x11\x0c\x0e\x0b\x20\x04\x20\x01\x37\x03\x58\x20\x04\x42\x80\x80\x80\x80\x30\x37\x03\x50\x20\x00\x20\x13\x10\xcd\x01\x20\x00\x20\x00\x20\x10\x41\x02\x20\x04\x41\xd0\x00\x6a\x41\x00\x10\x87\x03\x10\xf2\x03\x21\x13\x0c\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x16\x02\x40\x20\x1a\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x0f\x20\x00\x20\x11\x10\xfe\x02\x22\x16\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x0d\x0b\x20\x04\x20\x15\x37\x03\x78\x20\x04\x20\x16\x37\x03\x70\x20\x04\x20\x01\x37\x03\x68\x20\x04\x20\x12\x37\x03\x58\x20\x04\x20\x14\x37\x03\x50\x20\x04\x20\x18\x42\xff\xff\xff\xff\x0f\x83\x37\x03\x60\x20\x00\x20\x13\x10\xcd\x01\x20\x00\x20\x04\x41\xd0\x00\x6a\x10\xe4\x05\x21\x13\x20\x00\x20\x16\x10\xcd\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x0f\x20\x13\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x0b\x02\x40\x20\x18\x20\x05\xac\x53\x0d\x00\x20\x04\x41\x38\x6a\x20\x0c\x20\x05\x20\x18\xa7\x10\xf5\x03\x1a\x20\x04\x41\x38\x6a\x20\x13\x10\xa6\x05\x1a\x20\x14\xa7\x29\x02\x04\x42\xff\xff\xff\xff\x07\x83\x20\x18\x7c\xa7\x21\x05\x0b\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x04\x41\x38\x6a\x20\x0c\x20\x05\x20\x0c\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x10\xf5\x03\x1a\x20\x04\x41\x38\x6a\x10\xf6\x03\x21\x0f\x0c\x0a\x0b\x20\x00\x20\x14\x10\xcd\x01\x42\x80\x80\x80\x80\x30\x21\x13\x02\x40\x20\x00\x20\x00\x20\x16\x42\x00\x10\xbb\x03\x10\xf2\x03\x22\x14\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x14\x10\xa3\x05\x45\x0d\x01\x20\x00\x20\x04\x41\xd0\x00\x6a\x20\x00\x20\x01\x41\xd5\x00\x20\x01\x41\x00\x10\xb4\x01\x10\xfc\x05\x41\x00\x48\x0d\x00\x02\x40\x02\x40\x20\x0c\x20\x04\x29\x03\x50\x20\x08\x10\x8a\x08\x22\x16\x42\x80\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x16\x42\xff\xff\xff\xff\x0f\x83\x21\x16\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x16\xb9\xbd\x22\x16\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x16\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x16\x0b\x20\x00\x20\x01\x41\xd5\x00\x20\x16\x10\x82\x04\x41\x7f\x4a\x0d\x01\x0b\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x0f\x42\x80\x80\x80\x80\x30\x21\x11\x0c\x02\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x0f\x0c\x06\x0b\x42\x80\x80\x80\x80\x30\x21\x13\x0b\x42\x80\x80\x80\x80\x30\x21\x01\x0c\x04\x0b\x20\x04\x41\xd0\x00\x6a\x20\x07\x20\x0b\x20\x07\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x10\xf5\x03\x0d\x00\x20\x00\x20\x16\x10\xcd\x01\x20\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x05\x20\x03\x28\x02\x04\x11\x00\x00\x20\x04\x41\xd0\x00\x6a\x10\xf6\x03\x21\x0f\x0c\x01\x0b\x20\x00\x20\x16\x10\xcd\x01\x20\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x05\x20\x03\x28\x02\x04\x11\x00\x00\x20\x04\x28\x02\x50\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x04\x28\x02\x54\x20\x03\x28\x02\x04\x11\x00\x00\x20\x04\x41\x00\x36\x02\x54\x0b\x42\x80\x80\x80\x80\x30\x21\x13\x0b\x42\x80\x80\x80\x80\x30\x21\x01\x42\x80\x80\x80\x80\x30\x21\x14\x0b\x20\x04\x28\x02\x38\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x04\x28\x02\x3c\x20\x03\x28\x02\x04\x11\x00\x00\x20\x04\x41\x00\x36\x02\x3c\x0b\x20\x04\x10\x95\x08\x20\x00\x20\x15\x10\xcd\x01\x20\x00\x20\x14\x10\xcd\x01\x20\x00\x20\x01\x10\xcd\x01\x20\x00\x20\x13\x10\xcd\x01\x20\x00\x20\x11\x10\xcd\x01\x20\x00\x20\x12\x10\xcd\x01\x0b\x20\x04\x41\x90\x01\x6a\x24\x00\x20\x0f\x0b\x74\x01\x03\x7f\x02\x40\x03\x40\x20\x00\x28\x02\x28\x22\x01\x41\x01\x48\x0d\x01\x20\x00\x20\x01\x41\x7f\x6a\x22\x01\x36\x02\x28\x20\x00\x28\x02\x00\x20\x00\x28\x02\x04\x20\x01\x41\x03\x74\x6a\x29\x03\x00\x10\xcd\x01\x0c\x00\x0b\x00\x0b\x02\x40\x20\x00\x28\x02\x04\x22\x02\x20\x00\x41\x08\x6a\x22\x01\x46\x0d\x00\x20\x00\x28\x02\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x02\x20\x03\x28\x02\x04\x11\x00\x00\x0b\x20\x00\x41\x04\x36\x02\x2c\x20\x00\x20\x01\x36\x02\x04\x0b\xd6\x04\x02\x04\x7f\x06\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x01\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x0c\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x42\x80\x80\x80\x80\x30\x21\x09\x02\x40\x02\x40\x02\x40\x20\x00\x20\x03\x29\x03\x00\x10\xe6\x02\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x00\x20\x01\x41\xee\x00\x20\x01\x41\x00\x10\xb4\x01\x10\x9a\x03\x22\x03\x41\x00\x48\x0d\x00\x02\x40\x20\x03\x0d\x00\x20\x00\x20\x01\x20\x0a\x10\x89\x08\x21\x08\x42\x80\x80\x80\x80\x30\x21\x09\x0c\x03\x0b\x20\x00\x20\x00\x20\x01\x41\xef\x00\x20\x01\x41\x00\x10\xb4\x01\x10\x9a\x03\x22\x05\x41\x00\x48\x0d\x00\x20\x00\x20\x01\x41\xd5\x00\x42\x00\x10\x82\x04\x41\x00\x48\x0d\x00\x20\x00\x10\x85\x03\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x0a\xa7\x21\x06\x42\x80\x80\x80\x80\x30\x21\x09\x41\x00\x21\x03\x42\x00\x21\x0c\x02\x40\x03\x40\x20\x00\x20\x09\x10\xcd\x01\x20\x00\x20\x01\x20\x0a\x10\x89\x08\x22\x09\x42\x80\x80\x80\x80\x70\x83\x22\x0d\x42\x80\x80\x80\x80\x20\x51\x0d\x01\x20\x0d\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x00\x20\x00\x20\x09\x42\x00\x10\xbb\x03\x10\xf2\x03\x22\x0d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x0d\x10\xa3\x05\x21\x07\x20\x00\x20\x0b\x20\x0c\x20\x0d\x10\xa8\x06\x41\x00\x48\x0d\x03\x02\x40\x20\x07\x45\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x00\x20\x01\x41\xd5\x00\x20\x01\x41\x00\x10\xb4\x01\x10\xfc\x05\x41\x00\x48\x0d\x04\x02\x40\x02\x40\x20\x06\x20\x04\x29\x03\x08\x20\x05\x10\x8a\x08\x22\x0d\x42\x80\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x0d\x42\xff\xff\xff\xff\x0f\x83\x21\x0d\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x0d\xb9\xbd\x22\x0d\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x0d\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x0d\x0b\x20\x00\x20\x01\x41\xd5\x00\x20\x0d\x10\x82\x04\x41\x7f\x4c\x0d\x04\x0b\x20\x0c\x42\x01\x7c\x21\x0c\x20\x03\x41\x7f\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x02\x40\x20\x03\x45\x0d\x00\x20\x0b\x21\x08\x0c\x03\x0b\x20\x00\x20\x0b\x10\xcd\x01\x42\x80\x80\x80\x80\x20\x21\x08\x0c\x02\x0b\x42\x80\x80\x80\x80\x30\x21\x0b\x0b\x20\x00\x20\x0b\x10\xcd\x01\x0b\x20\x00\x20\x09\x10\xcd\x01\x20\x00\x20\x0a\x10\xcd\x01\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x08\x0b\xdc\x04\x02\x02\x7f\x06\x7e\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x01\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x0c\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x42\x80\x80\x80\x80\x30\x21\x07\x02\x40\x02\x40\x20\x00\x20\x03\x29\x03\x00\x10\xe6\x02\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x09\x42\x80\x80\x80\x80\x30\x21\x0a\x42\x80\x80\x80\x80\x30\x21\x0b\x0c\x01\x0b\x02\x40\x02\x40\x02\x40\x20\x00\x20\x01\x20\x00\x29\x03\x48\x10\xbd\x06\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x09\x0c\x01\x0b\x20\x00\x20\x00\x20\x01\x41\xed\x00\x20\x01\x41\x00\x10\xb4\x01\x10\xf2\x03\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x0a\x0c\x01\x0b\x20\x04\x20\x09\x37\x03\x18\x20\x04\x20\x01\x37\x03\x10\x20\x00\x20\x0b\x41\x02\x20\x04\x41\x10\x6a\x10\xdb\x04\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x00\x20\x01\x41\xd5\x00\x20\x01\x41\x00\x10\xb4\x01\x10\xfc\x05\x0d\x00\x02\x40\x02\x40\x20\x04\x29\x03\x08\x22\x01\x42\x80\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x01\x42\xff\xff\xff\xff\x0f\x83\x21\x01\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x01\xb9\xbd\x22\x01\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x01\x0b\x20\x00\x20\x0a\x41\xd5\x00\x20\x01\x10\x82\x04\x41\x00\x48\x0d\x00\x20\x00\x41\x2e\x10\xc9\x03\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x41\x20\x10\xc0\x02\x22\x03\x45\x0d\x00\x20\x03\x20\x08\x37\x03\x08\x20\x03\x20\x0a\x37\x03\x00\x20\x03\x20\x09\xa7\x22\x05\x41\xe7\x00\x41\x00\x10\xf3\x05\x41\x7f\x73\x41\x1f\x76\x36\x02\x10\x20\x05\x41\xf5\x00\x41\x00\x10\xf3\x05\x21\x05\x20\x03\x41\x00\x36\x02\x18\x20\x03\x20\x05\x41\x7f\x73\x41\x1f\x76\x36\x02\x14\x02\x40\x20\x07\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x07\xa7\x20\x03\x36\x02\x20\x0b\x20\x00\x20\x0b\x10\xcd\x01\x20\x00\x20\x09\x10\xcd\x01\x20\x07\x21\x06\x0c\x01\x0b\x20\x00\x20\x08\x10\xcd\x01\x20\x00\x20\x0b\x10\xcd\x01\x20\x00\x20\x09\x10\xcd\x01\x20\x00\x20\x0a\x10\xcd\x01\x20\x00\x20\x07\x10\xcd\x01\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x06\x0b\xf9\x02\x01\x06\x7e\x02\x40\x20\x01\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x04\x42\x80\x80\x80\x80\x30\x21\x05\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x20\x03\x29\x03\x00\x10\xe6\x02\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x07\x0c\x01\x0b\x20\x00\x20\x01\x41\xd5\x00\x20\x01\x41\x00\x10\xb4\x01\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x00\x20\x07\x42\x00\x10\x8d\x03\x0d\x00\x20\x00\x20\x01\x41\xd5\x00\x42\x00\x10\x82\x04\x41\x00\x48\x0d\x01\x0b\x20\x00\x20\x01\x20\x06\x10\x89\x08\x22\x08\x42\x80\x80\x80\x80\x70\x83\x22\x09\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x01\x41\xd5\x00\x20\x01\x41\x00\x10\xb4\x01\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x02\x40\x02\x40\x20\x00\x20\x05\x20\x07\x10\x8d\x03\x45\x0d\x00\x20\x00\x20\x07\x10\xcd\x01\x0c\x01\x0b\x20\x00\x20\x01\x41\xd5\x00\x20\x07\x10\x82\x04\x41\x00\x4e\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x07\x0c\x02\x0b\x20\x00\x20\x06\x10\xcd\x01\x20\x00\x20\x05\x10\xcd\x01\x42\xff\xff\xff\xff\x0f\x21\x04\x20\x09\x42\x80\x80\x80\x80\x20\x51\x0d\x02\x20\x00\x20\x08\x41\xd7\x00\x20\x08\x41\x00\x10\xb4\x01\x21\x01\x20\x00\x20\x08\x10\xcd\x01\x20\x01\x0f\x0b\x42\x80\x80\x80\x80\x30\x21\x08\x0b\x20\x00\x20\x08\x10\xcd\x01\x20\x00\x20\x06\x10\xcd\x01\x20\x00\x20\x05\x10\xcd\x01\x20\x00\x20\x07\x10\xcd\x01\x0b\x20\x04\x0b\xb6\x08\x02\x05\x7f\x0e\x7e\x23\x00\x41\x30\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x01\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0c\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x09\x02\x40\x02\x40\x02\x40\x20\x00\x20\x03\x29\x03\x00\x10\xe6\x02\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x0b\x42\x80\x80\x80\x80\x30\x21\x01\x42\x80\x80\x80\x80\x30\x21\x0c\x42\x80\x80\x80\x80\x30\x21\x0d\x0c\x01\x0b\x02\x40\x20\x00\x20\x01\x20\x00\x29\x03\x48\x10\xbd\x06\x22\x0d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x0b\x42\x80\x80\x80\x80\x30\x21\x01\x42\x80\x80\x80\x80\x30\x21\x0c\x0c\x01\x0b\x02\x40\x02\x40\x20\x00\x20\x00\x20\x01\x41\xed\x00\x20\x01\x41\x00\x10\xb4\x01\x10\xf2\x03\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x0c\xa7\x22\x05\x41\xf5\x00\x41\x00\x10\xf3\x05\x21\x06\x02\x40\x20\x05\x41\xf9\x00\x41\x00\x10\xf3\x05\x41\x7f\x4a\x0d\x00\x20\x00\x41\xd2\xc7\x01\x20\x0c\x41\x8c\xf2\x02\x10\xc1\x03\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x0b\x20\x04\x20\x0c\x37\x03\x28\x20\x04\x20\x01\x37\x03\x20\x20\x00\x20\x0d\x41\x02\x20\x04\x41\x20\x6a\x10\xdb\x04\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x10\x85\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x42\x80\x80\x80\x80\x30\x21\x09\x02\x40\x02\x40\x20\x03\x29\x03\x08\x22\x0e\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x41\x7f\x21\x03\x20\x04\x41\x7f\x36\x02\x1c\x0c\x01\x0b\x20\x00\x20\x04\x41\x1c\x6a\x20\x0e\x10\xc9\x04\x41\x00\x48\x0d\x03\x20\x04\x28\x02\x1c\x22\x03\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x09\x0c\x04\x0b\x02\x40\x02\x40\x02\x40\x20\x0a\xa7\x22\x07\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x22\x05\x45\x0d\x00\x20\x06\x41\x7f\x73\x41\x1f\x76\x21\x06\x42\x00\x21\x0f\x42\x00\x20\x03\xad\x22\x10\x7d\x21\x11\x20\x05\xad\x21\x12\x42\x80\x80\x80\x80\x30\x21\x09\x41\x00\x21\x08\x0c\x01\x0b\x20\x00\x20\x0b\x20\x0a\x10\x89\x08\x22\x09\x42\x80\x80\x80\x80\x70\x83\x22\x0e\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x04\x20\x0e\x42\x80\x80\x80\x80\x20\x52\x0d\x05\x20\x00\x20\x07\x41\x00\x41\x00\x10\xdc\x05\x21\x0e\x42\x00\x21\x0f\x0c\x01\x0b\x03\x40\x20\x08\xad\x21\x13\x20\x08\x21\x03\x03\x40\x02\x40\x20\x03\x20\x05\x49\x0d\x00\x20\x00\x20\x07\x20\x05\x20\x08\x20\x08\x20\x05\x4b\x1b\x20\x05\x10\xdc\x05\x21\x0e\x0c\x03\x0b\x20\x00\x20\x0b\x41\xd5\x00\x20\x03\xad\x22\x0e\x10\x82\x04\x41\x00\x48\x0d\x05\x20\x00\x20\x09\x10\xcd\x01\x02\x40\x02\x40\x20\x00\x20\x0b\x20\x0a\x10\x89\x08\x22\x09\x42\x80\x80\x80\x80\x70\x83\x22\x14\x42\x80\x80\x80\x80\x20\x51\x0d\x00\x20\x14\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x07\x20\x00\x20\x04\x41\x10\x6a\x20\x00\x20\x0b\x41\xd5\x00\x20\x0b\x41\x00\x10\xb4\x01\x10\xfc\x05\x0d\x07\x02\x40\x20\x04\x29\x03\x10\x22\x14\x20\x12\x57\x0d\x00\x20\x04\x20\x12\x37\x03\x10\x20\x12\x21\x14\x0b\x20\x14\x20\x13\x51\x0d\x00\x20\x00\x20\x07\x20\x08\x20\x03\x10\xdc\x05\x22\x0e\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x07\x20\x00\x20\x01\x20\x0f\x20\x0e\x10\xa7\x05\x41\x00\x48\x0d\x07\x20\x0f\x42\x01\x7c\x20\x10\x51\x0d\x08\x20\x00\x20\x04\x41\x08\x6a\x20\x09\x10\xfb\x05\x0d\x07\x20\x14\xa7\x21\x08\x20\x11\x20\x0f\x7c\x21\x15\x42\x01\x21\x0e\x20\x04\x29\x03\x08\x21\x16\x03\x40\x20\x0f\x20\x0e\x7c\x21\x14\x20\x0e\x20\x16\x59\x0d\x02\x20\x00\x20\x00\x20\x09\x20\x0e\x10\xf4\x05\x10\xf2\x03\x22\x13\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x08\x20\x00\x20\x01\x20\x14\x20\x13\x10\xa7\x05\x41\x00\x48\x0d\x08\x20\x15\x20\x0e\x42\x01\x7c\x22\x0e\x7c\x50\x0d\x09\x0c\x00\x0b\x00\x0b\x20\x07\x20\x0e\x20\x06\x10\x8a\x08\xa7\x21\x03\x0c\x01\x0b\x0b\x20\x14\x21\x0f\x0c\x00\x0b\x00\x0b\x20\x0e\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x20\x00\x20\x01\x20\x0f\x20\x0e\x10\xa7\x05\x41\x7f\x4a\x0d\x03\x0c\x02\x0b\x42\x80\x80\x80\x80\x30\x21\x0b\x0b\x42\x80\x80\x80\x80\x30\x21\x01\x0b\x20\x00\x20\x01\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x00\x20\x0a\x10\xcd\x01\x20\x00\x20\x0d\x10\xcd\x01\x20\x00\x20\x0b\x10\xcd\x01\x20\x00\x20\x0c\x10\xcd\x01\x20\x00\x20\x09\x10\xcd\x01\x0b\x20\x04\x41\x30\x6a\x24\x00\x20\x01\x0b\x8e\x03\x02\x03\x7f\x04\x7e\x23\x00\x41\xe0\x00\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x00\x10\xe1\x03\x22\x05\x45\x0d\x00\x20\x04\x28\x02\x0c\x21\x06\x20\x04\x41\x10\x6a\x41\x00\x41\xd0\x00\x10\x74\x1a\x20\x04\x41\xdc\xe3\x01\x36\x02\x1c\x20\x04\x20\x00\x36\x02\x10\x20\x04\x41\x01\x36\x02\x18\x20\x04\x41\x00\x36\x02\x5c\x20\x04\x42\xa0\x80\x80\x80\x10\x37\x03\x20\x20\x04\x20\x05\x36\x02\x48\x20\x04\x20\x05\x20\x06\x6a\x36\x02\x4c\x42\x80\x80\x80\x80\x30\x21\x07\x02\x40\x02\x40\x20\x04\x41\x10\x6a\x10\x9b\x08\x0d\x00\x20\x04\x41\x10\x6a\x10\x9c\x08\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x04\x28\x02\x20\x41\xac\x7f\x46\x0d\x01\x20\x04\x41\x10\x6a\x41\xa3\xf4\x02\x41\x00\x10\x8a\x07\x0b\x20\x00\x20\x07\x10\xcd\x01\x20\x04\x41\x10\x6a\x20\x04\x41\x20\x6a\x10\x84\x07\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x0b\x20\x00\x20\x05\x10\xcf\x02\x02\x40\x20\x02\x41\x02\x48\x0d\x00\x20\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x03\x29\x03\x08\x22\x08\x10\xf0\x02\x45\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x09\x02\x40\x20\x00\x10\xc1\x01\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x07\x10\xcd\x01\x0c\x03\x0b\x02\x40\x20\x00\x20\x0a\x41\x2f\x20\x07\x41\x07\x10\xc4\x01\x41\x7f\x4a\x0d\x00\x20\x00\x20\x0a\x10\xcd\x01\x0c\x02\x0b\x20\x00\x20\x0a\x41\x2f\x20\x08\x10\x9d\x08\x21\x09\x20\x00\x20\x0a\x10\xcd\x01\x0c\x02\x0b\x20\x07\x21\x09\x0c\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x09\x0b\x20\x04\x41\xe0\x00\x6a\x24\x00\x20\x09\x0b\xaf\x0a\x02\x08\x7f\x01\x7e\x23\x00\x41\x90\x01\x6b\x22\x01\x24\x00\x02\x40\x02\x40\x02\x40\x20\x00\x28\x02\x00\x28\x02\x10\x28\x02\x78\x20\x01\x22\x02\x4d\x0d\x00\x20\x00\x41\x98\x9d\x03\x41\x00\x10\x8a\x07\x0c\x01\x0b\x20\x00\x20\x00\x41\x10\x6a\x22\x03\x10\x84\x07\x20\x00\x20\x00\x28\x02\x38\x22\x01\x36\x02\x34\x20\x00\x20\x00\x41\x14\x6a\x28\x02\x00\x36\x02\x04\x20\x02\x20\x01\x36\x02\x04\x02\x40\x03\x40\x20\x00\x20\x01\x36\x02\x18\x20\x00\x20\x00\x28\x02\x08\x22\x04\x36\x02\x14\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x2c\x00\x00\x22\x05\x41\xff\x01\x71\x22\x06\x41\xfa\x00\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x06\x0e\x7b\x00\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x07\x05\x06\x06\x04\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x07\x0a\x02\x0a\x0f\x0a\x0a\x01\x0a\x0a\x0a\x0c\x0a\x0b\x0a\x08\x09\x0d\x0d\x0d\x0d\x0d\x0d\x0d\x0d\x0d\x0a\x0a\x0a\x0a\x0a\x0a\x0a\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0a\x0a\x0a\x0a\x0f\x0a\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x00\x0b\x41\x00\x21\x05\x20\x00\x28\x02\x3c\x20\x01\x4b\x0d\x0d\x20\x03\x41\xac\x7f\x36\x02\x00\x0c\x0f\x0b\x41\x27\x21\x05\x20\x00\x28\x02\x4c\x0d\x01\x0c\x0c\x0b\x41\x22\x21\x05\x0b\x20\x00\x20\x05\x41\x01\x20\x01\x41\x01\x6a\x20\x03\x20\x02\x41\x04\x6a\x10\x8c\x07\x0d\x0f\x0c\x0c\x0b\x20\x01\x2d\x00\x01\x41\x0a\x47\x0d\x00\x20\x02\x20\x01\x41\x01\x6a\x22\x01\x36\x02\x04\x0b\x20\x00\x20\x04\x41\x01\x6a\x36\x02\x08\x0c\x01\x0b\x20\x00\x28\x02\x4c\x45\x0d\x07\x0b\x20\x02\x20\x01\x41\x01\x6a\x22\x01\x36\x02\x04\x0c\x0a\x0b\x02\x40\x20\x00\x28\x02\x4c\x0d\x00\x41\x2f\x21\x05\x0c\x06\x0b\x41\x2f\x21\x05\x20\x01\x2d\x00\x01\x22\x06\x41\x2f\x46\x0d\x08\x20\x06\x41\x2a\x47\x0d\x05\x20\x01\x41\x02\x6a\x21\x01\x03\x40\x20\x02\x20\x01\x36\x02\x04\x02\x40\x02\x40\x03\x40\x02\x40\x02\x40\x20\x01\x2d\x00\x00\x22\x06\x41\x76\x6a\x22\x05\x41\x03\x4d\x0d\x00\x02\x40\x20\x06\x41\x2a\x46\x0d\x00\x20\x06\x0d\x02\x20\x01\x20\x00\x28\x02\x3c\x49\x0d\x05\x20\x00\x41\xce\xeb\x02\x41\x00\x10\x8a\x07\x0c\x11\x0b\x20\x01\x2d\x00\x01\x41\x2f\x47\x0d\x04\x20\x02\x20\x01\x41\x02\x6a\x22\x01\x36\x02\x04\x0c\x0f\x0b\x20\x05\x0e\x04\x02\x00\x00\x03\x02\x0b\x20\x06\x41\x18\x74\x41\x18\x75\x41\x7f\x4a\x0d\x02\x20\x01\x41\x06\x20\x02\x41\x04\x6a\x10\x9e\x04\x21\x06\x20\x02\x28\x02\x04\x21\x01\x20\x06\x41\x7f\x47\x0d\x00\x0c\x02\x0b\x00\x0b\x20\x00\x20\x00\x28\x02\x08\x41\x01\x6a\x36\x02\x08\x0b\x20\x01\x41\x01\x6a\x21\x01\x0c\x00\x0b\x00\x0b\x41\x30\x21\x05\x20\x01\x2d\x00\x01\x41\x50\x6a\x41\x09\x4b\x0d\x03\x0c\x04\x0b\x20\x05\x41\x7f\x4a\x0d\x03\x20\x00\x41\xd4\xec\x02\x41\x00\x10\x8a\x07\x0c\x08\x0b\x41\x2d\x21\x05\x20\x01\x2d\x00\x01\x41\x50\x6a\x41\x09\x4b\x0d\x02\x0c\x01\x0b\x41\x2b\x21\x05\x20\x00\x28\x02\x4c\x45\x0d\x01\x20\x01\x2d\x00\x01\x41\x50\x6a\x41\x09\x4b\x0d\x01\x0b\x20\x00\x28\x02\x00\x20\x01\x20\x02\x41\x04\x6a\x41\x00\x41\x0a\x20\x00\x28\x02\x4c\x22\x06\x1b\x20\x06\x41\x00\x47\x41\x02\x74\x10\x9d\x04\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x05\x20\x00\x41\x80\x7f\x36\x02\x10\x20\x00\x41\x20\x6a\x20\x09\x37\x03\x00\x0c\x02\x0b\x20\x03\x20\x05\x41\xff\x01\x71\x36\x02\x00\x20\x02\x20\x01\x41\x01\x6a\x36\x02\x04\x0c\x01\x0b\x20\x02\x20\x01\x41\x01\x6a\x22\x01\x36\x02\x04\x41\x80\x01\x21\x04\x20\x02\x41\x80\x01\x36\x02\x08\x20\x02\x20\x02\x41\x10\x6a\x36\x02\x0c\x20\x02\x41\x10\x6a\x21\x07\x41\x00\x21\x06\x02\x40\x03\x40\x20\x04\x41\x7a\x6a\x21\x08\x02\x40\x03\x40\x20\x07\x20\x06\x6a\x20\x05\x3a\x00\x00\x20\x01\x2d\x00\x00\x22\x04\x41\x18\x74\x41\x18\x75\x22\x05\x41\x00\x48\x0d\x01\x20\x04\x41\x03\x76\x41\x1c\x71\x41\xd0\xa2\x03\x6a\x28\x02\x00\x20\x04\x41\x1f\x71\x76\x41\x01\x71\x45\x0d\x01\x20\x01\x41\x01\x6a\x21\x01\x20\x06\x41\x01\x6a\x22\x06\x20\x08\x49\x0d\x00\x0b\x20\x00\x28\x02\x00\x20\x02\x41\x0c\x6a\x20\x02\x41\x08\x6a\x20\x02\x41\x10\x6a\x10\xfb\x07\x21\x04\x20\x02\x28\x02\x0c\x21\x07\x02\x40\x20\x04\x45\x0d\x00\x41\x00\x21\x06\x0c\x03\x0b\x20\x02\x28\x02\x08\x21\x04\x0c\x01\x0b\x0b\x20\x00\x28\x02\x00\x20\x07\x20\x06\x41\x01\x6a\x10\xb0\x04\x21\x06\x0b\x02\x40\x20\x07\x20\x02\x41\x10\x6a\x46\x0d\x00\x20\x00\x28\x02\x00\x28\x02\x10\x22\x05\x41\x10\x6a\x20\x07\x20\x05\x28\x02\x04\x11\x00\x00\x0b\x20\x02\x20\x01\x36\x02\x04\x20\x06\x45\x0d\x03\x20\x00\x41\x83\x7f\x36\x02\x10\x20\x00\x41\x24\x6a\x42\x00\x37\x02\x00\x20\x00\x41\x20\x6a\x20\x06\x36\x02\x00\x0b\x20\x00\x20\x02\x28\x02\x04\x36\x02\x38\x41\x00\x21\x01\x0c\x04\x0b\x20\x01\x41\x02\x6a\x21\x01\x03\x40\x20\x02\x20\x01\x36\x02\x04\x02\x40\x03\x40\x02\x40\x02\x40\x20\x01\x2d\x00\x00\x22\x06\x45\x0d\x00\x20\x06\x41\x76\x6a\x22\x05\x41\x03\x4b\x0d\x01\x20\x05\x0e\x04\x05\x01\x01\x05\x05\x0b\x20\x01\x20\x00\x28\x02\x3c\x4f\x0d\x04\x0c\x02\x0b\x20\x06\x41\x18\x74\x41\x18\x75\x41\x7f\x4a\x0d\x01\x02\x40\x20\x01\x41\x06\x20\x02\x41\x04\x6a\x10\x9e\x04\x22\x06\x41\x01\x72\x41\xa9\xc0\x00\x47\x0d\x00\x20\x02\x28\x02\x04\x21\x01\x0c\x04\x0b\x20\x02\x28\x02\x04\x21\x01\x20\x06\x41\x7f\x47\x0d\x00\x0b\x0b\x20\x01\x41\x01\x6a\x21\x01\x0c\x00\x0b\x00\x0b\x00\x0b\x20\x03\x41\xaa\x7f\x36\x02\x00\x0b\x41\x7f\x21\x01\x0b\x20\x02\x41\x90\x01\x6a\x24\x00\x20\x01\x0b\xbd\x05\x02\x04\x7f\x02\x7e\x23\x00\x41\x10\x6b\x22\x01\x24\x00\x20\x00\x28\x02\x00\x21\x02\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x28\x02\x10\x22\x03\x41\x80\x01\x6a\x22\x04\x41\x03\x4d\x0d\x00\x02\x40\x20\x03\x41\xac\x7f\x46\x0d\x00\x02\x40\x20\x03\x41\xdb\x00\x46\x0d\x00\x20\x03\x41\xfb\x00\x47\x0d\x05\x42\x80\x80\x80\x80\x20\x21\x05\x20\x00\x10\x9b\x08\x0d\x09\x20\x02\x10\xc1\x01\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x09\x02\x40\x20\x00\x28\x02\x10\x22\x03\x41\xfd\x00\x46\x0d\x00\x03\x40\x02\x40\x02\x40\x20\x03\x41\x81\x7f\x47\x0d\x00\x20\x02\x20\x00\x29\x03\x20\x10\xa3\x03\x22\x03\x0d\x01\x0c\x0d\x0b\x20\x03\x41\x83\x7f\x47\x0d\x06\x20\x00\x28\x02\x4c\x45\x0d\x06\x20\x02\x20\x00\x28\x02\x20\x10\xd9\x03\x21\x03\x0b\x02\x40\x02\x40\x20\x00\x10\x9b\x08\x0d\x00\x20\x00\x41\x3a\x10\xa2\x08\x0d\x00\x20\x00\x10\x9c\x08\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0b\x20\x02\x20\x03\x10\xe4\x02\x0c\x0c\x0b\x20\x02\x20\x05\x20\x03\x20\x06\x41\x07\x10\xc4\x01\x21\x04\x20\x02\x20\x03\x10\xe4\x02\x20\x04\x41\x00\x48\x0d\x0b\x20\x00\x28\x02\x10\x41\x2c\x47\x0d\x01\x20\x00\x10\x9b\x08\x0d\x0b\x20\x00\x28\x02\x10\x21\x03\x20\x00\x28\x02\x4c\x45\x0d\x00\x20\x03\x41\xfd\x00\x47\x0d\x00\x0b\x0b\x20\x00\x41\xfd\x00\x10\xa2\x08\x0d\x09\x0c\x0a\x0b\x42\x80\x80\x80\x80\x20\x21\x05\x20\x00\x10\x9b\x08\x0d\x08\x20\x02\x10\x85\x03\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x08\x02\x40\x20\x00\x28\x02\x10\x41\xdd\x00\x46\x0d\x00\x41\x00\x21\x03\x03\x40\x20\x00\x10\x9c\x08\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x0a\x20\x02\x20\x05\x20\x03\x20\x06\x41\x07\x10\x80\x03\x41\x00\x48\x0d\x0a\x20\x00\x28\x02\x10\x41\x2c\x47\x0d\x01\x20\x00\x10\x9b\x08\x0d\x0a\x20\x03\x41\x01\x6a\x21\x03\x20\x00\x28\x02\x4c\x45\x0d\x00\x20\x00\x28\x02\x10\x41\xdd\x00\x47\x0d\x00\x0b\x0b\x20\x00\x41\xdd\x00\x10\xa2\x08\x0d\x08\x0c\x09\x0b\x20\x00\x41\xf0\xf4\x02\x41\x00\x10\x8a\x07\x0c\x04\x0b\x20\x04\x0e\x04\x04\x05\x02\x01\x04\x0b\x20\x00\x41\xbe\xf4\x02\x41\x00\x10\x8a\x07\x0c\x05\x0b\x20\x00\x41\x20\x6a\x28\x02\x00\x41\x7f\x6a\x22\x03\x41\x02\x4b\x0d\x00\x20\x03\x41\x03\x74\x41\xd8\xf4\x02\x6a\x29\x03\x00\x21\x05\x20\x00\x10\x9b\x08\x0d\x04\x0c\x05\x0b\x20\x00\x28\x02\x38\x21\x03\x20\x01\x20\x00\x41\x18\x6a\x28\x02\x00\x22\x04\x36\x02\x04\x20\x01\x20\x03\x20\x04\x6b\x36\x02\x00\x20\x00\x41\x88\xf5\x02\x20\x01\x10\x8a\x07\x0b\x42\x80\x80\x80\x80\x20\x21\x05\x0c\x02\x0b\x20\x00\x41\x20\x6a\x29\x03\x00\x21\x05\x20\x00\x10\x9b\x08\x0d\x01\x0c\x02\x0b\x20\x00\x41\x20\x6a\x29\x03\x00\x10\xc0\x01\x21\x05\x20\x00\x10\x9b\x08\x45\x0d\x01\x0b\x20\x02\x20\x05\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0b\x20\x01\x41\x10\x6a\x24\x00\x20\x05\x0b\x92\x04\x02\x08\x7f\x03\x7e\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x20\x04\x22\x04\x41\x00\x36\x02\x0c\x20\x04\x41\x00\x36\x02\x08\x02\x40\x02\x40\x02\x40\x20\x00\x28\x02\x10\x28\x02\x78\x20\x04\x4d\x0d\x00\x20\x00\x10\xfb\x02\x0c\x01\x0b\x02\x40\x20\x00\x20\x01\x20\x02\x20\x01\x41\x00\x10\xb4\x01\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x0c\x21\x01\x0c\x02\x0b\x41\x00\x21\x05\x41\x00\x21\x06\x02\x40\x02\x40\x20\x0c\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x41\x00\x21\x06\x20\x00\x20\x0c\x10\x9b\x06\x22\x07\x41\x00\x48\x0d\x01\x02\x40\x02\x40\x20\x07\x45\x0d\x00\x41\x00\x21\x06\x20\x00\x20\x04\x41\x0c\x6a\x20\x0c\x10\xb6\x03\x45\x0d\x01\x0c\x03\x0b\x20\x00\x20\x04\x41\x08\x6a\x20\x04\x41\x0c\x6a\x20\x0c\xa7\x41\x11\x10\x9d\x03\x21\x08\x20\x04\x28\x02\x08\x21\x06\x20\x08\x41\x00\x48\x0d\x02\x0b\x20\x06\x41\x04\x6a\x21\x09\x20\x04\x28\x02\x0c\x21\x05\x41\x00\x21\x0a\x03\x40\x20\x05\x20\x0a\x46\x0d\x01\x02\x40\x02\x40\x20\x07\x45\x0d\x00\x20\x00\x20\x0a\x10\xd2\x04\x22\x08\x45\x0d\x04\x0c\x01\x0b\x20\x00\x20\x09\x28\x02\x00\x10\xd9\x03\x21\x08\x0b\x02\x40\x02\x40\x02\x40\x20\x00\x20\x0c\x20\x08\x20\x03\x10\x9d\x08\x22\x0d\x42\x80\x80\x80\x80\x70\x83\x22\x0e\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x0e\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x20\x00\x20\x08\x10\xe4\x02\x0c\x05\x0b\x20\x00\x20\x0c\x20\x08\x41\x00\x10\xa1\x03\x21\x0b\x0c\x01\x0b\x20\x00\x20\x0c\x20\x08\x20\x0d\x41\x07\x10\xc4\x01\x21\x0b\x0b\x20\x00\x20\x08\x10\xe4\x02\x20\x09\x41\x08\x6a\x21\x09\x20\x0a\x41\x01\x6a\x21\x0a\x20\x0b\x41\x00\x48\x0d\x02\x0c\x00\x0b\x00\x0b\x20\x00\x20\x06\x20\x05\x10\x9e\x03\x20\x04\x41\x00\x36\x02\x08\x41\x00\x21\x06\x20\x00\x20\x02\x10\xdd\x01\x22\x0e\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x04\x20\x0c\x37\x03\x18\x20\x04\x20\x0e\x37\x03\x10\x20\x00\x20\x03\x20\x01\x41\x02\x20\x04\x41\x10\x6a\x10\xb5\x01\x21\x01\x20\x00\x20\x0e\x10\xcd\x01\x20\x00\x20\x0c\x10\xcd\x01\x0c\x02\x0b\x20\x00\x20\x06\x20\x04\x28\x02\x0c\x10\x9e\x03\x20\x00\x20\x0c\x10\xcd\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x01\x0b\xe2\x08\x02\x02\x7f\x0a\x7e\x23\x00\x41\xe0\x00\x6b\x22\x04\x24\x00\x20\x03\x29\x03\x10\x21\x06\x20\x03\x29\x03\x08\x21\x07\x20\x03\x29\x03\x00\x21\x08\x42\x80\x80\x80\x80\x30\x21\x09\x20\x04\x42\x80\x80\x80\x80\x30\x37\x03\x30\x20\x04\x42\x80\x80\x80\x80\x30\x37\x03\x28\x20\x04\x42\x80\x80\x80\x80\x30\x37\x03\x18\x20\x04\x20\x04\x41\xc8\x00\x6a\x36\x02\x40\x20\x04\x20\x00\x41\x2f\x10\xc5\x01\x37\x03\x38\x20\x00\x20\x04\x41\xc8\x00\x6a\x41\x00\x10\xb3\x04\x1a\x20\x04\x20\x00\x10\x85\x03\x22\x0a\x37\x03\x20\x42\x80\x80\x80\x80\xe0\x00\x21\x0b\x02\x40\x02\x40\x20\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x20\x07\x10\xf0\x02\x45\x0d\x00\x20\x04\x20\x07\x37\x03\x18\x0c\x01\x0b\x20\x00\x20\x07\x10\x9b\x06\x22\x03\x41\x00\x48\x0d\x03\x20\x03\x45\x0d\x00\x20\x04\x20\x00\x10\x85\x03\x22\x0a\x37\x03\x28\x42\x80\x80\x80\x80\xe0\x00\x21\x0b\x20\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x00\x20\x04\x41\x08\x6a\x20\x07\x10\xfb\x05\x0d\x03\x42\x00\x21\x0c\x20\x04\x29\x03\x08\x21\x0d\x42\x00\x21\x0e\x03\x40\x20\x0c\x20\x0d\x59\x0d\x01\x20\x04\x20\x00\x20\x07\x20\x0c\x10\xf4\x05\x22\x0a\x37\x03\x10\x42\x80\x80\x80\x80\xe0\x00\x21\x0b\x20\x0a\x42\x80\x80\x80\x80\x70\x83\x22\x0f\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x04\x02\x40\x02\x40\x02\x40\x02\x40\x20\x0a\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x0a\xa7\x2f\x01\x06\x41\xfe\xff\x03\x71\x41\x04\x47\x0d\x02\x20\x04\x20\x00\x20\x0a\x10\xf2\x03\x22\x0a\x37\x03\x10\x20\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0c\x06\x0b\x02\x40\x02\x40\x20\x0a\x42\x20\x88\xa7\x22\x03\x45\x0d\x00\x20\x03\x41\x0b\x6a\x41\x12\x49\x0d\x01\x0b\x20\x04\x20\x00\x20\x0a\x10\xf2\x03\x22\x0a\x37\x03\x10\x20\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0c\x06\x0b\x20\x0f\x42\x80\x80\x80\x80\x90\x7f\x52\x0d\x01\x0b\x02\x40\x20\x00\x20\x04\x29\x03\x28\x41\x01\x20\x04\x41\x10\x6a\x10\xac\x06\x22\x0f\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x0a\x10\xcd\x01\x0c\x07\x0b\x20\x00\x20\x0f\x10\x9a\x03\x0d\x00\x20\x00\x20\x04\x29\x03\x28\x20\x0e\x20\x0a\x10\xa8\x06\x1a\x20\x0e\x42\x01\x7c\x21\x0e\x0c\x01\x0b\x20\x00\x20\x0a\x10\xcd\x01\x0b\x20\x0c\x42\x01\x7c\x21\x0c\x0c\x00\x0b\x00\x0b\x02\x40\x20\x06\x10\xc0\x01\x22\x07\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x02\x40\x20\x07\xa7\x2f\x01\x06\x41\x7c\x6a\x22\x03\x41\x01\x4b\x0d\x00\x02\x40\x02\x40\x20\x03\x0e\x02\x00\x01\x00\x0b\x20\x00\x20\x07\x10\xed\x03\x21\x07\x0c\x01\x0b\x20\x00\x20\x07\x10\xf2\x03\x21\x07\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x0b\x20\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x07\x10\xcd\x01\x0c\x03\x0b\x02\x40\x02\x40\x02\x40\x20\x07\x42\x20\x88\xa7\x22\x03\x45\x0d\x00\x20\x03\x41\x0b\x6a\x41\x12\x49\x0d\x01\x0b\x20\x00\x20\x04\x41\x04\x6a\x20\x07\x41\x0a\x41\x00\x10\xd3\x05\x0d\x02\x20\x00\x41\xda\xf3\x02\x20\x04\x28\x02\x04\x10\xcb\x02\x21\x0a\x0c\x01\x0b\x02\x40\x20\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x90\x7f\x52\x0d\x00\x20\x00\x20\x07\xa7\x22\x03\x41\x00\x20\x03\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x22\x03\x41\x0a\x20\x03\x41\x0a\x49\x1b\x10\xdc\x05\x21\x0a\x0c\x01\x0b\x20\x04\x29\x03\x38\x10\xc0\x01\x21\x0a\x0b\x20\x04\x20\x0a\x37\x03\x30\x20\x00\x20\x07\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x0b\x20\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x20\x00\x10\xc1\x01\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x09\x41\x2f\x20\x08\x10\xc0\x01\x22\x07\x41\x07\x10\xc4\x01\x41\x00\x48\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x0b\x20\x00\x20\x04\x41\x18\x6a\x20\x09\x20\x07\x10\xc0\x01\x20\x04\x29\x03\x38\x22\x0a\x10\x9f\x08\x22\x06\x42\x80\x80\x80\x80\x70\x83\x22\x07\x42\x80\x80\x80\x80\x30\x51\x0d\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x0b\x20\x07\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x0b\x0c\x01\x0b\x20\x00\x20\x04\x41\x18\x6a\x20\x06\x20\x0a\x10\xa0\x08\x0d\x00\x20\x04\x28\x02\x40\x10\xf6\x03\x21\x0b\x0c\x01\x0b\x20\x04\x28\x02\x40\x22\x03\x28\x02\x00\x28\x02\x10\x22\x05\x41\x10\x6a\x20\x03\x28\x02\x04\x20\x05\x28\x02\x04\x11\x00\x00\x20\x03\x41\x00\x36\x02\x04\x0b\x20\x00\x20\x09\x10\xcd\x01\x20\x00\x20\x04\x29\x03\x38\x10\xcd\x01\x20\x00\x20\x04\x29\x03\x30\x10\xcd\x01\x20\x00\x20\x04\x29\x03\x28\x10\xcd\x01\x20\x00\x20\x04\x29\x03\x20\x10\xcd\x01\x20\x04\x41\xe0\x00\x6a\x24\x00\x20\x0b\x0b\xf9\x02\x01\x01\x7f\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x20\x05\x20\x04\x37\x03\x18\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x03\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x03\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x7e\x52\x0d\x01\x0b\x02\x40\x20\x00\x20\x03\x41\x91\x01\x20\x03\x41\x00\x10\xb4\x01\x22\x04\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x03\x21\x04\x0c\x03\x0b\x02\x40\x20\x00\x20\x04\x10\xf0\x02\x45\x0d\x00\x20\x00\x20\x04\x20\x03\x41\x01\x20\x05\x41\x18\x6a\x10\xef\x02\x21\x04\x20\x00\x20\x03\x10\xcd\x01\x20\x04\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x02\x0c\x03\x0b\x20\x00\x20\x04\x10\xcd\x01\x0b\x20\x03\x21\x04\x0b\x02\x40\x02\x40\x20\x01\x29\x03\x00\x22\x03\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x04\x21\x03\x0c\x01\x0b\x20\x05\x20\x04\x37\x03\x08\x20\x05\x20\x05\x29\x03\x18\x37\x03\x00\x20\x00\x20\x03\x20\x02\x41\x02\x20\x05\x10\xb5\x01\x21\x03\x20\x00\x20\x04\x10\xcd\x01\x20\x03\x21\x04\x20\x03\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x0b\x02\x40\x41\x07\x20\x03\x42\x20\x88\xa7\x22\x01\x20\x01\x41\x0b\x6a\x41\x11\x4b\x1b\x41\x0a\x6a\x22\x01\x41\x11\x4b\x0d\x00\x41\x01\x20\x01\x74\x41\x8b\xb8\x0c\x71\x0d\x02\x20\x01\x41\x09\x47\x0d\x00\x20\x00\x20\x03\x10\xf0\x02\x45\x0d\x02\x0b\x20\x00\x20\x03\x10\xcd\x01\x42\x80\x80\x80\x80\x30\x21\x03\x0c\x01\x0b\x20\x00\x20\x04\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x03\x0b\x20\x05\x41\x20\x6a\x24\x00\x20\x03\x0b\xf8\x0e\x03\x04\x7f\x09\x7e\x01\x7c\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x04\x20\x02\x37\x03\x08\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x41\x07\x20\x02\x42\x20\x88\xa7\x22\x05\x20\x05\x41\x0b\x6a\x41\x11\x4b\x1b\x41\x0a\x6a\x22\x05\x41\x11\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x05\x0e\x12\x02\x06\x03\x04\x03\x03\x03\x03\x03\x00\x06\x06\x06\x03\x03\x03\x03\x01\x02\x0b\x20\x02\xa7\x22\x06\x2f\x01\x06\x22\x05\x41\x7c\x6a\x22\x07\x41\x02\x4d\x0d\x04\x02\x40\x20\x05\x41\x5f\x6a\x22\x05\x41\x01\x4b\x0d\x00\x02\x40\x02\x40\x20\x05\x0e\x02\x01\x00\x01\x0b\x20\x01\x28\x02\x28\x20\x02\x10\xe5\x05\x21\x05\x0c\x13\x0b\x20\x00\x41\xe5\xf3\x02\x41\x00\x10\xb2\x02\x0c\x0b\x0b\x42\x80\x80\x80\x80\x30\x21\x08\x20\x00\x20\x01\x29\x03\x08\x41\x01\x20\x04\x41\x08\x6a\x10\xac\x06\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x09\x02\x40\x20\x00\x20\x09\x10\x9a\x03\x45\x0d\x00\x20\x00\x41\x8c\xf4\x02\x41\x00\x10\xb2\x02\x0c\x0a\x0b\x02\x40\x20\x00\x20\x03\x10\xc0\x01\x22\x0a\x20\x01\x29\x03\x18\x10\xc0\x01\x10\xae\x03\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x03\x42\x80\x80\x80\x80\x30\x21\x0c\x0c\x09\x0b\x02\x40\x02\x40\x20\x01\x29\x03\x18\x10\xa3\x05\x0d\x00\x02\x40\x02\x40\x20\x00\x41\x9f\xf4\x02\x20\x0b\x10\xc0\x01\x22\x0d\x41\xd2\xc7\x01\x10\xc1\x03\x22\x03\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x0c\x0c\x01\x0b\x20\x00\x41\xa1\xf4\x02\x10\xc7\x02\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x02\x0b\x42\x80\x80\x80\x80\x30\x21\x09\x20\x0d\x21\x0b\x0c\x12\x0b\x20\x01\x29\x03\x20\x10\xc0\x01\x21\x03\x20\x01\x29\x03\x20\x10\xc0\x01\x21\x0c\x0b\x20\x00\x20\x00\x20\x01\x29\x03\x08\x41\x01\x20\x04\x41\x08\x6a\x41\x00\x10\xb4\x06\x10\xa5\x06\x0d\x08\x20\x00\x20\x02\x10\x9b\x06\x22\x05\x41\x00\x48\x0d\x08\x02\x40\x20\x05\x45\x0d\x00\x20\x00\x20\x04\x20\x02\x10\xfb\x05\x0d\x09\x20\x01\x28\x02\x28\x41\xdb\x00\x10\xb4\x04\x1a\x20\x04\x29\x03\x00\x21\x0e\x42\x00\x21\x0d\x02\x40\x03\x40\x20\x0d\x20\x0e\x59\x0d\x01\x20\x01\x28\x02\x28\x21\x05\x02\x40\x02\x40\x20\x0d\x42\x00\x52\x0d\x00\x20\x05\x20\x03\x10\xa6\x05\x1a\x20\x00\x20\x02\x42\x00\x10\xbb\x03\x21\x0f\x0c\x01\x0b\x20\x05\x41\x2c\x10\xb4\x04\x1a\x20\x01\x28\x02\x28\x20\x03\x10\xa6\x05\x1a\x20\x00\x20\x02\x20\x0d\x10\xf4\x05\x21\x0f\x0b\x20\x0f\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x0b\x20\x0d\x21\x09\x02\x40\x20\x0d\x42\x80\x80\x80\x80\x08\x54\x0d\x00\x42\x80\x80\x80\x80\xc0\x7e\x20\x0d\xb9\xbd\x22\x09\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x09\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x09\x0b\x20\x00\x20\x09\x10\xf2\x03\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x13\x20\x00\x20\x01\x20\x02\x20\x0f\x20\x09\x10\x9f\x08\x21\x0f\x20\x00\x20\x09\x10\xcd\x01\x20\x0f\x42\x80\x80\x80\x80\x70\x83\x22\x10\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x0b\x42\x80\x80\x80\x80\x30\x21\x09\x20\x0d\x42\x01\x7c\x21\x0d\x20\x00\x20\x01\x42\x80\x80\x80\x80\x20\x20\x0f\x20\x10\x42\x80\x80\x80\x80\x30\x51\x1b\x20\x0b\x10\xa0\x08\x45\x0d\x00\x0b\x42\x80\x80\x80\x80\x30\x21\x08\x0c\x12\x0b\x42\x80\x80\x80\x80\x30\x21\x08\x41\xdd\x00\x21\x07\x20\x0e\x42\x01\x53\x0d\x07\x20\x01\x29\x03\x18\x10\xa3\x05\x0d\x07\x20\x01\x28\x02\x28\x41\x0a\x10\xb4\x04\x1a\x20\x01\x28\x02\x28\x20\x0a\x10\xa6\x05\x1a\x0c\x07\x0b\x02\x40\x02\x40\x20\x01\x29\x03\x10\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x09\x10\xc0\x01\x21\x08\x0c\x01\x0b\x20\x00\x20\x02\x41\x11\x41\x00\x10\xbd\x05\x21\x08\x0b\x42\x80\x80\x80\x80\x30\x21\x09\x20\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x10\x20\x00\x20\x04\x20\x08\x10\xfb\x05\x0d\x10\x20\x01\x28\x02\x28\x41\xfb\x00\x10\xb4\x04\x1a\x41\x00\x21\x05\x42\x00\x21\x0d\x20\x04\x29\x03\x00\x21\x0e\x42\x80\x80\x80\x80\x30\x21\x09\x02\x40\x03\x40\x20\x0d\x20\x0e\x59\x0d\x01\x20\x00\x20\x09\x10\xcd\x01\x20\x00\x20\x08\x20\x0d\x10\xf4\x05\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x12\x20\x00\x20\x02\x20\x09\x10\xc0\x01\x22\x09\x10\xbb\x03\x22\x0f\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x12\x02\x40\x20\x00\x20\x01\x20\x02\x20\x0f\x20\x09\x10\x9f\x08\x22\x10\x42\x80\x80\x80\x80\x70\x83\x22\x0f\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x0f\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x13\x02\x40\x20\x05\x45\x0d\x00\x20\x01\x28\x02\x28\x41\x2c\x10\xb4\x04\x1a\x0b\x02\x40\x20\x00\x20\x09\x10\xa1\x08\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x10\x10\xcd\x01\x0c\x14\x0b\x20\x01\x28\x02\x28\x20\x03\x10\xa6\x05\x1a\x20\x01\x28\x02\x28\x20\x09\x10\xa6\x05\x1a\x20\x01\x28\x02\x28\x41\x3a\x10\xb4\x04\x1a\x20\x01\x28\x02\x28\x20\x0c\x10\xa6\x05\x1a\x41\x01\x21\x05\x20\x00\x20\x01\x20\x10\x20\x0b\x10\xa0\x08\x0d\x13\x0b\x20\x0d\x42\x01\x7c\x21\x0d\x0c\x00\x0b\x00\x0b\x41\xfd\x00\x21\x07\x20\x05\x45\x0d\x07\x20\x01\x28\x02\x18\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x45\x0d\x07\x20\x01\x28\x02\x28\x41\x0a\x10\xb4\x04\x1a\x20\x01\x28\x02\x28\x20\x0a\x10\xa6\x05\x1a\x0c\x07\x0b\x20\x02\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\xbf\x22\x11\x44\x00\x00\x00\x00\x00\x00\xf0\x7f\x62\x20\x11\x20\x11\x61\x71\x0d\x04\x42\x80\x80\x80\x80\x20\x21\x02\x20\x04\x42\x80\x80\x80\x80\x20\x37\x03\x08\x0c\x04\x0b\x20\x00\x41\xe5\xf3\x02\x41\x00\x10\xb2\x02\x0c\x08\x0b\x20\x00\x20\x02\x10\xcd\x01\x41\x00\x21\x05\x0c\x0e\x0b\x20\x04\x20\x00\x20\x02\x10\xa1\x08\x22\x02\x37\x03\x08\x42\x80\x80\x80\x80\x30\x21\x03\x42\x80\x80\x80\x80\x30\x21\x0c\x42\x80\x80\x80\x80\x30\x21\x08\x42\x80\x80\x80\x80\x30\x21\x09\x42\x80\x80\x80\x80\x30\x21\x0b\x20\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0c\x0c\x0b\x20\x07\x0e\x03\x07\x08\x06\x07\x0b\x20\x01\x28\x02\x28\x20\x02\x10\xe5\x05\x21\x05\x0c\x0b\x0b\x42\x80\x80\x80\x80\x30\x21\x09\x0b\x20\x01\x28\x02\x28\x20\x07\x10\xb4\x04\x1a\x41\x00\x21\x05\x20\x00\x20\x00\x20\x01\x29\x03\x08\x41\x00\x41\x00\x41\x00\x10\xb1\x06\x10\xa5\x06\x0d\x08\x20\x00\x20\x02\x10\xcd\x01\x20\x00\x20\x08\x10\xcd\x01\x20\x00\x20\x03\x10\xcd\x01\x20\x00\x20\x0c\x10\xcd\x01\x20\x00\x20\x0b\x10\xcd\x01\x20\x00\x20\x09\x10\xcd\x01\x0c\x09\x0b\x42\x80\x80\x80\x80\x30\x21\x09\x0c\x07\x0b\x42\x80\x80\x80\x80\x30\x21\x03\x42\x80\x80\x80\x80\x30\x21\x0c\x0c\x05\x0b\x42\x80\x80\x80\x80\x30\x21\x03\x0c\x03\x0b\x20\x01\x28\x02\x28\x20\x06\x29\x03\x20\x10\xa6\x05\x21\x05\x20\x00\x20\x02\x10\xcd\x01\x0c\x05\x0b\x20\x04\x20\x00\x20\x02\x10\xed\x03\x22\x02\x37\x03\x08\x42\x80\x80\x80\x80\x30\x21\x03\x20\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x01\x28\x02\x28\x20\x02\x10\xe5\x05\x21\x05\x0c\x04\x0b\x20\x04\x20\x00\x20\x02\x10\xf2\x03\x22\x02\x37\x03\x08\x42\x80\x80\x80\x80\x30\x21\x03\x20\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x04\x20\x00\x20\x02\x10\xa1\x08\x22\x02\x37\x03\x08\x20\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x01\x28\x02\x28\x20\x02\x10\xe5\x05\x21\x05\x0c\x03\x0b\x42\x80\x80\x80\x80\x30\x21\x0c\x42\x80\x80\x80\x80\x30\x21\x08\x0b\x42\x80\x80\x80\x80\x30\x21\x09\x42\x80\x80\x80\x80\x30\x21\x0b\x0b\x20\x00\x20\x02\x10\xcd\x01\x20\x00\x20\x08\x10\xcd\x01\x20\x00\x20\x03\x10\xcd\x01\x20\x00\x20\x0c\x10\xcd\x01\x20\x00\x20\x0b\x10\xcd\x01\x20\x00\x20\x09\x10\xcd\x01\x41\x7f\x21\x05\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\x16\x01\x01\x7e\x20\x00\x20\x01\x10\xea\x05\x21\x02\x20\x00\x20\x01\x10\xcd\x01\x20\x02\x0b\x45\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x02\x40\x02\x40\x20\x00\x28\x02\x10\x20\x01\x46\x0d\x00\x20\x02\x20\x01\x36\x02\x00\x20\x00\x41\xe0\xa2\x03\x20\x02\x10\x8a\x07\x41\x7f\x21\x00\x0c\x01\x0b\x20\x00\x10\x9b\x08\x21\x00\x0b\x20\x02\x41\x10\x6a\x24\x00\x20\x00\x0b\xc8\x01\x02\x01\x7f\x04\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\x30\x21\x05\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x02\x40\x02\x40\x20\x00\x42\x80\x80\x80\x80\x30\x20\x02\x20\x03\x10\xe6\x01\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x04\x20\x07\x37\x03\x08\x20\x00\x41\xf9\x00\x41\x00\x41\x00\x41\x01\x20\x04\x41\x08\x6a\x10\xda\x04\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x10\xc1\x01\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x08\x41\x83\x01\x20\x07\x41\x07\x10\xc4\x01\x1a\x20\x00\x20\x08\x41\x84\x01\x20\x05\x41\x07\x10\xc4\x01\x1a\x20\x08\x21\x06\x0c\x01\x0b\x20\x00\x20\x07\x10\xcd\x01\x20\x00\x20\x05\x10\xcd\x01\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x06\x0b\x4f\x02\x01\x7e\x01\x7f\x02\x40\x20\x05\x29\x03\x00\x22\x06\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x06\xa7\x22\x07\x2f\x01\x06\x41\x30\x47\x0d\x00\x20\x07\x28\x02\x20\x22\x07\x45\x0d\x00\x20\x07\x41\x01\x3a\x00\x11\x20\x00\x20\x06\x10\xcd\x01\x20\x05\x42\x80\x80\x80\x80\x20\x37\x03\x00\x0b\x42\x80\x80\x80\x80\x30\x0b\xe7\x04\x02\x04\x7f\x02\x7e\x23\x00\x41\xe0\x00\x6b\x22\x04\x24\x00\x41\x7f\x21\x05\x02\x40\x20\x00\x20\x04\x41\xd8\x00\x6a\x20\x02\x41\xe6\x00\x10\xe3\x03\x22\x06\x45\x0d\x00\x20\x06\x28\x02\x00\x21\x07\x02\x40\x20\x04\x29\x03\x58\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x20\x01\x20\x07\x20\x03\x10\xea\x03\x21\x05\x0c\x01\x0b\x02\x40\x20\x00\x20\x03\x10\xdd\x01\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x02\x10\xcd\x01\x0c\x01\x0b\x20\x06\x29\x03\x00\x21\x09\x20\x04\x20\x08\x37\x03\x48\x20\x04\x20\x09\x37\x03\x40\x20\x00\x20\x02\x20\x06\x29\x03\x08\x41\x02\x20\x04\x41\xc0\x00\x6a\x10\xef\x02\x21\x02\x20\x00\x20\x08\x10\xcd\x01\x20\x02\x42\x80\x80\x80\x80\x70\x83\x22\x08\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x08\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x02\x10\xcd\x01\x0c\x01\x0b\x41\x7f\x21\x05\x20\x00\x20\x04\x20\x07\x20\x03\x10\xea\x03\x22\x03\x41\x7f\x4c\x0d\x02\x02\x40\x20\x03\x45\x0d\x00\x20\x00\x20\x04\x10\x81\x04\x0b\x02\x40\x20\x08\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x41\x00\x21\x05\x20\x03\x45\x0d\x04\x20\x04\x2d\x00\x00\x41\x01\x71\x45\x0d\x01\x20\x07\x2d\x00\x05\x41\x01\x71\x45\x0d\x01\x0c\x04\x0b\x41\x7f\x21\x05\x20\x00\x20\x06\x29\x03\x00\x10\xe4\x03\x22\x07\x41\x7f\x4c\x0d\x02\x20\x00\x20\x04\x41\x20\x6a\x20\x02\x10\xc1\x05\x21\x06\x20\x00\x20\x02\x10\xcd\x01\x20\x06\x41\x00\x48\x0d\x03\x02\x40\x02\x40\x02\x40\x20\x03\x45\x0d\x00\x20\x04\x28\x02\x00\x41\x80\x3a\x41\x80\xce\x00\x20\x04\x28\x02\x20\x22\x05\x41\x10\x71\x1b\x20\x05\x72\x10\xd0\x03\x0d\x01\x0c\x02\x0b\x20\x07\x45\x0d\x01\x20\x04\x28\x02\x20\x21\x05\x0b\x20\x05\x41\x01\x71\x0d\x02\x20\x03\x45\x0d\x00\x20\x04\x28\x02\x00\x22\x06\x41\x01\x71\x0d\x00\x20\x05\x41\x12\x71\x0d\x02\x20\x06\x41\x02\x71\x45\x0d\x02\x0b\x20\x00\x20\x04\x41\x20\x6a\x10\x81\x04\x0b\x20\x00\x41\x8e\xf9\x02\x41\x00\x10\xb2\x02\x41\x7f\x21\x05\x0c\x02\x0b\x02\x40\x02\x40\x20\x01\x45\x0d\x00\x20\x01\x20\x04\x29\x03\x20\x37\x03\x00\x20\x01\x41\x18\x6a\x20\x04\x41\x20\x6a\x41\x18\x6a\x29\x03\x00\x37\x03\x00\x20\x01\x41\x10\x6a\x20\x04\x41\x20\x6a\x41\x10\x6a\x29\x03\x00\x37\x03\x00\x20\x01\x41\x08\x6a\x20\x04\x41\x20\x6a\x41\x08\x6a\x29\x03\x00\x37\x03\x00\x0c\x01\x0b\x20\x00\x20\x04\x41\x20\x6a\x10\x81\x04\x0b\x41\x01\x21\x05\x0c\x01\x0b\x20\x00\x20\x02\x10\xcd\x01\x0b\x20\x04\x41\xe0\x00\x6a\x24\x00\x20\x05\x0b\xea\x06\x02\x0b\x7f\x02\x7e\x23\x00\x41\xc0\x00\x6b\x22\x04\x24\x00\x41\x7f\x21\x05\x02\x40\x20\x00\x20\x04\x41\x38\x6a\x20\x03\x41\xe7\x00\x10\xe3\x03\x22\x06\x45\x0d\x00\x02\x40\x20\x04\x29\x03\x38\x22\x03\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x20\x01\x20\x02\x20\x06\x28\x02\x00\x41\x03\x10\x9d\x03\x21\x05\x0c\x01\x0b\x20\x00\x20\x03\x20\x06\x29\x03\x08\x41\x01\x20\x06\x10\xef\x02\x22\x0f\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x41\x00\x21\x07\x20\x04\x41\x00\x36\x02\x2c\x20\x04\x41\x00\x36\x02\x34\x20\x04\x41\x00\x36\x02\x30\x20\x00\x20\x04\x41\x34\x6a\x20\x0f\x10\xb6\x03\x21\x08\x20\x04\x28\x02\x34\x21\x09\x41\x00\x21\x0a\x41\x00\x21\x0b\x02\x40\x20\x08\x0d\x00\x41\x00\x21\x0b\x02\x40\x20\x09\x45\x0d\x00\x20\x00\x20\x09\x41\x03\x74\x10\xe2\x03\x22\x0b\x0d\x00\x41\x00\x21\x07\x41\x00\x21\x0a\x41\x00\x21\x0b\x0c\x01\x0b\x20\x0b\x21\x0a\x41\x00\x21\x07\x02\x40\x02\x40\x02\x40\x03\x40\x02\x40\x20\x09\x20\x07\x47\x0d\x00\x20\x0b\x41\x0c\x6a\x21\x0a\x41\x01\x21\x07\x03\x40\x20\x07\x20\x09\x4f\x0d\x03\x20\x0b\x20\x07\x20\x0a\x28\x02\x00\x10\xa7\x08\x21\x08\x20\x0a\x41\x08\x6a\x21\x0a\x20\x07\x41\x01\x6a\x21\x07\x20\x08\x41\x00\x48\x0d\x00\x0b\x41\x00\x21\x07\x20\x00\x41\xf0\xf7\x02\x41\x00\x10\xb2\x02\x0c\x04\x0b\x02\x40\x20\x00\x20\x0f\x20\x07\x10\xf6\x02\x22\x03\x42\x80\x80\x80\x80\x70\x83\x22\x10\x42\x80\x80\x80\x80\x80\x7f\x51\x0d\x00\x20\x10\x42\x80\x80\x80\x80\x90\x7f\x51\x0d\x00\x41\x00\x21\x07\x20\x10\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x04\x20\x00\x20\x03\x10\xcd\x01\x41\x00\x21\x07\x20\x00\x41\xc3\xf7\x02\x41\x00\x10\xb2\x02\x0c\x04\x0b\x20\x00\x20\x03\x10\xa3\x03\x21\x08\x20\x00\x20\x03\x10\xcd\x01\x20\x08\x45\x0d\x02\x20\x0a\x41\x00\x36\x02\x00\x20\x0a\x41\x04\x6a\x20\x08\x36\x02\x00\x20\x0a\x41\x08\x6a\x21\x0a\x20\x07\x41\x01\x6a\x21\x07\x0c\x00\x0b\x00\x0b\x41\x00\x21\x07\x20\x00\x20\x06\x29\x03\x00\x10\xe4\x03\x22\x0c\x41\x00\x48\x0d\x01\x02\x40\x20\x06\x2d\x00\x11\x45\x0d\x00\x20\x00\x10\xcb\x04\x0c\x01\x0b\x02\x40\x20\x00\x20\x04\x41\x2c\x6a\x20\x04\x41\x30\x6a\x20\x06\x28\x02\x00\x41\x03\x10\x9d\x03\x45\x0d\x00\x20\x04\x28\x02\x30\x21\x07\x20\x04\x28\x02\x2c\x21\x0a\x0c\x03\x0b\x20\x04\x28\x02\x2c\x22\x0a\x41\x04\x6a\x21\x08\x20\x04\x28\x02\x30\x22\x07\x21\x0d\x02\x40\x03\x40\x20\x0d\x45\x0d\x01\x02\x40\x20\x06\x2d\x00\x11\x45\x0d\x00\x20\x00\x10\xcb\x04\x0c\x05\x0b\x20\x00\x20\x04\x41\x08\x6a\x20\x06\x28\x02\x00\x20\x08\x28\x02\x00\x10\xea\x03\x22\x0e\x41\x00\x48\x0d\x04\x02\x40\x20\x0e\x45\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x10\x81\x04\x02\x40\x20\x0c\x45\x0d\x00\x20\x04\x28\x02\x08\x41\x01\x71\x0d\x01\x0b\x02\x40\x20\x0b\x20\x09\x20\x08\x28\x02\x00\x10\xa7\x08\x22\x0e\x41\x7f\x4a\x0d\x00\x20\x00\x41\x8a\xf8\x02\x41\x00\x10\xb2\x02\x0c\x06\x0b\x20\x0c\x0d\x00\x20\x0b\x20\x0e\x41\x03\x74\x6a\x41\x01\x36\x02\x00\x0b\x20\x0d\x41\x7f\x6a\x21\x0d\x20\x08\x41\x08\x6a\x21\x08\x0c\x00\x0b\x00\x0b\x02\x40\x20\x0c\x0d\x00\x20\x09\x41\x01\x6a\x21\x08\x20\x0b\x21\x06\x03\x40\x20\x08\x41\x7f\x6a\x22\x08\x45\x0d\x01\x20\x06\x28\x02\x00\x21\x0d\x20\x06\x41\x08\x6a\x21\x06\x20\x0d\x0d\x00\x0b\x20\x00\x41\xc2\xf8\x02\x41\x00\x10\xb2\x02\x0c\x03\x0b\x20\x00\x20\x0a\x20\x07\x10\x9e\x03\x20\x00\x20\x0f\x10\xcd\x01\x20\x02\x20\x09\x36\x02\x00\x20\x01\x20\x0b\x36\x02\x00\x41\x00\x21\x05\x0c\x03\x0b\x41\x00\x21\x07\x0b\x41\x00\x21\x0a\x0b\x20\x00\x20\x0a\x20\x07\x10\x9e\x03\x20\x00\x20\x0b\x20\x09\x10\x9e\x03\x20\x00\x20\x0f\x10\xcd\x01\x0b\x20\x04\x41\xc0\x00\x6a\x24\x00\x20\x05\x0b\x42\x01\x01\x7f\x20\x00\x41\x04\x6a\x21\x03\x41\x00\x21\x00\x02\x40\x03\x40\x02\x40\x20\x00\x20\x01\x48\x0d\x00\x41\x7f\x21\x00\x0c\x02\x0b\x20\x03\x28\x02\x00\x20\x02\x46\x0d\x01\x20\x03\x41\x08\x6a\x21\x03\x20\x00\x41\x01\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x20\x00\x0b\xc4\x02\x02\x04\x7f\x02\x7e\x23\x00\x41\xc0\x00\x6b\x22\x03\x24\x00\x41\x7f\x21\x04\x02\x40\x20\x00\x20\x03\x41\x38\x6a\x20\x01\x41\xe4\x00\x10\xe3\x03\x22\x05\x45\x0d\x00\x02\x40\x20\x03\x29\x03\x38\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x20\x05\x29\x03\x00\x20\x02\x41\x00\x10\xa1\x03\x21\x04\x0c\x01\x0b\x02\x40\x20\x00\x20\x02\x10\xdd\x01\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x01\x10\xcd\x01\x0c\x01\x0b\x20\x05\x29\x03\x00\x21\x08\x20\x03\x20\x07\x37\x03\x28\x20\x03\x20\x08\x37\x03\x20\x20\x00\x20\x01\x20\x05\x29\x03\x08\x41\x02\x20\x03\x41\x20\x6a\x10\xef\x02\x21\x01\x20\x00\x20\x07\x10\xcd\x01\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x00\x20\x01\x10\x9a\x03\x22\x06\x0d\x00\x41\x00\x21\x04\x0c\x01\x0b\x20\x00\x20\x03\x20\x05\x28\x02\x00\x20\x02\x10\xea\x03\x22\x02\x41\x00\x48\x0d\x00\x02\x40\x20\x02\x45\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x03\x2d\x00\x00\x41\x01\x71\x45\x0d\x00\x20\x00\x20\x05\x29\x03\x00\x10\xe4\x03\x22\x05\x41\x00\x48\x0d\x01\x20\x05\x0d\x02\x0b\x20\x00\x41\xa0\xf7\x02\x41\x00\x10\xb2\x02\x0b\x20\x00\x20\x03\x10\x81\x04\x0c\x02\x0b\x20\x00\x20\x03\x10\x81\x04\x0b\x20\x06\x21\x04\x0b\x20\x03\x41\xc0\x00\x6a\x24\x00\x20\x04\x0b\x9b\x06\x02\x07\x7f\x03\x7e\x23\x00\x41\xc0\x00\x6b\x22\x07\x24\x00\x41\x7f\x21\x08\x02\x40\x20\x00\x20\x07\x41\x38\x6a\x20\x01\x41\xe5\x00\x10\xe3\x03\x22\x09\x45\x0d\x00\x02\x40\x20\x07\x29\x03\x38\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x20\x09\x29\x03\x00\x20\x02\x20\x03\x20\x04\x20\x05\x20\x06\x10\xcc\x01\x21\x08\x0c\x01\x0b\x02\x40\x20\x00\x20\x02\x10\xdd\x01\x22\x0e\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x00\x10\xc1\x01\x22\x0f\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x06\x41\x80\x10\x71\x22\x0a\x45\x0d\x00\x20\x00\x20\x0f\x41\xc1\x00\x20\x04\x10\xc0\x01\x41\x07\x10\xc4\x01\x1a\x0b\x02\x40\x20\x06\x41\x80\x20\x71\x22\x0b\x45\x0d\x00\x20\x00\x20\x0f\x41\xc2\x00\x20\x05\x10\xc0\x01\x41\x07\x10\xc4\x01\x1a\x0b\x02\x40\x20\x06\x41\x80\xc0\x00\x71\x22\x0c\x45\x0d\x00\x20\x00\x20\x0f\x41\xc0\x00\x20\x03\x10\xc0\x01\x41\x07\x10\xc4\x01\x1a\x0b\x02\x40\x20\x06\x41\x80\x04\x71\x22\x0d\x45\x0d\x00\x20\x00\x20\x0f\x41\x3e\x20\x06\x41\x01\x76\x41\x01\x71\xad\x42\x80\x80\x80\x80\x10\x84\x41\x07\x10\xc4\x01\x1a\x0b\x02\x40\x20\x06\x41\x80\x08\x71\x45\x0d\x00\x20\x00\x20\x0f\x41\x3f\x20\x06\x41\x02\x76\x41\x01\x71\xad\x42\x80\x80\x80\x80\x10\x84\x41\x07\x10\xc4\x01\x1a\x0b\x02\x40\x20\x06\x41\x80\x02\x71\x45\x0d\x00\x20\x00\x20\x0f\x41\x3d\x20\x06\x41\x01\x71\xad\x42\x80\x80\x80\x80\x10\x84\x41\x07\x10\xc4\x01\x1a\x0b\x20\x09\x29\x03\x00\x21\x10\x20\x07\x20\x0f\x37\x03\x30\x20\x07\x20\x0e\x37\x03\x28\x20\x07\x20\x10\x37\x03\x20\x20\x00\x20\x01\x20\x09\x29\x03\x08\x41\x03\x20\x07\x41\x20\x6a\x10\xef\x02\x21\x01\x20\x00\x20\x0e\x10\xcd\x01\x20\x00\x20\x0f\x10\xcd\x01\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x02\x40\x20\x00\x20\x01\x10\x9a\x03\x0d\x00\x41\x00\x21\x08\x20\x06\x41\x80\x80\x01\x71\x45\x0d\x03\x20\x00\x41\xdd\xf6\x02\x41\x00\x10\xb2\x02\x41\x7f\x21\x08\x0c\x03\x0b\x20\x00\x20\x07\x20\x09\x28\x02\x00\x22\x09\x20\x02\x10\xea\x03\x22\x02\x41\x00\x48\x0d\x02\x20\x06\x41\x81\x02\x71\x21\x08\x02\x40\x02\x40\x02\x40\x20\x02\x0d\x00\x20\x08\x41\x80\x02\x46\x0d\x01\x41\x01\x21\x08\x20\x09\x2d\x00\x05\x41\x01\x71\x45\x0d\x01\x0c\x05\x0b\x02\x40\x20\x07\x28\x02\x00\x22\x02\x20\x06\x10\xd0\x03\x45\x0d\x00\x02\x40\x20\x08\x41\x80\x02\x47\x0d\x00\x20\x02\x41\x01\x71\x0d\x01\x0b\x02\x40\x02\x40\x20\x06\x41\x80\x30\x71\x45\x0d\x00\x20\x02\x41\x11\x71\x41\x10\x47\x0d\x01\x02\x40\x20\x0a\x45\x0d\x00\x20\x00\x20\x04\x20\x07\x29\x03\x10\x10\x8d\x03\x45\x0d\x03\x0b\x20\x0b\x45\x0d\x01\x20\x00\x20\x05\x20\x07\x29\x03\x18\x10\x8d\x03\x0d\x01\x0c\x02\x0b\x20\x0c\x45\x0d\x00\x20\x02\x41\x03\x71\x21\x08\x02\x40\x20\x06\x41\x02\x71\x0d\x00\x20\x08\x41\x02\x46\x0d\x02\x0b\x20\x08\x0d\x00\x20\x00\x20\x03\x20\x07\x29\x03\x08\x10\x8d\x03\x45\x0d\x01\x0b\x20\x0d\x45\x0d\x02\x20\x07\x28\x02\x00\x41\x13\x71\x41\x02\x47\x0d\x02\x0b\x20\x00\x20\x07\x10\x81\x04\x0b\x20\x00\x41\xfd\xf6\x02\x41\x00\x10\xb2\x02\x41\x7f\x21\x08\x0c\x03\x0b\x20\x00\x20\x07\x10\x81\x04\x41\x01\x21\x08\x0c\x02\x0b\x20\x00\x20\x0e\x10\xcd\x01\x0b\x20\x00\x20\x01\x10\xcd\x01\x41\x7f\x21\x08\x0b\x20\x07\x41\xc0\x00\x6a\x24\x00\x20\x08\x0b\xae\x02\x02\x03\x7f\x02\x7e\x23\x00\x41\xc0\x00\x6b\x22\x03\x24\x00\x41\x7f\x21\x04\x02\x40\x20\x00\x20\x03\x41\x38\x6a\x20\x01\x41\xe3\x00\x10\xe3\x03\x22\x05\x45\x0d\x00\x02\x40\x20\x03\x29\x03\x38\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x20\x05\x29\x03\x00\x20\x02\x10\x96\x03\x21\x04\x0c\x01\x0b\x02\x40\x02\x40\x02\x40\x20\x00\x20\x02\x10\xdd\x01\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x01\x10\xcd\x01\x0c\x01\x0b\x20\x05\x29\x03\x00\x21\x07\x20\x03\x20\x06\x37\x03\x28\x20\x03\x20\x07\x37\x03\x20\x20\x00\x20\x01\x20\x05\x29\x03\x08\x41\x02\x20\x03\x41\x20\x6a\x10\xef\x02\x21\x01\x20\x00\x20\x06\x10\xcd\x01\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x20\x00\x20\x01\x10\x9a\x03\x22\x04\x0d\x02\x20\x00\x20\x03\x20\x05\x28\x02\x00\x22\x05\x20\x02\x10\xea\x03\x22\x04\x41\x00\x48\x0d\x00\x20\x04\x45\x0d\x01\x20\x03\x28\x02\x00\x21\x04\x20\x00\x20\x03\x10\x81\x04\x02\x40\x20\x04\x41\x01\x71\x45\x0d\x00\x20\x05\x2d\x00\x05\x41\x01\x71\x0d\x02\x0b\x20\x00\x41\xc5\xf6\x02\x41\x00\x10\xb2\x02\x0b\x41\x7f\x21\x04\x0c\x01\x0b\x41\x00\x21\x04\x0b\x20\x03\x41\xc0\x00\x6a\x24\x00\x20\x04\x0b\xeb\x02\x02\x02\x7f\x02\x7e\x23\x00\x41\xc0\x00\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x00\x20\x04\x41\x38\x6a\x20\x01\x41\xc1\x00\x10\xe3\x03\x22\x05\x45\x0d\x00\x02\x40\x20\x04\x29\x03\x38\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x20\x05\x29\x03\x00\x20\x02\x20\x03\x41\x00\x10\xb4\x01\x21\x01\x0c\x02\x0b\x02\x40\x20\x00\x20\x02\x10\xdd\x01\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x01\x10\xcd\x01\x0c\x01\x0b\x20\x05\x29\x03\x00\x21\x07\x20\x04\x20\x03\x37\x03\x30\x20\x04\x20\x06\x37\x03\x28\x20\x04\x20\x07\x37\x03\x20\x20\x00\x20\x01\x20\x05\x29\x03\x08\x41\x03\x20\x04\x41\x20\x6a\x10\xef\x02\x21\x01\x20\x00\x20\x06\x10\xcd\x01\x20\x01\x42\x80\x80\x80\x80\x70\x83\x22\x03\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x04\x20\x05\x28\x02\x00\x20\x02\x10\xea\x03\x22\x02\x41\x00\x48\x0d\x00\x20\x02\x45\x0d\x01\x02\x40\x02\x40\x02\x40\x20\x04\x28\x02\x00\x22\x02\x41\x13\x71\x0d\x00\x20\x00\x20\x04\x29\x03\x08\x20\x01\x10\x8d\x03\x45\x0d\x01\x0c\x02\x0b\x20\x02\x41\x11\x71\x41\x10\x47\x0d\x01\x20\x03\x42\x80\x80\x80\x80\x30\x51\x0d\x01\x20\x04\x41\x14\x6a\x35\x02\x00\x42\x20\x86\x42\x80\x80\x80\x80\x30\x52\x0d\x01\x0b\x20\x00\x20\x04\x10\x81\x04\x20\x00\x20\x01\x10\xcd\x01\x20\x00\x41\xad\xf6\x02\x41\x00\x10\xb2\x02\x0c\x01\x0b\x20\x00\x20\x04\x10\x81\x04\x0c\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x04\x41\xc0\x00\x6a\x24\x00\x20\x01\x0b\xb0\x03\x02\x03\x7f\x02\x7e\x23\x00\x41\xd0\x00\x6b\x22\x06\x24\x00\x41\x7f\x21\x07\x02\x40\x20\x00\x20\x06\x41\xc8\x00\x6a\x20\x01\x41\xc2\x00\x10\xe3\x03\x22\x08\x45\x0d\x00\x02\x40\x20\x06\x29\x03\x48\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x20\x08\x29\x03\x00\x20\x02\x20\x03\x10\xc0\x01\x20\x04\x20\x05\x10\xb9\x03\x21\x07\x0c\x01\x0b\x02\x40\x02\x40\x02\x40\x20\x00\x20\x02\x10\xdd\x01\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x01\x10\xcd\x01\x0c\x01\x0b\x20\x08\x29\x03\x00\x21\x0a\x20\x06\x20\x04\x37\x03\x38\x20\x06\x20\x03\x37\x03\x30\x20\x06\x20\x09\x37\x03\x28\x20\x06\x20\x0a\x37\x03\x20\x20\x00\x20\x01\x20\x08\x29\x03\x08\x41\x04\x20\x06\x41\x20\x6a\x10\xef\x02\x21\x01\x20\x00\x20\x09\x10\xcd\x01\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x02\x40\x20\x00\x20\x01\x10\x9a\x03\x22\x07\x45\x0d\x00\x20\x00\x20\x06\x20\x08\x28\x02\x00\x20\x02\x10\xea\x03\x22\x02\x41\x00\x48\x0d\x01\x20\x02\x45\x0d\x03\x02\x40\x02\x40\x20\x06\x28\x02\x00\x22\x02\x41\x13\x71\x0d\x00\x20\x00\x20\x06\x29\x03\x08\x20\x03\x10\x8d\x03\x45\x0d\x01\x0c\x04\x0b\x20\x02\x41\x11\x71\x41\x10\x47\x0d\x03\x20\x06\x41\x1c\x6a\x35\x02\x00\x42\x20\x86\x42\x80\x80\x80\x80\x30\x52\x0d\x03\x0b\x20\x00\x20\x06\x10\x81\x04\x20\x00\x41\xfa\xf5\x02\x41\x00\x10\xb2\x02\x0c\x01\x0b\x02\x40\x20\x05\x41\x80\x80\x01\x71\x0d\x00\x41\x00\x21\x07\x20\x05\x41\x80\x80\x02\x71\x45\x0d\x03\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x22\x02\x45\x0d\x03\x20\x02\x2d\x00\x28\x41\x01\x71\x45\x0d\x03\x0b\x20\x00\x41\x92\xf6\x02\x41\x00\x10\xb2\x02\x0b\x41\x7f\x21\x07\x0c\x01\x0b\x20\x00\x20\x06\x10\x81\x04\x0b\x20\x06\x41\xd0\x00\x6a\x24\x00\x20\x07\x0b\x4c\x01\x01\x7f\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x02\x2f\x01\x06\x41\x30\x47\x0d\x00\x20\x02\x28\x02\x20\x22\x02\x45\x0d\x00\x20\x00\x20\x02\x29\x03\x00\x10\xda\x02\x20\x00\x20\x02\x29\x03\x08\x10\xda\x02\x20\x00\x41\x10\x6a\x20\x02\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x0b\x60\x01\x01\x7f\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x03\x2f\x01\x06\x41\x30\x47\x0d\x00\x20\x03\x28\x02\x20\x22\x03\x45\x0d\x00\x02\x40\x20\x03\x29\x03\x00\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x20\x03\x29\x03\x08\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x0b\x92\x03\x02\x05\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x06\x24\x00\x02\x40\x02\x40\x20\x00\x20\x01\x20\x05\x41\x2a\x6a\x10\xfe\x03\x22\x07\x0d\x00\x20\x04\x41\x00\x36\x02\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0c\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x01\x02\x40\x20\x07\x29\x03\x00\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x02\x40\x20\x0b\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x05\x41\x26\x6a\x20\x0b\xa7\x22\x08\x2f\x01\x06\x47\x0d\x00\x20\x08\x28\x02\x20\x22\x09\x45\x0d\x00\x02\x40\x02\x40\x20\x07\x28\x02\x0c\x22\x0a\x0d\x00\x20\x09\x28\x02\x08\x21\x08\x0c\x01\x0b\x20\x0a\x41\x14\x6a\x28\x02\x00\x21\x08\x20\x00\x28\x02\x10\x20\x0a\x10\x96\x05\x0b\x20\x09\x41\x04\x6a\x21\x09\x03\x40\x02\x40\x20\x08\x20\x09\x47\x0d\x00\x20\x07\x41\x00\x36\x02\x0c\x20\x00\x20\x07\x29\x03\x00\x10\xcd\x01\x20\x07\x42\x80\x80\x80\x80\x30\x37\x03\x00\x0c\x03\x0b\x02\x40\x20\x08\x41\x74\x6a\x28\x02\x00\x45\x0d\x00\x20\x08\x28\x02\x04\x21\x08\x0c\x01\x0b\x0b\x20\x08\x41\x70\x6a\x22\x09\x20\x09\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x20\x07\x20\x09\x36\x02\x0c\x20\x04\x41\x00\x36\x02\x00\x02\x40\x20\x07\x28\x02\x08\x22\x09\x0d\x00\x20\x08\x29\x03\x10\x10\xc0\x01\x21\x01\x0c\x03\x0b\x20\x06\x20\x08\x29\x03\x10\x22\x01\x37\x03\x00\x02\x40\x20\x05\x0d\x00\x20\x08\x29\x03\x18\x21\x01\x0b\x20\x06\x20\x01\x37\x03\x08\x02\x40\x20\x09\x41\x01\x47\x0d\x00\x20\x01\x10\xc0\x01\x21\x01\x0c\x03\x0b\x20\x00\x41\x02\x20\x06\x10\x80\x04\x21\x01\x0c\x02\x0b\x41\xdd\xfe\x02\x41\xae\xb7\x01\x41\xb5\xe8\x02\x41\xe7\xfe\x02\x10\x4a\x00\x0b\x20\x04\x41\x01\x36\x02\x00\x0b\x20\x06\x41\x10\x6a\x24\x00\x20\x01\x0b\xe0\x04\x02\x08\x7f\x03\x7e\x23\x00\x41\x10\x6b\x22\x05\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x0d\x02\x40\x20\x00\x20\x01\x20\x04\x41\x26\x6a\x10\xfe\x03\x22\x06\x45\x0d\x00\x02\x40\x20\x03\x29\x03\x00\x10\xb1\x08\x22\x0e\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x06\x28\x02\x00\x45\x0d\x00\x20\x00\x10\x8a\x03\x0c\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x0f\x02\x40\x20\x04\x41\x01\x71\x0d\x00\x20\x03\x29\x03\x08\x21\x0f\x0b\x02\x40\x02\x40\x20\x00\x20\x06\x20\x0e\x10\xb2\x08\x22\x03\x45\x0d\x00\x20\x00\x20\x03\x29\x03\x28\x10\xcd\x01\x0c\x01\x0b\x20\x00\x41\x30\x10\xc0\x02\x22\x03\x45\x0d\x01\x20\x03\x20\x06\x36\x02\x08\x20\x03\x42\x01\x37\x03\x00\x02\x40\x02\x40\x20\x06\x28\x02\x00\x45\x0d\x00\x20\x03\x20\x0e\xa7\x22\x04\x28\x02\x18\x36\x02\x0c\x20\x04\x20\x03\x36\x02\x18\x0c\x01\x0b\x20\x0e\x10\xc0\x01\x1a\x0b\x20\x03\x20\x0e\x37\x03\x20\x20\x03\x20\x06\x28\x02\x10\x22\x07\x20\x06\x28\x02\x14\x22\x08\x41\x7f\x6a\x20\x0e\x10\xb3\x08\x71\x41\x03\x74\x6a\x22\x04\x28\x02\x00\x22\x09\x36\x02\x18\x20\x09\x20\x03\x41\x18\x6a\x22\x0a\x36\x02\x04\x20\x04\x20\x0a\x36\x02\x00\x20\x03\x20\x04\x36\x02\x1c\x20\x03\x20\x06\x28\x02\x04\x22\x04\x36\x02\x10\x20\x04\x20\x03\x41\x10\x6a\x22\x09\x36\x02\x04\x20\x06\x20\x06\x28\x02\x0c\x41\x01\x6a\x22\x04\x36\x02\x0c\x20\x06\x20\x09\x36\x02\x04\x20\x03\x20\x06\x41\x04\x6a\x22\x09\x36\x02\x14\x20\x04\x20\x06\x28\x02\x18\x49\x0d\x00\x20\x00\x20\x07\x41\x04\x20\x08\x41\x01\x74\x20\x08\x41\x01\x46\x1b\x22\x04\x41\x03\x74\x20\x05\x41\x0c\x6a\x10\xbd\x04\x22\x07\x45\x0d\x00\x20\x05\x28\x02\x0c\x41\x03\x76\x20\x04\x6a\x22\x0b\x21\x04\x20\x07\x21\x00\x02\x40\x03\x40\x20\x04\x45\x0d\x01\x20\x00\x41\x04\x6a\x20\x00\x36\x02\x00\x20\x00\x20\x00\x36\x02\x00\x20\x04\x41\x7f\x6a\x21\x04\x20\x00\x41\x08\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x20\x0b\x41\x7f\x6a\x21\x0c\x20\x06\x41\x08\x6a\x21\x00\x02\x40\x03\x40\x20\x00\x28\x02\x00\x22\x00\x20\x09\x46\x0d\x01\x02\x40\x20\x00\x41\x74\x6a\x28\x02\x00\x0d\x00\x20\x07\x20\x00\x29\x03\x10\x10\xb3\x08\x20\x0c\x71\x41\x03\x74\x6a\x22\x04\x28\x02\x00\x22\x0a\x20\x00\x41\x08\x6a\x22\x08\x36\x02\x04\x20\x00\x20\x0a\x36\x02\x08\x20\x00\x41\x0c\x6a\x20\x04\x36\x02\x00\x20\x04\x20\x08\x36\x02\x00\x0b\x20\x00\x41\x04\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x20\x06\x20\x0b\x36\x02\x14\x20\x06\x20\x07\x36\x02\x10\x20\x06\x20\x0b\x41\x01\x74\x36\x02\x18\x0b\x20\x03\x20\x0f\x10\xc0\x01\x37\x03\x28\x20\x01\x10\xc0\x01\x21\x0d\x0b\x20\x05\x41\x10\x6a\x24\x00\x20\x0d\x0b\x34\x00\x02\x40\x20\x00\x42\x20\x88\xa7\x41\x0b\x6a\x41\x12\x49\x0d\x00\x20\x00\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\x44\x00\x00\x00\x00\x00\x00\x00\x00\x62\x0d\x00\x42\x00\x21\x00\x0b\x20\x00\x0b\x6c\x01\x03\x7f\x20\x01\x28\x02\x10\x22\x03\x20\x01\x28\x02\x14\x41\x7f\x6a\x20\x02\x10\xb3\x08\x71\x41\x03\x74\x22\x04\x6a\x41\x04\x6a\x21\x05\x03\x7f\x02\x40\x20\x05\x28\x02\x00\x22\x05\x20\x03\x20\x04\x6a\x47\x0d\x00\x41\x00\x0f\x0b\x02\x40\x20\x00\x20\x05\x29\x03\x08\x10\xc0\x01\x20\x02\x10\xc0\x01\x41\x02\x10\xe0\x03\x45\x0d\x00\x20\x05\x41\x68\x6a\x0f\x0b\x20\x05\x41\x04\x6a\x21\x05\x20\x01\x28\x02\x10\x21\x03\x0c\x00\x0b\x0b\xb6\x01\x02\x03\x7f\x01\x7c\x41\x00\x21\x01\x02\x40\x02\x40\x02\x40\x41\x07\x20\x00\x42\x20\x88\xa7\x22\x02\x20\x02\x41\x0b\x6a\x41\x11\x4b\x1b\x22\x02\x41\x08\x6a\x22\x03\x41\x09\x4d\x0d\x00\x20\x02\x41\x07\x47\x0d\x02\x20\x00\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\xbf\x22\x04\x20\x04\x61\x0d\x01\x44\x00\x00\x00\x00\x00\x00\xf8\x7f\x21\x04\x0c\x01\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x20\x03\x0e\x0a\x02\x01\x05\x05\x05\x05\x05\x02\x03\x00\x02\x0b\x20\x00\xa7\x21\x01\x0c\x04\x0b\x20\x00\xa7\x41\x00\x10\xb8\x04\x21\x01\x0c\x03\x0b\x20\x00\xa7\x41\xdb\x18\x6c\x21\x01\x0c\x02\x0b\x20\x00\xa7\x41\xdb\x18\x6c\xb7\x21\x04\x0b\x20\x04\xbd\x22\x00\x42\x20\x88\x20\x00\x85\xa7\x41\xdb\x18\x6c\x21\x01\x0b\x20\x01\x20\x02\x73\x0b\x37\x00\x02\x40\x20\x00\x20\x01\x20\x04\x41\x26\x6a\x10\xfe\x03\x22\x04\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x00\x20\x04\x20\x03\x29\x03\x00\x10\xb1\x08\x10\xb2\x08\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x0b\x4c\x00\x02\x40\x20\x00\x20\x01\x20\x04\x41\x26\x6a\x10\xfe\x03\x22\x04\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x02\x40\x20\x00\x20\x04\x20\x03\x29\x03\x00\x10\xb1\x08\x10\xb2\x08\x22\x03\x0d\x00\x42\x80\x80\x80\x80\x10\x0f\x0b\x20\x00\x28\x02\x10\x20\x04\x20\x03\x10\xb6\x08\x42\x81\x80\x80\x80\x10\x0b\xe1\x01\x01\x03\x7f\x02\x40\x20\x02\x28\x02\x04\x0d\x00\x20\x02\x41\x1c\x6a\x22\x03\x28\x02\x00\x22\x04\x20\x02\x28\x02\x18\x22\x05\x36\x02\x00\x20\x05\x20\x04\x36\x02\x04\x20\x02\x41\x00\x36\x02\x18\x20\x03\x41\x00\x36\x02\x00\x02\x40\x02\x40\x20\x01\x28\x02\x00\x45\x0d\x00\x20\x02\x10\x93\x05\x0c\x01\x0b\x20\x00\x20\x02\x29\x03\x20\x10\xda\x02\x0b\x20\x00\x20\x02\x29\x03\x28\x10\xda\x02\x20\x02\x20\x02\x28\x02\x00\x41\x7f\x6a\x22\x03\x36\x02\x00\x02\x40\x02\x40\x20\x03\x0d\x00\x20\x02\x41\x14\x6a\x22\x03\x28\x02\x00\x22\x04\x20\x02\x28\x02\x10\x22\x05\x36\x02\x00\x20\x05\x20\x04\x36\x02\x04\x20\x02\x41\x00\x36\x02\x10\x20\x03\x41\x00\x36\x02\x00\x20\x00\x41\x10\x6a\x20\x02\x20\x00\x28\x02\x04\x11\x00\x00\x0c\x01\x0b\x20\x02\x42\x80\x80\x80\x80\x30\x37\x03\x28\x20\x02\x42\x80\x80\x80\x80\x30\x37\x03\x20\x20\x02\x41\x01\x36\x02\x04\x0b\x20\x01\x20\x01\x28\x02\x0c\x41\x7f\x6a\x36\x02\x0c\x0b\x0b\x42\x00\x02\x40\x20\x00\x20\x01\x20\x04\x41\x26\x6a\x10\xfe\x03\x22\x04\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x02\x40\x20\x00\x20\x04\x20\x03\x29\x03\x00\x10\xb1\x08\x10\xb2\x08\x22\x00\x0d\x00\x42\x80\x80\x80\x80\x30\x0f\x0b\x20\x00\x29\x03\x28\x10\xc0\x01\x0b\x5d\x01\x03\x7f\x02\x40\x20\x00\x20\x01\x20\x04\x41\x26\x6a\x10\xfe\x03\x22\x05\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x05\x41\x04\x6a\x21\x06\x20\x05\x28\x02\x08\x21\x04\x03\x7e\x02\x40\x20\x04\x20\x06\x47\x0d\x00\x42\x80\x80\x80\x80\x30\x0f\x0b\x20\x04\x41\x70\x6a\x21\x07\x20\x04\x28\x02\x04\x21\x04\x20\x00\x28\x02\x10\x20\x05\x20\x07\x10\xb6\x08\x0c\x00\x0b\x0b\x64\x00\x02\x40\x20\x00\x20\x01\x20\x02\x41\x26\x6a\x10\xfe\x03\x22\x00\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x02\x40\x20\x00\x28\x02\x0c\x22\x00\x41\x00\x48\x0d\x00\x20\x00\xad\x0f\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x00\xb8\xbd\x22\x01\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x0b\xb1\x02\x02\x03\x7f\x03\x7e\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x02\x40\x20\x00\x20\x01\x20\x04\x41\x26\x6a\x10\xfe\x03\x22\x06\x45\x0d\x00\x20\x03\x29\x03\x00\x21\x09\x42\x80\x80\x80\x80\x30\x21\x0a\x02\x40\x20\x02\x41\x02\x48\x0d\x00\x20\x03\x29\x03\x08\x21\x0a\x0b\x20\x00\x20\x09\x10\xdb\x03\x0d\x00\x20\x06\x41\x04\x6a\x21\x07\x20\x06\x28\x02\x08\x21\x03\x03\x40\x02\x40\x20\x03\x20\x07\x47\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x08\x0c\x02\x0b\x02\x40\x20\x03\x41\x74\x6a\x28\x02\x00\x0d\x00\x20\x03\x41\x70\x6a\x22\x02\x20\x02\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x20\x05\x20\x03\x29\x03\x10\x10\xc0\x01\x22\x08\x37\x03\x08\x02\x40\x20\x04\x0d\x00\x20\x03\x29\x03\x18\x10\xc0\x01\x21\x08\x0b\x20\x05\x20\x01\x37\x03\x10\x20\x05\x20\x08\x37\x03\x00\x20\x00\x20\x09\x20\x0a\x41\x03\x20\x05\x10\xb5\x01\x21\x08\x20\x00\x20\x05\x29\x03\x00\x10\xcd\x01\x02\x40\x20\x04\x0d\x00\x20\x00\x20\x05\x29\x03\x08\x10\xcd\x01\x0b\x20\x03\x28\x02\x04\x21\x03\x20\x00\x28\x02\x10\x20\x02\x10\x96\x05\x20\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x20\x00\x20\x08\x10\xcd\x01\x0c\x01\x0b\x20\x03\x28\x02\x04\x21\x03\x0c\x00\x0b\x00\x0b\x20\x05\x41\x20\x6a\x24\x00\x20\x08\x0b\xa5\x01\x02\x01\x7f\x02\x7e\x02\x40\x20\x00\x20\x01\x20\x04\x41\x03\x71\x22\x05\x41\x26\x6a\x10\xfe\x03\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x02\x40\x20\x00\x20\x05\x41\x2a\x6a\x10\xc9\x03\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x00\x41\x10\x10\xc0\x02\x22\x05\x0d\x00\x20\x00\x20\x07\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x01\x10\xc0\x01\x21\x01\x20\x05\x41\x00\x36\x02\x0c\x20\x05\x20\x04\x41\x02\x75\x36\x02\x08\x20\x05\x20\x01\x37\x03\x00\x02\x40\x20\x07\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x07\xa7\x20\x05\x36\x02\x20\x0b\x20\x07\x21\x06\x0b\x20\x06\x0b\x39\x01\x01\x7f\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x02\x2f\x01\x06\x41\x6d\x6a\x41\xff\xff\x03\x71\x41\x02\x49\x0d\x01\x0b\x20\x00\x41\x13\x10\xa4\x04\x41\x00\x0f\x0b\x20\x02\x28\x02\x20\x0b\x2c\x00\x02\x40\x20\x00\x20\x01\x20\x02\x10\xbc\x06\x22\x00\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x00\x28\x02\x20\x35\x02\x0c\x42\x80\x80\x80\x80\x70\x84\x10\xc0\x01\x0b\x56\x02\x01\x7e\x01\x7f\x42\x80\x80\x80\x80\xe0\x00\x21\x03\x02\x40\x20\x00\x20\x01\x20\x02\x10\xbc\x06\x22\x04\x45\x0d\x00\x02\x40\x20\x04\x28\x02\x20\x22\x04\x28\x02\x0c\x28\x02\x20\x2d\x00\x04\x45\x0d\x00\x02\x40\x20\x02\x0d\x00\x42\x00\x0f\x0b\x20\x00\x10\xff\x03\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x04\x35\x02\x14\x21\x03\x0b\x20\x03\x0b\x56\x02\x01\x7e\x01\x7f\x42\x80\x80\x80\x80\xe0\x00\x21\x03\x02\x40\x20\x00\x20\x01\x20\x02\x10\xbc\x06\x22\x04\x45\x0d\x00\x02\x40\x20\x04\x28\x02\x20\x22\x04\x28\x02\x0c\x28\x02\x20\x2d\x00\x04\x45\x0d\x00\x02\x40\x20\x02\x0d\x00\x42\x00\x0f\x0b\x20\x00\x10\xff\x03\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x04\x35\x02\x10\x21\x03\x0b\x20\x03\x0b\xeb\x07\x02\x03\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x05\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x02\x40\x20\x00\x20\x01\x41\x20\x10\xfe\x03\x22\x06\x45\x0d\x00\x20\x00\x20\x05\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xbf\x06\x0d\x00\x41\x01\x21\x07\x02\x40\x20\x02\x41\x02\x48\x0d\x00\x20\x00\x20\x03\x29\x03\x08\x10\xa9\x05\x41\x01\x73\x21\x07\x0b\x02\x40\x20\x06\x28\x02\x0c\x28\x02\x20\x22\x03\x2d\x00\x04\x45\x0d\x00\x20\x00\x10\xff\x03\x0c\x01\x0b\x02\x40\x20\x05\x29\x03\x08\x22\x01\x41\x01\x20\x04\x41\xf6\xe5\x01\x6a\x2d\x00\x00\x74\xac\x7c\x20\x06\x35\x02\x14\x58\x0d\x00\x20\x00\x41\xbf\x8a\x03\x41\x00\x10\xa6\x04\x0c\x01\x0b\x02\x40\x02\x40\x20\x04\x41\x6a\x6a\x22\x02\x41\x09\x4b\x0d\x00\x20\x03\x28\x02\x08\x20\x06\x28\x02\x10\x6a\x20\x01\xa7\x6a\x21\x03\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x0e\x0a\x0a\x00\x01\x02\x03\x04\x05\x06\x07\x08\x0a\x0b\x20\x03\x31\x00\x00\x21\x08\x0c\x0a\x0b\x20\x03\x2f\x00\x00\x22\x00\x41\x18\x74\x20\x00\x41\x08\x74\x41\x80\x80\xfc\x07\x71\x72\x41\x10\x76\x20\x00\x20\x07\x1b\xad\x42\x30\x86\x42\x30\x87\x42\xff\xff\xff\xff\x0f\x83\x21\x08\x0c\x09\x0b\x20\x03\x2f\x00\x00\x22\x00\x41\x18\x74\x20\x00\x41\x08\x74\x41\x80\x80\xfc\x07\x71\x72\x41\x10\x76\x20\x00\x20\x07\x1b\xad\x42\xff\xff\x03\x83\x21\x08\x0c\x08\x0b\x20\x03\x28\x00\x00\x22\x00\x41\x18\x74\x20\x00\x41\x08\x74\x41\x80\x80\xfc\x07\x71\x72\x20\x00\x41\x08\x76\x41\x80\xfe\x03\x71\x20\x00\x41\x18\x76\x72\x72\x20\x00\x20\x07\x1b\xad\x21\x08\x0c\x07\x0b\x02\x40\x20\x03\x28\x00\x00\x22\x00\x41\x18\x74\x20\x00\x41\x08\x74\x41\x80\x80\xfc\x07\x71\x72\x20\x00\x41\x08\x76\x41\x80\xfe\x03\x71\x20\x00\x41\x18\x76\x72\x72\x20\x00\x20\x07\x1b\x22\x00\x41\x00\x48\x0d\x00\x20\x00\xad\x21\x08\x0c\x07\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x00\xb8\xbd\x22\x08\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x08\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x08\x0c\x06\x0b\x20\x00\x20\x03\x29\x00\x00\x22\x08\x42\x38\x86\x20\x08\x42\x28\x86\x42\x80\x80\x80\x80\x80\x80\xc0\xff\x00\x83\x84\x20\x08\x42\x18\x86\x42\x80\x80\x80\x80\x80\xe0\x3f\x83\x20\x08\x42\x08\x86\x42\x80\x80\x80\x80\xf0\x1f\x83\x84\x84\x20\x08\x42\x08\x88\x42\x80\x80\x80\xf8\x0f\x83\x20\x08\x42\x18\x88\x42\x80\x80\xfc\x07\x83\x84\x20\x08\x42\x28\x88\x42\x80\xfe\x03\x83\x20\x08\x42\x38\x88\x84\x84\x84\x20\x08\x20\x07\x1b\x10\xf7\x03\x21\x08\x0c\x05\x0b\x20\x00\x20\x03\x29\x00\x00\x22\x08\x42\x38\x86\x20\x08\x42\x28\x86\x42\x80\x80\x80\x80\x80\x80\xc0\xff\x00\x83\x84\x20\x08\x42\x18\x86\x42\x80\x80\x80\x80\x80\xe0\x3f\x83\x20\x08\x42\x08\x86\x42\x80\x80\x80\x80\xf0\x1f\x83\x84\x84\x20\x08\x42\x08\x88\x42\x80\x80\x80\xf8\x0f\x83\x20\x08\x42\x18\x88\x42\x80\x80\xfc\x07\x83\x84\x20\x08\x42\x28\x88\x42\x80\xfe\x03\x83\x20\x08\x42\x38\x88\x84\x84\x84\x20\x08\x20\x07\x1b\x10\xb4\x02\x21\x08\x0c\x04\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x03\x28\x00\x00\x22\x00\x41\x18\x74\x20\x00\x41\x08\x74\x41\x80\x80\xfc\x07\x71\x72\x20\x00\x41\x08\x76\x41\x80\xfe\x03\x71\x20\x00\x41\x18\x76\x72\x72\x20\x00\x20\x07\x1b\xbe\xbb\xbd\x22\x08\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x08\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x08\x0c\x03\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x03\x29\x00\x00\x22\x08\x42\x38\x86\x20\x08\x42\x28\x86\x42\x80\x80\x80\x80\x80\x80\xc0\xff\x00\x83\x84\x20\x08\x42\x18\x86\x42\x80\x80\x80\x80\x80\xe0\x3f\x83\x20\x08\x42\x08\x86\x42\x80\x80\x80\x80\xf0\x1f\x83\x84\x84\x20\x08\x42\x08\x88\x42\x80\x80\x80\xf8\x0f\x83\x20\x08\x42\x18\x88\x42\x80\x80\xfc\x07\x83\x84\x20\x08\x42\x28\x88\x42\x80\xfe\x03\x83\x20\x08\x42\x38\x88\x84\x84\x84\x20\x08\x20\x07\x1b\x22\x08\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x08\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x08\x0c\x02\x0b\x10\x40\x00\x0b\x20\x03\x30\x00\x00\x42\xff\xff\xff\xff\x0f\x83\x21\x08\x0b\x20\x05\x41\x10\x6a\x24\x00\x20\x08\x0b\xfc\x04\x02\x03\x7f\x01\x7e\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x02\x40\x20\x00\x20\x01\x41\x20\x10\xfe\x03\x22\x06\x45\x0d\x00\x20\x00\x20\x05\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xbf\x06\x0d\x00\x20\x05\x41\x00\x36\x02\x14\x20\x05\x42\x00\x37\x03\x18\x20\x03\x29\x03\x08\x21\x01\x02\x40\x02\x40\x20\x04\x41\x1b\x4a\x0d\x00\x20\x00\x20\x05\x41\x14\x6a\x20\x01\x10\xc9\x04\x45\x0d\x01\x0c\x02\x0b\x02\x40\x20\x04\x41\x1d\x4a\x0d\x00\x20\x00\x20\x05\x41\x18\x6a\x20\x01\x10\xc2\x08\x45\x0d\x01\x0c\x02\x0b\x20\x00\x20\x05\x20\x01\x10\xdf\x04\x0d\x01\x02\x40\x20\x04\x41\x1e\x47\x0d\x00\x20\x05\x20\x05\x2b\x03\x00\xb6\x38\x02\x14\x0c\x01\x0b\x20\x05\x20\x05\x29\x03\x00\x37\x03\x18\x0b\x41\x01\x21\x07\x02\x40\x20\x02\x41\x03\x48\x0d\x00\x20\x00\x20\x03\x29\x03\x10\x10\xa9\x05\x41\x01\x73\x21\x07\x0b\x02\x40\x20\x06\x28\x02\x0c\x28\x02\x20\x22\x03\x2d\x00\x04\x45\x0d\x00\x20\x00\x10\xff\x03\x0c\x01\x0b\x02\x40\x20\x05\x29\x03\x08\x22\x01\x41\x01\x20\x04\x41\xf6\xe5\x01\x6a\x2d\x00\x00\x74\xac\x7c\x20\x06\x35\x02\x14\x58\x0d\x00\x20\x00\x41\xbf\x8a\x03\x41\x00\x10\xa6\x04\x0c\x01\x0b\x02\x40\x20\x04\x41\x6a\x6a\x22\x00\x41\x09\x4b\x0d\x00\x20\x03\x28\x02\x08\x20\x06\x28\x02\x10\x6a\x20\x01\xa7\x6a\x21\x03\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x0e\x0a\x00\x00\x01\x01\x02\x02\x03\x03\x02\x03\x00\x0b\x20\x03\x20\x05\x28\x02\x14\x3a\x00\x00\x42\x80\x80\x80\x80\x30\x21\x08\x0c\x04\x0b\x20\x05\x28\x02\x14\x21\x00\x02\x40\x20\x07\x45\x0d\x00\x20\x05\x20\x00\x41\x18\x74\x20\x00\x41\x08\x74\x41\x80\x80\xfc\x07\x71\x72\x41\x10\x76\x22\x00\x36\x02\x14\x0b\x20\x03\x20\x00\x3b\x00\x00\x42\x80\x80\x80\x80\x30\x21\x08\x0c\x03\x0b\x20\x05\x28\x02\x14\x21\x00\x02\x40\x20\x07\x45\x0d\x00\x20\x05\x20\x00\x41\x18\x74\x20\x00\x41\x08\x74\x41\x80\x80\xfc\x07\x71\x72\x20\x00\x41\x08\x76\x41\x80\xfe\x03\x71\x20\x00\x41\x18\x76\x72\x72\x22\x00\x36\x02\x14\x0b\x20\x03\x20\x00\x36\x00\x00\x42\x80\x80\x80\x80\x30\x21\x08\x0c\x02\x0b\x20\x05\x29\x03\x18\x21\x08\x02\x40\x20\x07\x45\x0d\x00\x20\x05\x20\x08\x42\x38\x86\x20\x08\x42\x28\x86\x42\x80\x80\x80\x80\x80\x80\xc0\xff\x00\x83\x84\x20\x08\x42\x18\x86\x42\x80\x80\x80\x80\x80\xe0\x3f\x83\x20\x08\x42\x08\x86\x42\x80\x80\x80\x80\xf0\x1f\x83\x84\x84\x20\x08\x42\x08\x88\x42\x80\x80\x80\xf8\x0f\x83\x20\x08\x42\x18\x88\x42\x80\x80\xfc\x07\x83\x84\x20\x08\x42\x28\x88\x42\x80\xfe\x03\x83\x20\x08\x42\x38\x88\x84\x84\x84\x22\x08\x37\x03\x18\x0b\x20\x03\x20\x08\x37\x00\x00\x42\x80\x80\x80\x80\x30\x21\x08\x0c\x01\x0b\x10\x40\x00\x0b\x20\x05\x41\x20\x6a\x24\x00\x20\x08\x0b\x0e\x00\x20\x00\x20\x01\x20\x02\x10\xc0\x01\x10\xf9\x03\x0b\xb0\x07\x02\x02\x7f\x09\x7e\x23\x00\x41\x30\x6b\x22\x04\x24\x00\x20\x03\x29\x03\x00\x21\x06\x20\x04\x42\x80\x80\x80\x80\x30\x37\x03\x18\x20\x04\x42\x80\x80\x80\x80\x30\x37\x03\x10\x42\x80\x80\x80\x80\x30\x21\x07\x42\x80\x80\x80\x80\x30\x21\x08\x41\x00\x21\x05\x02\x40\x02\x40\x02\x40\x20\x02\x41\x02\x48\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x07\x02\x40\x20\x03\x29\x03\x08\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x41\x00\x21\x05\x0c\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x09\x42\x80\x80\x80\x80\x30\x21\x0a\x42\x80\x80\x80\x80\x30\x21\x0b\x42\x80\x80\x80\x80\x30\x21\x0c\x20\x00\x20\x08\x10\xdb\x03\x0d\x01\x41\x01\x21\x05\x42\x80\x80\x80\x80\x30\x21\x07\x20\x02\x41\x03\x48\x0d\x00\x20\x03\x29\x03\x10\x21\x07\x0b\x02\x40\x02\x40\x02\x40\x20\x00\x20\x06\x41\xd1\x01\x20\x06\x41\x00\x10\xb4\x01\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x22\x0c\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x02\x40\x20\x0c\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x09\x42\x80\x80\x80\x80\x30\x21\x0a\x42\x80\x80\x80\x80\x30\x21\x0b\x0c\x03\x0b\x20\x00\x20\x0b\x10\xcd\x01\x02\x40\x20\x00\x10\x85\x03\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x09\x42\x80\x80\x80\x80\x30\x21\x0a\x0c\x03\x0b\x20\x04\x20\x06\x10\xc0\x01\x37\x03\x10\x20\x00\x20\x04\x41\x10\x6a\x41\x08\x72\x41\x00\x10\xc6\x03\x21\x03\x20\x04\x29\x03\x18\x21\x09\x20\x04\x29\x03\x10\x21\x0a\x20\x03\x0d\x02\x42\x00\x21\x0c\x02\x40\x03\x40\x20\x00\x20\x0a\x20\x09\x20\x04\x41\x04\x6a\x10\xb7\x03\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x02\x40\x20\x04\x28\x02\x04\x45\x0d\x00\x20\x0a\x21\x0d\x0c\x04\x0b\x20\x00\x20\x0b\x20\x0c\x20\x06\x10\xa7\x05\x21\x03\x20\x0c\x42\x01\x7c\x21\x0c\x20\x03\x41\x00\x4e\x0d\x00\x0b\x0b\x42\x80\x80\x80\x80\x30\x21\x0c\x20\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x03\x20\x00\x20\x0a\x41\x01\x10\xfc\x02\x1a\x0c\x03\x0b\x42\x80\x80\x80\x80\x30\x21\x09\x42\x80\x80\x80\x80\x30\x21\x0d\x42\x80\x80\x80\x80\x30\x21\x0a\x42\x80\x80\x80\x80\x30\x21\x0c\x20\x00\x20\x06\x10\xfe\x02\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x0b\x02\x40\x20\x00\x20\x04\x41\x08\x6a\x20\x0b\x10\xfb\x05\x41\x00\x4e\x0d\x00\x20\x0d\x21\x0a\x0c\x01\x0b\x02\x40\x02\x40\x20\x04\x29\x03\x08\x22\x0e\x42\x80\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x0e\x42\xff\xff\xff\xff\x0f\x83\x21\x06\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x0e\xb9\xbd\x22\x0c\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x0c\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x06\x0b\x20\x04\x20\x06\x37\x03\x20\x20\x00\x20\x01\x41\x01\x20\x04\x41\x20\x6a\x10\xbe\x06\x21\x0c\x20\x00\x20\x06\x10\xcd\x01\x02\x40\x20\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x42\x00\x21\x06\x03\x40\x02\x40\x20\x06\x20\x0e\x53\x0d\x00\x20\x0d\x21\x0a\x0c\x05\x0b\x20\x00\x20\x0b\x20\x06\x10\xf4\x05\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x02\x40\x02\x40\x20\x05\x0d\x00\x20\x0a\x21\x01\x0c\x01\x0b\x20\x04\x20\x0a\x37\x03\x20\x20\x04\x20\x06\x42\xff\xff\xff\xff\x0f\x83\x37\x03\x28\x20\x00\x20\x08\x20\x07\x41\x02\x20\x04\x41\x20\x6a\x10\xb5\x01\x21\x01\x20\x00\x20\x0a\x10\xcd\x01\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x0b\x20\x00\x20\x0c\x20\x06\x20\x01\x10\xa8\x06\x21\x03\x20\x06\x42\x01\x7c\x21\x06\x20\x03\x41\x00\x4e\x0d\x00\x0b\x0b\x20\x0d\x21\x0a\x0c\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x0c\x0b\x20\x00\x20\x0c\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x0c\x0b\x20\x00\x20\x0b\x10\xcd\x01\x20\x00\x20\x0a\x10\xcd\x01\x20\x00\x20\x09\x10\xcd\x01\x20\x04\x41\x30\x6a\x24\x00\x20\x0c\x0b\x88\x01\x01\x03\x7f\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x04\x20\x02\xad\x37\x03\x08\x02\x40\x20\x00\x20\x01\x41\x01\x20\x04\x41\x08\x6a\x10\xbe\x06\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x41\x00\x21\x05\x03\x40\x20\x05\x20\x02\x4e\x0d\x01\x20\x00\x20\x01\x20\x05\x20\x03\x29\x03\x00\x10\xc0\x01\x10\xa8\x05\x21\x06\x20\x03\x41\x08\x6a\x21\x03\x20\x05\x41\x01\x6a\x21\x05\x20\x06\x41\x7f\x4a\x0d\x00\x0b\x20\x00\x20\x01\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x01\x0b\x22\x00\x02\x40\x20\x00\x20\x01\x41\x00\x10\xbc\x06\x22\x00\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x20\x00\x41\x28\x6a\x35\x02\x00\x0b\x84\x04\x02\x06\x7f\x04\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\x30\x21\x0a\x42\x80\x80\x80\x80\x30\x21\x0b\x02\x40\x20\x02\x41\x02\x48\x0d\x00\x20\x03\x29\x03\x08\x21\x0b\x0b\x20\x03\x29\x03\x00\x21\x0c\x42\x80\x80\x80\x80\xe0\x00\x21\x0d\x02\x40\x20\x00\x20\x01\x41\x00\x10\xbc\x06\x22\x03\x45\x0d\x00\x20\x00\x20\x04\x20\x0b\x10\xe1\x05\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x04\x29\x03\x00\x22\x0b\x42\x00\x59\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x0a\x0c\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x0a\x20\x03\x28\x02\x20\x28\x02\x0c\x28\x02\x20\x2d\x00\x04\x0d\x04\x20\x00\x20\x0c\x10\xfe\x02\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x02\x40\x20\x0a\xa7\x22\x02\x2f\x01\x06\x41\x6b\x6a\x41\xff\xff\x03\x71\x41\x0a\x4b\x0d\x00\x20\x02\x28\x02\x20\x22\x05\x28\x02\x0c\x28\x02\x20\x22\x06\x2d\x00\x04\x0d\x05\x20\x03\x2f\x01\x06\x21\x07\x20\x03\x28\x02\x20\x22\x08\x28\x02\x0c\x28\x02\x20\x21\x09\x20\x04\x20\x02\x41\x28\x6a\x35\x02\x00\x22\x0c\x37\x03\x08\x20\x0b\x20\x03\x41\x28\x6a\x35\x02\x00\x20\x0c\x7d\x55\x0d\x01\x20\x02\x2f\x01\x06\x20\x07\x47\x0d\x02\x20\x09\x28\x02\x08\x20\x08\x28\x02\x10\x6a\x20\x0b\x20\x07\x41\xf6\xe5\x01\x6a\x31\x00\x00\x22\x0d\x86\xa7\x6a\x20\x06\x28\x02\x08\x20\x05\x28\x02\x10\x6a\x20\x0c\x20\x0d\x86\xa7\x10\xad\x01\x1a\x0c\x03\x0b\x20\x00\x20\x04\x41\x08\x6a\x20\x0a\x10\xfb\x05\x0d\x03\x20\x0b\x20\x03\x41\x28\x6a\x35\x02\x00\x20\x04\x29\x03\x08\x22\x0c\x7d\x57\x0d\x01\x0b\x20\x00\x41\xbb\xe1\x01\x41\x00\x10\xa6\x04\x0c\x04\x0b\x20\x0b\xa7\x21\x02\x41\x00\x21\x03\x03\x40\x20\x0c\x20\x03\xad\x57\x0d\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x0d\x20\x00\x20\x0a\x20\x03\x10\xf6\x02\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x04\x20\x00\x20\x01\x20\x02\x20\x03\x6a\x20\x0b\x10\xa8\x05\x41\x00\x48\x0d\x04\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x42\x80\x80\x80\x80\x30\x21\x0d\x0c\x02\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x0d\x0c\x01\x0b\x20\x00\x10\xff\x03\x0b\x20\x00\x20\x0a\x10\xcd\x01\x20\x04\x41\x10\x6a\x24\x00\x20\x0d\x0b\x2a\x01\x01\x7e\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x02\x40\x20\x00\x20\x01\x10\xc8\x08\x0d\x00\x20\x00\x20\x01\x20\x02\x20\x03\x20\x04\x10\xb1\x03\x21\x05\x0b\x20\x05\x0b\x38\x01\x02\x7f\x41\x00\x21\x02\x02\x40\x02\x40\x20\x00\x20\x01\x41\x00\x10\xbc\x06\x22\x03\x45\x0d\x00\x20\x03\x28\x02\x20\x28\x02\x0c\x28\x02\x20\x2d\x00\x04\x45\x0d\x01\x20\x00\x10\xff\x03\x0b\x41\x7f\x21\x02\x0b\x20\x02\x0b\x4b\x02\x01\x7e\x01\x7f\x42\x80\x80\x80\x80\x30\x21\x02\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x2f\x01\x06\x22\x03\x41\x6b\x6a\x41\xff\xff\x03\x71\x41\x0a\x4b\x0d\x00\x20\x00\x20\x00\x28\x02\x10\x28\x02\x44\x20\x03\x41\x18\x6c\x6a\x28\x02\x04\x10\xc5\x01\x21\x02\x0b\x20\x02\x0b\x9d\x02\x02\x04\x7f\x02\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x02\x40\x20\x00\x20\x01\x10\xa3\x06\x22\x05\x41\x00\x48\x0d\x00\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x00\x20\x05\x20\x05\x10\xd3\x05\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x08\x20\x05\x20\x05\x10\xd3\x05\x0d\x00\x20\x04\x20\x05\x36\x02\x04\x20\x05\x21\x06\x02\x40\x20\x02\x41\x03\x48\x0d\x00\x20\x05\x21\x06\x20\x03\x29\x03\x10\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x04\x41\x04\x6a\x20\x09\x20\x05\x20\x05\x10\xd3\x05\x0d\x01\x20\x04\x28\x02\x04\x21\x06\x0b\x02\x40\x20\x06\x20\x04\x28\x02\x08\x22\x02\x6b\x22\x03\x20\x05\x20\x04\x28\x02\x0c\x22\x06\x6b\x22\x05\x20\x03\x20\x05\x48\x1b\x22\x05\x41\x01\x48\x0d\x00\x02\x40\x20\x01\xa7\x22\x03\x28\x02\x20\x28\x02\x0c\x28\x02\x20\x2d\x00\x04\x45\x0d\x00\x20\x00\x10\xff\x03\x0c\x02\x0b\x20\x03\x28\x02\x24\x22\x07\x20\x06\x20\x03\x2f\x01\x06\x41\xf6\xe5\x01\x6a\x2d\x00\x00\x22\x00\x74\x6a\x20\x07\x20\x02\x20\x00\x74\x6a\x20\x05\x20\x00\x74\x10\xad\x01\x1a\x0b\x20\x01\x10\xc0\x01\x21\x08\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x08\x0b\xb4\x05\x02\x04\x7f\x02\x7e\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x02\x40\x20\x00\x20\x01\x10\xa3\x06\x22\x05\x41\x00\x48\x0d\x00\x02\x40\x02\x40\x20\x01\xa7\x22\x06\x2f\x01\x06\x22\x07\x41\x15\x47\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xc0\x01\x10\xfb\x03\x0d\x02\x20\x04\x20\x04\x34\x02\x08\x37\x03\x10\x0c\x01\x0b\x02\x40\x20\x07\x41\x1b\x4b\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xc9\x04\x0d\x02\x20\x04\x20\x04\x35\x02\x08\x37\x03\x10\x0c\x01\x0b\x02\x40\x20\x07\x41\x1d\x4b\x0d\x00\x20\x00\x20\x04\x41\x10\x6a\x20\x03\x29\x03\x00\x10\xc2\x08\x45\x0d\x01\x0c\x02\x0b\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xdf\x04\x0d\x01\x02\x40\x02\x40\x20\x06\x2f\x01\x06\x41\x1e\x47\x0d\x00\x20\x04\x2b\x03\x08\xb6\xbc\xad\x21\x09\x0c\x01\x0b\x20\x04\x29\x03\x08\x21\x09\x0b\x20\x04\x20\x09\x37\x03\x10\x0b\x20\x04\x41\x00\x36\x02\x08\x02\x40\x02\x40\x20\x02\x41\x01\x4a\x0d\x00\x20\x04\x20\x05\x36\x02\x1c\x0c\x01\x0b\x20\x00\x20\x04\x41\x08\x6a\x20\x03\x29\x03\x08\x20\x05\x20\x05\x10\xd3\x05\x0d\x01\x20\x04\x20\x05\x36\x02\x1c\x20\x02\x41\x03\x48\x0d\x00\x20\x03\x29\x03\x10\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x04\x41\x1c\x6a\x20\x09\x20\x05\x20\x05\x10\xd3\x05\x0d\x01\x0b\x02\x40\x20\x06\x28\x02\x20\x28\x02\x0c\x28\x02\x20\x2d\x00\x04\x45\x0d\x00\x20\x00\x10\xff\x03\x0c\x01\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x06\x2f\x01\x06\x41\xf6\xe5\x01\x6a\x2d\x00\x00\x22\x00\x41\x03\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x0e\x04\x00\x01\x02\x03\x00\x0b\x20\x04\x28\x02\x1c\x22\x03\x20\x04\x28\x02\x08\x22\x00\x4c\x0d\x07\x20\x06\x28\x02\x24\x20\x00\x6a\x20\x04\x2d\x00\x10\x20\x03\x20\x00\x6b\x10\x74\x1a\x0c\x07\x0b\x20\x04\x28\x02\x08\x22\x00\x41\x01\x74\x21\x03\x20\x04\x2f\x01\x10\x21\x02\x20\x04\x28\x02\x1c\x21\x05\x03\x40\x20\x00\x20\x05\x4e\x0d\x04\x20\x06\x28\x02\x24\x20\x03\x6a\x20\x02\x3b\x01\x00\x20\x03\x41\x02\x6a\x21\x03\x20\x00\x41\x01\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x20\x04\x28\x02\x08\x22\x00\x41\x02\x74\x21\x03\x20\x04\x28\x02\x10\x21\x02\x20\x04\x28\x02\x1c\x21\x05\x03\x40\x20\x00\x20\x05\x4e\x0d\x04\x20\x06\x28\x02\x24\x20\x03\x6a\x20\x02\x36\x02\x00\x20\x03\x41\x04\x6a\x21\x03\x20\x00\x41\x01\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x20\x04\x28\x02\x08\x22\x00\x41\x03\x74\x21\x03\x20\x04\x29\x03\x10\x21\x08\x20\x04\x28\x02\x1c\x21\x05\x03\x40\x20\x00\x20\x05\x4e\x0d\x04\x20\x06\x28\x02\x24\x20\x03\x6a\x20\x08\x37\x03\x00\x20\x03\x41\x08\x6a\x21\x03\x20\x00\x41\x01\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x10\x40\x00\x0b\x20\x04\x20\x00\x36\x02\x08\x0c\x02\x0b\x20\x04\x20\x00\x36\x02\x08\x0c\x01\x0b\x20\x04\x20\x00\x36\x02\x08\x0b\x20\x01\x10\xc0\x01\x21\x08\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x08\x0b\x99\x02\x02\x02\x7f\x06\x7e\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x42\x80\x80\x80\x80\x30\x21\x07\x02\x40\x02\x40\x20\x00\x20\x01\x10\xa3\x06\x22\x06\x41\x00\x48\x0d\x00\x20\x00\x20\x03\x29\x03\x00\x22\x08\x10\xdb\x03\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x09\x02\x40\x20\x02\x41\x02\x48\x0d\x00\x20\x03\x29\x03\x08\x21\x09\x0b\x20\x06\xad\x21\x0a\x42\x00\x21\x0b\x02\x40\x03\x40\x20\x0a\x20\x0b\x51\x0d\x01\x20\x00\x20\x01\x20\x0b\x10\xbb\x03\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x20\x05\x20\x01\x37\x03\x10\x20\x05\x20\x0b\x37\x03\x08\x20\x05\x20\x07\x37\x03\x00\x20\x00\x20\x08\x20\x09\x41\x03\x20\x05\x10\xb5\x01\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x02\x40\x20\x00\x20\x0c\x10\x9a\x03\x45\x0d\x00\x02\x40\x20\x04\x0d\x00\x20\x07\x21\x0b\x0c\x05\x0b\x20\x00\x20\x07\x10\xcd\x01\x0c\x04\x0b\x20\x00\x20\x07\x10\xcd\x01\x20\x0b\x42\x01\x7c\x21\x0b\x0c\x00\x0b\x00\x0b\x42\xff\xff\xff\xff\x0f\x42\x80\x80\x80\x80\x30\x20\x04\x1b\x21\x0b\x0c\x01\x0b\x20\x00\x20\x07\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x0b\x0b\x20\x05\x41\x20\x6a\x24\x00\x20\x0b\x0b\xfb\x02\x02\x02\x7f\x01\x7e\x02\x40\x20\x00\x20\x01\x10\xa3\x06\x22\x04\x41\x00\x4e\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x02\x40\x20\x04\x45\x0d\x00\x02\x40\x20\x01\xa7\x22\x00\x2f\x01\x06\x41\xf6\xe5\x01\x6a\x2d\x00\x00\x22\x05\x41\x03\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x05\x0e\x04\x00\x01\x02\x03\x00\x0b\x20\x04\x20\x00\x41\x24\x6a\x28\x02\x00\x22\x00\x6a\x41\x7f\x6a\x21\x04\x03\x40\x20\x00\x20\x04\x4f\x0d\x05\x20\x00\x2d\x00\x00\x21\x05\x20\x00\x20\x04\x2d\x00\x00\x3a\x00\x00\x20\x04\x20\x05\x3a\x00\x00\x20\x04\x41\x7f\x6a\x21\x04\x20\x00\x41\x01\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x20\x04\x41\x01\x74\x20\x00\x41\x24\x6a\x28\x02\x00\x22\x00\x6a\x41\x7e\x6a\x21\x04\x03\x40\x20\x00\x20\x04\x4f\x0d\x04\x20\x00\x2f\x01\x00\x21\x05\x20\x00\x20\x04\x2f\x01\x00\x3b\x01\x00\x20\x04\x20\x05\x3b\x01\x00\x20\x04\x41\x7e\x6a\x21\x04\x20\x00\x41\x02\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x20\x04\x41\x02\x74\x20\x00\x41\x24\x6a\x28\x02\x00\x22\x00\x6a\x41\x7c\x6a\x21\x04\x03\x40\x20\x00\x20\x04\x4f\x0d\x03\x20\x00\x28\x02\x00\x21\x05\x20\x00\x20\x04\x28\x02\x00\x36\x02\x00\x20\x04\x20\x05\x36\x02\x00\x20\x04\x41\x7c\x6a\x21\x04\x20\x00\x41\x04\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x20\x04\x41\x03\x74\x20\x00\x41\x24\x6a\x28\x02\x00\x22\x00\x6a\x41\x78\x6a\x21\x04\x03\x40\x20\x00\x20\x04\x4f\x0d\x02\x20\x00\x29\x03\x00\x21\x06\x20\x00\x20\x04\x29\x03\x00\x37\x03\x00\x20\x04\x20\x06\x37\x03\x00\x20\x04\x41\x78\x6a\x21\x04\x20\x00\x41\x08\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x10\x40\x00\x0b\x20\x01\x10\xc0\x01\x0b\xd1\x03\x02\x06\x7f\x04\x7e\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\x30\x21\x0a\x02\x40\x02\x40\x20\x00\x20\x01\x10\xa3\x06\x22\x05\x41\x00\x48\x0d\x00\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x00\x20\x05\x20\x05\x10\xd3\x05\x0d\x00\x20\x04\x20\x05\x36\x02\x08\x42\x80\x80\x80\x80\x30\x21\x0a\x02\x40\x20\x03\x29\x03\x08\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x0b\x20\x05\x20\x05\x10\xd3\x05\x0d\x01\x20\x04\x28\x02\x08\x21\x05\x0b\x20\x04\x28\x02\x0c\x21\x03\x20\x00\x20\x01\x41\x00\x10\xbc\x06\x22\x06\x45\x0d\x00\x20\x06\x2f\x01\x06\x21\x07\x20\x04\x20\x05\x20\x03\x6b\x22\x05\x41\x00\x20\x05\x41\x00\x4a\x1b\x22\x08\xad\x22\x0c\x37\x03\x18\x20\x04\x20\x01\x37\x03\x10\x20\x00\x41\x02\x20\x04\x41\x10\x6a\x10\xa4\x06\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x05\x41\x01\x48\x0d\x01\x20\x00\x20\x01\x10\xc8\x08\x0d\x00\x20\x00\x20\x0a\x10\xc8\x08\x0d\x00\x02\x40\x20\x00\x20\x0a\x41\x00\x10\xbc\x06\x22\x05\x45\x0d\x00\x20\x06\x2f\x01\x06\x22\x09\x20\x05\x2f\x01\x06\x47\x0d\x00\x20\x05\x28\x02\x20\x28\x02\x14\x20\x09\x41\xf6\xe5\x01\x6a\x2d\x00\x00\x22\x09\x76\x20\x08\x49\x0d\x00\x20\x06\x28\x02\x20\x28\x02\x14\x20\x09\x76\x20\x08\x20\x03\x6a\x49\x0d\x00\x20\x05\x28\x02\x24\x20\x06\x28\x02\x24\x20\x03\x20\x07\x41\xf6\xe5\x01\x6a\x2d\x00\x00\x22\x00\x74\x6a\x20\x08\x20\x00\x74\x10\x70\x1a\x0c\x02\x0b\x42\x00\x21\x0b\x03\x40\x20\x0b\x20\x0c\x5a\x0d\x02\x20\x00\x20\x01\x20\x03\xad\x10\xbb\x03\x22\x0d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x0a\x20\x0b\x20\x0d\x41\x80\x80\x01\x10\xba\x03\x21\x05\x20\x03\x41\x01\x6a\x21\x03\x20\x0b\x42\x01\x7c\x21\x0b\x20\x05\x41\x7f\x4a\x0d\x00\x0b\x0b\x20\x00\x20\x0a\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x0a\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x0a\x0b\xb7\x02\x02\x03\x7f\x03\x7e\x23\x00\x41\x30\x6b\x22\x04\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x02\x40\x20\x00\x20\x01\x41\x00\x10\xbc\x06\x22\x05\x45\x0d\x00\x20\x00\x20\x04\x41\x0c\x6a\x20\x03\x29\x03\x00\x20\x05\x41\x28\x6a\x28\x02\x00\x22\x06\x20\x06\x10\xd3\x05\x0d\x00\x20\x04\x20\x06\x36\x02\x08\x02\x40\x20\x03\x29\x03\x08\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x08\x20\x06\x20\x06\x10\xd3\x05\x0d\x01\x20\x04\x28\x02\x08\x21\x06\x0b\x20\x04\x28\x02\x0c\x21\x03\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x20\x00\x20\x01\x41\x00\x10\xbf\x08\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x05\x2f\x01\x06\x21\x05\x20\x00\x20\x08\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x20\x00\x20\x01\x41\x00\x10\xbd\x08\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x04\x20\x09\x37\x03\x18\x20\x04\x20\x01\x37\x03\x10\x20\x04\x20\x06\x20\x03\x6b\x22\x06\x41\x00\x20\x06\x41\x00\x4a\x1b\xad\x37\x03\x28\x20\x04\x20\x03\x20\x05\x41\xf6\xe5\x01\x6a\x2d\x00\x00\x74\x20\x08\xa7\x6a\xad\x37\x03\x20\x20\x00\x41\x04\x20\x04\x41\x10\x6a\x10\xa4\x06\x21\x07\x20\x00\x20\x09\x10\xcd\x01\x0b\x20\x04\x41\x30\x6a\x24\x00\x20\x07\x0b\xca\x05\x02\x07\x7f\x03\x7e\x23\x00\x41\x30\x6b\x22\x04\x24\x00\x20\x04\x20\x01\x37\x03\x10\x20\x04\x20\x00\x36\x02\x08\x20\x04\x20\x03\x29\x03\x00\x22\x0b\x37\x03\x18\x20\x04\x41\x00\x36\x02\x0c\x42\x80\x80\x80\x80\xe0\x00\x21\x0c\x02\x40\x02\x40\x20\x00\x20\x01\x10\xa3\x06\x22\x05\x41\x00\x48\x0d\x00\x02\x40\x20\x0b\x42\x80\x80\x80\x80\x70\x83\x22\x0d\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x0b\x10\xdb\x03\x0d\x01\x0b\x02\x40\x20\x05\x41\x02\x48\x0d\x00\x20\x01\xa7\x22\x03\x2f\x01\x06\x41\x6b\x6a\x22\x06\x41\xff\xff\x03\x71\x41\x0b\x4f\x0d\x02\x20\x04\x20\x06\x41\x10\x74\x41\x10\x75\x41\x02\x74\x22\x06\x41\xe8\x8a\x03\x6a\x28\x02\x00\x36\x02\x20\x41\x01\x20\x03\x2f\x01\x06\x41\xf6\xe5\x01\x6a\x2d\x00\x00\x22\x07\x74\x21\x08\x20\x03\x41\x24\x6a\x28\x02\x00\x21\x09\x02\x40\x20\x0d\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x05\x41\x02\x74\x10\xc0\x02\x22\x0a\x45\x0d\x02\x41\x00\x21\x03\x20\x0a\x21\x06\x02\x40\x03\x40\x20\x05\x20\x03\x46\x0d\x01\x20\x06\x20\x03\x36\x02\x00\x20\x06\x41\x04\x6a\x21\x06\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x04\x20\x08\x36\x02\x28\x20\x04\x20\x09\x36\x02\x24\x20\x0a\x20\x05\x41\x04\x41\xfa\x00\x20\x04\x41\x08\x6a\x10\xab\x04\x02\x40\x02\x40\x20\x04\x28\x02\x0c\x0d\x00\x20\x00\x20\x05\x20\x07\x74\x22\x03\x10\xc0\x02\x22\x06\x0d\x01\x0b\x20\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x0a\x20\x03\x28\x02\x04\x11\x00\x00\x0c\x03\x0b\x20\x06\x20\x09\x20\x03\x10\x70\x21\x03\x20\x08\x41\x7f\x6a\x22\x06\x41\x07\x4b\x0d\x03\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x06\x0e\x08\x00\x01\x08\x02\x08\x08\x08\x03\x00\x0b\x20\x0a\x21\x06\x03\x40\x20\x05\x45\x0d\x04\x20\x09\x20\x03\x20\x06\x28\x02\x00\x6a\x2d\x00\x00\x3a\x00\x00\x20\x05\x41\x7f\x6a\x21\x05\x20\x09\x41\x01\x6a\x21\x09\x20\x06\x41\x04\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x20\x0a\x21\x06\x03\x40\x20\x05\x45\x0d\x03\x20\x09\x20\x03\x20\x06\x28\x02\x00\x41\x01\x74\x6a\x2f\x01\x00\x3b\x01\x00\x20\x05\x41\x7f\x6a\x21\x05\x20\x09\x41\x02\x6a\x21\x09\x20\x06\x41\x04\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x20\x0a\x21\x06\x03\x40\x20\x05\x45\x0d\x02\x20\x09\x20\x03\x20\x06\x28\x02\x00\x41\x02\x74\x6a\x28\x02\x00\x36\x02\x00\x20\x05\x41\x7f\x6a\x21\x05\x20\x09\x41\x04\x6a\x21\x09\x20\x06\x41\x04\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x20\x0a\x21\x06\x03\x40\x20\x05\x45\x0d\x01\x20\x09\x20\x03\x20\x06\x28\x02\x00\x41\x03\x74\x6a\x29\x03\x00\x37\x03\x00\x20\x05\x41\x7f\x6a\x21\x05\x20\x09\x41\x08\x6a\x21\x09\x20\x06\x41\x04\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x10\x22\x06\x41\x10\x6a\x20\x03\x20\x06\x28\x02\x04\x11\x00\x00\x20\x00\x28\x02\x10\x22\x03\x41\x10\x6a\x20\x0a\x20\x03\x28\x02\x04\x11\x00\x00\x0c\x01\x0b\x20\x09\x20\x05\x20\x08\x20\x06\x41\x94\x8b\x03\x6a\x28\x02\x00\x20\x04\x41\x08\x6a\x10\xab\x04\x20\x04\x28\x02\x0c\x0d\x01\x0b\x20\x01\x10\xc0\x01\x21\x0c\x0b\x20\x04\x41\x30\x6a\x24\x00\x20\x0c\x0f\x0b\x10\x40\x00\x0b\xd2\x02\x03\x03\x7f\x01\x7e\x01\x7c\x23\x00\x41\x20\x6b\x22\x03\x24\x00\x41\x00\x21\x04\x02\x40\x20\x02\x28\x02\x04\x0d\x00\x20\x01\x28\x02\x00\x21\x05\x20\x03\x20\x02\x28\x02\x00\x22\x01\x20\x02\x28\x02\x1c\x20\x02\x28\x02\x20\x20\x00\x28\x02\x00\x22\x00\x6c\x6a\x20\x02\x28\x02\x18\x11\x0d\x00\x37\x03\x10\x20\x03\x20\x01\x20\x02\x28\x02\x1c\x20\x05\x20\x02\x28\x02\x20\x6c\x6a\x20\x02\x28\x02\x18\x11\x0d\x00\x37\x03\x18\x02\x40\x02\x40\x20\x01\x20\x02\x29\x03\x10\x42\x80\x80\x80\x80\x30\x41\x02\x20\x03\x41\x10\x6a\x10\xb5\x01\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x02\x41\x01\x36\x02\x04\x41\x00\x21\x04\x0c\x01\x0b\x02\x40\x02\x40\x02\x40\x20\x06\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x06\xa7\x22\x04\x41\x00\x4a\x20\x04\x41\x1f\x75\x6a\x21\x04\x0c\x01\x0b\x41\x00\x21\x04\x20\x01\x20\x03\x41\x08\x6a\x20\x06\x10\xf8\x03\x41\x00\x48\x0d\x01\x20\x03\x2b\x03\x08\x22\x07\x44\x00\x00\x00\x00\x00\x00\x00\x00\x64\x20\x07\x44\x00\x00\x00\x00\x00\x00\x00\x00\x63\x6b\x21\x04\x0b\x02\x40\x20\x04\x0d\x00\x20\x00\x20\x05\x4b\x20\x00\x20\x05\x49\x6b\x21\x04\x0b\x20\x01\x20\x02\x29\x03\x08\x10\xc8\x08\x41\x7f\x4a\x0d\x01\x20\x02\x41\x01\x36\x02\x04\x0c\x01\x0b\x20\x02\x41\x01\x36\x02\x04\x0b\x20\x01\x20\x03\x29\x03\x10\x10\xcd\x01\x20\x01\x20\x03\x29\x03\x18\x10\xcd\x01\x0b\x20\x03\x41\x20\x6a\x24\x00\x20\x04\x0b\xa7\x03\x02\x04\x7f\x03\x7e\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x41\x00\x21\x06\x02\x40\x02\x40\x20\x00\x20\x01\x10\xa3\x06\x22\x07\x41\x00\x48\x0d\x00\x41\x2c\x21\x08\x02\x40\x02\x40\x20\x02\x41\x01\x48\x0d\x00\x20\x04\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x09\x20\x03\x29\x03\x00\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x0b\x20\x00\x20\x0a\x10\xe6\x02\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x41\x7f\x21\x08\x20\x09\xa7\x22\x06\x28\x02\x04\x41\x01\x47\x0d\x01\x20\x06\x2d\x00\x10\x21\x08\x0c\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x09\x0b\x20\x00\x20\x05\x41\x08\x6a\x41\x00\x10\xb3\x04\x1a\x41\x00\x21\x02\x02\x40\x02\x40\x03\x40\x20\x02\x20\x07\x4e\x0d\x01\x02\x40\x20\x02\x45\x0d\x00\x02\x40\x20\x08\x41\x00\x48\x0d\x00\x20\x05\x41\x08\x6a\x20\x08\x10\xb4\x04\x45\x0d\x01\x0c\x04\x0b\x20\x05\x41\x08\x6a\x20\x06\x41\x00\x20\x06\x28\x02\x04\x41\xff\xff\xff\xff\x07\x71\x10\xf5\x03\x0d\x03\x0b\x02\x40\x20\x00\x20\x01\x20\x02\x10\xf6\x02\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x22\x0b\x42\x80\x80\x80\x80\x20\x51\x0d\x00\x20\x0b\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x0b\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x02\x40\x20\x04\x45\x0d\x00\x20\x00\x20\x0a\x10\xae\x06\x21\x0a\x0b\x20\x05\x41\x08\x6a\x20\x0a\x10\xe5\x05\x0d\x03\x0b\x20\x02\x41\x01\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x20\x00\x20\x09\x10\xcd\x01\x20\x05\x41\x08\x6a\x10\xf6\x03\x21\x0b\x0c\x02\x0b\x20\x05\x28\x02\x08\x28\x02\x10\x22\x02\x41\x10\x6a\x20\x05\x28\x02\x0c\x20\x02\x28\x02\x04\x11\x00\x00\x20\x05\x41\x00\x36\x02\x0c\x20\x00\x20\x09\x10\xcd\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x0b\x0b\x20\x05\x41\x20\x6a\x24\x00\x20\x0b\x0b\xbe\x0e\x04\x07\x7f\x01\x7e\x01\x7c\x01\x7d\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x0c\x02\x40\x20\x00\x20\x01\x10\xa3\x06\x22\x06\x41\x00\x48\x0d\x00\x41\x7f\x21\x07\x02\x40\x02\x40\x02\x40\x20\x06\x45\x0d\x00\x41\x01\x21\x08\x02\x40\x02\x40\x02\x40\x20\x04\x41\x01\x47\x0d\x00\x41\x7f\x21\x08\x20\x05\x20\x06\x41\x7f\x6a\x36\x02\x1c\x20\x02\x41\x02\x48\x0d\x01\x20\x00\x20\x05\x41\x08\x6a\x20\x03\x29\x03\x08\x10\xdf\x04\x0d\x06\x02\x40\x20\x05\x2b\x03\x08\x22\x0d\x20\x0d\x61\x0d\x00\x20\x05\x41\x00\x36\x02\x1c\x0c\x02\x0b\x02\x40\x20\x0d\x44\x00\x00\x00\x00\x00\x00\x00\x00\x66\x41\x01\x73\x0d\x00\x20\x0d\x20\x05\x28\x02\x1c\xb7\x63\x41\x01\x73\x0d\x02\x02\x40\x02\x40\x20\x0d\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x0d\xaa\x21\x07\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x07\x0b\x20\x05\x20\x07\x36\x02\x1c\x0c\x02\x0b\x20\x05\x20\x0d\x20\x06\xb7\xa0\x22\x0d\x39\x03\x08\x41\x7f\x21\x07\x20\x0d\x44\x00\x00\x00\x00\x00\x00\x00\x00\x63\x0d\x05\x02\x40\x02\x40\x20\x0d\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x41\x63\x45\x0d\x00\x20\x0d\xaa\x21\x07\x0c\x01\x0b\x41\x80\x80\x80\x80\x78\x21\x07\x0b\x20\x05\x20\x07\x36\x02\x1c\x41\x7f\x21\x08\x0c\x01\x0b\x20\x05\x41\x00\x36\x02\x1c\x02\x40\x20\x02\x41\x02\x4e\x0d\x00\x20\x06\x21\x02\x0c\x02\x0b\x20\x06\x21\x02\x20\x00\x20\x05\x41\x1c\x6a\x20\x03\x29\x03\x08\x20\x06\x20\x06\x10\xd3\x05\x0d\x05\x0c\x01\x0b\x41\x7f\x21\x02\x0b\x02\x40\x20\x01\xa7\x22\x09\x28\x02\x20\x28\x02\x0c\x28\x02\x20\x2d\x00\x04\x45\x0d\x00\x41\x7f\x21\x07\x20\x04\x41\x7f\x47\x0d\x03\x41\x7f\x41\x00\x20\x03\x35\x02\x04\x42\x20\x86\x42\x80\x80\x80\x80\x30\x52\x1b\x21\x07\x0c\x02\x0b\x20\x05\x42\x00\x37\x03\x10\x02\x40\x02\x40\x41\x07\x20\x03\x29\x03\x00\x22\x0c\x42\x20\x88\xa7\x22\x07\x20\x07\x41\x0b\x6a\x41\x11\x4b\x1b\x22\x03\x41\x76\x46\x0d\x00\x02\x40\x20\x03\x41\x07\x46\x0d\x00\x41\x7f\x21\x07\x20\x03\x0d\x03\x20\x05\x20\x0c\x42\x20\x86\x42\x20\x87\x22\x0c\x37\x03\x10\x20\x05\x20\x0c\xb9\x22\x0d\x39\x03\x08\x41\x01\x21\x0a\x41\x00\x21\x0b\x0c\x02\x0b\x20\x05\x20\x0c\x42\x80\x80\x80\x80\xc0\x81\x80\xfc\xff\x00\x7c\x22\x0c\x37\x03\x08\x02\x40\x02\x40\x20\x0c\xbf\x22\x0d\x99\x44\x00\x00\x00\x00\x00\x00\xe0\x43\x63\x45\x0d\x00\x20\x0d\xb0\x21\x0c\x0c\x01\x0b\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x21\x0c\x0b\x20\x05\x20\x0c\x37\x03\x10\x20\x0d\x20\x0c\xb9\x61\x21\x0a\x41\x00\x21\x0b\x0c\x01\x0b\x41\x7f\x21\x07\x20\x09\x2f\x01\x06\x41\x64\x6a\x22\x03\x41\x01\x4b\x0d\x01\x20\x0c\xa7\x21\x0a\x02\x40\x02\x40\x02\x40\x20\x03\x0e\x02\x01\x00\x01\x0b\x41\x7f\x21\x07\x20\x05\x41\x10\x6a\x20\x0a\x41\x04\x6a\x10\xbe\x02\x0d\x03\x0c\x01\x0b\x41\x7f\x21\x07\x20\x05\x41\x10\x6a\x20\x0a\x41\x04\x6a\x41\x00\x10\xcf\x04\x0d\x02\x0b\x20\x05\x42\x00\x37\x03\x08\x41\x00\x21\x0a\x41\x01\x21\x0b\x44\x00\x00\x00\x00\x00\x00\x00\x00\x21\x0d\x0b\x41\x7f\x21\x07\x20\x09\x2f\x01\x06\x41\x6b\x6a\x22\x03\x41\x0a\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x03\x0e\x0b\x01\x00\x01\x03\x04\x06\x07\x0b\x0c\x09\x0a\x01\x0b\x41\x7f\x21\x07\x20\x0a\x45\x0d\x0e\x41\x7f\x21\x07\x20\x05\x29\x03\x10\x22\x0c\x42\x80\x01\x7c\x42\x80\x02\x54\x0d\x01\x0c\x0e\x0b\x41\x7f\x21\x07\x20\x0a\x45\x0d\x0d\x41\x7f\x21\x07\x20\x05\x29\x03\x10\x22\x0c\x42\xff\x01\x56\x0d\x0d\x0b\x20\x0c\xa7\x21\x03\x20\x09\x28\x02\x24\x21\x00\x02\x40\x20\x08\x41\x00\x4a\x0d\x00\x20\x03\x41\xff\xff\x03\x71\x21\x06\x20\x05\x28\x02\x1c\x21\x07\x03\x40\x20\x02\x20\x07\x46\x0d\x0d\x20\x06\x20\x00\x20\x07\x6a\x2d\x00\x00\x46\x0d\x0e\x20\x05\x20\x07\x20\x08\x6a\x22\x07\x36\x02\x1c\x0c\x00\x0b\x00\x0b\x41\x7f\x21\x07\x20\x00\x20\x05\x28\x02\x1c\x22\x02\x6a\x20\x03\x41\xff\xff\x03\x71\x20\x06\x20\x02\x6b\x10\x78\x22\x06\x45\x0d\x0c\x20\x06\x20\x00\x6b\x21\x07\x0c\x0c\x0b\x41\x7f\x21\x07\x20\x0a\x45\x0d\x0b\x41\x7f\x21\x07\x20\x05\x29\x03\x10\x22\x0c\x42\x80\x80\x02\x7c\x42\x80\x80\x04\x54\x0d\x01\x0c\x0b\x0b\x41\x7f\x21\x07\x20\x0a\x45\x0d\x0a\x41\x7f\x21\x07\x20\x05\x29\x03\x10\x22\x0c\x42\xff\xff\x03\x56\x0d\x0a\x0b\x20\x08\x41\x01\x74\x21\x03\x20\x09\x28\x02\x24\x20\x05\x28\x02\x1c\x22\x07\x41\x01\x74\x6a\x21\x06\x20\x0c\xa7\x41\xff\xff\x03\x71\x21\x00\x03\x40\x20\x02\x20\x07\x46\x0d\x09\x20\x06\x2f\x01\x00\x20\x00\x46\x0d\x0a\x20\x05\x20\x07\x20\x08\x6a\x22\x07\x36\x02\x1c\x20\x06\x20\x03\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x41\x7f\x21\x07\x20\x0a\x45\x0d\x08\x41\x7f\x21\x07\x20\x05\x29\x03\x10\x22\x0c\x42\x80\x80\x80\x80\x08\x7c\x42\x80\x80\x80\x80\x10\x54\x0d\x01\x0c\x08\x0b\x41\x7f\x21\x07\x20\x0a\x45\x0d\x07\x41\x7f\x21\x07\x20\x05\x29\x03\x10\x22\x0c\x42\xff\xff\xff\xff\x0f\x56\x0d\x07\x0b\x20\x08\x41\x02\x74\x21\x03\x20\x09\x28\x02\x24\x20\x05\x28\x02\x1c\x22\x07\x41\x02\x74\x6a\x21\x06\x20\x0c\xa7\x21\x00\x03\x40\x20\x02\x20\x07\x46\x0d\x06\x20\x06\x28\x02\x00\x20\x00\x46\x0d\x07\x20\x05\x20\x07\x20\x08\x6a\x22\x07\x36\x02\x1c\x20\x06\x20\x03\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x41\x7f\x21\x07\x20\x0b\x0d\x05\x02\x40\x20\x0d\x20\x0d\x61\x0d\x00\x41\x7f\x21\x07\x20\x04\x41\x7f\x47\x0d\x08\x20\x08\x41\x02\x74\x21\x00\x20\x09\x28\x02\x24\x20\x05\x28\x02\x1c\x22\x07\x41\x02\x74\x6a\x21\x06\x03\x40\x20\x02\x20\x07\x46\x0d\x06\x20\x06\x2a\x02\x00\x22\x0e\x20\x0e\x5c\x0d\x07\x20\x05\x20\x07\x20\x08\x6a\x22\x07\x36\x02\x1c\x20\x06\x20\x00\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x41\x7f\x21\x07\x20\x0d\x20\x0d\xb6\x22\x0e\xbb\x62\x0d\x05\x20\x08\x41\x02\x74\x21\x00\x20\x09\x28\x02\x24\x20\x05\x28\x02\x1c\x22\x07\x41\x02\x74\x6a\x21\x06\x03\x40\x20\x02\x20\x07\x46\x0d\x05\x20\x06\x2a\x02\x00\x20\x0e\x5b\x0d\x06\x20\x05\x20\x07\x20\x08\x6a\x22\x07\x36\x02\x1c\x20\x06\x20\x00\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x41\x7f\x21\x07\x20\x0b\x0d\x04\x20\x09\x28\x02\x24\x21\x06\x02\x40\x20\x0d\x20\x0d\x62\x0d\x00\x20\x08\x41\x03\x74\x21\x00\x20\x06\x20\x05\x28\x02\x1c\x22\x07\x41\x03\x74\x6a\x21\x06\x03\x40\x20\x02\x20\x07\x46\x0d\x05\x20\x06\x2b\x03\x00\x20\x0d\x61\x0d\x06\x20\x05\x20\x07\x20\x08\x6a\x22\x07\x36\x02\x1c\x20\x06\x20\x00\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x41\x7f\x21\x07\x20\x04\x41\x7f\x47\x0d\x06\x20\x08\x41\x03\x74\x21\x00\x20\x06\x20\x05\x28\x02\x1c\x22\x07\x41\x03\x74\x6a\x21\x06\x03\x40\x20\x02\x20\x07\x46\x0d\x04\x20\x06\x2b\x03\x00\x22\x0d\x20\x0d\x62\x0d\x05\x20\x05\x20\x07\x20\x08\x6a\x22\x07\x36\x02\x1c\x20\x06\x20\x00\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x20\x0b\x0d\x01\x41\x7f\x21\x07\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x22\x06\x45\x0d\x03\x41\x7f\x21\x07\x20\x0a\x45\x0d\x03\x41\x7f\x21\x07\x20\x06\x28\x02\x28\x41\x04\x71\x45\x0d\x03\x41\x7f\x21\x07\x20\x05\x29\x03\x10\x42\xff\xff\xff\xff\xff\xff\xff\x0f\x7c\x42\xff\xff\xff\xff\xff\xff\xff\x1f\x54\x0d\x01\x0c\x03\x0b\x20\x0b\x0d\x00\x41\x7f\x21\x07\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x22\x06\x45\x0d\x02\x41\x7f\x21\x07\x20\x05\x29\x03\x10\x42\xff\xff\xff\xff\xff\xff\xff\x0f\x56\x0d\x02\x41\x7f\x21\x07\x20\x0a\x45\x0d\x02\x41\x7f\x21\x07\x20\x06\x28\x02\x28\x41\x04\x71\x45\x0d\x02\x0b\x20\x08\x41\x03\x74\x21\x00\x20\x09\x28\x02\x24\x20\x05\x28\x02\x1c\x22\x07\x41\x03\x74\x6a\x21\x06\x20\x05\x29\x03\x10\x21\x0c\x03\x40\x20\x02\x20\x07\x46\x0d\x01\x20\x06\x29\x03\x00\x20\x0c\x51\x0d\x02\x20\x05\x20\x07\x20\x08\x6a\x22\x07\x36\x02\x1c\x20\x06\x20\x00\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x41\x7f\x21\x07\x0b\x20\x04\x41\x7f\x47\x0d\x01\x0b\x20\x07\x41\x7f\x73\x41\x1f\x76\xad\x42\x80\x80\x80\x80\x10\x84\x21\x0c\x0c\x01\x0b\x20\x07\xad\x21\x0c\x0b\x20\x05\x41\x20\x6a\x24\x00\x20\x0c\x0b\x0d\x00\x20\x00\x2d\x00\x00\x20\x01\x2d\x00\x00\x6b\x0b\x0d\x00\x20\x00\x2c\x00\x00\x20\x01\x2c\x00\x00\x6b\x0b\x0d\x00\x20\x00\x2e\x01\x00\x20\x01\x2e\x01\x00\x6b\x0b\x0d\x00\x20\x00\x2f\x01\x00\x20\x01\x2f\x01\x00\x6b\x0b\x17\x00\x20\x01\x28\x02\x00\x22\x01\x20\x00\x28\x02\x00\x22\x00\x48\x20\x01\x20\x00\x4a\x6b\x0b\x17\x00\x20\x01\x28\x02\x00\x22\x01\x20\x00\x28\x02\x00\x22\x00\x49\x20\x01\x20\x00\x4b\x6b\x0b\x19\x01\x02\x7e\x20\x01\x29\x03\x00\x22\x03\x20\x00\x29\x03\x00\x22\x04\x53\x20\x03\x20\x04\x55\x6b\x0b\x19\x01\x02\x7e\x20\x01\x29\x03\x00\x22\x03\x20\x00\x29\x03\x00\x22\x04\x54\x20\x03\x20\x04\x56\x6b\x0b\x11\x00\x20\x00\x2a\x02\x00\xbb\x20\x01\x2a\x02\x00\xbb\x10\xdd\x08\x0b\x6c\x02\x01\x7f\x01\x7e\x02\x40\x20\x00\x20\x00\x61\x0d\x00\x20\x01\x20\x01\x61\x0f\x0b\x41\x7f\x21\x02\x02\x40\x20\x01\x20\x01\x62\x0d\x00\x20\x00\x20\x01\x63\x0d\x00\x41\x01\x21\x02\x20\x00\x20\x01\x64\x0d\x00\x41\x00\x21\x02\x20\x00\x44\x00\x00\x00\x00\x00\x00\x00\x00\x62\x0d\x00\x20\x01\xbd\x21\x03\x02\x40\x20\x00\xbd\x42\x7f\x55\x0d\x00\x20\x03\x42\x3f\x87\xa7\x41\x7f\x73\x0f\x0b\x20\x03\x42\x3f\x88\xa7\x21\x02\x0b\x20\x02\x0b\x0f\x00\x20\x00\x2b\x03\x00\x20\x01\x2b\x03\x00\x10\xdd\x08\x0b\x07\x00\x20\x01\x31\x00\x00\x0b\x0e\x00\x20\x01\x30\x00\x00\x42\xff\xff\xff\xff\x0f\x83\x0b\x0e\x00\x20\x01\x32\x01\x00\x42\xff\xff\xff\xff\x0f\x83\x0b\x07\x00\x20\x01\x33\x01\x00\x0b\x07\x00\x20\x01\x35\x02\x00\x0b\x4b\x01\x01\x7e\x02\x40\x20\x01\x28\x02\x00\x22\x01\x41\x00\x48\x0d\x00\x20\x01\xad\x0f\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x01\xb8\xbd\x22\x02\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x02\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x0b\x0c\x00\x20\x00\x20\x01\x29\x03\x00\x10\xf7\x03\x0b\x0c\x00\x20\x00\x20\x01\x29\x03\x00\x10\xb4\x02\x0b\x3b\x01\x01\x7e\x42\x80\x80\x80\x80\xc0\x7e\x20\x01\x2a\x02\x00\xbb\xbd\x22\x02\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x02\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x0b\x39\x01\x01\x7e\x42\x80\x80\x80\x80\xc0\x7e\x20\x01\x29\x03\x00\x22\x02\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x02\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x0b\x61\x00\x02\x40\x20\x00\x20\x01\x20\x02\x10\xfe\x03\x22\x00\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x0f\x0b\x02\x40\x20\x00\x28\x02\x00\x22\x00\x41\x00\x48\x0d\x00\x20\x00\xad\x0f\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x00\xb8\xbd\x22\x01\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x0b\x89\x04\x02\x02\x7f\x04\x7e\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x02\x40\x20\x00\x20\x01\x20\x04\x10\xfe\x03\x22\x06\x45\x0d\x00\x02\x40\x20\x06\x2d\x00\x04\x45\x0d\x00\x20\x00\x10\xff\x03\x0c\x01\x0b\x20\x00\x20\x05\x41\x18\x6a\x20\x03\x29\x03\x00\x42\x00\x20\x06\x34\x02\x00\x22\x08\x20\x08\x10\xfd\x05\x0d\x00\x20\x05\x20\x08\x37\x03\x10\x02\x40\x20\x03\x29\x03\x08\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x05\x41\x10\x6a\x20\x09\x42\x00\x20\x08\x20\x08\x10\xfd\x05\x0d\x01\x20\x05\x29\x03\x10\x21\x08\x0b\x20\x05\x29\x03\x18\x21\x0a\x02\x40\x20\x00\x20\x01\x42\x80\x80\x80\x80\x30\x10\xbd\x06\x22\x09\x42\x80\x80\x80\x80\x70\x83\x22\x07\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x09\x21\x07\x0c\x01\x0b\x20\x08\x20\x0a\x7d\x22\x08\x42\x00\x20\x08\x42\x00\x55\x1b\x21\x08\x02\x40\x02\x40\x20\x07\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x42\x80\x80\x80\x80\x30\x20\x08\x20\x04\x10\xc2\x06\x21\x07\x0c\x01\x0b\x20\x08\x21\x07\x02\x40\x20\x08\x42\x80\x80\x80\x80\x08\x54\x0d\x00\x42\x80\x80\x80\x80\xc0\x7e\x20\x08\xb9\xbd\x22\x07\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x07\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x07\x0b\x20\x05\x20\x07\x37\x03\x08\x20\x00\x20\x09\x41\x01\x20\x05\x41\x08\x6a\x10\xdb\x04\x21\x07\x20\x00\x20\x09\x10\xcd\x01\x20\x00\x20\x05\x29\x03\x08\x10\xcd\x01\x0b\x20\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x00\x20\x07\x20\x04\x10\xfe\x03\x22\x04\x45\x0d\x00\x02\x40\x20\x00\x20\x07\x20\x01\x10\x8d\x03\x45\x0d\x00\x20\x00\x41\xc0\x8b\x03\x41\x00\x10\xb2\x02\x0c\x01\x0b\x02\x40\x20\x04\x2d\x00\x04\x0d\x00\x02\x40\x20\x08\x20\x04\x34\x02\x00\x57\x0d\x00\x20\x00\x41\xe1\x8b\x03\x41\x00\x10\xb2\x02\x0c\x02\x0b\x20\x06\x2d\x00\x04\x0d\x00\x20\x04\x28\x02\x08\x20\x06\x28\x02\x08\x20\x0a\xa7\x6a\x20\x08\xa7\x10\x70\x1a\x0c\x02\x0b\x20\x00\x10\xff\x03\x0b\x20\x00\x20\x07\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x0b\x20\x05\x41\x20\x6a\x24\x00\x20\x07\x0b\x3c\x01\x02\x7e\x42\x80\x80\x80\x80\x10\x21\x04\x02\x40\x20\x03\x29\x03\x00\x22\x05\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x05\xa7\x2f\x01\x06\x41\x6b\x6a\x41\xff\xff\x03\x71\x41\x0c\x49\xad\x42\x80\x80\x80\x80\x10\x84\x21\x04\x0b\x20\x04\x0b\x8a\x03\x01\x07\x7f\x23\x00\x41\x30\x6b\x22\x04\x24\x00\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x05\x2f\x01\x06\x41\x31\x47\x0d\x00\x20\x05\x28\x02\x20\x22\x05\x45\x0d\x00\x20\x05\x28\x02\x00\x0d\x00\x20\x00\x20\x05\x41\x18\x6a\x20\x02\x10\xc0\x01\x22\x02\x10\x98\x03\x20\x05\x20\x03\x41\x01\x6a\x22\x06\x36\x02\x00\x02\x40\x20\x06\x41\x02\x47\x0d\x00\x20\x05\x28\x02\x14\x0d\x00\x20\x00\x28\x02\x10\x22\x06\x28\x02\x98\x01\x22\x07\x45\x0d\x00\x20\x00\x20\x01\x20\x02\x41\x00\x20\x06\x28\x02\x9c\x01\x20\x07\x11\x38\x00\x0b\x20\x05\x41\x04\x6a\x22\x08\x20\x03\x41\x03\x74\x6a\x22\x09\x28\x02\x04\x21\x05\x20\x03\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x21\x01\x02\x40\x03\x40\x20\x05\x20\x09\x46\x0d\x01\x20\x04\x20\x02\x37\x03\x20\x20\x04\x20\x01\x37\x03\x18\x20\x04\x20\x05\x29\x03\x08\x37\x03\x00\x20\x04\x20\x05\x29\x03\x10\x37\x03\x08\x20\x04\x20\x05\x29\x03\x18\x37\x03\x10\x20\x05\x28\x02\x04\x21\x06\x20\x00\x41\xfb\x00\x41\x05\x20\x04\x10\x95\x03\x20\x05\x28\x02\x04\x22\x07\x20\x05\x28\x02\x00\x22\x0a\x36\x02\x00\x20\x0a\x20\x07\x36\x02\x04\x20\x05\x41\x00\x36\x02\x00\x20\x05\x41\x00\x36\x02\x04\x20\x00\x28\x02\x10\x20\x05\x10\xfb\x08\x20\x06\x21\x05\x0c\x00\x0b\x00\x0b\x20\x08\x41\x01\x20\x03\x6b\x41\x03\x74\x6a\x22\x0a\x28\x02\x04\x21\x05\x03\x40\x20\x05\x20\x0a\x46\x0d\x01\x20\x05\x28\x02\x00\x22\x07\x20\x05\x28\x02\x04\x22\x06\x36\x02\x04\x20\x06\x20\x07\x36\x02\x00\x20\x05\x41\x00\x36\x02\x04\x20\x05\x41\x00\x36\x02\x00\x20\x00\x28\x02\x10\x20\x05\x10\xfb\x08\x20\x06\x21\x05\x0c\x00\x0b\x00\x0b\x20\x04\x41\x30\x6a\x24\x00\x0b\xe6\x01\x02\x01\x7f\x02\x7e\x23\x00\x41\x20\x6b\x22\x03\x24\x00\x02\x40\x20\x01\x41\x03\x47\x0d\x00\x20\x02\x29\x03\x10\x21\x04\x20\x02\x29\x03\x08\x21\x05\x02\x40\x02\x40\x20\x00\x20\x03\x41\x10\x6a\x20\x02\x29\x03\x00\x10\xdc\x04\x41\x00\x4e\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x04\x0c\x01\x0b\x02\x40\x20\x00\x20\x04\x20\x05\x41\x02\x20\x03\x41\x10\x6a\x10\xb5\x01\x22\x04\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x28\x02\x10\x22\x02\x29\x03\x80\x01\x21\x04\x20\x02\x42\x80\x80\x80\x80\x20\x37\x03\x80\x01\x20\x03\x20\x04\x37\x03\x08\x20\x00\x20\x03\x29\x03\x18\x42\x80\x80\x80\x80\x30\x41\x01\x20\x03\x41\x08\x6a\x10\xb5\x01\x21\x04\x20\x00\x20\x03\x29\x03\x08\x10\xcd\x01\x0b\x20\x00\x20\x03\x29\x03\x10\x10\xcd\x01\x20\x00\x20\x03\x29\x03\x18\x10\xcd\x01\x0b\x20\x03\x41\x20\x6a\x24\x00\x20\x04\x0f\x0b\x41\xe9\x93\x03\x41\xae\xb7\x01\x41\xf3\xea\x02\x41\xf3\x93\x03\x10\x4a\x00\x0b\x8e\x04\x02\x03\x7f\x02\x7e\x23\x00\x41\x30\x6b\x22\x02\x24\x00\x02\x40\x02\x40\x20\x00\x20\x01\x41\x28\x6a\x10\xf0\x04\x22\x05\x42\x80\x80\x80\x80\x70\x83\x22\x06\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x02\x20\x01\x41\xe4\x00\x6a\x28\x02\x00\x41\x78\x6a\x22\x03\x29\x03\x00\x37\x03\x20\x20\x03\x42\x80\x80\x80\x80\x30\x37\x03\x00\x02\x40\x20\x06\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x00\x20\x00\x20\x01\x29\x03\x10\x42\x80\x80\x80\x80\x30\x41\x01\x20\x02\x41\x20\x6a\x10\xb5\x01\x10\xcd\x01\x20\x00\x20\x02\x29\x03\x20\x10\xcd\x01\x20\x00\x28\x02\x10\x20\x01\x10\x8a\x09\x0c\x02\x0b\x20\x00\x20\x05\x10\xcd\x01\x20\x00\x20\x00\x29\x03\x50\x41\x01\x20\x02\x41\x20\x6a\x41\x00\x10\xf4\x08\x21\x05\x20\x00\x20\x02\x29\x03\x20\x10\xcd\x01\x20\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x41\x35\x21\x03\x20\x02\x41\x10\x6a\x21\x04\x03\x40\x02\x40\x02\x40\x20\x03\x41\x37\x46\x0d\x00\x20\x04\x20\x00\x20\x00\x29\x03\x30\x20\x03\x10\xc6\x01\x22\x06\x37\x03\x00\x20\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x02\x40\x20\x03\x41\x36\x47\x0d\x00\x20\x00\x20\x02\x29\x03\x10\x10\xcd\x01\x0b\x20\x00\x20\x05\x10\xcd\x01\x0c\x03\x0b\x20\x02\x42\x80\x80\x80\x80\x30\x37\x03\x08\x20\x02\x42\x80\x80\x80\x80\x30\x37\x03\x00\x20\x00\x20\x05\x20\x02\x41\x10\x6a\x20\x02\x10\xf6\x08\x21\x04\x20\x00\x20\x05\x10\xcd\x01\x41\x00\x21\x03\x02\x40\x03\x40\x20\x03\x41\x10\x46\x0d\x01\x20\x00\x20\x02\x41\x10\x6a\x20\x03\x6a\x29\x03\x00\x10\xcd\x01\x20\x03\x41\x08\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x04\x0d\x02\x0c\x03\x0b\x20\x01\x20\x01\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x20\x06\xa7\x20\x01\x36\x02\x20\x20\x04\x41\x08\x6a\x21\x04\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x10\x22\x03\x29\x03\x80\x01\x21\x06\x20\x03\x42\x80\x80\x80\x80\x20\x37\x03\x80\x01\x20\x02\x20\x06\x37\x03\x28\x20\x00\x20\x01\x41\x18\x6a\x29\x03\x00\x42\x80\x80\x80\x80\x30\x41\x01\x20\x02\x41\x28\x6a\x10\xb5\x01\x21\x06\x20\x00\x20\x02\x29\x03\x28\x10\xcd\x01\x20\x00\x28\x02\x10\x20\x01\x10\x8a\x09\x20\x00\x20\x06\x10\xcd\x01\x0b\x20\x02\x41\x30\x6a\x24\x00\x0b\x72\x01\x03\x7f\x20\x01\x20\x01\x28\x02\x00\x41\x7f\x6a\x22\x02\x36\x02\x00\x02\x40\x20\x02\x0d\x00\x20\x00\x20\x01\x10\x8a\x09\x20\x00\x20\x01\x29\x03\x10\x10\xda\x02\x20\x00\x20\x01\x41\x18\x6a\x29\x03\x00\x10\xda\x02\x20\x01\x41\x0c\x6a\x22\x02\x28\x02\x00\x22\x03\x20\x01\x28\x02\x08\x22\x04\x36\x02\x00\x20\x04\x20\x03\x36\x02\x04\x20\x01\x41\x00\x36\x02\x08\x20\x02\x41\x00\x36\x02\x00\x20\x00\x41\x10\x6a\x20\x01\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x0b\x93\x01\x01\x04\x7f\x20\x00\x41\x10\x6a\x21\x02\x20\x01\x41\xc8\x00\x6a\x21\x03\x20\x01\x41\xcc\x00\x6a\x28\x02\x00\x21\x04\x02\x40\x03\x40\x20\x04\x20\x03\x46\x0d\x01\x20\x04\x28\x02\x04\x21\x05\x20\x00\x20\x04\x29\x03\x10\x10\xda\x02\x20\x00\x20\x04\x29\x03\x18\x10\xda\x02\x20\x00\x20\x04\x29\x03\x20\x10\xda\x02\x20\x00\x20\x04\x29\x03\x28\x10\xda\x02\x20\x02\x20\x04\x20\x00\x28\x02\x04\x11\x00\x00\x20\x05\x21\x04\x0c\x00\x0b\x00\x0b\x02\x40\x20\x01\x28\x02\x04\x41\x7e\x71\x41\x04\x46\x0d\x00\x20\x00\x20\x01\x41\x08\x6a\x10\xf7\x04\x0b\x20\x02\x20\x01\x20\x00\x28\x02\x04\x11\x00\x00\x0b\xf3\x02\x02\x03\x7f\x02\x7e\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x41\x00\x21\x06\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x07\x2f\x01\x06\x41\x39\x47\x0d\x00\x20\x07\x28\x02\x20\x21\x06\x0b\x02\x40\x02\x40\x20\x00\x20\x05\x41\x10\x6a\x10\x93\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x06\x0d\x00\x20\x00\x41\x9f\x90\x03\x41\x00\x10\xb2\x02\x20\x00\x28\x02\x10\x22\x06\x29\x03\x80\x01\x21\x08\x20\x06\x42\x80\x80\x80\x80\x20\x37\x03\x80\x01\x20\x05\x20\x08\x37\x03\x08\x20\x00\x20\x05\x29\x03\x18\x22\x08\x42\x80\x80\x80\x80\x30\x41\x01\x20\x05\x41\x08\x6a\x10\xb5\x01\x21\x09\x20\x00\x20\x05\x29\x03\x08\x10\xcd\x01\x20\x00\x20\x09\x10\xcd\x01\x20\x00\x20\x05\x29\x03\x10\x10\xcd\x01\x20\x00\x20\x08\x10\xcd\x01\x0c\x02\x0b\x02\x40\x20\x00\x41\x30\x10\xe2\x03\x22\x07\x45\x0d\x00\x20\x07\x20\x04\x36\x02\x08\x20\x07\x20\x03\x29\x03\x00\x10\xc0\x01\x37\x03\x10\x20\x01\x10\xc0\x01\x21\x01\x20\x07\x20\x06\x28\x02\x48\x22\x03\x36\x02\x00\x20\x03\x20\x07\x36\x02\x04\x20\x07\x20\x01\x37\x03\x18\x20\x07\x20\x05\x29\x03\x10\x37\x03\x20\x20\x07\x20\x05\x29\x03\x18\x37\x03\x28\x20\x06\x20\x07\x36\x02\x48\x20\x07\x20\x06\x41\xc8\x00\x6a\x36\x02\x04\x20\x06\x28\x02\x04\x41\x03\x46\x0d\x02\x20\x00\x20\x06\x10\xf2\x08\x0c\x02\x0b\x20\x00\x20\x05\x29\x03\x10\x10\xcd\x01\x20\x00\x20\x05\x29\x03\x18\x10\xcd\x01\x20\x00\x20\x01\x10\xcd\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x01\x0b\x20\x05\x41\x20\x6a\x24\x00\x20\x01\x0b\xe7\x06\x02\x05\x7f\x02\x7e\x23\x00\x41\x30\x6b\x22\x02\x24\x00\x20\x01\x41\x08\x6a\x21\x03\x20\x01\x41\xc8\x00\x6a\x21\x04\x02\x40\x02\x40\x02\x40\x02\x40\x03\x40\x20\x01\x28\x02\x4c\x22\x05\x20\x04\x46\x0d\x04\x02\x40\x20\x01\x28\x02\x04\x22\x06\x41\x05\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x06\x0e\x06\x00\x02\x02\x05\x0b\x01\x00\x0b\x20\x05\x28\x02\x08\x45\x0d\x02\x20\x00\x20\x01\x10\xf3\x08\x0c\x06\x0b\x02\x40\x20\x05\x28\x02\x08\x22\x06\x41\x01\x4b\x0d\x00\x02\x40\x20\x06\x0e\x02\x08\x00\x08\x0b\x20\x01\x41\x04\x36\x02\x04\x20\x02\x20\x05\x29\x03\x10\x37\x03\x28\x20\x00\x20\x00\x29\x03\x50\x41\x01\x20\x02\x41\x28\x6a\x41\x00\x10\xf4\x08\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x0a\x02\x40\x20\x00\x20\x01\x35\x02\x00\x42\x80\x80\x80\x80\x70\x84\x20\x02\x41\x01\x10\xf5\x08\x0d\x00\x20\x02\x42\x80\x80\x80\x80\x30\x37\x03\x18\x20\x02\x42\x80\x80\x80\x80\x30\x37\x03\x10\x20\x00\x20\x07\x20\x02\x20\x02\x41\x10\x6a\x10\xf6\x08\x1a\x20\x00\x20\x02\x29\x03\x00\x10\xcd\x01\x20\x00\x20\x02\x29\x03\x08\x10\xcd\x01\x0b\x20\x00\x20\x07\x10\xcd\x01\x0c\x0a\x0b\x20\x00\x20\x01\x20\x05\x29\x03\x10\x10\xf7\x08\x0c\x09\x0b\x20\x05\x29\x03\x10\x10\xc0\x01\x21\x07\x02\x40\x20\x05\x28\x02\x08\x22\x06\x41\x02\x47\x0d\x00\x20\x01\x28\x02\x04\x41\x01\x47\x0d\x00\x20\x00\x20\x07\x10\xc9\x02\x41\x01\x21\x05\x0c\x02\x0b\x20\x01\x28\x02\x44\x22\x05\x20\x06\xad\x37\x03\x00\x20\x05\x41\x78\x6a\x20\x07\x37\x03\x00\x20\x01\x20\x05\x41\x08\x6a\x36\x02\x44\x0b\x41\x00\x21\x05\x0b\x20\x01\x41\x03\x36\x02\x04\x20\x01\x20\x05\x36\x02\x14\x0b\x02\x40\x20\x00\x20\x03\x10\xf0\x04\x22\x07\x42\x80\x80\x80\x80\x70\x83\x22\x08\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x28\x02\x10\x22\x05\x29\x03\x80\x01\x21\x07\x20\x05\x42\x80\x80\x80\x80\x20\x37\x03\x80\x01\x20\x00\x20\x01\x10\xf3\x08\x20\x00\x20\x01\x20\x07\x10\xf7\x08\x20\x00\x20\x07\x10\xcd\x01\x0c\x02\x0b\x02\x40\x20\x07\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x01\x28\x02\x44\x41\x78\x6a\x22\x05\x29\x03\x00\x21\x08\x20\x05\x42\x80\x80\x80\x80\x30\x37\x03\x00\x41\x02\x21\x05\x20\x07\xa7\x22\x06\x41\x02\x4b\x0d\x01\x02\x40\x02\x40\x02\x40\x20\x06\x0e\x03\x02\x00\x01\x02\x0b\x41\x01\x21\x05\x0b\x20\x01\x20\x05\x36\x02\x04\x20\x00\x20\x01\x20\x08\x41\x00\x10\xf8\x08\x20\x00\x20\x08\x10\xcd\x01\x0c\x03\x0b\x20\x02\x20\x08\x37\x03\x28\x20\x00\x20\x00\x29\x03\x50\x41\x01\x20\x02\x41\x28\x6a\x41\x00\x10\xf4\x08\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x05\x02\x40\x20\x00\x20\x01\x35\x02\x00\x42\x80\x80\x80\x80\x70\x84\x20\x02\x41\x10\x6a\x41\x00\x10\xf5\x08\x45\x0d\x00\x20\x00\x20\x07\x10\xcd\x01\x0c\x06\x0b\x20\x02\x42\x80\x80\x80\x80\x30\x37\x03\x08\x20\x02\x42\x80\x80\x80\x80\x30\x37\x03\x00\x20\x00\x20\x07\x20\x02\x41\x10\x6a\x20\x02\x10\xf6\x08\x1a\x20\x00\x20\x07\x10\xcd\x01\x41\x00\x21\x01\x03\x40\x20\x01\x41\x10\x46\x0d\x06\x20\x00\x20\x02\x41\x10\x6a\x20\x01\x6a\x29\x03\x00\x10\xcd\x01\x20\x01\x41\x08\x6a\x21\x01\x0c\x00\x0b\x00\x0b\x20\x08\x42\x80\x80\x80\x80\x30\x52\x0d\x03\x20\x01\x28\x02\x44\x41\x78\x6a\x22\x05\x29\x03\x00\x21\x07\x20\x05\x42\x80\x80\x80\x80\x30\x37\x03\x00\x20\x00\x20\x01\x10\xf3\x08\x20\x00\x20\x01\x20\x07\x41\x01\x10\xf8\x08\x20\x00\x20\x07\x10\xcd\x01\x0c\x01\x0b\x0b\x10\x40\x00\x0b\x20\x00\x20\x01\x42\x80\x80\x80\x80\x30\x41\x01\x10\xf8\x08\x0c\x02\x0b\x41\xbc\x90\x03\x41\xae\xb7\x01\x41\xed\x99\x01\x41\xd5\x90\x03\x10\x4a\x00\x0b\x20\x00\x20\x08\x10\xcd\x01\x0b\x20\x02\x41\x30\x6a\x24\x00\x0b\x23\x00\x02\x40\x20\x01\x28\x02\x04\x41\x05\x46\x0d\x00\x20\x01\x41\x05\x36\x02\x04\x20\x00\x28\x02\x10\x20\x01\x41\x08\x6a\x10\xf7\x04\x0b\x0b\xa1\x02\x02\x02\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x05\x24\x00\x02\x40\x02\x40\x20\x01\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x0c\x01\x0b\x02\x40\x20\x04\x0d\x00\x20\x03\x29\x03\x00\x22\x07\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x07\xa7\x22\x06\x2f\x01\x06\x41\x31\x47\x0d\x00\x20\x06\x28\x02\x20\x45\x0d\x00\x20\x00\x20\x07\x41\x3c\x20\x07\x41\x00\x10\xb4\x01\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x07\x20\x01\x10\x8d\x03\x21\x06\x20\x00\x20\x07\x10\xcd\x01\x20\x06\x45\x0d\x00\x20\x03\x29\x03\x00\x10\xc0\x01\x21\x07\x0c\x01\x0b\x02\x40\x20\x00\x20\x05\x20\x01\x10\xe5\x03\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x05\x20\x04\x41\x03\x74\x6a\x29\x03\x00\x42\x80\x80\x80\x80\x30\x41\x01\x20\x03\x10\xb5\x01\x21\x07\x20\x00\x20\x05\x29\x03\x00\x10\xcd\x01\x20\x00\x20\x05\x29\x03\x08\x10\xcd\x01\x02\x40\x20\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x01\x10\xcd\x01\x0c\x02\x0b\x20\x00\x20\x07\x10\xcd\x01\x0b\x20\x01\x21\x07\x0b\x20\x05\x41\x10\x6a\x24\x00\x20\x07\x0b\x92\x01\x01\x03\x7f\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x04\x20\x01\x37\x03\x08\x20\x03\x41\x01\x74\x21\x05\x41\x00\x21\x06\x41\x00\x21\x03\x03\x7f\x02\x40\x02\x40\x20\x03\x41\x10\x46\x0d\x00\x20\x00\x41\xfc\x00\x41\x01\x20\x05\x41\x01\x20\x04\x41\x08\x6a\x10\xda\x04\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x41\x7f\x21\x06\x20\x03\x41\x08\x47\x0d\x00\x20\x00\x20\x02\x29\x03\x00\x10\xcd\x01\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x06\x0f\x0b\x20\x02\x20\x03\x6a\x20\x01\x37\x03\x00\x20\x05\x41\x01\x6a\x21\x05\x20\x03\x41\x08\x6a\x21\x03\x0c\x00\x0b\x0b\xb1\x04\x02\x05\x7f\x01\x7e\x23\x00\x41\x30\x6b\x22\x04\x24\x00\x41\x00\x21\x05\x41\x00\x21\x06\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x41\x00\x21\x06\x20\x01\xa7\x22\x07\x2f\x01\x06\x41\x31\x47\x0d\x00\x20\x07\x28\x02\x20\x21\x06\x0b\x20\x04\x42\x00\x37\x02\x28\x02\x40\x02\x40\x03\x40\x20\x05\x41\x02\x46\x0d\x01\x02\x40\x02\x40\x20\x00\x41\x20\x10\xe2\x03\x22\x08\x45\x0d\x00\x41\x00\x21\x07\x03\x40\x20\x07\x41\x10\x46\x0d\x02\x20\x08\x20\x07\x6a\x41\x08\x6a\x20\x03\x20\x07\x6a\x29\x03\x00\x10\xc0\x01\x37\x03\x00\x20\x07\x41\x08\x6a\x21\x07\x0c\x00\x0b\x00\x0b\x41\x7f\x21\x07\x20\x05\x41\x01\x47\x0d\x03\x20\x00\x28\x02\x10\x20\x04\x28\x02\x28\x10\xfb\x08\x0c\x03\x0b\x20\x02\x20\x05\x41\x03\x74\x6a\x29\x03\x00\x22\x09\x42\x80\x80\x80\x80\x30\x20\x00\x20\x09\x10\xf0\x02\x1b\x10\xc0\x01\x21\x09\x20\x04\x41\x28\x6a\x20\x05\x41\x02\x74\x6a\x20\x08\x36\x02\x00\x20\x08\x20\x09\x37\x03\x18\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x02\x40\x02\x40\x20\x06\x28\x02\x00\x22\x08\x0d\x00\x20\x06\x41\x04\x6a\x21\x07\x41\x00\x21\x08\x03\x40\x20\x08\x41\x08\x46\x0d\x02\x20\x04\x41\x28\x6a\x20\x08\x6a\x28\x02\x00\x22\x03\x20\x07\x28\x02\x00\x22\x05\x36\x02\x00\x20\x05\x20\x03\x36\x02\x04\x20\x07\x20\x03\x36\x02\x00\x20\x03\x20\x07\x36\x02\x04\x20\x07\x41\x08\x6a\x21\x07\x20\x08\x41\x04\x6a\x21\x08\x0c\x00\x0b\x00\x0b\x02\x40\x20\x08\x41\x02\x47\x0d\x00\x41\x02\x21\x08\x20\x06\x28\x02\x14\x0d\x00\x41\x02\x21\x08\x20\x00\x28\x02\x10\x22\x07\x28\x02\x98\x01\x22\x03\x45\x0d\x00\x20\x00\x20\x01\x20\x06\x29\x03\x18\x41\x01\x20\x07\x28\x02\x9c\x01\x20\x03\x11\x38\x00\x20\x06\x28\x02\x00\x21\x08\x0b\x20\x04\x20\x06\x29\x03\x18\x37\x03\x20\x41\x00\x21\x07\x20\x04\x20\x08\x41\x7f\x6a\x22\x08\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x37\x03\x18\x20\x04\x20\x04\x41\x28\x6a\x20\x08\x41\x02\x74\x6a\x28\x02\x00\x22\x08\x29\x03\x08\x37\x03\x00\x20\x04\x20\x08\x29\x03\x18\x37\x03\x10\x20\x04\x20\x08\x41\x10\x6a\x29\x03\x00\x37\x03\x08\x20\x00\x41\xfb\x00\x41\x05\x20\x04\x10\x95\x03\x03\x40\x20\x07\x41\x08\x46\x0d\x01\x20\x00\x28\x02\x10\x20\x04\x41\x28\x6a\x20\x07\x6a\x28\x02\x00\x10\xfb\x08\x20\x07\x41\x04\x6a\x21\x07\x0c\x00\x0b\x00\x0b\x20\x06\x41\x01\x36\x02\x14\x41\x00\x21\x07\x0b\x20\x04\x41\x30\x6a\x24\x00\x20\x07\x0b\x0d\x00\x20\x00\x20\x01\x20\x02\x41\x01\x10\xf9\x08\x0b\x20\x00\x20\x00\x20\x01\x20\x00\x20\x02\x10\xc0\x01\x20\x03\x10\xeb\x04\x22\x02\x41\x00\x10\xf9\x08\x20\x00\x20\x02\x10\xcd\x01\x0b\xab\x01\x01\x03\x7f\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x01\x41\xcc\x00\x6a\x28\x02\x00\x22\x01\x28\x02\x00\x22\x05\x20\x01\x28\x02\x04\x22\x06\x36\x02\x04\x20\x06\x20\x05\x36\x02\x00\x20\x01\x41\x00\x36\x02\x04\x20\x01\x41\x00\x36\x02\x00\x20\x04\x20\x02\x37\x03\x08\x20\x00\x20\x00\x20\x01\x41\x20\x6a\x20\x03\x41\x03\x74\x6a\x29\x03\x00\x42\x80\x80\x80\x80\x30\x41\x01\x20\x04\x41\x08\x6a\x10\xb5\x01\x10\xcd\x01\x20\x00\x20\x01\x29\x03\x10\x10\xcd\x01\x20\x00\x20\x01\x29\x03\x18\x10\xcd\x01\x20\x00\x20\x01\x29\x03\x20\x10\xcd\x01\x20\x00\x20\x01\x29\x03\x28\x10\xcd\x01\x20\x00\x28\x02\x10\x22\x00\x41\x10\x6a\x20\x01\x20\x00\x28\x02\x04\x11\x00\x00\x20\x04\x41\x10\x6a\x24\x00\x0b\xf4\x01\x02\x02\x7f\x01\x7e\x41\x00\x21\x06\x02\x40\x20\x05\x29\x03\x00\x22\x08\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x08\xa7\x22\x05\x2f\x01\x06\x41\x39\x47\x0d\x00\x20\x05\x28\x02\x20\x21\x06\x0b\x20\x04\x41\x01\x71\x21\x05\x20\x06\x28\x02\x04\x21\x07\x20\x03\x29\x03\x00\x21\x08\x02\x40\x02\x40\x02\x40\x02\x40\x20\x04\x41\x02\x48\x0d\x00\x20\x07\x41\x7e\x71\x41\x04\x47\x0d\x02\x20\x06\x41\x05\x36\x02\x04\x02\x40\x20\x05\x45\x0d\x00\x20\x00\x20\x06\x20\x08\x10\xf7\x08\x0c\x02\x0b\x20\x00\x20\x06\x20\x08\x41\x01\x10\xf8\x08\x0c\x01\x0b\x20\x07\x41\x03\x47\x0d\x02\x20\x06\x20\x05\x36\x02\x14\x20\x08\x10\xc0\x01\x21\x08\x02\x40\x02\x40\x20\x05\x45\x0d\x00\x20\x00\x20\x08\x10\xc9\x02\x0c\x01\x0b\x20\x06\x28\x02\x44\x41\x78\x6a\x20\x08\x37\x03\x00\x0b\x20\x00\x20\x06\x10\xf2\x08\x0b\x42\x80\x80\x80\x80\x30\x0f\x0b\x41\x93\x91\x03\x41\xae\xb7\x01\x41\x8b\x9a\x01\x41\xfa\x91\x03\x10\x4a\x00\x0b\x41\x9e\x92\x03\x41\xae\xb7\x01\x41\x94\x9a\x01\x41\xfa\x91\x03\x10\x4a\x00\x0b\x32\x00\x20\x00\x20\x01\x29\x03\x08\x10\xda\x02\x20\x00\x20\x01\x41\x10\x6a\x29\x03\x00\x10\xda\x02\x20\x00\x20\x01\x29\x03\x18\x10\xda\x02\x20\x00\x41\x10\x6a\x20\x01\x20\x00\x28\x02\x04\x11\x00\x00\x0b\xb5\x02\x02\x01\x7f\x03\x7e\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x02\x40\x20\x01\x41\x05\x47\x0d\x00\x20\x02\x29\x03\x10\x21\x04\x20\x00\x20\x02\x29\x03\x18\x10\xa9\x05\x21\x01\x20\x03\x20\x02\x29\x03\x20\x22\x05\x37\x03\x08\x02\x40\x02\x40\x02\x40\x02\x40\x20\x04\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x52\x0d\x00\x20\x05\x10\xc0\x01\x21\x04\x20\x01\x45\x0d\x01\x20\x00\x20\x04\x10\xc9\x02\x20\x03\x42\x80\x80\x80\x80\xe0\x00\x37\x03\x00\x0c\x02\x0b\x20\x00\x20\x04\x42\x80\x80\x80\x80\x30\x41\x01\x20\x03\x41\x08\x6a\x10\xb5\x01\x21\x04\x0b\x20\x03\x20\x04\x37\x03\x00\x41\x00\x21\x01\x20\x04\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x01\x0b\x20\x00\x28\x02\x10\x22\x01\x29\x03\x80\x01\x21\x04\x20\x01\x42\x80\x80\x80\x80\x20\x37\x03\x80\x01\x20\x03\x20\x04\x37\x03\x00\x41\x01\x21\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x05\x02\x40\x20\x02\x20\x01\x41\x03\x74\x6a\x29\x03\x00\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x06\x42\x80\x80\x80\x80\x30\x41\x01\x20\x03\x10\xb5\x01\x21\x05\x20\x03\x29\x03\x00\x21\x04\x0b\x20\x00\x20\x04\x10\xcd\x01\x20\x03\x41\x10\x6a\x24\x00\x20\x05\x0f\x0b\x41\xf4\x90\x03\x41\xae\xb7\x01\x41\x8f\xea\x02\x41\xfe\x90\x03\x10\x4a\x00\x0b\x8d\x06\x02\x02\x7f\x03\x7e\x23\x00\x41\xc0\x00\x6b\x22\x05\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x02\x40\x20\x00\x20\x05\x41\x20\x6a\x10\x93\x03\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x06\x2f\x01\x06\x41\x37\x47\x0d\x00\x20\x06\x28\x02\x20\x22\x06\x0d\x01\x0b\x20\x00\x41\xcd\x92\x03\x41\x00\x10\xb2\x02\x0c\x01\x0b\x02\x40\x02\x40\x20\x04\x0d\x00\x20\x06\x29\x03\x08\x10\xc0\x01\x21\x07\x0c\x01\x0b\x02\x40\x20\x00\x20\x06\x29\x03\x00\x22\x07\x41\x06\x41\x17\x20\x04\x41\x01\x46\x1b\x20\x07\x41\x00\x10\xb4\x01\x22\x07\x42\x80\x80\x80\x80\x70\x83\x22\x01\x42\x80\x80\x80\x80\x20\x51\x0d\x00\x20\x01\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x20\x01\x42\x80\x80\x80\x80\x30\x52\x0d\x01\x0b\x20\x03\x29\x03\x00\x10\xc0\x01\x21\x07\x02\x40\x20\x04\x41\x01\x47\x0d\x00\x20\x05\x20\x00\x20\x07\x41\x01\x10\xeb\x04\x37\x03\x00\x41\x00\x21\x04\x0c\x04\x0b\x20\x05\x20\x07\x37\x03\x00\x0c\x02\x0b\x20\x05\x20\x00\x20\x06\x29\x03\x00\x20\x07\x20\x02\x41\x00\x4a\x20\x03\x20\x05\x41\x14\x6a\x10\xeb\x03\x22\x01\x37\x03\x18\x20\x00\x20\x07\x10\xcd\x01\x20\x01\x42\x80\x80\x80\x80\x70\x83\x22\x07\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x05\x28\x02\x14\x41\x02\x47\x0d\x00\x20\x05\x20\x00\x20\x01\x20\x05\x41\x14\x6a\x10\xc5\x03\x37\x03\x18\x20\x00\x20\x01\x10\xcd\x01\x20\x05\x35\x02\x1c\x42\x20\x86\x22\x07\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x0b\x20\x07\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x00\x20\x00\x29\x03\x50\x41\x01\x20\x05\x41\x18\x6a\x41\x00\x10\xf4\x08\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x05\x29\x03\x18\x10\xcd\x01\x0c\x01\x0b\x20\x05\x20\x05\x28\x02\x14\x41\x00\x47\xad\x42\x80\x80\x80\x80\x10\x84\x37\x03\x38\x20\x05\x20\x00\x41\xfd\x00\x41\x01\x41\x00\x41\x01\x20\x05\x41\x38\x6a\x10\xda\x04\x22\x09\x37\x03\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x02\x40\x20\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x05\x29\x03\x18\x10\xcd\x01\x20\x05\x42\x80\x80\x80\x80\x30\x37\x03\x08\x20\x00\x20\x01\x20\x05\x20\x05\x41\x20\x6a\x10\xf6\x08\x21\x04\x20\x00\x20\x09\x10\xcd\x01\x20\x00\x20\x01\x10\xcd\x01\x20\x00\x20\x05\x29\x03\x20\x10\xcd\x01\x20\x00\x20\x05\x29\x03\x28\x10\xcd\x01\x20\x04\x45\x0d\x04\x20\x00\x20\x08\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x0c\x05\x0b\x20\x00\x20\x01\x10\xcd\x01\x20\x00\x20\x05\x29\x03\x18\x10\xcd\x01\x20\x00\x20\x05\x29\x03\x20\x10\xcd\x01\x20\x00\x20\x05\x29\x03\x28\x10\xcd\x01\x20\x00\x20\x08\x10\xcd\x01\x0c\x04\x0b\x20\x00\x28\x02\x10\x22\x04\x29\x03\x80\x01\x21\x07\x20\x04\x42\x80\x80\x80\x80\x20\x37\x03\x80\x01\x20\x05\x20\x07\x37\x03\x00\x0b\x41\x01\x21\x04\x0b\x20\x00\x20\x05\x41\x20\x6a\x20\x04\x41\x03\x74\x72\x29\x03\x00\x42\x80\x80\x80\x80\x30\x41\x01\x20\x05\x10\xb5\x01\x21\x07\x20\x00\x20\x05\x29\x03\x00\x10\xcd\x01\x20\x00\x20\x07\x10\xcd\x01\x20\x00\x20\x05\x29\x03\x20\x10\xcd\x01\x20\x00\x20\x05\x29\x03\x28\x10\xcd\x01\x0b\x20\x08\x21\x07\x0b\x20\x05\x41\xc0\x00\x6a\x24\x00\x20\x07\x0b\x19\x00\x20\x00\x20\x03\x29\x03\x00\x10\xc0\x01\x20\x00\x20\x05\x29\x03\x00\x10\xa9\x05\x10\xeb\x04\x0b\xdb\x08\x02\x02\x7f\x0c\x7e\x23\x00\x41\xf0\x00\x6b\x22\x05\x24\x00\x20\x05\x42\x80\x80\x80\x80\x30\x37\x03\x50\x02\x40\x02\x40\x20\x01\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x0c\x01\x0b\x20\x00\x20\x05\x41\xe0\x00\x6a\x20\x01\x10\xe5\x03\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x08\x42\x80\x80\x80\x80\x30\x21\x09\x42\x80\x80\x80\x80\x30\x21\x0a\x02\x40\x02\x40\x20\x00\x20\x01\x41\x80\x01\x20\x01\x41\x00\x10\xb4\x01\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x08\x42\x80\x80\x80\x80\x30\x21\x09\x42\x80\x80\x80\x80\x30\x21\x0a\x20\x00\x20\x0b\x10\xdb\x03\x0d\x00\x02\x40\x02\x40\x20\x00\x20\x03\x29\x03\x00\x41\x00\x10\xb3\x03\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x08\x0c\x01\x0b\x20\x00\x20\x0a\x41\xea\x00\x20\x0a\x41\x00\x10\xb4\x01\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x05\x20\x00\x10\x85\x03\x22\x09\x37\x03\x50\x20\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x10\x85\x03\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x42\x00\x21\x0c\x20\x00\x20\x09\x42\x00\x42\x01\x41\x07\x10\xb8\x03\x41\x00\x48\x0d\x01\x20\x05\x41\xe0\x00\x6a\x20\x04\x41\x02\x46\x41\x03\x74\x72\x21\x06\x20\x05\x29\x03\x60\x21\x0d\x20\x05\x29\x03\x68\x21\x0e\x41\x00\x21\x03\x02\x40\x02\x40\x03\x40\x20\x05\x20\x00\x20\x0a\x20\x08\x20\x05\x41\x0c\x6a\x10\xb7\x03\x22\x0f\x37\x03\x58\x20\x0f\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x04\x02\x40\x20\x05\x28\x02\x0c\x0d\x00\x20\x00\x20\x0b\x20\x01\x41\x01\x20\x05\x41\xd8\x00\x6a\x10\xb5\x01\x21\x0f\x20\x00\x20\x05\x29\x03\x58\x10\xcd\x01\x20\x0f\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x03\x20\x05\x20\x0c\x37\x03\x18\x20\x05\x42\x80\x80\x80\x80\x10\x37\x03\x10\x20\x05\x20\x05\x29\x03\x50\x37\x03\x20\x20\x05\x20\x09\x37\x03\x30\x20\x05\x20\x06\x29\x03\x00\x37\x03\x28\x20\x00\x41\xfe\x00\x41\x01\x20\x04\x41\x05\x20\x05\x41\x10\x6a\x10\xda\x04\x22\x10\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x02\x40\x02\x40\x20\x04\x41\x01\x47\x0d\x00\x20\x10\x21\x11\x20\x00\x41\xfe\x00\x41\x01\x41\x05\x41\x05\x20\x05\x41\x10\x6a\x10\xda\x04\x22\x12\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x04\x0c\x01\x0b\x02\x40\x20\x04\x41\x02\x47\x0d\x00\x20\x00\x20\x05\x29\x03\x50\x20\x03\x42\x80\x80\x80\x80\x30\x41\x07\x10\x80\x03\x41\x00\x48\x0d\x05\x20\x0d\x10\xc0\x01\x21\x11\x20\x10\x21\x12\x0c\x01\x0b\x20\x0e\x10\xc0\x01\x21\x12\x20\x10\x21\x11\x0b\x02\x40\x20\x00\x20\x09\x41\x01\x10\x81\x09\x41\x7f\x4a\x0d\x00\x20\x00\x20\x0f\x10\xcd\x01\x20\x00\x20\x11\x10\xcd\x01\x20\x00\x20\x12\x10\xcd\x01\x0c\x04\x0b\x20\x05\x20\x12\x37\x03\x48\x20\x05\x20\x11\x37\x03\x40\x20\x00\x20\x0f\x41\xff\x00\x41\x02\x20\x05\x41\xc0\x00\x6a\x10\xd9\x05\x21\x0f\x20\x00\x20\x11\x10\xcd\x01\x20\x00\x20\x12\x10\xcd\x01\x20\x03\x41\x01\x6a\x21\x03\x20\x0c\x42\x01\x7c\x21\x0c\x20\x00\x20\x0f\x10\xa5\x06\x45\x0d\x01\x0c\x03\x0b\x0b\x20\x00\x20\x09\x41\x7f\x10\x81\x09\x22\x03\x41\x00\x48\x0d\x03\x20\x03\x45\x0d\x04\x02\x40\x20\x04\x41\x02\x47\x0d\x00\x20\x00\x20\x05\x29\x03\x50\x10\x82\x09\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x04\x20\x00\x20\x05\x29\x03\x50\x10\xcd\x01\x20\x05\x20\x01\x37\x03\x50\x0b\x20\x00\x20\x00\x20\x06\x29\x03\x00\x42\x80\x80\x80\x80\x30\x41\x01\x20\x05\x41\xd0\x00\x6a\x10\xb5\x01\x10\xa5\x06\x0d\x03\x0c\x04\x0b\x20\x00\x20\x0f\x10\xcd\x01\x0b\x20\x00\x20\x0a\x41\x01\x10\xfc\x02\x1a\x0c\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x09\x0b\x20\x00\x28\x02\x10\x22\x03\x29\x03\x80\x01\x21\x01\x20\x03\x42\x80\x80\x80\x80\x20\x37\x03\x80\x01\x20\x05\x20\x01\x37\x03\x00\x20\x00\x20\x05\x29\x03\x68\x22\x0e\x42\x80\x80\x80\x80\x30\x41\x01\x20\x05\x10\xb5\x01\x21\x01\x20\x00\x20\x05\x29\x03\x00\x10\xcd\x01\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x01\x10\xcd\x01\x0c\x01\x0b\x20\x00\x20\x07\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x0b\x20\x00\x20\x0b\x10\xcd\x01\x20\x00\x20\x09\x10\xcd\x01\x20\x00\x20\x05\x29\x03\x50\x10\xcd\x01\x20\x00\x20\x08\x10\xcd\x01\x20\x00\x20\x0a\x10\xcd\x01\x20\x00\x20\x05\x29\x03\x60\x10\xcd\x01\x20\x00\x20\x0e\x10\xcd\x01\x0b\x20\x05\x41\xf0\x00\x6a\x24\x00\x20\x07\x0b\xe2\x03\x02\x02\x7f\x06\x7e\x23\x00\x41\x20\x6b\x22\x06\x24\x00\x20\x00\x20\x05\x29\x03\x00\x10\xa9\x05\x21\x07\x20\x06\x20\x05\x29\x03\x10\x22\x08\x37\x03\x18\x20\x05\x29\x03\x18\x21\x09\x20\x05\x29\x03\x20\x21\x0a\x02\x40\x02\x40\x20\x00\x20\x06\x41\x14\x6a\x20\x05\x29\x03\x08\x10\xc9\x04\x0d\x00\x02\x40\x20\x07\x0d\x00\x20\x05\x42\x81\x80\x80\x80\x10\x37\x03\x00\x02\x40\x02\x40\x20\x04\x41\x03\x71\x22\x05\x41\x01\x47\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x0b\x20\x00\x10\xc1\x01\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x04\x42\x80\x80\x80\x80\xe0\x00\x21\x0b\x02\x40\x20\x00\x41\xab\x93\x03\x41\xb4\x93\x03\x20\x04\x41\x04\x71\x22\x07\x1b\x10\xc7\x02\x22\x0d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x0c\x41\x88\x01\x20\x0d\x41\x07\x10\xc4\x01\x41\x00\x48\x0d\x00\x20\x00\x20\x0c\x41\x89\x01\x41\xc0\x00\x20\x07\x1b\x20\x03\x29\x03\x00\x10\xc0\x01\x41\x07\x10\xc4\x01\x41\x7f\x4a\x0d\x02\x0b\x20\x00\x20\x0c\x10\xcd\x01\x0c\x04\x0b\x20\x03\x29\x03\x00\x10\xc0\x01\x21\x0c\x0b\x20\x00\x20\x08\x20\x06\x28\x02\x14\x20\x0c\x41\x07\x10\x80\x03\x41\x00\x48\x0d\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x0b\x20\x00\x20\x0a\x41\x7f\x10\x81\x09\x22\x07\x41\x00\x48\x0d\x02\x20\x07\x45\x0d\x00\x02\x40\x02\x40\x20\x05\x41\x02\x47\x0d\x00\x20\x06\x20\x00\x20\x08\x10\x82\x09\x22\x08\x37\x03\x08\x42\x80\x80\x80\x80\xe0\x00\x21\x0b\x20\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x04\x20\x00\x20\x09\x42\x80\x80\x80\x80\x30\x41\x01\x20\x06\x41\x08\x6a\x10\xb5\x01\x21\x0b\x20\x00\x20\x06\x29\x03\x08\x10\xcd\x01\x0c\x01\x0b\x20\x00\x20\x09\x42\x80\x80\x80\x80\x30\x41\x01\x20\x06\x41\x18\x6a\x10\xb5\x01\x21\x0b\x0b\x20\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x20\x00\x20\x0b\x10\xcd\x01\x0b\x42\x80\x80\x80\x80\x30\x21\x0b\x0c\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x0b\x0b\x20\x06\x41\x20\x6a\x24\x00\x20\x0b\x0b\x6e\x02\x02\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x41\x7f\x21\x04\x02\x40\x20\x00\x20\x01\x42\x00\x10\xbb\x03\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x03\x41\x0c\x6a\x20\x05\x10\xfa\x03\x0d\x00\x20\x03\x20\x03\x28\x02\x0c\x20\x02\x6a\x22\x02\x36\x02\x0c\x20\x00\x20\x01\x41\x00\x20\x02\xad\x10\xa8\x05\x41\x00\x48\x0d\x00\x20\x02\x45\x21\x04\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x04\x0b\x3d\x01\x01\x7e\x02\x40\x20\x00\x20\x00\x41\x90\x01\x6a\x29\x03\x00\x41\x03\x10\xc6\x01\x22\x02\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x02\x41\x34\x20\x01\x10\xc0\x01\x41\x03\x10\xc4\x01\x1a\x0b\x20\x02\x0b\x93\x04\x02\x01\x7f\x05\x7e\x23\x00\x41\x30\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x20\x01\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x10\x8a\x03\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0c\x01\x0b\x20\x00\x20\x04\x41\x20\x6a\x20\x01\x10\xe5\x03\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x06\x42\x80\x80\x80\x80\x30\x21\x07\x02\x40\x02\x40\x20\x00\x20\x01\x41\x80\x01\x20\x01\x41\x00\x10\xb4\x01\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x06\x42\x80\x80\x80\x80\x30\x21\x07\x20\x00\x20\x08\x10\xdb\x03\x0d\x00\x02\x40\x20\x00\x20\x03\x29\x03\x00\x41\x00\x10\xb3\x03\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x06\x0c\x01\x0b\x20\x00\x20\x07\x41\xea\x00\x20\x07\x41\x00\x10\xb4\x01\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x03\x40\x20\x04\x20\x00\x20\x07\x20\x06\x20\x04\x41\x14\x6a\x10\xb7\x03\x22\x09\x37\x03\x18\x20\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x04\x28\x02\x14\x0d\x02\x20\x00\x20\x08\x20\x01\x41\x01\x20\x04\x41\x18\x6a\x10\xb5\x01\x21\x09\x20\x00\x20\x04\x29\x03\x18\x10\xcd\x01\x02\x40\x20\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x00\x20\x09\x41\xff\x00\x41\x02\x20\x04\x41\x20\x6a\x10\xd9\x05\x10\xa5\x06\x45\x0d\x01\x0b\x0b\x20\x00\x20\x07\x41\x01\x10\xfc\x02\x1a\x0b\x20\x00\x28\x02\x10\x22\x03\x29\x03\x80\x01\x21\x01\x20\x03\x42\x80\x80\x80\x80\x20\x37\x03\x80\x01\x20\x04\x20\x01\x37\x03\x08\x20\x00\x20\x04\x29\x03\x28\x42\x80\x80\x80\x80\x30\x41\x01\x20\x04\x41\x08\x6a\x10\xb5\x01\x21\x01\x20\x00\x20\x04\x29\x03\x08\x10\xcd\x01\x20\x00\x20\x05\x20\x01\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x22\x03\x1b\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x20\x05\x20\x03\x1b\x21\x05\x0b\x20\x00\x20\x08\x10\xcd\x01\x20\x00\x20\x06\x10\xcd\x01\x20\x00\x20\x07\x10\xcd\x01\x20\x00\x20\x04\x29\x03\x20\x10\xcd\x01\x20\x00\x20\x04\x29\x03\x28\x10\xcd\x01\x0b\x20\x04\x41\x30\x6a\x24\x00\x20\x05\x0b\xc2\x01\x02\x02\x7f\x02\x7e\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x02\x40\x20\x00\x20\x01\x41\x31\x10\xfe\x03\x45\x0d\x00\x20\x00\x20\x01\x42\x80\x80\x80\x80\x30\x10\xbd\x06\x22\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x02\x20\x00\x20\x04\x20\x06\x10\xe5\x03\x21\x07\x20\x00\x20\x06\x10\xcd\x01\x20\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x01\x20\x03\x20\x04\x10\xf6\x08\x21\x05\x41\x00\x21\x03\x02\x40\x03\x40\x20\x03\x41\x10\x46\x0d\x01\x20\x00\x20\x04\x20\x03\x6a\x29\x03\x00\x10\xcd\x01\x20\x03\x41\x08\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x05\x45\x0d\x01\x20\x00\x20\x07\x10\xcd\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x0c\x01\x0b\x20\x07\x21\x06\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x06\x0b\x3b\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x20\x04\x42\x80\x80\x80\x80\x30\x37\x03\x00\x20\x04\x20\x03\x29\x03\x00\x37\x03\x08\x20\x00\x20\x01\x41\xff\x00\x41\x02\x20\x04\x10\xf7\x05\x21\x01\x20\x04\x41\x10\x6a\x24\x00\x20\x01\x0b\x9e\x02\x02\x02\x7f\x02\x7e\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x20\x03\x29\x03\x00\x21\x06\x02\x40\x20\x00\x20\x01\x42\x80\x80\x80\x80\x30\x10\xbd\x06\x22\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x02\x40\x20\x00\x20\x06\x10\xf0\x02\x0d\x00\x20\x04\x20\x06\x10\xc0\x01\x22\x06\x37\x03\x10\x20\x04\x20\x06\x10\xc0\x01\x37\x03\x18\x0c\x01\x0b\x20\x04\x20\x06\x37\x03\x08\x20\x04\x20\x07\x37\x03\x00\x41\x00\x21\x03\x20\x04\x41\x10\x6a\x21\x05\x03\x40\x20\x03\x41\x02\x46\x0d\x01\x20\x05\x20\x00\x41\xff\x00\x41\x01\x20\x03\x41\x02\x20\x04\x10\xda\x04\x22\x06\x37\x03\x00\x02\x40\x20\x06\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x02\x40\x20\x03\x41\x01\x47\x0d\x00\x20\x00\x20\x04\x29\x03\x10\x10\xcd\x01\x0b\x20\x00\x20\x07\x10\xcd\x01\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x0c\x03\x0b\x20\x05\x41\x08\x6a\x21\x05\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x20\x07\x10\xcd\x01\x20\x00\x20\x01\x41\xff\x00\x41\x02\x20\x04\x41\x10\x6a\x10\xf7\x05\x21\x07\x20\x00\x20\x04\x29\x03\x10\x10\xcd\x01\x20\x00\x20\x04\x29\x03\x18\x10\xcd\x01\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x07\x0b\xdc\x01\x02\x01\x7f\x02\x7e\x23\x00\x41\x10\x6b\x22\x06\x24\x00\x20\x05\x29\x03\x00\x21\x07\x20\x06\x20\x00\x20\x05\x29\x03\x08\x42\x80\x80\x80\x80\x30\x41\x00\x41\x00\x10\xb5\x01\x22\x08\x37\x03\x08\x02\x40\x20\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x07\x41\x01\x20\x06\x41\x08\x6a\x41\x00\x10\xf4\x08\x21\x08\x20\x00\x20\x06\x29\x03\x08\x10\xcd\x01\x20\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x06\x20\x00\x41\x80\x01\x41\x81\x01\x20\x04\x1b\x41\x00\x41\x00\x41\x01\x20\x03\x10\xda\x04\x22\x07\x37\x03\x00\x02\x40\x20\x07\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x00\x20\x08\x10\xcd\x01\x20\x06\x29\x03\x00\x21\x08\x0c\x01\x0b\x20\x00\x20\x08\x41\xff\x00\x41\x01\x20\x06\x10\xd9\x05\x21\x08\x20\x00\x20\x06\x29\x03\x00\x10\xcd\x01\x0b\x20\x06\x41\x10\x6a\x24\x00\x20\x08\x0b\x16\x00\x20\x00\x20\x05\x29\x03\x00\x10\xc0\x01\x10\xc9\x02\x42\x80\x80\x80\x80\xe0\x00\x0b\x0a\x00\x20\x05\x29\x03\x00\x10\xc0\x01\x0b\x1e\x00\x02\x40\x20\x01\x28\x02\x20\x45\x0d\x00\x20\x00\x20\x01\x41\x28\x6a\x10\xf7\x04\x20\x01\x41\x00\x36\x02\x20\x0b\x0b\x95\x01\x01\x06\x7f\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x02\x2f\x01\x06\x41\x31\x47\x0d\x00\x20\x02\x28\x02\x20\x22\x03\x45\x0d\x00\x20\x03\x41\x04\x6a\x21\x04\x41\x00\x21\x05\x02\x40\x03\x40\x20\x05\x41\x02\x46\x0d\x01\x20\x04\x20\x05\x41\x03\x74\x6a\x22\x06\x28\x02\x04\x21\x02\x02\x40\x03\x40\x20\x02\x20\x06\x46\x0d\x01\x20\x02\x28\x02\x04\x21\x07\x20\x00\x20\x02\x10\xfb\x08\x20\x07\x21\x02\x0c\x00\x0b\x00\x0b\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x00\x20\x03\x29\x03\x18\x10\xda\x02\x20\x00\x41\x10\x6a\x20\x03\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x0b\xe7\x01\x01\x05\x7f\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x03\x2f\x01\x06\x41\x31\x47\x0d\x00\x20\x03\x28\x02\x20\x22\x04\x45\x0d\x00\x20\x04\x41\x04\x6a\x21\x05\x41\x00\x21\x06\x02\x40\x03\x40\x20\x06\x41\x02\x46\x0d\x01\x20\x05\x20\x06\x41\x03\x74\x6a\x22\x07\x41\x04\x6a\x21\x03\x02\x40\x03\x40\x20\x03\x28\x02\x00\x22\x03\x20\x07\x46\x0d\x01\x02\x40\x20\x03\x29\x03\x08\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x02\x40\x20\x03\x29\x03\x10\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x02\x40\x20\x03\x29\x03\x18\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x20\x03\x41\x04\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x06\x41\x01\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x20\x04\x29\x03\x18\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x0b\x35\x01\x01\x7f\x02\x40\x20\x01\xa7\x28\x02\x20\x22\x02\x45\x0d\x00\x20\x00\x20\x02\x28\x02\x08\x10\xde\x04\x20\x00\x20\x02\x29\x03\x00\x10\xda\x02\x20\x00\x41\x10\x6a\x20\x02\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x0b\x2c\x01\x01\x7f\x02\x40\x20\x01\xa7\x28\x02\x20\x22\x03\x45\x0d\x00\x20\x03\x29\x03\x00\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x0b\x19\x01\x01\x7f\x02\x40\x20\x01\xa7\x28\x02\x20\x22\x02\x45\x0d\x00\x20\x00\x20\x02\x10\xef\x08\x0b\x0b\x1b\x01\x01\x7f\x02\x40\x20\x01\xa7\x28\x02\x20\x22\x03\x45\x0d\x00\x20\x00\x20\x03\x20\x02\x11\x00\x00\x0b\x0b\x4c\x01\x01\x7f\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x02\x2f\x01\x06\x41\x37\x47\x0d\x00\x20\x02\x28\x02\x20\x22\x02\x45\x0d\x00\x20\x00\x20\x02\x29\x03\x00\x10\xda\x02\x20\x00\x20\x02\x29\x03\x08\x10\xda\x02\x20\x00\x41\x10\x6a\x20\x02\x20\x00\x28\x02\x04\x11\x00\x00\x0b\x0b\x60\x01\x01\x7f\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x03\x2f\x01\x06\x41\x37\x47\x0d\x00\x20\x03\x28\x02\x20\x22\x03\x45\x0d\x00\x02\x40\x20\x03\x29\x03\x00\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x20\x03\x29\x03\x08\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x0b\x30\x01\x01\x7f\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x02\x2f\x01\x06\x41\x39\x47\x0d\x00\x20\x02\x28\x02\x20\x22\x02\x45\x0d\x00\x20\x00\x20\x02\x10\xf0\x08\x0b\x0b\xe2\x01\x01\x03\x7f\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x03\x2f\x01\x06\x41\x39\x47\x0d\x00\x20\x03\x28\x02\x20\x22\x04\x45\x0d\x00\x20\x04\x41\xcc\x00\x6a\x21\x03\x20\x04\x41\xc8\x00\x6a\x21\x05\x02\x40\x03\x40\x20\x03\x28\x02\x00\x22\x03\x20\x05\x46\x0d\x01\x02\x40\x20\x03\x29\x03\x10\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x02\x40\x20\x03\x29\x03\x18\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x02\x40\x20\x03\x29\x03\x20\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x02\x40\x20\x03\x29\x03\x28\x22\x01\x42\x20\x88\xa7\x41\x7e\x49\x0d\x00\x20\x00\x20\x01\xa7\x20\x02\x11\x00\x00\x0b\x20\x03\x41\x04\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x04\x28\x02\x04\x41\x7e\x71\x41\x04\x46\x0d\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x02\x10\xf4\x04\x0b\x0b\xff\x07\x02\x0b\x7f\x01\x7e\x23\x00\x41\xe0\x00\x6b\x22\x03\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x0e\x02\x40\x20\x00\x20\x03\x20\x01\x10\xa4\x09\x22\x04\x45\x0d\x00\x20\x04\x28\x02\x04\x22\x05\x21\x06\x02\x40\x20\x04\x28\x02\x08\x22\x07\x41\x80\x80\x80\x80\x78\x47\x0d\x00\x41\x00\x21\x06\x20\x04\x41\x00\x36\x02\x04\x0b\x20\x04\x28\x02\x00\x21\x08\x20\x03\x41\xd0\x00\x6a\x42\x00\x37\x03\x00\x20\x03\x42\x00\x37\x03\x48\x20\x03\x20\x08\x36\x02\x5c\x20\x03\x41\x82\x01\x36\x02\x58\x02\x40\x02\x40\x02\x40\x02\x40\x20\x07\x41\xff\xff\xff\xff\x07\x47\x0d\x00\x20\x03\x41\xc8\x00\x6a\x41\xcc\xcf\x05\x10\xb8\x09\x0c\x01\x0b\x02\x40\x20\x06\x45\x0d\x00\x20\x03\x41\xc8\x00\x6a\x41\x2d\x10\xcd\x02\x20\x04\x28\x02\x08\x21\x07\x0b\x02\x40\x20\x07\x41\xfe\xff\xff\xff\x07\x47\x0d\x00\x20\x03\x41\xc8\x00\x6a\x41\xd0\xcf\x05\x10\xb8\x09\x0c\x01\x0b\x41\x00\x21\x06\x02\x40\x20\x02\x20\x02\x41\x7f\x6a\x22\x09\x71\x0d\x00\x41\x00\x41\x20\x20\x09\x67\x6b\x20\x02\x41\x02\x49\x1b\x21\x06\x0b\x20\x03\x42\x00\x37\x02\x3c\x20\x03\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x34\x20\x03\x20\x08\x36\x02\x30\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x06\x45\x0d\x00\x20\x03\x41\x30\x6a\x20\x04\x10\xcc\x04\x0d\x01\x20\x03\x41\x30\x6a\x41\x00\x41\x11\x10\x9f\x09\x41\x20\x71\x0d\x01\x20\x03\x28\x02\x38\x22\x07\x41\x00\x20\x06\x41\x7f\x6a\x20\x07\x41\x00\x48\x1b\x6a\x20\x06\x6d\x21\x09\x02\x40\x20\x07\x41\x80\x80\x80\x80\x78\x47\x0d\x00\x20\x03\x41\xc8\x00\x6a\x41\xd9\xcf\x05\x10\xb8\x09\x0c\x05\x0b\x41\x00\x21\x07\x20\x09\x41\x00\x4a\x0d\x02\x20\x03\x41\xc8\x00\x6a\x41\xdb\xcf\x05\x10\xb8\x09\x41\x00\x20\x09\x6b\x21\x06\x02\x40\x03\x40\x20\x07\x20\x06\x4e\x0d\x01\x20\x03\x41\xc8\x00\x6a\x41\x30\x10\xcd\x02\x20\x07\x41\x01\x6a\x21\x07\x0c\x00\x0b\x00\x0b\x20\x09\x41\x01\x48\x0d\x04\x20\x03\x41\xc8\x00\x6a\x20\x03\x41\x30\x6a\x20\x02\x20\x09\x20\x09\x10\xb9\x09\x0c\x04\x0b\x20\x03\x20\x04\x28\x02\x10\x36\x02\x28\x20\x03\x20\x04\x28\x02\x0c\x22\x06\x36\x02\x24\x20\x03\x41\x00\x36\x02\x1c\x20\x03\x20\x07\x36\x02\x20\x20\x07\x41\x00\x20\x07\x41\x00\x4a\x1b\x20\x02\x41\x01\x10\xba\x09\x41\x01\x6a\x21\x0a\x02\x40\x02\x40\x20\x06\x45\x0d\x00\x20\x0a\x20\x02\x41\x00\x10\xba\x09\x21\x0b\x41\x10\x21\x07\x03\x40\x20\x03\x41\x30\x6a\x20\x02\x41\x00\x20\x07\x20\x0b\x6a\x22\x09\x41\x01\x6a\x22\x06\x41\xe0\x0f\x10\xa0\x09\x20\x03\x41\x30\x6a\x20\x03\x41\x30\x6a\x20\x03\x41\x18\x6a\x20\x06\x41\xe0\x0f\x10\xa2\x09\x72\x22\x06\x41\x20\x71\x0d\x03\x20\x06\x41\x10\x71\x45\x0d\x02\x20\x03\x41\x30\x6a\x20\x03\x28\x02\x38\x41\x01\x20\x09\x10\xbb\x09\x0d\x02\x20\x07\x41\x02\x6d\x20\x07\x6a\x21\x07\x0c\x00\x0b\x00\x0b\x20\x03\x41\x30\x6a\x20\x03\x41\x18\x6a\x10\xcc\x04\x0d\x01\x0c\x03\x0b\x20\x03\x41\x30\x6a\x41\x01\x10\xcd\x04\x41\x20\x71\x45\x0d\x02\x0b\x20\x03\x41\x30\x6a\x10\x9a\x09\x0c\x04\x0b\x20\x03\x41\xc8\x00\x6a\x20\x03\x41\x30\x6a\x20\x02\x20\x09\x20\x09\x10\xb9\x09\x0c\x01\x0b\x20\x03\x28\x02\x4c\x21\x0c\x20\x03\x41\xc8\x00\x6a\x20\x03\x41\x30\x6a\x20\x02\x20\x0a\x20\x0a\x10\xb9\x09\x41\x00\x20\x03\x28\x02\x4c\x22\x0d\x6b\x21\x06\x20\x03\x28\x02\x48\x21\x0a\x20\x0c\x21\x02\x02\x40\x03\x40\x20\x06\x21\x09\x20\x02\x22\x07\x41\x01\x6a\x22\x02\x20\x0d\x4f\x0d\x01\x20\x0a\x20\x07\x6a\x22\x0b\x2d\x00\x00\x41\x30\x47\x0d\x01\x20\x09\x41\x01\x6a\x21\x06\x20\x0b\x41\x01\x6a\x2d\x00\x00\x41\x2e\x47\x0d\x00\x0b\x0b\x20\x0c\x20\x07\x4f\x0d\x00\x20\x0a\x20\x0c\x6a\x20\x0a\x20\x07\x6a\x41\x00\x20\x0c\x20\x09\x6a\x6b\x10\xad\x01\x1a\x20\x03\x41\x00\x20\x09\x6b\x36\x02\x4c\x0b\x20\x03\x41\x30\x6a\x10\x9a\x09\x0b\x20\x03\x41\xc8\x00\x6a\x41\x00\x10\xcd\x02\x20\x03\x28\x02\x54\x0d\x00\x20\x03\x28\x02\x48\x21\x07\x0c\x01\x0b\x02\x40\x20\x03\x28\x02\x48\x22\x02\x0d\x00\x41\x00\x21\x07\x0c\x01\x0b\x41\x00\x21\x07\x20\x08\x28\x02\x00\x20\x02\x41\x00\x20\x08\x28\x02\x04\x11\x01\x00\x1a\x0b\x20\x04\x20\x05\x36\x02\x04\x20\x00\x20\x04\x20\x03\x10\xd0\x04\x02\x40\x20\x07\x0d\x00\x20\x00\x10\xc1\x02\x0c\x01\x0b\x20\x00\x20\x07\x10\xc7\x02\x21\x0e\x20\x00\x28\x02\xd8\x01\x22\x04\x28\x02\x00\x20\x07\x41\x00\x20\x04\x28\x02\x04\x11\x01\x00\x1a\x0b\x20\x03\x41\xe0\x00\x6a\x24\x00\x20\x0e\x0b\x57\x01\x02\x7f\x02\x40\x03\x40\x20\x01\x2c\x00\x00\x22\x03\x45\x0d\x01\x02\x40\x20\x00\x2c\x00\x00\x22\x04\x41\x20\x6a\x20\x04\x20\x04\x41\xbf\x7f\x6a\x41\x1a\x49\x1b\x20\x03\x46\x0d\x00\x41\x00\x0f\x0b\x20\x01\x41\x01\x6a\x21\x01\x20\x00\x41\x01\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x02\x40\x20\x02\x45\x0d\x00\x20\x02\x20\x00\x36\x02\x00\x0b\x41\x01\x0b\x3d\x01\x01\x7f\x02\x40\x02\x40\x20\x00\x41\x50\x6a\x22\x01\x41\x0a\x49\x0d\x00\x20\x00\x41\xbf\x7f\x6a\x41\x19\x4b\x0d\x01\x20\x00\x41\x49\x6a\x21\x01\x0b\x20\x01\x0f\x0b\x20\x00\x41\xa9\x7f\x6a\x41\x24\x20\x00\x41\x9f\x7f\x6a\x41\x1a\x49\x1b\x0b\x58\x01\x02\x7f\x41\x00\x21\x02\x02\x40\x20\x00\x28\x02\x0c\x20\x01\x46\x0d\x00\x20\x00\x28\x02\x00\x22\x02\x28\x02\x00\x20\x00\x28\x02\x10\x20\x01\x41\x02\x74\x20\x02\x28\x02\x04\x11\x01\x00\x21\x03\x02\x40\x20\x01\x45\x0d\x00\x41\x7f\x21\x02\x20\x03\x45\x0d\x01\x0b\x20\x00\x20\x01\x36\x02\x0c\x20\x00\x20\x03\x36\x02\x10\x41\x00\x21\x02\x0b\x20\x02\x0b\xa9\x01\x01\x05\x7f\x41\x7f\x21\x03\x02\x40\x02\x40\x20\x01\x28\x02\x00\x22\x04\x41\x7f\x4a\x0d\x00\x20\x00\x28\x02\x00\x22\x05\x28\x02\x00\x20\x00\x28\x02\x10\x20\x00\x28\x02\x0c\x22\x06\x41\x01\x6a\x22\x07\x20\x06\x41\x03\x6c\x41\x01\x76\x22\x06\x20\x07\x20\x06\x4a\x1b\x22\x06\x41\x02\x74\x20\x05\x28\x02\x04\x11\x01\x00\x22\x05\x45\x0d\x01\x20\x00\x20\x05\x36\x02\x10\x20\x05\x20\x06\x20\x00\x28\x02\x0c\x22\x03\x6b\x22\x07\x41\x02\x74\x6a\x20\x05\x20\x03\x41\x02\x74\x10\xad\x01\x1a\x20\x00\x20\x06\x36\x02\x0c\x20\x07\x20\x04\x6a\x21\x04\x0b\x20\x00\x28\x02\x10\x20\x04\x41\x02\x74\x6a\x20\x02\x36\x02\x00\x20\x01\x20\x04\x41\x7f\x6a\x36\x02\x00\x41\x00\x21\x03\x0b\x20\x03\x0b\x2d\x01\x01\x7f\x02\x40\x20\x00\x28\x02\x00\x22\x01\x45\x0d\x00\x20\x00\x28\x02\x10\x22\x00\x45\x0d\x00\x20\x01\x28\x02\x00\x20\x00\x41\x00\x20\x01\x28\x02\x04\x11\x01\x00\x1a\x0b\x0b\x1c\x00\x20\x00\x41\x00\x10\x98\x09\x1a\x20\x00\x20\x01\x36\x02\x04\x20\x00\x41\x80\x80\x80\x80\x78\x36\x02\x08\x0b\xe4\x01\x01\x06\x7f\x20\x00\x28\x02\x0c\x22\x03\x41\x02\x74\x21\x04\x20\x03\x41\x01\x6a\x21\x05\x41\x60\x21\x06\x02\x40\x03\x40\x20\x05\x41\x01\x46\x0d\x01\x20\x06\x41\x20\x6a\x21\x06\x20\x05\x41\x7f\x6a\x21\x05\x20\x00\x28\x02\x10\x22\x03\x20\x04\x6a\x21\x07\x20\x04\x41\x7c\x6a\x22\x08\x21\x04\x20\x07\x41\x7c\x6a\x28\x02\x00\x45\x0d\x00\x0b\x20\x00\x20\x00\x28\x02\x08\x20\x06\x6b\x36\x02\x08\x02\x40\x20\x03\x20\x08\x6a\x28\x02\x00\x67\x22\x07\x45\x0d\x00\x41\x20\x20\x07\x6b\x21\x08\x41\x00\x21\x06\x20\x05\x21\x04\x02\x40\x03\x40\x20\x04\x45\x0d\x01\x20\x03\x20\x06\x20\x08\x76\x20\x03\x28\x02\x00\x22\x06\x20\x07\x74\x72\x36\x02\x00\x20\x04\x41\x7f\x6a\x21\x04\x20\x03\x41\x04\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x20\x00\x28\x02\x08\x20\x07\x6b\x36\x02\x08\x0b\x20\x00\x20\x01\x20\x02\x20\x05\x41\x00\x10\x81\x0a\x0f\x0b\x20\x00\x41\x80\x80\x80\x80\x78\x36\x02\x08\x20\x00\x41\x00\x10\x98\x09\x1a\x41\x00\x0b\x38\x01\x03\x7f\x20\x00\x41\xee\xcb\x05\x6a\x2d\x00\x00\x21\x01\x41\x01\x21\x02\x20\x00\x21\x03\x02\x40\x03\x40\x20\x02\x20\x01\x4f\x0d\x01\x20\x02\x41\x01\x6a\x21\x02\x20\x03\x20\x00\x6c\x21\x03\x0c\x00\x0b\x00\x0b\x20\x03\x0b\xfa\x01\x01\x04\x7f\x23\x00\x41\x20\x6b\x22\x07\x24\x00\x02\x40\x02\x40\x20\x02\x41\x01\x47\x0d\x00\x20\x00\x20\x01\x35\x02\x00\x10\xb9\x02\x21\x03\x0c\x01\x0b\x20\x04\x41\x01\x74\x20\x03\x41\x01\x6a\x22\x08\x76\x41\x01\x6a\x41\x01\x76\x21\x09\x02\x40\x20\x06\x20\x03\x41\x14\x6c\x6a\x22\x0a\x28\x02\x0c\x0d\x00\x20\x0a\x20\x05\x20\x09\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa0\x09\x22\x03\x0d\x01\x0b\x20\x00\x20\x01\x20\x09\x41\x02\x74\x6a\x20\x02\x20\x09\x6b\x20\x08\x20\x04\x20\x05\x20\x06\x10\x9e\x09\x22\x03\x0d\x00\x20\x00\x20\x00\x20\x0a\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa2\x09\x22\x03\x0d\x00\x20\x07\x42\x00\x37\x02\x14\x20\x07\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x0c\x20\x07\x20\x00\x28\x02\x00\x36\x02\x08\x02\x40\x20\x07\x41\x08\x6a\x20\x01\x20\x09\x20\x08\x20\x04\x20\x05\x20\x06\x10\x9e\x09\x22\x03\x0d\x00\x20\x00\x20\x00\x20\x07\x41\x08\x6a\x41\xff\xff\xff\xff\x03\x41\x01\x10\xbb\x02\x21\x03\x0b\x20\x07\x41\x08\x6a\x10\x9a\x09\x0b\x20\x07\x41\x20\x6a\x24\x00\x20\x03\x0b\x20\x01\x01\x7f\x02\x40\x20\x00\x28\x02\x0c\x22\x03\x0d\x00\x41\x00\x0f\x0b\x20\x00\x20\x01\x20\x02\x20\x03\x41\x00\x10\x81\x0a\x0b\x87\x01\x01\x01\x7f\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x02\x40\x02\x40\x20\x01\x41\x0a\x47\x0d\x00\x20\x02\x41\x09\x4b\x0d\x00\x20\x00\x20\x02\x41\x02\x74\x41\xb0\xcb\x05\x6a\x35\x02\x00\x10\xb9\x02\x21\x02\x0c\x01\x0b\x20\x05\x42\x00\x37\x02\x14\x20\x05\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x0c\x20\x05\x20\x00\x28\x02\x00\x36\x02\x08\x20\x05\x41\x08\x6a\x20\x01\xad\x10\xb9\x02\x20\x00\x20\x05\x41\x08\x6a\x20\x02\x20\x03\x20\x04\x10\xa9\x0a\x72\x21\x02\x20\x05\x41\x08\x6a\x10\x9a\x09\x0b\x20\x05\x41\x20\x6a\x24\x00\x20\x02\x0b\x12\x00\x20\x00\x20\x01\x20\x02\x20\x03\x20\x04\x41\x83\x01\x10\x9e\x0a\x0b\xc7\x04\x01\x08\x7f\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x20\x01\x20\x02\x20\x01\x28\x02\x0c\x20\x02\x28\x02\x0c\x49\x22\x06\x1b\x22\x07\x28\x02\x04\x20\x02\x20\x01\x20\x06\x1b\x22\x01\x28\x02\x04\x73\x21\x08\x02\x40\x02\x40\x02\x40\x20\x07\x28\x02\x0c\x22\x06\x0d\x00\x02\x40\x02\x40\x20\x01\x28\x02\x08\x22\x01\x41\xff\xff\xff\xff\x07\x46\x0d\x00\x20\x07\x28\x02\x08\x22\x02\x41\xff\xff\xff\xff\x07\x47\x0d\x01\x0b\x20\x00\x10\x97\x04\x41\x00\x21\x01\x0c\x03\x0b\x02\x40\x02\x40\x20\x01\x41\xfe\xff\xff\xff\x07\x46\x0d\x00\x20\x02\x41\xfe\xff\xff\xff\x07\x47\x0d\x01\x0b\x02\x40\x02\x40\x20\x01\x41\xfe\xff\xff\xff\x07\x47\x0d\x00\x20\x02\x41\x80\x80\x80\x80\x78\x46\x0d\x01\x0c\x04\x0b\x20\x01\x41\x80\x80\x80\x80\x78\x47\x0d\x03\x20\x02\x41\xfe\xff\xff\xff\x07\x47\x0d\x03\x0b\x20\x00\x10\x97\x04\x41\x01\x21\x01\x0c\x03\x0b\x20\x00\x20\x08\x10\x9b\x09\x41\x00\x21\x01\x0c\x02\x0b\x20\x01\x28\x02\x0c\x22\x09\x21\x0a\x20\x06\x21\x02\x02\x40\x20\x04\x41\x07\x71\x41\x06\x47\x0d\x00\x20\x06\x20\x03\x41\x21\x6a\x41\x05\x76\x22\x0a\x20\x06\x20\x0a\x48\x1b\x21\x02\x20\x09\x20\x0a\x20\x09\x20\x0a\x48\x1b\x21\x0a\x0b\x20\x07\x28\x02\x10\x20\x06\x41\x02\x74\x6a\x20\x02\x41\x02\x74\x6b\x21\x06\x20\x01\x28\x02\x10\x20\x09\x41\x02\x74\x6a\x20\x0a\x41\x02\x74\x6b\x21\x09\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x41\xe4\x00\x49\x0d\x00\x41\x00\x21\x0b\x20\x00\x28\x02\x00\x20\x00\x20\x09\x20\x0a\x20\x06\x20\x02\x20\x01\x20\x00\x46\x22\x0c\x41\x02\x72\x20\x0c\x20\x07\x20\x00\x46\x1b\x10\x89\x0a\x0d\x01\x0c\x03\x0b\x02\x40\x02\x40\x20\x01\x20\x00\x46\x0d\x00\x41\x00\x21\x0b\x20\x07\x20\x00\x46\x0d\x00\x20\x00\x21\x0c\x0c\x01\x0b\x20\x05\x42\x00\x37\x02\x14\x20\x05\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x0c\x20\x05\x20\x00\x28\x02\x00\x36\x02\x08\x20\x05\x41\x08\x6a\x21\x0c\x20\x00\x21\x0b\x0b\x20\x0c\x20\x02\x20\x0a\x6a\x10\x98\x09\x45\x0d\x01\x20\x0c\x21\x00\x0b\x20\x00\x10\x97\x04\x41\x20\x21\x01\x0c\x02\x0b\x20\x0c\x28\x02\x10\x20\x09\x20\x0a\x20\x06\x20\x02\x10\x8a\x0a\x20\x0c\x21\x00\x0b\x20\x00\x20\x08\x36\x02\x04\x20\x00\x20\x07\x28\x02\x08\x20\x01\x28\x02\x08\x6a\x36\x02\x08\x20\x00\x20\x03\x20\x04\x10\x9c\x09\x21\x01\x0b\x20\x00\x20\x05\x41\x08\x6a\x47\x0d\x01\x20\x0b\x20\x05\x41\x08\x6a\x10\x80\x0a\x0c\x01\x0b\x20\x00\x20\x08\x10\xa2\x04\x41\x00\x21\x01\x0b\x20\x05\x41\x20\x6a\x24\x00\x20\x01\x0b\x8e\x02\x02\x02\x7f\x01\x7e\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x02\x40\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x7e\x52\x0d\x00\x20\x01\xa7\x21\x04\x02\x40\x20\x02\x45\x0d\x00\x20\x03\x41\x08\x6a\x20\x04\x41\x04\x6a\x41\x00\x10\xcf\x04\x0d\x00\x20\x03\x29\x03\x08\x22\x05\x42\xff\xff\xff\xff\xff\xff\xff\x0f\x7c\x42\xfe\xff\xff\xff\xff\xff\xff\x1f\x56\x0d\x00\x20\x00\x20\x01\x10\xcd\x01\x02\x40\x20\x05\x42\x80\x80\x80\x80\x08\x7c\x42\xff\xff\xff\xff\x0f\x56\x0d\x00\x20\x05\x42\xff\xff\xff\xff\x0f\x83\x21\x01\x0c\x02\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x05\xb9\xbd\x22\x01\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x01\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x01\x0c\x01\x0b\x20\x04\x41\x0c\x6a\x28\x02\x00\x41\x80\x80\x80\x80\x78\x47\x0d\x00\x20\x04\x41\x08\x6a\x28\x02\x00\x45\x0d\x00\x20\x04\x28\x02\x00\x41\x01\x47\x0d\x01\x20\x04\x41\x00\x36\x02\x08\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x01\x0f\x0b\x41\x99\x97\x03\x41\xae\xb7\x01\x41\xe2\xe0\x00\x41\xb2\x97\x03\x10\x4a\x00\x0b\x0e\x00\x20\x00\x20\x01\x20\x02\x10\xc0\x01\x10\xce\x04\x0b\x60\x01\x02\x7f\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x20\x05\x42\x00\x37\x02\x14\x20\x05\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x0c\x20\x05\x20\x00\x28\x02\x00\x36\x02\x08\x20\x05\x41\x08\x6a\x20\x02\x10\x95\x04\x21\x06\x20\x00\x20\x01\x20\x05\x41\x08\x6a\x20\x03\x20\x04\x10\xbb\x02\x21\x00\x20\x05\x41\x08\x6a\x10\x9a\x09\x20\x05\x41\x20\x6a\x24\x00\x20\x00\x20\x06\x72\x0b\x33\x01\x01\x7f\x02\x40\x02\x40\x20\x00\x28\x02\x10\x28\x02\x8c\x01\x22\x02\x0d\x00\x41\x00\x21\x02\x0c\x01\x0b\x20\x02\x28\x02\x28\x41\x02\x76\x41\x01\x71\x21\x02\x0b\x20\x00\x20\x01\x20\x02\x10\xa3\x09\x0b\x12\x00\x20\x00\x20\x01\x20\x02\x20\x03\x20\x04\x41\x84\x01\x10\x9e\x0a\x0b\x51\x01\x01\x7f\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x20\x04\x42\x00\x37\x02\x14\x20\x04\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x0c\x20\x04\x20\x00\x28\x02\x00\x36\x02\x08\x20\x04\x41\x08\x6a\x20\x00\x20\x01\x20\x02\x20\x03\x10\xbd\x02\x21\x00\x20\x04\x41\x08\x6a\x10\x9a\x09\x20\x04\x41\x20\x6a\x24\x00\x20\x00\x0b\xcf\x0d\x01\x08\x7f\x23\x00\x41\xa0\x01\x6b\x22\x05\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x28\x02\x0c\x45\x0d\x00\x20\x02\x28\x02\x0c\x0d\x01\x0b\x02\x40\x20\x02\x28\x02\x08\x41\x80\x80\x80\x80\x78\x47\x0d\x00\x20\x00\x42\x01\x10\xb9\x02\x1a\x0c\x03\x0b\x20\x01\x28\x02\x08\x41\xff\xff\xff\xff\x07\x46\x0d\x01\x20\x00\x42\x01\x10\xb9\x02\x1a\x20\x01\x20\x00\x10\x93\x04\x21\x06\x02\x40\x20\x04\x41\x80\x80\x04\x71\x45\x0d\x00\x20\x06\x0d\x00\x20\x02\x28\x02\x08\x41\xfe\xff\xff\xff\x07\x4e\x0d\x02\x0b\x02\x40\x20\x06\x0d\x00\x20\x01\x28\x02\x04\x45\x0d\x03\x20\x02\x28\x02\x08\x41\xff\xff\xff\xff\x07\x46\x0d\x02\x0c\x03\x0b\x02\x40\x20\x02\x28\x02\x08\x41\x82\x80\x80\x80\x78\x6a\x22\x04\x41\x01\x4b\x0d\x00\x02\x40\x20\x04\x0e\x02\x00\x03\x00\x0b\x02\x40\x20\x02\x28\x02\x04\x20\x06\x41\x00\x4a\x47\x0d\x00\x20\x00\x41\x00\x10\x9b\x09\x0c\x04\x0b\x20\x00\x41\x00\x10\xa2\x04\x0c\x03\x0b\x20\x01\x28\x02\x04\x20\x02\x10\xb3\x09\x45\x71\x21\x06\x02\x40\x20\x02\x28\x02\x04\x20\x01\x28\x02\x08\x41\x80\x80\x80\x80\x78\x46\x47\x0d\x00\x20\x00\x20\x06\x10\xa2\x04\x41\x02\x21\x06\x20\x02\x28\x02\x04\x45\x0d\x03\x0c\x04\x0b\x20\x00\x20\x06\x10\x9b\x09\x0c\x02\x0b\x20\x00\x28\x02\x00\x21\x07\x20\x05\x42\x00\x37\x02\x4c\x20\x05\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x44\x20\x05\x20\x07\x36\x02\x40\x20\x04\x41\x07\x71\x21\x08\x20\x05\x41\xc0\x00\x6a\x20\x01\x10\xcc\x04\x1a\x20\x02\x10\xb3\x09\x21\x09\x41\x00\x21\x06\x02\x40\x02\x40\x20\x01\x28\x02\x04\x0d\x00\x41\x00\x21\x01\x0c\x01\x0b\x02\x40\x20\x09\x41\x7f\x4a\x0d\x00\x20\x00\x10\x97\x04\x20\x05\x41\xc0\x00\x6a\x10\x9a\x09\x41\x01\x21\x06\x0c\x04\x0b\x20\x05\x20\x05\x28\x02\x44\x41\x01\x73\x36\x02\x44\x20\x08\x41\x01\x72\x41\x03\x46\x20\x09\x45\x22\x01\x71\x20\x04\x73\x21\x04\x0b\x20\x00\x42\x01\x10\xb9\x02\x1a\x02\x40\x02\x40\x20\x05\x41\xc0\x00\x6a\x20\x00\x10\xae\x0a\x0d\x00\x20\x05\x42\x00\x37\x02\x34\x20\x05\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x2c\x20\x05\x20\x07\x36\x02\x28\x20\x05\x42\x00\x37\x02\x1c\x20\x05\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x14\x20\x05\x20\x07\x36\x02\x10\x20\x05\x41\x28\x6a\x20\x05\x41\xc0\x00\x6a\x41\x20\x41\x02\x10\xad\x0a\x20\x05\x41\x10\x6a\x20\x05\x41\xc0\x00\x6a\x41\x20\x41\x03\x10\xad\x0a\x20\x05\x41\x28\x6a\x20\x05\x41\x28\x6a\x20\x02\x41\x20\x20\x02\x28\x02\x04\x41\x02\x73\x10\xa2\x09\x1a\x20\x05\x41\x10\x6a\x20\x05\x41\x10\x6a\x20\x02\x41\x20\x20\x02\x28\x02\x04\x41\x03\x73\x10\xa2\x09\x1a\x41\x00\x21\x06\x02\x40\x20\x05\x28\x02\x18\x41\x01\x48\x0d\x00\x20\x05\x42\x00\x37\x02\x7c\x20\x05\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x74\x20\x05\x20\x07\x36\x02\x70\x20\x05\x42\x00\x37\x02\x64\x20\x05\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x5c\x20\x05\x20\x07\x36\x02\x58\x20\x05\x41\xd8\x00\x6a\x41\x20\x41\x03\x10\xab\x0a\x20\x05\x42\x00\x37\x02\x94\x01\x20\x05\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x8c\x01\x20\x05\x20\x05\x28\x02\x70\x36\x02\x88\x01\x20\x05\x41\x88\x01\x6a\x41\x80\x80\x80\x80\x02\x41\x01\x41\x1c\x20\x04\x41\x05\x76\x41\x3f\x71\x22\x07\x6b\x74\x20\x07\x41\x3f\x46\x1b\x22\x07\xac\x10\xb9\x02\x1a\x20\x05\x41\xf0\x00\x6a\x20\x05\x41\xd8\x00\x6a\x20\x05\x41\x88\x01\x6a\x41\x20\x41\x03\x10\xa2\x09\x1a\x20\x05\x41\x88\x01\x6a\x10\x9a\x09\x02\x40\x20\x05\x41\xf0\x00\x6a\x20\x05\x41\x28\x6a\x10\xb1\x0a\x41\x01\x48\x0d\x00\x20\x05\x41\xf0\x00\x6a\x10\x9a\x09\x20\x05\x41\xd8\x00\x6a\x10\x9a\x09\x20\x00\x41\x00\x20\x03\x20\x04\x10\x83\x0a\x21\x06\x0c\x01\x0b\x20\x05\x41\xd8\x00\x6a\x41\x20\x41\x02\x10\xab\x0a\x20\x05\x41\xf0\x00\x6a\x20\x05\x41\xd8\x00\x6a\x20\x04\x41\x1c\x74\x41\x1f\x75\x41\x01\x20\x03\x6b\x71\x20\x07\x6b\x41\x03\x6a\x22\x07\x41\x7e\x6a\xac\x41\x20\x41\x02\x10\xa7\x0a\x02\x40\x20\x05\x41\x10\x6a\x20\x05\x41\xf0\x00\x6a\x10\xb1\x0a\x45\x0d\x00\x20\x05\x41\xf0\x00\x6a\x10\x9a\x09\x20\x05\x41\xd8\x00\x6a\x10\x9a\x09\x02\x40\x20\x04\x41\x07\x71\x41\x03\x47\x0d\x00\x20\x00\x42\x01\x10\xb9\x02\x1a\x20\x00\x20\x07\x36\x02\x08\x41\x18\x21\x06\x0c\x02\x0b\x20\x00\x41\x00\x10\x9b\x09\x41\x18\x21\x06\x0c\x01\x0b\x20\x05\x41\xd8\x00\x6a\x10\x9a\x09\x20\x05\x41\xf0\x00\x6a\x10\x9a\x09\x0b\x20\x05\x41\x28\x6a\x10\x9a\x09\x20\x05\x41\x10\x6a\x10\x9a\x09\x20\x06\x0d\x00\x02\x40\x02\x40\x20\x09\x41\x00\x4e\x0d\x00\x20\x08\x41\x06\x46\x0d\x01\x41\x00\x21\x0a\x41\x00\x20\x09\x6b\x21\x07\x20\x00\x28\x02\x00\x21\x0b\x20\x05\x41\xc0\x00\x6a\x10\xb3\x09\x21\x06\x02\x40\x02\x40\x20\x09\x41\x60\x4a\x0d\x00\x20\x06\x45\x0d\x01\x0c\x03\x0b\x20\x06\x41\x7f\x20\x07\x74\x41\x7f\x73\x71\x0d\x02\x20\x06\x20\x07\x75\x21\x0a\x0b\x20\x05\x28\x02\x50\x20\x05\x28\x02\x4c\x22\x0c\x20\x06\x20\x05\x28\x02\x48\x6b\x20\x0c\x41\x05\x74\x6a\x10\x92\x0a\x41\x07\x71\x41\x01\x47\x0d\x01\x20\x05\x42\x00\x37\x02\x94\x01\x20\x05\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x8c\x01\x20\x05\x20\x0b\x36\x02\x88\x01\x20\x05\x41\x88\x01\x6a\x20\x05\x41\xc0\x00\x6a\x10\xcc\x04\x1a\x20\x05\x20\x05\x28\x02\x90\x01\x20\x06\x6b\x36\x02\x90\x01\x41\x00\x21\x06\x02\x40\x03\x40\x20\x06\x20\x07\x4e\x0d\x01\x02\x40\x20\x06\x45\x0d\x00\x20\x05\x41\x88\x01\x6a\x20\x00\x10\xcc\x04\x1a\x0b\x20\x06\x41\x01\x6a\x21\x06\x20\x00\x41\x00\x20\x05\x41\x88\x01\x6a\x10\xb1\x09\x45\x0d\x00\x0c\x03\x0b\x00\x0b\x20\x00\x20\x00\x28\x02\x08\x20\x0a\x6a\x36\x02\x08\x20\x05\x41\xc0\x00\x6a\x20\x00\x10\xcc\x04\x1a\x20\x05\x20\x02\x29\x02\x0c\x37\x02\x94\x01\x20\x05\x20\x02\x28\x02\x04\x36\x02\x8c\x01\x20\x05\x20\x02\x28\x02\x08\x20\x09\x6b\x36\x02\x90\x01\x20\x05\x41\x88\x01\x6a\x21\x02\x0b\x02\x40\x20\x05\x28\x02\x48\x22\x06\x20\x05\x41\xc0\x00\x6a\x10\xb3\x09\x6b\x22\x07\x41\x01\x47\x0d\x00\x20\x05\x41\xc0\x00\x6a\x20\x02\x20\x06\x41\x7f\x6a\xac\x41\x20\x41\x01\x10\xa7\x0a\x20\x05\x41\x0c\x6a\x20\x05\x41\xc0\x00\x6a\x41\x00\x10\xa5\x04\x20\x00\x42\x01\x10\xb9\x02\x1a\x20\x00\x20\x05\x28\x02\x0c\x20\x03\x20\x04\x10\xba\x02\x21\x06\x0c\x02\x0b\x02\x40\x20\x03\x41\xff\xff\xff\xff\x03\x47\x0d\x00\x20\x05\x41\xf0\x00\x6a\x20\x02\x41\x00\x10\xa5\x04\x20\x02\x28\x02\x04\x0d\x03\x02\x40\x20\x05\x28\x02\x70\x22\x02\x41\xff\xff\xff\xff\x01\x4a\x0d\x00\x20\x00\x20\x05\x41\xc0\x00\x6a\x20\x02\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa9\x0a\x21\x06\x0c\x03\x0b\x20\x05\x41\xc0\x00\x6a\x10\x9a\x09\x20\x00\x41\x00\x41\xff\xff\xff\xff\x03\x20\x04\x10\x83\x0a\x21\x06\x0c\x06\x0b\x02\x40\x20\x02\x28\x02\x08\x41\x20\x48\x0d\x00\x20\x08\x41\x06\x46\x0d\x01\x20\x02\x28\x02\x04\x0d\x01\x20\x00\x20\x02\x20\x07\x41\x7f\x6a\xac\x41\x20\x41\x01\x10\xa7\x0a\x20\x05\x41\x0c\x6a\x20\x00\x41\x00\x10\xa5\x04\x20\x05\x28\x02\x0c\x20\x03\x4b\x0d\x01\x0b\x20\x00\x20\x05\x41\xc0\x00\x6a\x20\x03\x20\x04\x41\x85\x01\x20\x02\x10\xb0\x0a\x21\x06\x0c\x01\x0b\x20\x00\x20\x05\x41\xc0\x00\x6a\x20\x03\x20\x04\x41\x86\x01\x20\x02\x10\xb0\x0a\x21\x06\x0b\x20\x05\x41\xc0\x00\x6a\x10\x9a\x09\x20\x00\x20\x01\x36\x02\x04\x0c\x03\x0b\x41\x94\xd0\x05\x41\xc3\xc5\x05\x41\xa1\x25\x41\x9d\xd0\x05\x10\x4a\x00\x0b\x20\x00\x10\x97\x04\x0b\x41\x00\x21\x06\x0b\x20\x05\x41\xa0\x01\x6a\x24\x00\x20\x06\x0b\x0d\x00\x20\x00\x20\x01\x20\x02\x41\x02\x10\xab\x09\x0b\xc9\x05\x01\x0c\x7f\x23\x00\x41\x30\x6b\x22\x04\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x20\x01\x46\x0d\x00\x20\x00\x20\x02\x46\x0d\x00\x41\x00\x21\x05\x41\x00\x21\x06\x02\x40\x20\x01\x28\x02\x08\x41\x01\x48\x0d\x00\x20\x01\x28\x02\x04\x21\x06\x0b\x02\x40\x20\x02\x28\x02\x08\x41\x01\x48\x0d\x00\x20\x02\x28\x02\x04\x21\x05\x0b\x02\x40\x20\x06\x45\x0d\x00\x20\x04\x42\x00\x37\x02\x0c\x20\x04\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x04\x20\x04\x20\x00\x28\x02\x00\x36\x02\x00\x20\x04\x20\x01\x42\x01\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa5\x09\x21\x07\x20\x04\x21\x01\x20\x07\x45\x0d\x00\x41\x00\x21\x02\x0c\x05\x0b\x02\x40\x02\x40\x20\x05\x0d\x00\x41\x00\x21\x08\x20\x03\x41\x02\x4f\x0d\x01\x20\x06\x45\x21\x09\x20\x06\x21\x08\x0c\x04\x0b\x20\x04\x42\x00\x37\x02\x24\x20\x04\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x1c\x20\x04\x20\x00\x28\x02\x00\x36\x02\x18\x20\x04\x41\x18\x6a\x20\x02\x42\x01\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa5\x09\x21\x07\x20\x04\x41\x18\x6a\x21\x02\x20\x07\x0d\x05\x20\x06\x20\x05\x20\x03\x10\xa8\x0a\x21\x08\x20\x04\x41\x18\x6a\x21\x02\x0b\x20\x08\x45\x21\x09\x20\x03\x41\x02\x47\x0d\x02\x20\x08\x0d\x02\x02\x40\x20\x05\x20\x06\x72\x0d\x00\x20\x01\x28\x02\x08\x22\x07\x20\x02\x28\x02\x08\x22\x0a\x20\x07\x20\x0a\x48\x1b\x21\x07\x0c\x02\x0b\x02\x40\x20\x06\x0d\x00\x20\x01\x28\x02\x08\x21\x07\x0c\x02\x0b\x20\x02\x28\x02\x08\x21\x07\x0c\x01\x0b\x41\x8f\xcb\x05\x41\xc3\xc5\x05\x41\x9a\x12\x41\xa2\xcb\x05\x10\x4a\x00\x0b\x41\x00\x21\x08\x41\x01\x21\x09\x0c\x01\x0b\x20\x01\x28\x02\x08\x22\x07\x20\x02\x28\x02\x08\x22\x0a\x20\x07\x20\x0a\x4a\x1b\x21\x07\x0b\x20\x00\x20\x07\x41\x01\x20\x07\x41\x01\x4a\x1b\x41\x1f\x6a\x22\x0b\x41\x05\x76\x22\x0c\x10\x98\x09\x0d\x00\x41\x00\x21\x07\x41\x00\x20\x08\x6b\x21\x0d\x41\x00\x20\x05\x6b\x21\x0e\x41\x00\x20\x06\x6b\x21\x0f\x20\x01\x28\x02\x0c\x41\x05\x74\x20\x01\x28\x02\x08\x6b\x21\x05\x20\x02\x28\x02\x0c\x41\x05\x74\x20\x02\x28\x02\x08\x6b\x21\x0a\x41\x00\x21\x06\x02\x40\x03\x40\x20\x06\x20\x0c\x4f\x0d\x01\x20\x00\x28\x02\x10\x20\x07\x6a\x20\x01\x28\x02\x10\x20\x01\x28\x02\x0c\x20\x05\x10\x92\x0a\x20\x0f\x73\x20\x02\x28\x02\x10\x20\x02\x28\x02\x0c\x20\x0a\x10\x92\x0a\x20\x0e\x73\x20\x03\x10\xa8\x0a\x20\x0d\x73\x36\x02\x00\x20\x07\x41\x04\x6a\x21\x07\x20\x05\x41\x20\x6a\x21\x05\x20\x0a\x41\x20\x6a\x21\x0a\x20\x06\x41\x01\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x20\x00\x20\x08\x36\x02\x04\x20\x00\x20\x0b\x41\xe0\xff\xff\xff\x07\x71\x36\x02\x08\x20\x00\x41\xff\xff\xff\xff\x03\x41\x01\x10\x9c\x09\x1a\x41\x00\x21\x06\x20\x09\x0d\x01\x20\x00\x20\x00\x42\x7f\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa5\x09\x45\x0d\x01\x0b\x20\x00\x10\x97\x04\x41\x20\x21\x06\x0b\x02\x40\x20\x01\x20\x04\x47\x0d\x00\x20\x04\x10\x9a\x09\x0b\x02\x40\x20\x02\x20\x04\x41\x18\x6a\x47\x0d\x00\x20\x04\x41\x18\x6a\x10\x9a\x09\x0b\x20\x04\x41\x30\x6a\x24\x00\x20\x06\x0b\x0c\x00\x20\x00\x20\x01\x10\xbc\x02\x41\x01\x48\x0b\x0c\x00\x20\x00\x20\x01\x10\xbc\x02\x41\x1f\x76\x0b\xf7\x02\x02\x03\x7f\x02\x7e\x23\x00\x41\xc0\x00\x6b\x22\x05\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x02\x40\x20\x00\x20\x05\x41\x38\x6a\x20\x03\x29\x03\x00\x10\xbf\x06\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x20\x00\x10\xb8\x02\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x00\x20\x05\x41\x20\x6a\x20\x03\x29\x03\x08\x10\xa4\x09\x22\x03\x0d\x00\x20\x00\x20\x09\x10\xcd\x01\x0c\x01\x0b\x20\x05\x42\x00\x37\x02\x14\x20\x05\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x0c\x20\x05\x20\x00\x28\x02\xd8\x01\x36\x02\x08\x20\x05\x41\x08\x6a\x42\x01\x10\xb9\x02\x1a\x20\x05\x41\x08\x6a\x20\x05\x29\x03\x38\x22\x08\xa7\x22\x06\x41\xff\xff\xff\xff\x03\x41\x01\x10\xba\x02\x1a\x20\x05\x41\x08\x6a\x20\x05\x41\x08\x6a\x42\x7f\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa5\x09\x1a\x20\x09\xa7\x41\x04\x6a\x22\x07\x20\x03\x20\x05\x41\x08\x6a\x10\xaa\x09\x1a\x02\x40\x20\x04\x45\x0d\x00\x20\x08\x50\x0d\x00\x20\x05\x41\x08\x6a\x42\x01\x10\xb9\x02\x1a\x20\x05\x41\x08\x6a\x20\x06\x41\x7f\x6a\x41\xff\xff\xff\xff\x03\x41\x01\x10\xba\x02\x1a\x20\x07\x20\x05\x41\x08\x6a\x10\x93\x04\x41\x00\x48\x0d\x00\x20\x05\x41\x08\x6a\x42\x01\x10\xb9\x02\x1a\x20\x05\x41\x08\x6a\x20\x06\x41\xff\xff\xff\xff\x03\x41\x01\x10\xba\x02\x1a\x20\x07\x20\x07\x20\x05\x41\x08\x6a\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa7\x09\x1a\x0b\x20\x05\x41\x08\x6a\x10\xd7\x02\x20\x00\x20\x03\x20\x05\x41\x20\x6a\x10\xd0\x04\x20\x00\x20\x09\x10\xa6\x09\x21\x08\x0b\x20\x05\x41\xc0\x00\x6a\x24\x00\x20\x08\x0b\xbf\x02\x02\x03\x7f\x04\x7e\x23\x00\x41\x30\x6b\x22\x05\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x02\x40\x20\x00\x10\xb8\x02\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x08\x02\x40\x20\x00\x10\xb8\x02\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x05\x41\x18\x6a\x20\x03\x29\x03\x00\x10\xa4\x09\x22\x06\x45\x0d\x00\x02\x40\x20\x00\x20\x05\x20\x03\x29\x03\x08\x10\xa4\x09\x22\x03\x0d\x00\x20\x00\x20\x06\x20\x05\x41\x18\x6a\x10\xd0\x04\x0c\x01\x0b\x20\x09\xa7\x41\x04\x6a\x20\x0a\xa7\x41\x04\x6a\x20\x06\x20\x03\x20\x04\x41\x0f\x71\x10\xbd\x02\x21\x07\x20\x00\x20\x06\x20\x05\x41\x18\x6a\x10\xd0\x04\x20\x00\x20\x03\x20\x05\x10\xd0\x04\x02\x40\x20\x07\x45\x0d\x00\x20\x00\x20\x07\x10\x86\x04\x0c\x01\x0b\x20\x00\x20\x09\x10\xa6\x09\x21\x09\x02\x40\x20\x04\x41\x10\x71\x45\x0d\x00\x20\x00\x10\x85\x03\x22\x0b\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x0b\x41\x00\x20\x09\x10\xa8\x05\x1a\x20\x00\x20\x0b\x41\x01\x20\x00\x20\x0a\x10\xa6\x09\x10\xa8\x05\x1a\x20\x0b\x21\x08\x0c\x02\x0b\x20\x00\x20\x0a\x10\xcd\x01\x20\x09\x21\x08\x0c\x01\x0b\x20\x00\x20\x09\x10\xcd\x01\x20\x00\x20\x0a\x10\xcd\x01\x0b\x20\x05\x41\x30\x6a\x24\x00\x20\x08\x0b\x8e\x02\x02\x02\x7f\x04\x7e\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x02\x40\x20\x00\x10\xb8\x02\x22\x08\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x07\x20\x00\x10\xb8\x02\x22\x09\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x02\x40\x20\x00\x20\x05\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xa4\x09\x22\x03\x45\x0d\x00\x20\x08\xa7\x41\x04\x6a\x20\x09\xa7\x41\x04\x6a\x20\x03\x10\xb1\x09\x21\x06\x20\x00\x20\x03\x20\x05\x41\x08\x6a\x10\xd0\x04\x02\x40\x20\x06\x41\x6f\x71\x45\x0d\x00\x20\x00\x20\x06\x10\x86\x04\x0c\x01\x0b\x20\x00\x20\x08\x10\xa6\x09\x21\x08\x02\x40\x20\x04\x45\x0d\x00\x20\x00\x10\x85\x03\x22\x0a\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x01\x20\x00\x20\x0a\x41\x00\x20\x08\x10\xa8\x05\x1a\x20\x00\x20\x0a\x41\x01\x20\x00\x20\x09\x10\xa6\x09\x10\xa8\x05\x1a\x20\x0a\x21\x07\x0c\x02\x0b\x20\x00\x20\x09\x10\xcd\x01\x20\x08\x21\x07\x0c\x01\x0b\x20\x00\x20\x08\x10\xcd\x01\x20\x00\x20\x09\x10\xcd\x01\x0b\x20\x05\x41\x20\x6a\x24\x00\x20\x07\x0b\xc3\x02\x01\x02\x7f\x23\x00\x41\x20\x6b\x22\x03\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x28\x02\x0c\x0d\x00\x02\x40\x02\x40\x20\x02\x28\x02\x08\x41\x82\x80\x80\x80\x78\x6a\x22\x04\x41\x01\x4b\x0d\x00\x02\x40\x02\x40\x20\x04\x0e\x02\x01\x00\x01\x0b\x20\x00\x10\x97\x04\x0c\x02\x0b\x20\x02\x28\x02\x04\x0d\x03\x0b\x20\x00\x20\x02\x10\xcc\x04\x1a\x0b\x41\x00\x21\x02\x20\x01\x45\x0d\x03\x20\x01\x42\x00\x10\xb9\x02\x1a\x0c\x03\x0b\x20\x02\x28\x02\x04\x45\x0d\x01\x0b\x20\x00\x10\x97\x04\x41\x01\x21\x02\x20\x01\x45\x0d\x01\x20\x01\x42\x00\x10\xb9\x02\x1a\x0c\x01\x0b\x20\x00\x20\x02\x20\x02\x28\x02\x08\x41\x01\x6a\x41\x02\x6d\x41\x01\x10\xa6\x0a\x20\x00\x41\x01\x10\xcd\x04\x1a\x20\x01\x21\x04\x02\x40\x20\x01\x0d\x00\x20\x03\x42\x00\x37\x02\x14\x20\x03\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x0c\x20\x03\x20\x00\x28\x02\x00\x36\x02\x08\x20\x03\x41\x08\x6a\x21\x04\x0b\x20\x04\x20\x00\x20\x00\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa2\x09\x1a\x20\x04\x20\x04\x28\x02\x04\x41\x01\x73\x36\x02\x04\x20\x04\x20\x04\x20\x02\x41\xff\xff\xff\xff\x03\x41\x01\x10\xbb\x02\x1a\x41\x20\x21\x02\x02\x40\x20\x04\x28\x02\x08\x41\xff\xff\xff\xff\x07\x46\x0d\x00\x20\x04\x28\x02\x0c\x41\x00\x47\x41\x04\x74\x21\x02\x0b\x20\x01\x0d\x00\x20\x04\x10\x9a\x09\x0b\x20\x03\x41\x20\x6a\x24\x00\x20\x02\x0b\xaa\x01\x02\x01\x7f\x01\x7e\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x02\x40\x02\x40\x02\x40\x20\x00\x20\x05\x41\x08\x6a\x20\x03\x29\x03\x00\x10\xa4\x09\x22\x03\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x06\x0c\x01\x0b\x20\x04\x41\x01\x4b\x0d\x01\x02\x40\x02\x40\x02\x40\x20\x04\x0e\x02\x00\x01\x00\x0b\x42\x7f\x21\x06\x20\x03\x28\x02\x04\x0d\x01\x20\x03\x28\x02\x08\x22\x04\x41\x01\x48\x0d\x01\x20\x04\x41\x7f\x6a\xac\x21\x06\x0c\x01\x0b\x42\x7f\x21\x06\x20\x03\x28\x02\x08\x41\x80\x80\x80\x80\x78\x46\x0d\x00\x20\x03\x10\xb3\x09\xac\x21\x06\x0b\x20\x00\x20\x03\x20\x05\x41\x08\x6a\x10\xd0\x04\x20\x00\x20\x06\x10\xf7\x03\x21\x06\x0b\x20\x05\x41\x20\x6a\x24\x00\x20\x06\x0f\x0b\x10\x40\x00\x0b\x5e\x01\x05\x7f\x20\x00\x28\x02\x0c\x22\x01\x41\x05\x74\x21\x02\x41\x00\x21\x03\x41\x00\x21\x04\x03\x7f\x02\x40\x02\x40\x20\x01\x45\x0d\x00\x20\x00\x28\x02\x10\x20\x04\x6a\x28\x02\x00\x22\x05\x45\x0d\x01\x20\x05\x68\x20\x00\x28\x02\x08\x6a\x20\x02\x6b\x21\x03\x0b\x20\x03\x0f\x0b\x20\x01\x41\x7f\x6a\x21\x01\x20\x04\x41\x04\x6a\x21\x04\x20\x02\x41\x60\x6a\x21\x02\x0c\x00\x0b\x0b\x79\x02\x01\x7f\x01\x7e\x02\x40\x20\x00\x20\x01\x10\xb5\x09\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x01\x0f\x0b\x41\x0a\x21\x04\x02\x40\x02\x40\x20\x02\x45\x0d\x00\x20\x03\x29\x03\x00\x22\x05\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x05\x10\x8c\x06\x22\x04\x41\x00\x4e\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x05\x0c\x01\x0b\x20\x00\x20\x01\x20\x04\x10\x95\x09\x21\x05\x0b\x20\x00\x20\x01\x10\xcd\x01\x20\x05\x0b\x6b\x01\x01\x7f\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x7e\x52\x0d\x00\x20\x01\x10\xc0\x01\x0f\x0b\x02\x40\x20\x01\x42\x80\x80\x80\x80\x70\x54\x0d\x00\x20\x01\xa7\x22\x02\x2f\x01\x06\x41\x21\x47\x0d\x00\x20\x02\x29\x03\x20\x22\x01\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x7e\x52\x0d\x00\x20\x01\x10\xc0\x01\x0f\x0b\x20\x00\x41\x96\x98\x03\x41\x00\x10\xb2\x02\x42\x80\x80\x80\x80\xe0\x00\x0b\x09\x00\x20\x00\x20\x01\x10\xb5\x09\x0b\x13\x00\x20\x00\x28\x02\x00\x20\x01\x20\x02\x20\x00\x28\x02\x04\x11\x01\x00\x0b\x0e\x00\x20\x00\x20\x01\x20\x01\x10\x71\x10\xa5\x07\x1a\x0b\xf2\x06\x01\x0f\x7f\x23\x00\x41\xf0\x00\x6b\x22\x05\x24\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x20\x02\x41\x7f\x6a\x22\x06\x71\x0d\x00\x41\x00\x21\x07\x20\x01\x28\x02\x0c\x41\x05\x74\x20\x01\x28\x02\x08\x41\x20\x20\x06\x67\x6b\x22\x08\x6f\x22\x06\x6b\x20\x08\x41\x00\x20\x06\x41\x00\x4a\x1b\x6a\x21\x09\x41\x20\x20\x08\x6d\x22\x0a\x20\x08\x6c\x21\x0b\x20\x01\x21\x0c\x0c\x01\x0b\x20\x02\x10\x9d\x09\x21\x08\x20\x05\x42\x00\x37\x02\x14\x20\x05\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x0c\x20\x05\x20\x01\x28\x02\x00\x36\x02\x08\x20\x05\x41\x08\x6a\x20\x03\x20\x02\x41\xee\xcb\x05\x6a\x2d\x00\x00\x22\x0a\x6a\x41\x7f\x6a\x20\x0a\x6e\x22\x09\x10\x98\x09\x0d\x01\x41\x00\x21\x0d\x20\x05\x28\x02\x08\x22\x0e\x28\x02\x00\x41\x00\x41\x04\x41\xc4\x00\x20\x05\x28\x02\x14\x22\x0f\x41\x7f\x6a\x67\x41\x01\x74\x6b\x20\x0f\x41\x02\x49\x1b\x22\x10\x41\x14\x6c\x20\x0e\x28\x02\x04\x11\x01\x00\x22\x11\x45\x0d\x01\x20\x11\x21\x06\x02\x40\x03\x40\x20\x0d\x20\x10\x4e\x0d\x01\x20\x06\x20\x05\x28\x02\x08\x36\x02\x00\x20\x06\x41\x0c\x6a\x42\x00\x37\x02\x00\x20\x06\x41\x04\x6a\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x00\x20\x06\x41\x14\x6a\x21\x06\x20\x0d\x41\x01\x6a\x21\x0d\x0c\x00\x0b\x00\x0b\x41\x00\x21\x06\x20\x11\x20\x05\x28\x02\x18\x20\x01\x20\x0f\x41\x00\x20\x0f\x20\x08\x41\x00\x41\x20\x20\x08\x41\x7f\x6a\x67\x6b\x20\x08\x41\x02\x49\x1b\x10\xaa\x0a\x21\x0f\x20\x11\x21\x0d\x02\x40\x03\x40\x20\x06\x20\x10\x4e\x0d\x01\x20\x06\x41\x01\x6a\x21\x06\x20\x0d\x10\x9a\x09\x20\x0d\x41\x14\x6a\x21\x0d\x0c\x00\x0b\x00\x0b\x41\x00\x21\x08\x20\x0e\x28\x02\x00\x20\x11\x41\x00\x20\x0e\x28\x02\x04\x11\x01\x00\x1a\x20\x0f\x0d\x01\x20\x09\x20\x0a\x6c\x20\x03\x6b\x21\x07\x20\x05\x41\x08\x6a\x21\x0c\x41\x01\x21\x0b\x0b\x20\x0a\x41\x7f\x6a\x21\x12\x41\x7f\x20\x08\x74\x41\x7f\x73\x21\x11\x20\x05\x41\x20\x6a\x41\x7f\x6a\x21\x0e\x41\x00\x21\x0f\x20\x02\x41\x0a\x46\x21\x13\x20\x0a\x21\x06\x03\x40\x20\x0f\x20\x03\x4f\x0d\x02\x02\x40\x20\x06\x20\x0a\x47\x0d\x00\x20\x09\x20\x0b\x6b\x21\x09\x02\x40\x02\x40\x20\x08\x0d\x00\x41\x00\x21\x06\x02\x40\x20\x0c\x28\x02\x0c\x20\x09\x4d\x0d\x00\x20\x0c\x28\x02\x10\x20\x09\x41\x02\x74\x6a\x28\x02\x00\x21\x06\x0b\x02\x40\x20\x13\x0d\x00\x20\x12\x21\x0d\x03\x40\x20\x0d\x41\x00\x48\x0d\x03\x20\x05\x41\x20\x6a\x20\x0d\x6a\x41\x30\x41\xd7\x00\x20\x06\x20\x06\x20\x02\x6e\x22\x10\x20\x02\x6c\x6b\x22\x06\x41\x0a\x48\x1b\x20\x06\x6a\x3a\x00\x00\x20\x0d\x41\x7f\x6a\x21\x0d\x20\x10\x21\x06\x0c\x00\x0b\x00\x0b\x20\x12\x21\x0d\x03\x40\x20\x0d\x41\x00\x48\x0d\x02\x20\x05\x41\x20\x6a\x20\x0d\x6a\x20\x06\x20\x06\x41\x0a\x6e\x22\x10\x41\x76\x6c\x6a\x41\x30\x72\x3a\x00\x00\x20\x0d\x41\x7f\x6a\x21\x0d\x20\x10\x21\x06\x0c\x00\x0b\x00\x0b\x20\x0c\x28\x02\x10\x20\x0c\x28\x02\x0c\x20\x09\x10\x92\x0a\x21\x0d\x20\x0a\x21\x06\x03\x40\x20\x06\x41\x01\x48\x0d\x01\x20\x0e\x20\x06\x6a\x41\x30\x41\xd7\x00\x20\x0d\x20\x11\x71\x22\x10\x41\x0a\x48\x1b\x20\x10\x6a\x3a\x00\x00\x20\x0d\x20\x08\x76\x21\x0d\x20\x06\x41\x7f\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x20\x07\x21\x06\x41\x00\x21\x07\x0b\x20\x04\x21\x0d\x02\x40\x20\x0f\x20\x04\x49\x0d\x00\x20\x03\x21\x0d\x20\x0f\x20\x04\x47\x0d\x00\x20\x00\x41\x2e\x10\xcd\x02\x20\x03\x21\x0d\x0b\x20\x00\x20\x05\x41\x20\x6a\x20\x06\x6a\x20\x0a\x20\x06\x6b\x22\x10\x20\x0d\x20\x0f\x6b\x22\x0d\x20\x10\x20\x0d\x48\x1b\x22\x0d\x10\xa5\x07\x1a\x20\x0d\x20\x0f\x6a\x21\x0f\x20\x0d\x20\x06\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x20\x00\x41\x01\x36\x02\x0c\x20\x05\x41\x08\x6a\x21\x0c\x0b\x02\x40\x20\x0c\x20\x01\x46\x0d\x00\x20\x0c\x10\x9a\x09\x0b\x20\x05\x41\xf0\x00\x6a\x24\x00\x0b\xd2\x01\x02\x04\x7f\x01\x7e\x20\x00\x20\x00\x41\x1f\x75\x22\x03\x6a\x20\x03\x73\x21\x03\x20\x00\x41\x7f\x73\x41\x1f\x76\x21\x04\x02\x40\x02\x40\x20\x01\x20\x01\x41\x7f\x6a\x22\x05\x71\x0d\x00\x41\x20\x20\x05\x67\x22\x06\x6b\x21\x05\x02\x40\x20\x02\x45\x0d\x00\x41\x1f\x20\x06\x6b\x41\x00\x20\x04\x1b\x20\x03\x6a\x20\x05\x6e\x21\x01\x0c\x02\x0b\x41\x00\x20\x05\x20\x01\x41\x02\x49\x1b\x20\x03\x6c\x21\x01\x0c\x01\x0b\x20\x01\x41\x7e\x6a\x21\x01\x02\x40\x02\x40\x20\x02\x45\x0d\x00\x20\x01\x41\x03\x74\x22\x01\x41\xa4\xcc\x05\x6a\x35\x02\x00\x20\x03\xad\x22\x07\x7e\x42\x20\x88\x20\x01\x41\xa0\xcc\x05\x6a\x35\x02\x00\x20\x07\x7e\x7c\x42\x1f\x88\x21\x07\x0c\x01\x0b\x20\x01\x41\x02\x74\x41\xc0\xce\x05\x6a\x35\x02\x00\x20\x03\xad\x7e\x42\x1d\x88\x21\x07\x0b\x20\x04\x20\x07\xa7\x6a\x21\x01\x0b\x20\x01\x41\x00\x20\x01\x6b\x20\x00\x41\x7f\x4a\x1b\x0b\xa7\x01\x01\x04\x7f\x02\x40\x20\x00\x28\x02\x08\x22\x04\x41\x7e\x71\x41\xfe\xff\xff\xff\x07\x46\x0d\x00\x02\x40\x20\x02\x41\x06\x47\x0d\x00\x20\x01\x20\x03\x48\x0f\x0b\x20\x01\x41\x02\x6a\x20\x03\x4a\x0d\x00\x20\x04\x41\x80\x80\x80\x80\x78\x46\x0d\x00\x20\x00\x28\x02\x10\x22\x05\x20\x00\x28\x02\x0c\x22\x04\x20\x04\x41\x05\x74\x22\x06\x20\x01\x41\x7f\x73\x6a\x10\x82\x0a\x20\x02\x41\x7b\x71\x45\x73\x21\x07\x20\x01\x20\x03\x6b\x41\x01\x6a\x21\x00\x20\x06\x20\x01\x6b\x41\x7e\x6a\x21\x01\x03\x40\x20\x00\x45\x0d\x01\x20\x05\x20\x04\x20\x01\x10\x82\x0a\x21\x02\x20\x00\x41\x01\x6a\x21\x00\x20\x01\x41\x7f\x6a\x21\x01\x20\x02\x20\x07\x46\x0d\x00\x0b\x41\x01\x0f\x0b\x41\x00\x0b\x3e\x01\x01\x7f\x02\x40\x20\x00\x28\x02\x0c\x20\x00\x28\x02\x08\x22\x02\x6b\x41\x00\x4a\x0d\x00\x20\x01\x41\x00\x3a\x00\x00\x20\x00\x10\xbd\x09\x41\x7f\x0f\x0b\x20\x00\x20\x02\x41\x01\x6a\x36\x02\x08\x20\x01\x20\x02\x2d\x00\x00\x3a\x00\x00\x41\x00\x0b\x21\x00\x02\x40\x20\x00\x28\x02\x1c\x0d\x00\x20\x00\x28\x02\x00\x41\xd2\x9a\x03\x41\x00\x10\xc5\x04\x0b\x20\x00\x41\x7f\x36\x02\x1c\x0b\x32\x00\x02\x40\x20\x01\x20\x00\x28\x02\x08\x20\x00\x28\x02\x0c\x10\xd0\x02\x22\x01\x41\x7f\x4a\x0d\x00\x20\x00\x10\xbd\x09\x41\x7f\x0f\x0b\x20\x00\x20\x00\x28\x02\x08\x20\x01\x6a\x36\x02\x08\x41\x00\x0b\xb8\x01\x01\x06\x7f\x23\x00\x41\x10\x6b\x22\x01\x24\x00\x41\x00\x21\x02\x02\x40\x20\x00\x20\x01\x41\x0c\x6a\x10\xbe\x09\x0d\x00\x20\x01\x20\x01\x28\x02\x0c\x22\x03\x41\x01\x76\x22\x04\x36\x02\x0c\x02\x40\x20\x00\x28\x02\x00\x20\x04\x20\x03\x41\x01\x71\x22\x03\x10\xe7\x02\x22\x05\x0d\x00\x20\x00\x41\x7f\x36\x02\x1c\x0c\x01\x0b\x02\x40\x20\x00\x28\x02\x0c\x20\x00\x28\x02\x08\x22\x06\x6b\x20\x04\x20\x03\x74\x22\x04\x4f\x0d\x00\x20\x00\x10\xbd\x09\x20\x00\x28\x02\x00\x28\x02\x10\x20\x05\x10\xb6\x04\x0c\x01\x0b\x20\x05\x41\x10\x6a\x20\x06\x20\x04\x10\x70\x21\x02\x20\x00\x20\x00\x28\x02\x08\x20\x04\x6a\x36\x02\x08\x02\x40\x20\x03\x0d\x00\x20\x02\x20\x04\x6a\x41\x00\x3a\x00\x00\x0b\x20\x05\x21\x02\x0b\x20\x01\x41\x10\x6a\x24\x00\x20\x02\x0b\xe4\x23\x02\x0b\x7f\x03\x7e\x23\x00\x41\x90\x01\x6b\x22\x01\x24\x00\x02\x40\x02\x40\x02\x40\x20\x00\x28\x02\x00\x22\x02\x28\x02\x10\x28\x02\x78\x20\x01\x22\x01\x4d\x0d\x00\x20\x02\x10\xfb\x02\x0c\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x0c\x20\x00\x20\x01\x41\x27\x6a\x10\xbc\x09\x0d\x01\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x2d\x00\x27\x22\x03\x41\x7f\x6a\x22\x04\x41\x14\x4b\x0d\x00\x42\x80\x80\x80\x80\x20\x21\x0c\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x04\x0e\x15\x18\x0e\x00\x00\x01\x02\x03\x06\x07\x0d\x0d\x0d\x07\x04\x05\x08\x09\x0a\x0b\x0c\x10\x18\x0b\x20\x03\x41\x03\x47\xad\x42\x80\x80\x80\x80\x10\x84\x21\x0c\x0c\x17\x0b\x20\x00\x20\x01\x41\x30\x6a\x10\xc1\x09\x0d\x15\x20\x01\x35\x02\x30\x21\x0c\x0c\x16\x0b\x20\x00\x20\x01\x41\x30\x6a\x10\xc2\x09\x0d\x14\x42\x80\x80\x80\x80\xc0\x7e\x20\x01\x29\x03\x30\x22\x0c\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x0c\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x0c\x0c\x15\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x0c\x20\x00\x10\xbf\x09\x22\x00\x45\x0d\x14\x20\x00\xad\x42\x80\x80\x80\x80\x90\x7f\x84\x21\x0c\x0c\x14\x0b\x20\x00\x28\x02\x20\x22\x04\x41\x80\xfe\x03\x71\x45\x0d\x0a\x20\x00\x28\x02\x00\x21\x03\x20\x01\x41\x30\x6a\x41\x04\x72\x41\x00\x41\xd4\x00\x10\x74\x1a\x20\x00\x28\x02\x08\x21\x02\x20\x00\x28\x02\x0c\x21\x05\x20\x01\x41\x01\x36\x02\x30\x02\x40\x20\x05\x20\x02\x6b\x41\x01\x4a\x0d\x00\x20\x00\x10\xbd\x09\x42\x80\x80\x80\x80\x30\x21\x0c\x0c\x12\x0b\x20\x00\x20\x02\x41\x02\x6a\x36\x02\x08\x20\x01\x20\x02\x2f\x00\x00\x41\xff\x1f\x71\x20\x04\x41\x04\x76\x41\x80\x20\x71\x72\x3b\x00\x41\x42\x80\x80\x80\x80\x30\x21\x0c\x20\x00\x20\x01\x41\x2f\x6a\x10\xbc\x09\x0d\x11\x20\x01\x20\x01\x2d\x00\x2f\x3a\x00\x40\x20\x00\x20\x01\x41\xcc\x00\x6a\x10\xc3\x09\x0d\x11\x20\x00\x20\x01\x41\xd8\x00\x6a\x10\xc4\x09\x0d\x11\x20\x00\x20\x01\x41\xda\x00\x6a\x10\xc4\x09\x0d\x11\x20\x00\x20\x01\x41\xdc\x00\x6a\x10\xc4\x09\x0d\x11\x20\x00\x20\x01\x41\xde\x00\x6a\x10\xc4\x09\x0d\x11\x20\x00\x20\x01\x41\xec\x00\x6a\x10\xbe\x09\x0d\x11\x20\x00\x20\x01\x41\xe8\x00\x6a\x10\xbe\x09\x0d\x11\x20\x00\x20\x01\x41\xc8\x00\x6a\x10\xbe\x09\x0d\x11\x20\x00\x20\x01\x41\x28\x6a\x10\xbe\x09\x0d\x11\x20\x03\x41\xd8\x00\x41\xc0\x00\x20\x01\x2f\x00\x41\x22\x02\x41\x80\x08\x71\x1b\x22\x04\x20\x01\x28\x02\x68\x41\x03\x74\x6a\x22\x05\x20\x01\x28\x02\x28\x22\x06\x41\x04\x74\x6a\x22\x07\x20\x01\x28\x02\x6c\x41\x03\x74\x6a\x22\x08\x41\x00\x20\x01\x28\x02\x48\x20\x02\x41\x80\x20\x71\x1b\x6a\x10\xe2\x03\x22\x02\x45\x0d\x12\x20\x02\x20\x01\x41\x30\x6a\x41\xc0\x00\x10\x70\x22\x02\x41\x01\x36\x02\x00\x02\x40\x20\x06\x45\x0d\x00\x20\x02\x20\x02\x20\x05\x6a\x36\x02\x20\x0b\x02\x40\x20\x02\x28\x02\x3c\x22\x09\x45\x0d\x00\x20\x02\x20\x02\x20\x07\x6a\x36\x02\x24\x0b\x02\x40\x20\x02\x28\x02\x38\x45\x0d\x00\x20\x02\x20\x02\x20\x04\x6a\x36\x02\x34\x0b\x20\x03\x28\x02\x10\x21\x04\x20\x02\x41\x01\x3a\x00\x04\x20\x02\x20\x04\x28\x02\x50\x22\x07\x36\x02\x08\x41\x08\x21\x05\x20\x07\x20\x02\x41\x08\x6a\x22\x0a\x36\x02\x04\x20\x04\x20\x0a\x36\x02\x50\x20\x02\x20\x04\x41\xd0\x00\x6a\x36\x02\x0c\x20\x02\xad\x42\x80\x80\x80\x80\x60\x84\x21\x0c\x02\x40\x20\x06\x45\x0d\x00\x41\x00\x21\x09\x02\x40\x03\x40\x20\x09\x20\x06\x4e\x0d\x01\x20\x00\x20\x02\x28\x02\x20\x20\x05\x6a\x22\x04\x41\x78\x6a\x10\xc3\x09\x0d\x14\x20\x00\x20\x04\x41\x7c\x6a\x10\xbe\x09\x0d\x14\x20\x00\x20\x04\x10\xbe\x09\x0d\x14\x20\x04\x20\x04\x28\x02\x00\x41\x7f\x6a\x36\x02\x00\x20\x00\x20\x01\x41\x2f\x6a\x10\xbc\x09\x0d\x14\x20\x04\x41\x04\x6a\x22\x04\x20\x01\x2d\x00\x2f\x22\x07\x41\x03\x74\x41\xf8\x00\x71\x20\x04\x28\x02\x00\x41\x80\x7f\x71\x72\x20\x07\x41\x04\x76\x22\x04\x41\x01\x71\x72\x20\x04\x41\x02\x71\x72\x20\x04\x41\x04\x71\x72\x36\x02\x00\x20\x05\x41\x10\x6a\x21\x05\x20\x09\x41\x01\x6a\x21\x09\x0c\x00\x0b\x00\x0b\x20\x02\x28\x02\x3c\x21\x09\x0b\x02\x40\x20\x09\x45\x0d\x00\x41\x00\x21\x04\x41\x04\x21\x05\x03\x40\x20\x04\x20\x09\x4e\x0d\x01\x20\x00\x20\x02\x28\x02\x24\x20\x05\x6a\x22\x09\x10\xc3\x09\x0d\x13\x20\x00\x20\x01\x41\x8c\x01\x6a\x10\xbe\x09\x0d\x13\x20\x09\x41\x7e\x6a\x20\x01\x28\x02\x8c\x01\x3b\x01\x00\x20\x00\x20\x01\x41\x2f\x6a\x10\xbc\x09\x0d\x13\x20\x09\x41\x7c\x6a\x20\x01\x2d\x00\x2f\x3a\x00\x00\x20\x05\x41\x08\x6a\x21\x05\x20\x04\x41\x01\x6a\x21\x04\x20\x02\x28\x02\x3c\x21\x09\x0c\x00\x0b\x00\x0b\x20\x02\x28\x02\x18\x21\x06\x02\x40\x02\x40\x20\x00\x41\x22\x6a\x2d\x00\x00\x45\x0d\x00\x02\x40\x20\x00\x28\x02\x0c\x20\x00\x28\x02\x08\x22\x07\x6b\x20\x06\x4f\x0d\x00\x20\x00\x10\xbd\x09\x0c\x14\x0b\x20\x00\x20\x07\x20\x06\x6a\x36\x02\x08\x0c\x01\x0b\x20\x00\x20\x02\x20\x08\x6a\x22\x07\x20\x06\x10\xc5\x09\x0d\x12\x0b\x20\x02\x20\x07\x36\x02\x14\x41\x00\x21\x04\x20\x00\x41\x22\x6a\x21\x08\x02\x40\x03\x40\x20\x04\x20\x06\x4f\x0d\x01\x02\x40\x20\x07\x20\x04\x6a\x22\x09\x2d\x00\x00\x22\x05\x41\x0f\x6a\x20\x05\x20\x05\x41\xb3\x01\x4b\x1b\x41\x02\x74\x22\x05\x41\x93\xb9\x01\x6a\x2d\x00\x00\x41\x69\x6a\x41\x04\x4b\x0d\x00\x20\x09\x28\x00\x01\x21\x0a\x02\x40\x20\x08\x2d\x00\x00\x45\x0d\x00\x20\x00\x28\x02\x00\x20\x0a\x10\xd9\x03\x1a\x0c\x01\x0b\x02\x40\x20\x00\x20\x01\x41\x8c\x01\x6a\x20\x0a\x10\xc6\x09\x45\x0d\x00\x20\x02\x20\x04\x36\x02\x18\x0c\x15\x0b\x20\x09\x20\x01\x28\x02\x8c\x01\x36\x00\x01\x0b\x20\x04\x20\x05\x41\x90\xb9\x01\x6a\x2d\x00\x00\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x02\x40\x20\x02\x41\x12\x6a\x2d\x00\x00\x41\x04\x71\x45\x0d\x00\x20\x00\x20\x02\x41\xc0\x00\x6a\x10\xc3\x09\x0d\x12\x20\x00\x20\x02\x41\xc4\x00\x6a\x10\xbe\x09\x0d\x12\x20\x00\x20\x02\x41\xcc\x00\x6a\x22\x04\x10\xbe\x09\x0d\x12\x20\x04\x28\x02\x00\x22\x05\x45\x0d\x00\x20\x02\x20\x03\x20\x05\x10\xe2\x03\x22\x05\x36\x02\x50\x20\x05\x45\x0d\x12\x20\x00\x20\x05\x20\x04\x28\x02\x00\x10\xc5\x09\x0d\x12\x0b\x02\x40\x20\x02\x28\x02\x38\x22\x09\x45\x0d\x00\x41\x00\x21\x05\x41\x00\x21\x04\x03\x40\x20\x04\x20\x09\x4e\x0d\x01\x20\x00\x10\xc0\x09\x22\x0d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x13\x20\x02\x28\x02\x34\x20\x05\x6a\x20\x0d\x37\x03\x00\x20\x05\x41\x08\x6a\x21\x05\x20\x04\x41\x01\x6a\x21\x04\x20\x02\x28\x02\x38\x21\x09\x0c\x00\x0b\x00\x0b\x20\x02\x20\x03\x36\x02\x30\x20\x03\x20\x03\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x0c\x13\x0b\x20\x00\x41\x21\x6a\x2d\x00\x00\x45\x0d\x09\x20\x00\x28\x02\x00\x21\x04\x42\x80\x80\x80\x80\xe0\x00\x21\x0c\x20\x00\x20\x01\x41\x30\x6a\x10\xc3\x09\x0d\x12\x20\x04\x20\x01\x28\x02\x30\x10\xfb\x06\x22\x02\x45\x0d\x12\x20\x02\xad\x42\x80\x80\x80\x80\x50\x84\x10\xc0\x01\x21\x0c\x02\x40\x20\x00\x20\x02\x41\x14\x6a\x22\x06\x10\xbe\x09\x0d\x00\x02\x40\x20\x06\x28\x02\x00\x22\x03\x45\x0d\x00\x20\x02\x20\x03\x36\x02\x18\x20\x02\x20\x04\x20\x03\x41\x03\x74\x10\xe2\x03\x22\x03\x36\x02\x10\x20\x03\x45\x0d\x01\x41\x00\x21\x03\x41\x7f\x21\x05\x03\x40\x20\x05\x41\x01\x6a\x22\x05\x20\x06\x28\x02\x00\x4e\x0d\x01\x20\x02\x28\x02\x10\x20\x03\x6a\x21\x09\x20\x03\x41\x08\x6a\x21\x03\x20\x00\x20\x09\x10\xc3\x09\x45\x0d\x00\x0c\x02\x0b\x00\x0b\x20\x00\x20\x02\x41\x20\x6a\x22\x09\x10\xbe\x09\x0d\x00\x02\x40\x20\x09\x28\x02\x00\x22\x03\x45\x0d\x00\x20\x02\x20\x03\x36\x02\x24\x20\x02\x20\x04\x20\x03\x41\x14\x6c\x10\xe2\x03\x22\x03\x36\x02\x1c\x20\x03\x45\x0d\x01\x41\x7f\x21\x06\x41\x08\x21\x05\x03\x40\x20\x06\x41\x01\x6a\x22\x06\x20\x09\x28\x02\x00\x4e\x0d\x01\x20\x02\x28\x02\x1c\x21\x03\x20\x00\x20\x01\x41\x8c\x01\x6a\x10\xbc\x09\x0d\x02\x20\x03\x20\x05\x6a\x22\x03\x20\x01\x2d\x00\x8c\x01\x22\x07\x36\x02\x00\x20\x00\x20\x03\x41\x78\x6a\x10\xbe\x09\x21\x0a\x02\x40\x02\x40\x20\x07\x0d\x00\x20\x0a\x45\x0d\x01\x0c\x04\x0b\x20\x0a\x0d\x03\x20\x00\x20\x03\x41\x04\x6a\x10\xc3\x09\x0d\x03\x0b\x20\x05\x41\x14\x6a\x21\x05\x20\x00\x20\x03\x41\x08\x6a\x10\xc3\x09\x45\x0d\x00\x0c\x02\x0b\x00\x0b\x20\x00\x20\x02\x41\x2c\x6a\x22\x06\x10\xbe\x09\x0d\x00\x02\x40\x20\x06\x28\x02\x00\x22\x03\x45\x0d\x00\x20\x02\x20\x03\x36\x02\x30\x20\x02\x20\x04\x20\x03\x41\x02\x74\x10\xe2\x03\x22\x03\x36\x02\x28\x20\x03\x45\x0d\x01\x41\x00\x21\x03\x41\x7f\x21\x05\x03\x40\x20\x05\x41\x01\x6a\x22\x05\x20\x06\x28\x02\x00\x4e\x0d\x01\x20\x02\x28\x02\x28\x20\x03\x6a\x21\x09\x20\x03\x41\x04\x6a\x21\x03\x20\x00\x20\x09\x10\xbe\x09\x45\x0d\x00\x0c\x02\x0b\x00\x0b\x20\x00\x20\x02\x41\x38\x6a\x22\x09\x10\xbe\x09\x0d\x00\x02\x40\x20\x09\x28\x02\x00\x22\x03\x45\x0d\x00\x20\x02\x20\x03\x36\x02\x3c\x20\x02\x20\x04\x20\x03\x41\x0c\x6c\x10\xe2\x03\x22\x03\x36\x02\x34\x20\x03\x45\x0d\x01\x41\x00\x21\x03\x41\x7f\x21\x06\x03\x40\x20\x06\x41\x01\x6a\x22\x06\x20\x09\x28\x02\x00\x4e\x0d\x01\x20\x00\x20\x02\x28\x02\x34\x20\x03\x6a\x22\x05\x10\xbe\x09\x0d\x02\x20\x00\x20\x05\x41\x04\x6a\x10\xc3\x09\x0d\x02\x20\x03\x41\x0c\x6a\x21\x03\x20\x00\x20\x05\x41\x08\x6a\x10\xbe\x09\x45\x0d\x00\x0c\x02\x0b\x00\x0b\x20\x02\x20\x00\x10\xc0\x09\x22\x0d\x37\x03\x48\x20\x0d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x13\x0b\x20\x04\x20\x02\x10\xe3\x02\x0c\x11\x0b\x02\x40\x20\x00\x20\x00\x28\x02\x00\x22\x02\x10\xc1\x01\x22\x0c\x10\xc7\x09\x0d\x00\x20\x00\x20\x01\x41\x30\x6a\x10\xbe\x09\x0d\x00\x20\x01\x28\x02\x30\x41\x01\x6a\x21\x03\x03\x40\x20\x03\x41\x7f\x6a\x22\x03\x45\x0d\x13\x20\x00\x20\x01\x41\x8c\x01\x6a\x10\xc3\x09\x0d\x01\x20\x00\x10\xc0\x09\x21\x0d\x20\x01\x28\x02\x8c\x01\x21\x04\x02\x40\x20\x0d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x52\x0d\x00\x20\x02\x20\x04\x10\xe4\x02\x0c\x02\x0b\x20\x02\x20\x0c\x20\x04\x20\x0d\x41\x07\x10\xc4\x01\x21\x05\x20\x02\x20\x04\x10\xe4\x02\x20\x05\x41\x7f\x4a\x0d\x00\x0b\x0b\x20\x02\x20\x0c\x10\xcd\x01\x0c\x10\x0b\x20\x00\x20\x00\x28\x02\x00\x22\x04\x10\x85\x03\x22\x0c\x10\xc7\x09\x0d\x0d\x20\x00\x20\x01\x41\x30\x6a\x10\xbe\x09\x0d\x0d\x41\x04\x41\x07\x20\x03\x41\x0d\x46\x1b\x21\x06\x20\x01\x28\x02\x30\x21\x09\x41\x00\x21\x02\x02\x40\x03\x40\x20\x09\x20\x02\x46\x0d\x01\x20\x00\x10\xc0\x09\x22\x0d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x0f\x20\x04\x20\x0c\x20\x02\x20\x0d\x20\x06\x10\x80\x03\x21\x05\x20\x02\x41\x01\x6a\x21\x02\x20\x05\x41\x00\x4e\x0d\x00\x0c\x0f\x0b\x00\x0b\x20\x03\x41\x0d\x47\x0d\x10\x02\x40\x20\x00\x10\xc0\x09\x22\x0e\x42\x80\x80\x80\x80\x70\x83\x22\x0d\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x0d\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x0e\x20\x04\x20\x0c\x41\xf0\x00\x20\x0e\x41\x00\x10\xc4\x01\x41\x00\x48\x0d\x0e\x0b\x20\x04\x20\x0c\x10\xa4\x05\x1a\x0c\x10\x0b\x20\x00\x28\x02\x00\x21\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x0c\x20\x00\x20\x01\x41\x2f\x6a\x10\xbc\x09\x0d\x0f\x02\x40\x20\x01\x2d\x00\x2f\x22\x04\x41\x0b\x49\x0d\x00\x20\x02\x41\xe1\x98\x03\x41\x00\x10\xb2\x02\x0c\x10\x0b\x20\x00\x20\x01\x41\x28\x6a\x10\xbe\x09\x0d\x0f\x20\x00\x20\x01\x41\x8c\x01\x6a\x10\xbe\x09\x0d\x0f\x20\x00\x28\x02\x28\x21\x03\x42\x80\x80\x80\x80\x30\x21\x0c\x42\x80\x80\x80\x80\x30\x21\x0d\x02\x40\x20\x00\x41\x00\x10\xc8\x09\x0d\x00\x42\x80\x80\x80\x80\xe0\x00\x21\x0c\x20\x00\x10\xc0\x09\x22\x0d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x10\x20\x02\x20\x0d\x10\xbc\x08\x45\x0d\x0c\x20\x01\x20\x0d\x37\x03\x30\x02\x40\x02\x40\x20\x01\x28\x02\x8c\x01\x22\x05\x41\x7f\x4c\x0d\x00\x20\x05\xad\x21\x0c\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x05\xb8\xbd\x22\x0c\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x0c\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x0c\x0b\x20\x01\x20\x0c\x37\x03\x38\x02\x40\x02\x40\x20\x01\x28\x02\x28\x22\x05\x41\x7f\x4c\x0d\x00\x20\x05\xad\x21\x0c\x0c\x01\x0b\x42\x80\x80\x80\x80\xc0\x7e\x20\x05\xb8\xbd\x22\x0c\x42\x80\x80\x80\x80\xc0\xfe\xff\x83\x80\x7f\x7c\x20\x0c\x42\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x83\x42\x80\x80\x80\x80\x80\x80\x80\xf8\xff\x00\x56\x1b\x21\x0c\x0b\x20\x01\x20\x0c\x37\x03\x40\x20\x02\x42\x80\x80\x80\x80\x30\x41\x03\x20\x01\x41\x30\x6a\x20\x04\x41\x15\x6a\x10\xed\x01\x22\x0c\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x28\x02\x20\x41\x80\x80\x80\x08\x49\x0d\x0c\x20\x00\x28\x02\x24\x20\x03\x41\x02\x74\x6a\x20\x0c\x3e\x02\x00\x0c\x0c\x0b\x20\x02\x20\x0d\x10\xcd\x01\x20\x02\x20\x0c\x10\xcd\x01\x0c\x0e\x0b\x20\x00\x28\x02\x00\x21\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x0c\x20\x00\x20\x01\x41\x30\x6a\x10\xbe\x09\x0d\x0e\x02\x40\x20\x00\x28\x02\x0c\x20\x00\x28\x02\x08\x22\x03\x6b\x20\x01\x28\x02\x30\x22\x04\x4f\x0d\x00\x20\x00\x10\xbd\x09\x0c\x0f\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x0c\x02\x40\x20\x02\x42\x80\x80\x80\x80\x30\x20\x04\xad\x41\x13\x20\x03\x41\xf7\x00\x41\x01\x10\xc4\x06\x22\x0d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x0d\x10\xc7\x09\x0d\x00\x20\x00\x20\x00\x28\x02\x08\x20\x04\x6a\x36\x02\x08\x20\x0d\x21\x0c\x0c\x0f\x0b\x20\x02\x20\x0d\x10\xcd\x01\x0c\x0e\x0b\x20\x00\x2d\x00\x20\x45\x0d\x04\x20\x02\x28\x02\x10\x41\xc0\x01\x6a\x28\x02\x00\x45\x0d\x04\x20\x00\x28\x02\x00\x21\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x0c\x20\x00\x20\x01\x41\x8c\x01\x6a\x10\xbe\x09\x0d\x0d\x20\x00\x20\x01\x41\x30\x6a\x10\xc2\x09\x0d\x0d\x42\x80\x80\x80\x80\xe0\x00\x21\x0c\x02\x40\x20\x02\x42\x80\x80\x80\x80\x30\x20\x01\x35\x02\x8c\x01\x41\x14\x20\x01\x28\x02\x30\x41\x00\x41\x00\x10\xc4\x06\x22\x0d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x0d\x10\xc7\x09\x0d\x00\x20\x0d\x21\x0c\x0c\x0e\x0b\x20\x02\x20\x0d\x10\xcd\x01\x0c\x0d\x0b\x20\x00\x28\x02\x00\x21\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x0c\x42\x80\x80\x80\x80\x30\x21\x0e\x20\x00\x10\xc0\x09\x22\x0d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x07\x02\x40\x20\x0d\x42\x20\x88\xa7\x22\x04\x45\x0d\x00\x20\x04\x41\x0b\x6a\x41\x11\x4b\x0d\x00\x20\x02\x41\xf5\x98\x03\x41\x00\x10\xb2\x02\x0c\x08\x0b\x20\x02\x20\x02\x28\x02\x28\x29\x03\x50\x41\x0a\x10\xc6\x01\x22\x0e\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x07\x20\x00\x20\x0e\x10\xc7\x09\x0d\x07\x20\x02\x20\x0e\x20\x0d\x10\xd7\x01\x20\x0e\x21\x0c\x0c\x0c\x0b\x20\x00\x28\x02\x00\x21\x02\x42\x80\x80\x80\x80\xe0\x00\x21\x0c\x42\x80\x80\x80\x80\x30\x21\x0d\x02\x40\x20\x00\x10\xc0\x09\x22\x0e\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x02\x20\x0e\x10\xfe\x02\x22\x0d\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\xe0\x00\x51\x0d\x00\x20\x00\x20\x0d\x10\xc7\x09\x0d\x00\x20\x02\x20\x0e\x10\xcd\x01\x20\x0d\x21\x0c\x0c\x0c\x0b\x20\x02\x20\x0e\x10\xcd\x01\x20\x02\x20\x0d\x10\xcd\x01\x0c\x0b\x0b\x02\x40\x20\x00\x28\x02\x00\x22\x04\x41\x18\x10\xc0\x02\x22\x02\x0d\x00\x42\x80\x80\x80\x80\x30\x21\x0c\x0c\x05\x0b\x20\x02\x41\x01\x36\x02\x00\x20\x02\x42\x00\x37\x02\x10\x20\x02\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x08\x20\x02\x20\x04\x28\x02\xd8\x01\x36\x02\x04\x20\x03\x41\x18\x74\x41\x80\x80\x80\xb0\x7f\x6a\x41\x18\x75\x41\x03\x74\x41\x98\x99\x03\x6a\x29\x03\x00\x20\x02\xad\x84\x21\x0c\x20\x00\x20\x01\x41\x30\x6a\x10\xc1\x09\x0d\x04\x20\x02\x20\x01\x28\x02\x30\x22\x05\x41\x01\x71\x36\x02\x08\x20\x01\x20\x05\x41\x01\x75\x22\x04\x36\x02\x30\x02\x40\x20\x04\x41\x02\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x04\x0e\x03\x00\x01\x02\x00\x0b\x20\x02\x41\x80\x80\x80\x80\x78\x36\x02\x0c\x0c\x0d\x0b\x20\x02\x41\xfe\xff\xff\xff\x07\x36\x02\x0c\x0c\x0c\x0b\x20\x02\x41\xff\xff\xff\xff\x07\x36\x02\x0c\x0c\x0b\x0b\x20\x02\x20\x04\x41\x7d\x6a\x20\x04\x20\x05\x41\x05\x4a\x1b\x22\x04\x36\x02\x0c\x20\x04\x41\x82\x80\x80\x80\x78\x6a\x41\x03\x49\x0d\x0a\x20\x00\x20\x01\x41\x8c\x01\x6a\x10\xbe\x09\x0d\x04\x02\x40\x20\x01\x28\x02\x8c\x01\x22\x04\x0d\x00\x20\x00\x28\x02\x00\x41\xb0\x99\x03\x41\x00\x10\xc2\x02\x0c\x05\x0b\x20\x02\x41\x04\x6a\x21\x05\x02\x40\x02\x40\x20\x03\x41\x0c\x46\x0d\x00\x20\x04\x41\x03\x6a\x41\x02\x76\x21\x07\x0c\x01\x0b\x20\x04\x41\x08\x6a\x41\x09\x6e\x21\x07\x0b\x02\x40\x20\x05\x20\x07\x10\x98\x09\x45\x0d\x00\x20\x00\x28\x02\x00\x10\xc1\x02\x0c\x05\x0b\x20\x03\x41\x0c\x47\x0d\x03\x41\x00\x21\x08\x41\x09\x20\x04\x41\x09\x70\x22\x04\x6b\x41\x00\x20\x04\x1b\x21\x0b\x41\x00\x21\x09\x03\x40\x20\x08\x20\x07\x46\x0d\x0b\x41\x00\x21\x06\x41\x00\x20\x0b\x20\x08\x1b\x22\x04\x41\x02\x74\x41\xb0\xcb\x05\x6a\x21\x03\x02\x40\x03\x40\x20\x04\x41\x08\x4b\x0d\x01\x02\x40\x02\x40\x20\x09\x0d\x00\x20\x00\x20\x01\x41\x28\x6a\x10\xbc\x09\x0d\x09\x20\x01\x2d\x00\x28\x22\x0a\x41\x0f\x71\x21\x05\x41\x01\x21\x09\x0c\x01\x0b\x20\x0a\x41\xf0\x01\x71\x41\x04\x76\x21\x05\x41\x00\x21\x09\x0b\x02\x40\x20\x05\x41\x0a\x4f\x0d\x00\x20\x04\x41\x01\x6a\x21\x04\x20\x03\x28\x02\x00\x20\x05\x6c\x20\x06\x6a\x21\x06\x20\x03\x41\x04\x6a\x21\x03\x0c\x01\x0b\x0b\x20\x00\x28\x02\x00\x41\xc6\x99\x03\x41\x00\x10\xc2\x02\x0c\x06\x0b\x20\x02\x28\x02\x14\x20\x08\x41\x02\x74\x6a\x20\x06\x36\x02\x00\x20\x08\x41\x01\x6a\x21\x08\x0c\x00\x0b\x00\x0b\x42\x80\x80\x80\x80\x30\x21\x0c\x0c\x09\x0b\x20\x00\x28\x02\x04\x21\x04\x20\x00\x28\x02\x08\x21\x00\x20\x01\x20\x03\x36\x02\x00\x20\x01\x20\x00\x20\x04\x6b\x36\x02\x04\x20\x02\x41\x9a\x9a\x03\x20\x01\x10\xc5\x04\x0c\x07\x0b\x02\x40\x20\x00\x28\x02\x20\x41\xff\xff\xff\x07\x4b\x0d\x00\x20\x02\x41\xd4\x99\x03\x41\x00\x10\xc5\x04\x0c\x07\x0b\x20\x00\x20\x01\x41\x30\x6a\x10\xbe\x09\x0d\x06\x02\x40\x20\x01\x28\x02\x30\x22\x04\x20\x00\x28\x02\x28\x22\x03\x49\x0d\x00\x20\x01\x20\x03\x36\x02\x14\x20\x01\x20\x04\x36\x02\x10\x20\x02\x41\xf6\x99\x03\x20\x01\x41\x10\x6a\x10\xc5\x04\x0c\x07\x0b\x20\x00\x28\x02\x24\x20\x04\x41\x02\x74\x6a\x35\x02\x00\x42\x80\x80\x80\x80\x70\x84\x10\xc0\x01\x21\x0c\x0c\x07\x0b\x02\x40\x02\x40\x20\x04\x41\x03\x71\x22\x04\x0d\x00\x41\x00\x21\x04\x0c\x01\x0b\x41\x20\x20\x04\x41\x03\x74\x6b\x21\x03\x41\x00\x21\x05\x02\x40\x03\x40\x20\x04\x45\x0d\x01\x20\x00\x20\x01\x41\x28\x6a\x10\xbc\x09\x0d\x03\x20\x04\x41\x7f\x6a\x21\x04\x20\x01\x2d\x00\x28\x20\x03\x74\x20\x05\x72\x21\x05\x20\x03\x41\x08\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x02\x28\x02\x14\x20\x05\x36\x02\x00\x41\x01\x21\x04\x0b\x20\x04\x41\x02\x74\x21\x03\x03\x40\x20\x04\x20\x07\x4f\x0d\x07\x02\x40\x20\x00\x28\x02\x0c\x20\x00\x28\x02\x08\x22\x05\x6b\x41\x03\x4a\x0d\x00\x20\x00\x10\xbd\x09\x0c\x02\x0b\x20\x00\x20\x05\x41\x04\x6a\x36\x02\x08\x20\x02\x28\x02\x14\x20\x03\x6a\x20\x05\x28\x00\x00\x36\x02\x00\x20\x03\x41\x04\x6a\x21\x03\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x00\x20\x0c\x10\xcd\x01\x0c\x04\x0b\x20\x02\x20\x0d\x10\xcd\x01\x20\x02\x20\x0e\x10\xcd\x01\x0c\x04\x0b\x20\x02\x20\x0d\x10\xcd\x01\x0c\x03\x0b\x20\x04\x20\x0c\x10\xcd\x01\x0c\x01\x0b\x20\x03\x20\x0c\x10\xcd\x01\x0b\x42\x80\x80\x80\x80\xe0\x00\x21\x0c\x0b\x20\x01\x41\x90\x01\x6a\x24\x00\x20\x0c\x0b\x32\x00\x02\x40\x20\x01\x20\x00\x28\x02\x08\x20\x00\x28\x02\x0c\x10\xd1\x02\x22\x01\x41\x7f\x4a\x0d\x00\x20\x00\x10\xbd\x09\x41\x7f\x0f\x0b\x20\x00\x20\x00\x28\x02\x08\x20\x01\x6a\x36\x02\x08\x41\x00\x0b\x3e\x01\x01\x7f\x02\x40\x20\x00\x28\x02\x0c\x20\x00\x28\x02\x08\x22\x02\x6b\x41\x07\x4a\x0d\x00\x20\x01\x42\x00\x37\x03\x00\x20\x00\x10\xbd\x09\x41\x7f\x0f\x0b\x20\x00\x20\x02\x41\x08\x6a\x36\x02\x08\x20\x01\x20\x02\x29\x00\x00\x37\x03\x00\x41\x00\x0b\x5f\x01\x03\x7f\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x41\x7f\x21\x03\x02\x40\x20\x00\x20\x02\x41\x0c\x6a\x10\xbe\x09\x0d\x00\x20\x02\x28\x02\x0c\x22\x03\x41\x01\x76\x21\x04\x02\x40\x20\x03\x41\x01\x71\x45\x0d\x00\x20\x01\x20\x04\x41\x80\x80\x80\x80\x78\x72\x36\x02\x00\x41\x00\x21\x03\x0c\x01\x0b\x20\x00\x20\x01\x20\x04\x10\xc6\x09\x21\x03\x0b\x20\x02\x41\x10\x6a\x24\x00\x20\x03\x0b\x36\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x20\x00\x20\x02\x41\x0c\x6a\x10\xbe\x09\x21\x00\x20\x01\x41\x00\x20\x02\x2f\x01\x0c\x20\x00\x1b\x3b\x01\x00\x20\x02\x41\x10\x6a\x24\x00\x41\x7f\x41\x00\x20\x00\x1b\x0b\x49\x01\x01\x7f\x02\x40\x20\x02\x45\x0d\x00\x02\x40\x02\x40\x20\x01\x45\x0d\x00\x20\x00\x28\x02\x0c\x20\x00\x28\x02\x08\x22\x03\x6b\x20\x02\x4f\x0d\x01\x0b\x20\x00\x10\xbd\x09\x41\x7f\x0f\x0b\x20\x01\x20\x03\x20\x02\x10\x70\x1a\x20\x00\x20\x00\x28\x02\x08\x20\x02\x6a\x36\x02\x08\x0b\x41\x00\x0b\xa8\x01\x01\x04\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x41\x00\x21\x04\x02\x40\x02\x40\x20\x02\x41\x00\x48\x0d\x00\x02\x40\x20\x00\x28\x02\x10\x22\x05\x20\x02\x4d\x0d\x00\x20\x00\x28\x02\x00\x20\x02\x10\xd9\x03\x21\x02\x0c\x01\x0b\x20\x00\x28\x02\x00\x21\x06\x02\x40\x20\x02\x20\x05\x6b\x22\x02\x20\x00\x28\x02\x14\x49\x0d\x00\x20\x03\x20\x00\x28\x02\x08\x20\x00\x28\x02\x04\x6b\x36\x02\x00\x20\x06\x41\xb6\x9a\x03\x20\x03\x10\xc5\x04\x20\x01\x41\x00\x36\x02\x00\x41\x7f\x21\x04\x20\x00\x41\x7f\x36\x02\x1c\x0c\x02\x0b\x20\x06\x20\x00\x28\x02\x18\x20\x02\x41\x02\x74\x6a\x28\x02\x00\x10\xd9\x03\x21\x02\x0b\x20\x01\x20\x02\x36\x02\x00\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x04\x0b\x0a\x00\x20\x00\x20\x01\xa7\x10\xc8\x09\x0b\x5f\x01\x01\x7f\x41\x00\x21\x02\x02\x40\x20\x00\x28\x02\x20\x41\x80\x80\x80\x08\x49\x0d\x00\x41\x7f\x21\x02\x20\x00\x28\x02\x00\x20\x00\x41\x24\x6a\x41\x04\x20\x00\x41\x2c\x6a\x20\x00\x28\x02\x28\x41\x01\x6a\x10\xc3\x04\x0d\x00\x20\x00\x20\x00\x28\x02\x28\x22\x02\x41\x01\x6a\x36\x02\x28\x20\x00\x28\x02\x24\x20\x02\x41\x02\x74\x6a\x20\x01\x36\x02\x00\x41\x00\x21\x02\x0b\x20\x02\x0b\x3d\x01\x01\x7f\x02\x40\x02\x40\x20\x00\x41\x50\x6a\x22\x01\x41\x0a\x49\x0d\x00\x20\x00\x41\xbf\x7f\x6a\x41\x05\x4b\x0d\x01\x20\x00\x41\x49\x6a\x21\x01\x0b\x20\x01\x0f\x0b\x20\x00\x41\xa9\x7f\x6a\x41\x7f\x20\x00\x41\x9f\x7f\x6a\x41\x06\x49\x1b\x0b\xcc\x23\x01\x17\x7f\x23\x00\x41\xd0\x02\x6b\x22\x02\x24\x00\x41\x0c\x20\x01\x6b\x21\x03\x20\x01\x41\x0b\x6a\x21\x04\x20\x00\x41\xc4\x00\x6a\x21\x05\x20\x01\x41\x13\x6a\x21\x06\x20\x00\x41\xdc\x00\x6a\x21\x07\x20\x00\x28\x02\x04\x21\x08\x41\x00\x21\x09\x20\x00\x41\xc8\x00\x6a\x21\x0a\x02\x40\x02\x40\x02\x40\x03\x40\x20\x00\x28\x02\x18\x22\x0b\x20\x00\x28\x02\x1c\x4f\x0d\x03\x20\x0b\x2d\x00\x00\x22\x0c\x41\x29\x46\x0d\x03\x20\x0c\x41\xfc\x00\x46\x0d\x03\x20\x00\x28\x02\x04\x21\x0d\x20\x02\x20\x0b\x36\x02\x14\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x0b\x2d\x00\x00\x22\x0c\x41\xa5\x7f\x6a\x22\x0e\x41\x03\x4d\x0d\x00\x20\x0c\x41\x5c\x6a\x22\x0e\x41\x0a\x4d\x0d\x01\x02\x40\x20\x0c\x41\x85\x7f\x6a\x22\x0e\x41\x02\x4d\x0d\x00\x20\x0c\x41\x3f\x46\x0d\x08\x0c\x0e\x0b\x02\x40\x20\x0e\x0e\x03\x00\x0e\x04\x00\x0b\x02\x40\x20\x00\x28\x02\x28\x45\x0d\x00\x20\x00\x41\xa7\x9d\x03\x41\x00\x10\x85\x08\x0c\x15\x0b\x20\x0b\x2d\x00\x01\x41\x50\x6a\x41\x09\x4b\x0d\x0d\x20\x02\x20\x0b\x41\x01\x6a\x36\x02\x50\x20\x02\x41\xd0\x00\x6a\x41\x01\x10\xcc\x09\x1a\x02\x40\x20\x02\x28\x02\x50\x22\x0c\x2d\x00\x00\x22\x0b\x41\x2c\x47\x0d\x00\x20\x02\x20\x0c\x41\x01\x6a\x36\x02\x50\x20\x0c\x2d\x00\x01\x22\x0b\x41\x50\x6a\x41\x09\x4b\x0d\x00\x20\x02\x41\xd0\x00\x6a\x41\x01\x10\xcc\x09\x1a\x20\x02\x28\x02\x50\x2d\x00\x00\x21\x0b\x0b\x20\x0b\x41\xff\x01\x71\x41\xfd\x00\x47\x0d\x0d\x0c\x07\x0b\x20\x0e\x0e\x04\x03\x04\x02\x01\x03\x0b\x20\x0e\x0e\x0b\x0a\x0b\x0b\x0b\x04\x0b\x05\x05\x0b\x0b\x06\x0a\x0b\x20\x02\x20\x0b\x41\x01\x6a\x36\x02\x14\x20\x00\x41\x05\x10\xcd\x02\x0c\x0d\x0b\x20\x00\x28\x02\x28\x45\x0d\x09\x20\x00\x41\xa7\x9d\x03\x41\x00\x10\x85\x08\x0c\x10\x0b\x20\x00\x28\x02\x34\x21\x0f\x02\x40\x20\x01\x45\x0d\x00\x20\x00\x41\x1b\x10\xcd\x02\x0b\x20\x02\x41\xec\x00\x36\x02\x40\x41\x00\x21\x10\x20\x02\x41\x00\x36\x02\x38\x20\x02\x42\x00\x37\x03\x30\x20\x02\x20\x00\x28\x02\x40\x36\x02\x3c\x20\x02\x20\x0b\x41\x01\x6a\x22\x0c\x36\x02\x44\x02\x40\x20\x0b\x2d\x00\x01\x41\xde\x00\x47\x0d\x00\x20\x02\x20\x0b\x41\x02\x6a\x22\x0c\x36\x02\x44\x41\x01\x21\x10\x0b\x02\x40\x02\x40\x03\x40\x02\x40\x02\x40\x20\x0c\x2d\x00\x00\x41\xdd\x00\x46\x0d\x00\x20\x00\x20\x02\x41\x18\x6a\x20\x02\x41\xc4\x00\x6a\x41\x01\x10\xcd\x09\x22\x0b\x41\x00\x48\x0d\x04\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x28\x02\x44\x22\x0c\x2d\x00\x00\x41\x2d\x47\x0d\x00\x20\x0c\x2d\x00\x01\x41\xdd\x00\x46\x0d\x00\x20\x02\x20\x0c\x41\x01\x6a\x36\x02\x50\x02\x40\x20\x0b\x41\x80\x80\x80\x80\x04\x49\x0d\x00\x20\x00\x28\x02\x28\x45\x0d\x01\x20\x02\x28\x02\x24\x20\x02\x28\x02\x20\x41\x00\x20\x02\x28\x02\x28\x11\x01\x00\x1a\x0c\x03\x0b\x20\x00\x20\x02\x41\x18\x6a\x20\x02\x41\xd0\x00\x6a\x41\x01\x10\xcd\x09\x22\x0e\x41\x00\x48\x0d\x08\x20\x0e\x41\x80\x80\x80\x80\x04\x49\x0d\x01\x20\x02\x28\x02\x24\x20\x02\x28\x02\x20\x41\x00\x20\x02\x28\x02\x28\x11\x01\x00\x1a\x20\x00\x28\x02\x28\x0d\x02\x0b\x20\x0b\x41\x80\x80\x80\x80\x04\x49\x0d\x02\x20\x02\x41\x30\x6a\x20\x02\x28\x02\x20\x22\x0b\x20\x02\x28\x02\x18\x10\xce\x09\x21\x0e\x20\x02\x28\x02\x24\x20\x0b\x41\x00\x20\x02\x28\x02\x28\x11\x01\x00\x1a\x20\x0e\x45\x0d\x05\x0c\x06\x0b\x20\x02\x20\x02\x28\x02\x50\x22\x0c\x36\x02\x44\x20\x0e\x20\x0b\x4f\x0d\x03\x0b\x20\x00\x41\x99\x9f\x03\x41\x00\x10\x85\x08\x0c\x05\x0b\x20\x02\x41\x30\x6a\x20\x0b\x20\x0b\x10\xcf\x09\x45\x0d\x02\x0c\x03\x0b\x02\x40\x20\x00\x28\x02\x2c\x45\x0d\x00\x20\x02\x41\xec\x00\x36\x02\x60\x20\x02\x20\x02\x28\x02\x3c\x36\x02\x5c\x20\x02\x41\x00\x36\x02\x58\x20\x02\x42\x00\x37\x03\x50\x20\x02\x42\xe1\x80\x80\x80\xb0\x0f\x37\x02\x48\x02\x40\x02\x40\x20\x02\x41\xd0\x00\x6a\x20\x02\x28\x02\x38\x20\x02\x28\x02\x30\x20\x02\x41\xc8\x00\x6a\x41\x02\x41\x01\x10\xd0\x09\x45\x0d\x00\x41\x01\x21\x0b\x20\x02\x28\x02\x58\x21\x11\x0c\x01\x0b\x41\x00\x21\x0e\x20\x02\x28\x02\x50\x21\x12\x20\x02\x28\x02\x58\x22\x11\x21\x0b\x02\x40\x03\x40\x20\x0e\x20\x12\x4e\x0d\x01\x20\x0b\x20\x0b\x28\x02\x00\x41\x60\x6a\x36\x02\x00\x20\x0b\x41\x04\x6a\x21\x0b\x20\x0e\x41\x01\x6a\x21\x0e\x0c\x00\x0b\x00\x0b\x20\x02\x41\x30\x6a\x20\x11\x20\x12\x10\xce\x09\x21\x0b\x0b\x20\x02\x28\x02\x5c\x20\x11\x41\x00\x20\x02\x28\x02\x60\x11\x01\x00\x1a\x20\x0b\x0d\x03\x0b\x02\x40\x20\x10\x45\x0d\x00\x20\x02\x41\x30\x6a\x10\xd1\x09\x0d\x03\x0b\x20\x00\x20\x02\x41\x30\x6a\x10\xd2\x09\x0d\x03\x20\x02\x28\x02\x3c\x20\x02\x28\x02\x38\x41\x00\x20\x02\x28\x02\x40\x11\x01\x00\x1a\x20\x02\x20\x0c\x41\x01\x6a\x36\x02\x14\x20\x01\x45\x0d\x0a\x0c\x08\x0b\x20\x02\x41\x30\x6a\x20\x0b\x20\x0e\x10\xcf\x09\x45\x0d\x00\x0b\x0b\x20\x00\x10\x86\x08\x0b\x20\x02\x28\x02\x3c\x20\x02\x28\x02\x38\x41\x00\x20\x02\x28\x02\x40\x11\x01\x00\x1a\x0c\x0f\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x20\x0b\x2d\x00\x01\x22\x0e\x41\x50\x6a\x22\x0c\x41\x12\x4d\x0d\x00\x02\x40\x20\x0e\x41\xeb\x00\x46\x0d\x00\x20\x0e\x41\xe2\x00\x47\x0d\x0c\x0c\x04\x0b\x20\x02\x20\x0b\x36\x02\x50\x02\x40\x02\x40\x02\x40\x20\x0b\x2d\x00\x02\x41\x3c\x46\x0d\x00\x41\x8e\x9e\x03\x21\x0b\x20\x00\x28\x02\x28\x0d\x01\x20\x00\x10\xd3\x09\x45\x0d\x0e\x0c\x01\x0b\x20\x02\x20\x0b\x41\x03\x6a\x36\x02\x50\x02\x40\x20\x07\x20\x02\x41\xd0\x00\x6a\x20\x00\x28\x02\x28\x10\xd4\x09\x45\x0d\x00\x41\xc6\x9d\x03\x21\x0b\x20\x00\x28\x02\x28\x0d\x01\x20\x00\x10\xd3\x09\x45\x0d\x0e\x0c\x01\x0b\x20\x05\x28\x02\x00\x20\x0a\x28\x02\x00\x20\x07\x10\xd5\x09\x22\x0c\x41\x7f\x4a\x0d\x01\x20\x00\x20\x02\x41\x30\x6a\x20\x07\x10\xd6\x09\x22\x0c\x41\x7f\x4a\x0d\x01\x41\xa3\x9e\x03\x21\x0b\x20\x00\x28\x02\x28\x0d\x00\x20\x00\x10\xd3\x09\x45\x0d\x0d\x0b\x20\x00\x20\x0b\x41\x00\x10\x85\x08\x0c\x13\x0b\x20\x02\x20\x02\x28\x02\x50\x36\x02\x14\x0c\x01\x0b\x02\x40\x20\x0c\x0e\x13\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x03\x02\x0b\x20\x02\x20\x0b\x41\x01\x6a\x22\x0e\x36\x02\x14\x02\x40\x20\x02\x41\x14\x6a\x41\x00\x10\xcc\x09\x22\x0c\x41\x00\x48\x0d\x00\x20\x0c\x20\x00\x28\x02\x34\x48\x0d\x01\x20\x0c\x20\x00\x10\xd7\x09\x48\x0d\x01\x0b\x02\x40\x20\x00\x28\x02\x28\x0d\x00\x20\x02\x20\x0e\x36\x02\x14\x02\x40\x20\x0e\x2d\x00\x00\x22\x12\x41\x37\x4b\x0d\x00\x41\x00\x21\x0c\x02\x40\x20\x12\x41\x33\x4b\x0d\x00\x20\x02\x20\x0b\x41\x02\x6a\x22\x0e\x36\x02\x14\x20\x0b\x2d\x00\x01\x41\x50\x6a\x21\x0c\x20\x0b\x2d\x00\x02\x21\x12\x0b\x20\x12\x41\xf8\x01\x71\x41\x30\x47\x0d\x0d\x20\x02\x20\x0e\x41\x01\x6a\x36\x02\x14\x20\x0c\x41\x03\x74\x20\x0e\x2d\x00\x00\x6a\x41\x50\x6a\x21\x0c\x20\x0e\x2d\x00\x01\x41\xf8\x01\x71\x41\x30\x47\x0d\x0d\x20\x02\x20\x0e\x41\x02\x6a\x36\x02\x14\x20\x0c\x41\x03\x74\x20\x0e\x2d\x00\x01\x6a\x41\x50\x6a\x21\x0c\x0c\x0d\x0b\x20\x02\x20\x0b\x41\x02\x6a\x36\x02\x14\x20\x0b\x2d\x00\x01\x21\x0c\x0c\x0c\x0b\x20\x00\x41\xe7\x9e\x03\x41\x00\x10\x85\x08\x0c\x11\x0b\x20\x00\x28\x02\x34\x21\x0f\x20\x00\x28\x02\x04\x21\x13\x20\x00\x20\x06\x20\x0c\x10\x83\x08\x0c\x0b\x0b\x20\x02\x20\x0b\x41\x02\x6a\x36\x02\x14\x20\x0b\x2d\x00\x02\x21\x0e\x02\x40\x20\x00\x28\x02\x28\x45\x0d\x00\x41\x00\x21\x0c\x20\x0e\x41\x50\x6a\x41\x09\x4b\x0d\x0a\x20\x00\x41\xba\x9e\x03\x41\x00\x10\x85\x08\x0c\x10\x0b\x41\x00\x21\x0c\x20\x0e\x41\xf8\x01\x71\x41\x30\x47\x0d\x09\x20\x02\x20\x0b\x41\x03\x6a\x36\x02\x14\x20\x0b\x2d\x00\x02\x41\x50\x6a\x21\x0c\x20\x0b\x2d\x00\x03\x41\xf8\x01\x71\x41\x30\x47\x0d\x09\x20\x02\x20\x0b\x41\x04\x6a\x36\x02\x14\x20\x0c\x41\x03\x74\x20\x0b\x2d\x00\x03\x6a\x41\x50\x6a\x21\x0c\x0c\x09\x0b\x20\x00\x41\x11\x41\x12\x20\x0e\x41\xe2\x00\x46\x1b\x10\xd8\x09\x20\x02\x20\x0b\x41\x02\x6a\x36\x02\x14\x0c\x0a\x0b\x02\x40\x02\x40\x02\x40\x20\x0b\x2d\x00\x01\x41\x3f\x47\x0d\x00\x41\x03\x21\x12\x41\x00\x21\x0c\x02\x40\x02\x40\x02\x40\x20\x0b\x2d\x00\x02\x22\x0e\x41\x46\x6a\x22\x10\x41\x03\x4d\x0d\x00\x20\x0e\x41\x21\x46\x0d\x01\x0c\x05\x0b\x02\x40\x02\x40\x20\x10\x0e\x04\x00\x06\x01\x02\x00\x0b\x20\x00\x20\x0b\x41\x03\x6a\x22\x0b\x36\x02\x18\x20\x02\x20\x0b\x36\x02\x14\x20\x00\x28\x02\x34\x21\x0f\x20\x00\x20\x01\x10\x84\x08\x0d\x13\x20\x02\x20\x00\x28\x02\x18\x36\x02\x14\x20\x0d\x21\x13\x20\x00\x20\x02\x41\x14\x6a\x41\x29\x10\xd9\x09\x0d\x13\x0c\x0e\x0b\x41\x01\x21\x0c\x41\x04\x21\x12\x20\x0b\x2d\x00\x03\x22\x0e\x41\x3d\x46\x0d\x00\x20\x0e\x41\x21\x47\x0d\x01\x0b\x20\x02\x20\x0b\x20\x12\x6a\x22\x12\x36\x02\x14\x02\x40\x02\x40\x20\x00\x28\x02\x28\x20\x0c\x72\x45\x0d\x00\x41\x7f\x21\x13\x41\x00\x21\x0f\x0c\x01\x0b\x20\x00\x28\x02\x34\x21\x0f\x20\x0d\x21\x13\x0b\x20\x00\x41\x18\x41\x17\x20\x0e\x41\x21\x46\x1b\x41\x00\x10\x82\x08\x21\x0b\x20\x00\x20\x12\x36\x02\x18\x20\x00\x20\x0c\x10\x84\x08\x0d\x11\x20\x02\x20\x00\x28\x02\x18\x36\x02\x14\x20\x00\x20\x02\x41\x14\x6a\x41\x29\x10\xd9\x09\x0d\x11\x20\x00\x41\x0a\x10\xcd\x02\x20\x00\x28\x02\x0c\x0d\x11\x20\x00\x28\x02\x00\x20\x0b\x6a\x20\x00\x28\x02\x04\x20\x0b\x6b\x41\x7c\x6a\x36\x00\x00\x0c\x0c\x0b\x20\x02\x20\x0b\x41\x03\x6a\x36\x02\x14\x02\x40\x20\x07\x20\x02\x41\x14\x6a\x20\x00\x28\x02\x28\x10\xd4\x09\x45\x0d\x00\x20\x00\x41\xc6\x9d\x03\x41\x00\x10\x85\x08\x0c\x11\x0b\x02\x40\x20\x05\x28\x02\x00\x20\x0a\x28\x02\x00\x20\x07\x10\xd5\x09\x41\x01\x48\x0d\x00\x20\x00\x41\xd9\x9d\x03\x41\x00\x10\x85\x08\x0c\x11\x0b\x20\x05\x20\x07\x20\x07\x10\x71\x41\x01\x6a\x10\xa5\x07\x1a\x20\x00\x41\x01\x36\x02\x3c\x0c\x01\x0b\x20\x02\x20\x0b\x41\x01\x6a\x36\x02\x14\x20\x05\x41\x00\x10\xcd\x02\x0b\x02\x40\x20\x00\x28\x02\x34\x22\x0f\x41\xff\x01\x48\x0d\x00\x20\x00\x41\xfc\x9d\x03\x41\x00\x10\x85\x08\x0c\x0f\x0b\x20\x00\x20\x0f\x41\x01\x6a\x36\x02\x34\x20\x00\x28\x02\x04\x21\x13\x20\x00\x20\x04\x20\x0f\x10\x83\x08\x20\x00\x20\x02\x28\x02\x14\x36\x02\x18\x20\x00\x20\x01\x10\x84\x08\x0d\x0e\x20\x02\x20\x00\x28\x02\x18\x36\x02\x14\x20\x00\x20\x03\x20\x0f\x10\x83\x08\x20\x00\x20\x02\x41\x14\x6a\x41\x29\x10\xd9\x09\x0d\x0e\x0c\x09\x0b\x20\x00\x41\xee\x9d\x03\x41\x00\x10\x85\x08\x0c\x0d\x0b\x20\x00\x41\xb4\x9d\x03\x41\x00\x10\x85\x08\x0c\x0c\x0b\x20\x02\x20\x0b\x41\x01\x6a\x36\x02\x14\x20\x00\x28\x02\x34\x21\x0f\x20\x01\x45\x0d\x01\x20\x00\x41\x1b\x10\xcd\x02\x20\x00\x41\x04\x41\x03\x20\x00\x28\x02\x30\x1b\x10\xd8\x09\x0b\x20\x00\x41\x1b\x10\xcd\x02\x0c\x01\x0b\x20\x00\x41\x04\x41\x03\x20\x00\x28\x02\x30\x1b\x10\xd8\x09\x0b\x20\x0d\x21\x13\x0c\x03\x0b\x20\x02\x20\x0b\x41\x01\x6a\x36\x02\x14\x20\x00\x41\x06\x10\xcd\x02\x0c\x03\x0b\x20\x00\x20\x02\x20\x02\x41\x14\x6a\x41\x00\x10\xcd\x09\x22\x0c\x41\x00\x48\x0d\x06\x0b\x20\x00\x28\x02\x34\x21\x0f\x20\x00\x28\x02\x04\x21\x13\x02\x40\x20\x01\x45\x0d\x00\x20\x00\x41\x1b\x10\xcd\x02\x0b\x02\x40\x02\x40\x20\x0c\x41\x80\x80\x80\x80\x04\x48\x0d\x00\x20\x00\x20\x02\x10\xd2\x09\x21\x0b\x20\x02\x28\x02\x0c\x20\x02\x28\x02\x08\x41\x00\x20\x02\x28\x02\x10\x11\x01\x00\x1a\x20\x0b\x0d\x07\x0c\x01\x0b\x02\x40\x20\x00\x28\x02\x2c\x45\x0d\x00\x20\x0c\x20\x00\x28\x02\x28\x10\xda\x09\x21\x0c\x0b\x02\x40\x20\x0c\x41\xff\xff\x03\x4a\x0d\x00\x20\x00\x41\x01\x20\x0c\x10\xdb\x09\x0c\x01\x0b\x20\x00\x41\x02\x20\x0c\x10\x82\x08\x1a\x0b\x20\x01\x45\x0d\x00\x20\x00\x41\x1b\x10\xcd\x02\x0b\x20\x13\x41\x00\x48\x0d\x00\x02\x40\x02\x40\x20\x02\x28\x02\x14\x22\x0c\x2d\x00\x00\x22\x0b\x41\x56\x6a\x22\x0e\x41\x01\x4d\x0d\x00\x02\x40\x02\x40\x20\x0b\x41\x3f\x46\x0d\x00\x20\x0b\x41\xfb\x00\x47\x0d\x04\x20\x0c\x2d\x00\x01\x41\x50\x6a\x41\x0a\x49\x0d\x01\x20\x00\x28\x02\x28\x45\x0d\x04\x0c\x07\x0b\x41\x01\x21\x14\x20\x02\x20\x0c\x41\x01\x6a\x22\x0b\x36\x02\x14\x41\x00\x21\x15\x0c\x02\x0b\x20\x02\x20\x0c\x41\x01\x6a\x36\x02\x14\x20\x02\x41\x14\x6a\x41\x01\x10\xcc\x09\x22\x15\x21\x14\x02\x40\x20\x02\x28\x02\x14\x22\x0e\x2d\x00\x00\x22\x0b\x41\x2c\x47\x0d\x00\x20\x02\x20\x0e\x41\x01\x6a\x36\x02\x14\x41\xff\xff\xff\xff\x07\x21\x14\x20\x0e\x2d\x00\x01\x22\x0b\x41\x50\x6a\x41\x09\x4b\x0d\x00\x20\x02\x41\x14\x6a\x41\x01\x10\xcc\x09\x22\x14\x20\x15\x48\x0d\x06\x20\x02\x28\x02\x14\x2d\x00\x00\x21\x0b\x0b\x02\x40\x20\x0b\x41\xff\x01\x71\x41\xfd\x00\x46\x0d\x00\x20\x00\x28\x02\x28\x0d\x00\x20\x02\x20\x0c\x36\x02\x14\x0c\x03\x0b\x20\x00\x20\x02\x41\x14\x6a\x41\xfd\x00\x10\xd9\x09\x0d\x06\x20\x02\x28\x02\x14\x21\x0b\x0c\x01\x0b\x02\x40\x02\x40\x20\x0e\x0e\x02\x01\x00\x01\x0b\x41\x01\x21\x15\x20\x02\x20\x0c\x41\x01\x6a\x22\x0b\x36\x02\x14\x41\xff\xff\xff\xff\x07\x21\x14\x0c\x01\x0b\x20\x02\x20\x0c\x41\x01\x6a\x22\x0b\x36\x02\x14\x41\x00\x21\x15\x41\xff\xff\xff\xff\x07\x21\x14\x0b\x02\x40\x02\x40\x20\x0b\x2d\x00\x00\x41\x3f\x47\x0d\x00\x20\x02\x20\x0b\x41\x01\x6a\x36\x02\x14\x20\x00\x28\x02\x04\x20\x13\x6b\x21\x11\x41\x00\x21\x0c\x41\x00\x21\x0b\x0c\x01\x0b\x20\x00\x28\x02\x0c\x21\x0b\x02\x40\x02\x40\x20\x14\x41\x01\x48\x0d\x00\x20\x0b\x0d\x04\x20\x00\x28\x02\x04\x20\x13\x6b\x21\x11\x20\x00\x28\x02\x00\x22\x16\x20\x13\x6a\x21\x17\x41\x00\x21\x0b\x41\x00\x21\x12\x02\x40\x03\x40\x20\x0b\x20\x11\x4e\x0d\x01\x20\x17\x20\x0b\x6a\x22\x10\x2d\x00\x00\x22\x0c\x41\x7f\x6a\x22\x0e\x41\x15\x4b\x0d\x03\x20\x0c\x41\xd0\x9b\x03\x6a\x2d\x00\x00\x21\x0c\x02\x40\x02\x40\x02\x40\x02\x40\x20\x0e\x0e\x16\x02\x02\x02\x02\x03\x03\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x03\x03\x07\x07\x00\x01\x02\x0b\x20\x10\x2f\x00\x01\x41\x02\x74\x20\x0c\x6a\x21\x0c\x0c\x01\x0b\x20\x10\x2f\x00\x01\x41\x03\x74\x20\x0c\x6a\x21\x0c\x0b\x20\x12\x41\x01\x6a\x21\x12\x0b\x20\x0c\x20\x0b\x6a\x21\x0b\x0c\x00\x0b\x00\x0b\x20\x12\x41\x01\x48\x0d\x01\x20\x00\x41\x0a\x10\xcd\x02\x20\x00\x20\x13\x41\x11\x10\xcb\x09\x0d\x04\x20\x00\x28\x02\x00\x20\x13\x6a\x41\x1c\x3a\x00\x00\x20\x13\x20\x00\x28\x02\x00\x6a\x22\x0b\x41\x0d\x6a\x20\x12\x36\x00\x00\x20\x0b\x41\x09\x6a\x20\x14\x36\x00\x00\x20\x0b\x41\x05\x6a\x20\x15\x36\x00\x00\x20\x0b\x41\x01\x6a\x20\x00\x28\x02\x04\x20\x13\x6b\x41\x6f\x6a\x36\x00\x00\x0c\x03\x0b\x20\x0b\x0d\x03\x20\x00\x28\x02\x04\x20\x13\x6b\x21\x11\x20\x00\x28\x02\x00\x21\x16\x0b\x41\x00\x21\x0c\x20\x02\x41\xd0\x00\x6a\x41\x00\x41\xff\x01\x10\x74\x1a\x20\x16\x20\x13\x6a\x21\x16\x41\x7e\x21\x17\x41\x00\x21\x18\x02\x40\x03\x40\x20\x0c\x20\x11\x4e\x0d\x01\x20\x16\x20\x0c\x6a\x22\x0e\x2d\x00\x00\x22\x0b\x41\xd0\x9b\x03\x6a\x2d\x00\x00\x21\x12\x02\x40\x02\x40\x20\x0b\x41\x7f\x6a\x22\x0b\x41\x1a\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x0b\x0e\x1b\x02\x02\x02\x02\x07\x07\x06\x06\x06\x06\x03\x03\x04\x06\x07\x07\x07\x07\x05\x05\x00\x01\x06\x06\x07\x06\x07\x02\x0b\x20\x0e\x2f\x00\x01\x41\x02\x74\x20\x12\x6a\x21\x12\x0c\x01\x0b\x20\x0e\x2f\x00\x01\x41\x03\x74\x20\x12\x6a\x21\x12\x0b\x41\x01\x20\x17\x20\x17\x41\x7e\x46\x1b\x21\x17\x0c\x04\x0b\x20\x02\x41\xd0\x00\x6a\x20\x0e\x41\x01\x6a\x2d\x00\x00\x6a\x22\x0b\x20\x0b\x2d\x00\x00\x41\x01\x72\x3a\x00\x00\x0c\x03\x0b\x20\x0e\x41\x02\x6a\x2d\x00\x00\x21\x10\x20\x0e\x41\x01\x6a\x2d\x00\x00\x21\x0b\x03\x40\x20\x0b\x20\x10\x4f\x0d\x03\x20\x02\x41\xd0\x00\x6a\x20\x0b\x6a\x22\x0e\x20\x0e\x2d\x00\x00\x41\x01\x72\x3a\x00\x00\x20\x0b\x41\x01\x6a\x21\x0b\x0c\x00\x0b\x00\x0b\x41\x01\x21\x18\x20\x02\x41\xd0\x00\x6a\x20\x0e\x41\x01\x6a\x2d\x00\x00\x6a\x22\x0b\x20\x0b\x2d\x00\x00\x41\x02\x72\x3a\x00\x00\x0c\x01\x0b\x41\x00\x20\x17\x20\x17\x41\x7e\x46\x1b\x21\x17\x0b\x20\x12\x20\x0c\x6a\x21\x0c\x0c\x00\x0b\x00\x0b\x02\x40\x02\x40\x20\x18\x45\x0d\x00\x41\x00\x21\x0b\x03\x40\x20\x0b\x41\xff\x01\x46\x0d\x01\x20\x02\x41\xd0\x00\x6a\x20\x0b\x6a\x21\x0c\x20\x0b\x41\x01\x6a\x21\x0b\x20\x0c\x2d\x00\x00\x41\x03\x47\x0d\x00\x0b\x41\x7f\x21\x0b\x0c\x01\x0b\x41\x00\x20\x17\x20\x17\x41\x7e\x46\x1b\x21\x0b\x0b\x20\x0b\x45\x21\x0b\x41\x01\x21\x0c\x0b\x02\x40\x20\x15\x0d\x00\x02\x40\x20\x0f\x20\x00\x28\x02\x34\x46\x0d\x00\x20\x00\x20\x13\x41\x03\x10\xcb\x09\x0d\x03\x20\x00\x28\x02\x00\x20\x13\x6a\x41\x0d\x3a\x00\x00\x20\x13\x20\x00\x28\x02\x00\x6a\x41\x01\x6a\x20\x0f\x3a\x00\x00\x20\x13\x20\x00\x28\x02\x00\x6a\x41\x02\x6a\x20\x00\x2d\x00\x34\x41\x7f\x6a\x3a\x00\x00\x20\x13\x41\x03\x6a\x21\x13\x0b\x02\x40\x02\x40\x02\x40\x20\x14\x41\x01\x4d\x0d\x00\x20\x14\x41\xff\xff\xff\xff\x07\x47\x0d\x02\x20\x00\x20\x13\x20\x0b\x41\x05\x6a\x10\xcb\x09\x45\x0d\x01\x0c\x05\x0b\x02\x40\x02\x40\x20\x14\x0e\x02\x00\x01\x00\x0b\x20\x00\x20\x13\x36\x02\x04\x0c\x04\x0b\x20\x00\x20\x13\x41\x05\x10\xcb\x09\x0d\x04\x20\x00\x28\x02\x00\x20\x13\x6a\x20\x0c\x41\x08\x72\x3a\x00\x00\x20\x00\x28\x02\x00\x20\x13\x6a\x41\x01\x6a\x20\x11\x36\x00\x00\x0c\x03\x0b\x20\x00\x28\x02\x00\x20\x13\x6a\x20\x0c\x41\x08\x72\x3a\x00\x00\x20\x00\x28\x02\x00\x20\x13\x6a\x22\x0c\x41\x01\x6a\x20\x11\x20\x0b\x6a\x41\x05\x6a\x36\x00\x00\x02\x40\x20\x0b\x45\x0d\x00\x20\x0c\x41\x05\x6a\x41\x19\x3a\x00\x00\x20\x00\x41\x1a\x20\x13\x10\xdc\x09\x0c\x03\x0b\x20\x00\x41\x07\x20\x13\x10\xdc\x09\x0c\x02\x0b\x20\x00\x20\x13\x41\x0a\x10\xcb\x09\x0d\x02\x20\x00\x28\x02\x00\x20\x13\x6a\x41\x0f\x3a\x00\x00\x20\x00\x28\x02\x00\x22\x0b\x20\x13\x41\x05\x6a\x22\x0e\x6a\x20\x0c\x41\x08\x72\x3a\x00\x00\x20\x13\x20\x0b\x6a\x41\x01\x6a\x20\x14\x36\x00\x00\x20\x13\x20\x00\x28\x02\x00\x6a\x41\x06\x6a\x20\x11\x41\x05\x6a\x36\x00\x00\x20\x00\x41\x0e\x20\x0e\x10\xdc\x09\x20\x00\x41\x10\x10\xcd\x02\x0c\x01\x0b\x02\x40\x20\x0b\x0d\x00\x20\x14\x41\xff\xff\xff\xff\x07\x47\x0d\x00\x20\x15\x41\x01\x47\x0d\x00\x20\x00\x41\x09\x20\x0c\x6b\x20\x13\x10\xdc\x09\x0c\x01\x0b\x02\x40\x20\x15\x41\x01\x46\x0d\x00\x20\x00\x20\x13\x41\x05\x10\xcb\x09\x0d\x02\x20\x00\x28\x02\x00\x20\x13\x6a\x41\x0f\x3a\x00\x00\x20\x00\x28\x02\x00\x20\x13\x6a\x41\x01\x6a\x20\x15\x36\x00\x00\x20\x00\x41\x0e\x20\x13\x41\x05\x6a\x22\x13\x10\xdc\x09\x20\x00\x41\x10\x10\xcd\x02\x0b\x02\x40\x20\x14\x41\xff\xff\xff\xff\x07\x47\x0d\x00\x20\x00\x28\x02\x04\x21\x0e\x20\x00\x20\x0c\x41\x08\x72\x20\x11\x20\x0b\x6a\x41\x05\x6a\x10\x82\x08\x1a\x02\x40\x20\x0b\x45\x0d\x00\x20\x00\x41\x19\x10\xcd\x02\x20\x00\x20\x13\x20\x11\x10\xdd\x09\x20\x00\x41\x1a\x20\x0e\x10\xdc\x09\x0c\x02\x0b\x20\x00\x20\x13\x20\x11\x10\xdd\x09\x20\x00\x41\x07\x20\x0e\x10\xdc\x09\x0c\x01\x0b\x20\x14\x20\x15\x4c\x0d\x00\x20\x00\x41\x0f\x20\x14\x20\x15\x6b\x10\x82\x08\x1a\x20\x00\x28\x02\x04\x21\x0b\x20\x00\x20\x0c\x41\x08\x72\x20\x11\x41\x05\x6a\x10\x82\x08\x1a\x20\x00\x20\x13\x20\x11\x10\xdd\x09\x20\x00\x41\x0e\x20\x0b\x10\xdc\x09\x20\x00\x41\x10\x10\xcd\x02\x0b\x20\x00\x20\x02\x28\x02\x14\x36\x02\x18\x20\x01\x45\x0d\x01\x20\x00\x20\x00\x28\x02\x04\x22\x0b\x20\x0d\x6b\x22\x0c\x20\x0b\x6a\x10\xec\x07\x0d\x03\x20\x00\x28\x02\x00\x20\x08\x6a\x22\x0e\x20\x0c\x6a\x20\x0e\x20\x0b\x20\x08\x6b\x10\xad\x01\x1a\x20\x00\x28\x02\x00\x22\x0e\x20\x08\x6a\x20\x0e\x20\x0b\x6a\x20\x0c\x10\x70\x1a\x0c\x01\x0b\x0b\x20\x00\x10\x86\x08\x0c\x01\x0b\x20\x00\x41\xad\x9f\x03\x41\x00\x10\x85\x08\x0b\x41\x7f\x21\x09\x0b\x20\x02\x41\xd0\x02\x6a\x24\x00\x20\x09\x0b\x48\x01\x01\x7f\x41\x7f\x21\x03\x02\x40\x20\x00\x20\x00\x28\x02\x04\x20\x02\x6a\x10\xec\x07\x0d\x00\x20\x00\x28\x02\x00\x20\x01\x6a\x22\x03\x20\x02\x6a\x20\x03\x20\x00\x28\x02\x04\x20\x01\x6b\x10\xad\x01\x1a\x20\x00\x20\x00\x28\x02\x04\x20\x02\x6a\x36\x02\x04\x41\x00\x21\x03\x0b\x20\x03\x0b\x72\x02\x02\x7f\x01\x7e\x20\x00\x28\x02\x00\x21\x02\x42\x00\x21\x04\x02\x40\x03\x40\x20\x02\x2d\x00\x00\x22\x03\x41\x50\x6a\x41\xff\x01\x71\x41\x09\x4b\x0d\x01\x02\x40\x20\x04\x42\x0a\x7e\x20\x03\xad\x42\xff\x01\x83\x7c\x42\x50\x7c\x22\x04\x42\xff\xff\xff\xff\x07\x54\x22\x03\x0d\x00\x20\x01\x0d\x00\x41\x7f\x0f\x0b\x20\x04\x42\xff\xff\xff\xff\x07\x20\x03\x1b\x21\x04\x20\x02\x41\x01\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x20\x00\x20\x02\x36\x02\x00\x20\x04\xa7\x0b\xfc\x1c\x01\x0e\x7f\x23\x00\x41\xd0\x05\x6b\x22\x04\x24\x00\x20\x04\x20\x02\x28\x02\x00\x22\x05\x36\x02\x9c\x04\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x05\x2d\x00\x00\x22\x06\x45\x0d\x00\x20\x06\x41\xdc\x00\x47\x0d\x12\x20\x04\x20\x05\x41\x01\x6a\x22\x07\x36\x02\x9c\x04\x20\x07\x20\x00\x28\x02\x1c\x4f\x0d\x01\x20\x04\x20\x05\x41\x02\x6a\x22\x08\x36\x02\x9c\x04\x20\x05\x2d\x00\x01\x22\x06\x41\xad\x7f\x6a\x22\x09\x41\x04\x4d\x0d\x02\x20\x06\x41\x9d\x7f\x6a\x22\x09\x41\x01\x4d\x0d\x03\x20\x06\x41\x8d\x7f\x6a\x22\x03\x41\x04\x4d\x0d\x04\x02\x40\x02\x40\x20\x06\x41\xc4\x00\x46\x0d\x00\x20\x06\x41\xd0\x00\x46\x0d\x01\x20\x06\x41\xf0\x00\x46\x0d\x01\x0c\x12\x0b\x41\x01\x21\x06\x0c\x10\x0b\x02\x40\x20\x00\x28\x02\x28\x0d\x00\x41\x00\x21\x01\x0c\x12\x0b\x20\x08\x2d\x00\x00\x41\xfb\x00\x47\x0d\x05\x20\x05\x41\x03\x6a\x21\x07\x20\x04\x41\xe0\x04\x6a\x21\x05\x02\x40\x03\x40\x20\x07\x2d\x00\x00\x22\x03\x10\xde\x09\x45\x0d\x01\x20\x05\x20\x04\x41\xe0\x04\x6a\x6b\x41\x3e\x4b\x0d\x09\x20\x05\x20\x03\x3a\x00\x00\x20\x07\x41\x01\x6a\x21\x07\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x05\x41\x00\x3a\x00\x00\x20\x04\x41\xa0\x04\x6a\x21\x05\x02\x40\x20\x07\x2d\x00\x00\x22\x03\x41\x3d\x47\x0d\x00\x20\x07\x41\x01\x6a\x21\x07\x20\x04\x41\xa0\x04\x6a\x21\x05\x03\x40\x20\x07\x2d\x00\x00\x22\x03\x10\xde\x09\x45\x0d\x01\x02\x40\x20\x05\x20\x04\x41\xa0\x04\x6a\x6b\x41\x3f\x49\x0d\x00\x20\x00\x41\xfb\x9f\x03\x41\x00\x10\x85\x08\x0c\x19\x0b\x20\x05\x20\x03\x3a\x00\x00\x20\x05\x41\x01\x6a\x21\x05\x20\x07\x41\x01\x6a\x21\x07\x0c\x00\x0b\x00\x0b\x20\x05\x41\x00\x3a\x00\x00\x02\x40\x20\x03\x41\xfd\x00\x46\x0d\x00\x20\x00\x41\x9a\xa0\x03\x41\x00\x10\x85\x08\x0c\x17\x0b\x41\x00\x21\x03\x02\x40\x02\x40\x02\x40\x20\x04\x41\xe0\x04\x6a\x41\xa8\xa0\x03\x41\x07\x10\x6b\x45\x0d\x00\x41\x00\x21\x03\x20\x04\x41\xe0\x04\x6a\x41\xaf\xa0\x03\x41\x03\x10\x6b\x45\x0d\x00\x41\x01\x21\x03\x20\x04\x41\xe0\x04\x6a\x41\xb2\xa0\x03\x41\x12\x10\x6b\x45\x0d\x00\x20\x04\x28\x02\xe0\x04\x41\xf3\xc6\xe1\x03\x47\x0d\x01\x0b\x20\x01\x41\xec\x00\x36\x02\x10\x20\x01\x41\x00\x36\x02\x08\x20\x01\x42\x00\x37\x02\x00\x20\x01\x20\x00\x28\x02\x40\x22\x09\x36\x02\x0c\x02\x40\x41\xe0\xc7\x04\x20\x04\x41\xa0\x04\x6a\x10\xdf\x09\x22\x0a\x41\x00\x48\x0d\x00\x20\x01\x21\x05\x02\x40\x20\x03\x45\x0d\x00\x20\x04\x41\xec\x00\x36\x02\xc8\x05\x20\x04\x20\x09\x36\x02\xc4\x05\x20\x04\x41\x00\x36\x02\xc0\x05\x20\x04\x42\x00\x37\x03\xb8\x05\x20\x04\x41\xec\x00\x36\x02\xb0\x05\x20\x04\x20\x09\x36\x02\xac\x05\x20\x04\x41\x00\x36\x02\xa8\x05\x20\x04\x42\x00\x37\x03\xa0\x05\x20\x04\x41\xb8\x05\x6a\x21\x05\x0b\x20\x0a\x41\x01\x6a\x21\x0b\x41\xd0\xd9\x04\x21\x00\x41\x00\x21\x09\x02\x40\x03\x40\x20\x09\x21\x0c\x20\x00\x41\x81\xee\x04\x4f\x0d\x01\x20\x00\x41\x01\x6a\x21\x0d\x02\x40\x02\x40\x20\x00\x2d\x00\x00\x22\x0e\x41\xff\x00\x71\x22\x09\x41\xe0\x00\x4f\x0d\x00\x20\x0d\x21\x08\x0c\x01\x0b\x02\x40\x02\x40\x20\x09\x41\xef\x00\x4b\x0d\x00\x20\x09\x41\x08\x74\x41\x80\xc0\x7e\x6a\x21\x09\x41\xe0\x00\x21\x0f\x41\x02\x21\x08\x0c\x01\x0b\x20\x09\x41\x10\x74\x20\x00\x2d\x00\x01\x41\x08\x74\x72\x41\x80\x80\xc0\x7c\x6a\x21\x09\x20\x00\x41\x02\x6a\x21\x0d\x41\xe0\x20\x21\x0f\x41\x03\x21\x08\x0b\x20\x00\x20\x08\x6a\x21\x08\x20\x09\x20\x0d\x2d\x00\x00\x72\x20\x0f\x6a\x21\x09\x0b\x02\x40\x20\x0e\x41\x80\x01\x71\x0d\x00\x20\x0c\x20\x09\x6a\x41\x01\x6a\x21\x09\x20\x08\x21\x00\x0c\x01\x0b\x20\x08\x41\x01\x6a\x21\x00\x20\x0c\x20\x09\x6a\x41\x01\x6a\x21\x09\x20\x0b\x20\x08\x2d\x00\x00\x47\x0d\x00\x20\x05\x20\x0c\x20\x09\x10\xe0\x09\x45\x0d\x00\x0c\x0e\x0b\x00\x0b\x20\x03\x45\x0d\x02\x41\x90\xee\x04\x21\x00\x41\x00\x21\x0d\x20\x0a\x41\x18\x46\x21\x10\x20\x0a\x41\x36\x46\x21\x11\x02\x40\x03\x40\x20\x0d\x21\x0f\x20\x00\x41\xaf\xf4\x04\x4f\x0d\x01\x20\x00\x41\x01\x6a\x21\x0c\x20\x00\x2c\x00\x00\x22\x08\x41\xff\x01\x71\x21\x09\x02\x40\x02\x40\x20\x08\x41\x7f\x4c\x0d\x00\x20\x0c\x21\x00\x0c\x01\x0b\x02\x40\x02\x40\x20\x08\x41\xff\x01\x71\x41\xbf\x01\x4b\x0d\x00\x20\x09\x41\x08\x74\x41\x80\x80\x7e\x6a\x21\x09\x41\x80\x01\x21\x08\x41\x02\x21\x0d\x0c\x01\x0b\x20\x09\x41\x10\x74\x20\x00\x2d\x00\x01\x41\x08\x74\x72\x41\x80\x80\x80\x7a\x6a\x21\x09\x20\x00\x41\x02\x6a\x21\x0c\x41\x80\x81\x01\x21\x08\x41\x03\x21\x0d\x0b\x20\x00\x20\x0d\x6a\x21\x00\x20\x09\x20\x0c\x2d\x00\x00\x72\x20\x08\x6a\x21\x09\x0b\x20\x00\x41\x01\x6a\x21\x0e\x20\x0f\x20\x09\x6a\x41\x01\x6a\x21\x0d\x20\x00\x2d\x00\x00\x21\x0c\x02\x40\x02\x40\x02\x40\x20\x10\x0d\x00\x20\x0c\x21\x00\x20\x0e\x21\x09\x20\x11\x45\x0d\x01\x0b\x20\x0c\x45\x0d\x01\x20\x04\x41\xa0\x05\x6a\x20\x0f\x20\x0d\x10\xe0\x09\x0d\x10\x0c\x01\x0b\x03\x40\x20\x00\x45\x0d\x01\x20\x00\x41\x7f\x6a\x21\x00\x20\x09\x2d\x00\x00\x21\x08\x20\x09\x41\x01\x6a\x21\x09\x20\x0b\x20\x08\x47\x0d\x00\x0b\x20\x04\x41\xa0\x05\x6a\x20\x0f\x20\x0d\x10\xe0\x09\x0d\x0f\x0b\x20\x0e\x20\x0c\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x02\x40\x02\x40\x02\x40\x20\x0a\x41\x36\x46\x0d\x00\x20\x0a\x41\x18\x47\x0d\x01\x0b\x20\x04\x41\xa0\x05\x6a\x10\xd1\x09\x0d\x0e\x20\x01\x20\x05\x28\x02\x08\x20\x05\x28\x02\x00\x20\x04\x28\x02\xa8\x05\x22\x00\x20\x04\x28\x02\xa0\x05\x41\x01\x10\xd0\x09\x0d\x0e\x0c\x01\x0b\x20\x01\x20\x05\x28\x02\x08\x20\x05\x28\x02\x00\x20\x04\x28\x02\xa8\x05\x22\x00\x20\x04\x28\x02\xa0\x05\x41\x00\x10\xd0\x09\x0d\x0d\x0b\x20\x05\x28\x02\x0c\x20\x05\x28\x02\x08\x41\x00\x20\x05\x28\x02\x10\x11\x01\x00\x1a\x20\x04\x28\x02\xac\x05\x20\x00\x41\x00\x20\x04\x28\x02\xb0\x05\x11\x01\x00\x1a\x0c\x02\x0b\x20\x09\x41\x00\x41\x00\x10\x80\x08\x1a\x20\x00\x41\xc4\xa0\x03\x41\x00\x10\x85\x08\x0c\x18\x0b\x02\x40\x02\x40\x20\x04\x41\xe0\x04\x6a\x41\xdb\xa0\x03\x41\x11\x10\x6b\x45\x0d\x00\x20\x04\x41\xe0\x04\x6a\x41\xec\xa0\x03\x41\x03\x10\x6b\x0d\x01\x0b\x20\x01\x41\xec\x00\x36\x02\x10\x20\x01\x41\x00\x36\x02\x08\x20\x01\x42\x00\x37\x02\x00\x20\x01\x20\x00\x28\x02\x40\x36\x02\x0c\x20\x01\x20\x04\x41\xa0\x04\x6a\x10\xe1\x09\x22\x05\x45\x0d\x01\x20\x01\x28\x02\x0c\x20\x01\x28\x02\x08\x41\x00\x20\x01\x28\x02\x10\x11\x01\x00\x1a\x20\x05\x41\x7e\x47\x0d\x0a\x20\x00\x41\xef\xa0\x03\x41\x00\x10\x85\x08\x0c\x18\x0b\x20\x04\x2d\x00\xa0\x04\x0d\x08\x20\x01\x41\xec\x00\x36\x02\x10\x20\x01\x41\x00\x36\x02\x08\x20\x01\x42\x00\x37\x02\x00\x20\x01\x20\x00\x28\x02\x40\x36\x02\x0c\x02\x40\x20\x01\x20\x04\x41\xe0\x04\x6a\x10\xe1\x09\x22\x05\x41\x7f\x47\x0d\x00\x20\x01\x28\x02\x0c\x20\x01\x28\x02\x08\x41\x00\x20\x01\x28\x02\x10\x11\x01\x00\x1a\x0c\x0a\x0b\x20\x05\x41\x7f\x4a\x0d\x00\x41\x7e\x21\x05\x41\xc0\x97\x05\x20\x04\x41\xe0\x04\x6a\x10\xdf\x09\x22\x03\x41\x00\x48\x0d\x07\x02\x40\x02\x40\x02\x40\x20\x03\x41\x5e\x6a\x22\x05\x41\x12\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x05\x0e\x13\x14\x06\x00\x01\x05\x0f\x0d\x0c\x10\x0e\x0b\x07\x08\x11\x03\x02\x04\x0a\x09\x14\x0b\x41\x7f\x21\x05\x20\x01\x41\x00\x41\x80\x80\xc4\x00\x10\xe0\x09\x0d\x1b\x0c\x14\x0b\x20\x04\x42\x86\x80\x80\x80\xf0\x00\x37\x03\x08\x20\x04\x42\x80\x80\x80\x80\x10\x37\x03\x00\x20\x01\x20\x04\x10\xe2\x09\x21\x05\x0c\x11\x0b\x20\x04\x41\x20\x6a\x42\x83\x80\x80\x80\xf0\x00\x37\x03\x00\x20\x04\x42\x81\x80\x80\x80\x10\x37\x03\x18\x20\x04\x42\x80\x80\x80\x80\x80\x80\x04\x37\x03\x10\x20\x01\x20\x04\x41\x10\x6a\x10\xe2\x09\x21\x05\x0c\x10\x0b\x20\x04\x41\xc0\x00\x6a\x42\x83\x80\x80\x80\xf0\x00\x37\x03\x00\x20\x04\x42\x81\x80\x80\x80\x30\x37\x03\x38\x20\x04\x42\x80\x80\x80\x80\xc0\x00\x37\x03\x30\x20\x01\x20\x04\x41\x30\x6a\x10\xe2\x09\x21\x05\x0c\x0f\x0b\x20\x04\x41\xe0\x00\x6a\x42\x83\x80\x80\x80\xf0\x00\x37\x03\x00\x20\x04\x42\x81\x80\x80\x80\xc0\x00\x37\x03\x58\x20\x04\x42\x80\x80\x80\x80\x20\x37\x03\x50\x20\x01\x20\x04\x41\xd0\x00\x6a\x10\xe2\x09\x21\x05\x0c\x0e\x0b\x20\x04\x41\x90\x01\x6a\x41\x07\x36\x02\x00\x20\x04\x41\x88\x01\x6a\x42\x83\x80\x80\x80\x30\x37\x03\x00\x20\x04\x41\x80\x01\x6a\x42\x83\x80\x80\x80\x10\x37\x03\x00\x20\x04\x42\x81\x80\x80\x80\xc0\x00\x37\x03\x78\x20\x04\x42\x80\x80\x80\x80\xe0\x01\x37\x03\x70\x20\x01\x20\x04\x41\xf0\x00\x6a\x10\xe2\x09\x21\x05\x0c\x0d\x0b\x20\x04\x41\xc8\x01\x6a\x42\x83\x80\x80\x80\xf0\x00\x37\x03\x00\x20\x04\x41\xc0\x01\x6a\x42\x81\x80\x80\x80\x20\x37\x03\x00\x20\x04\x41\xb8\x01\x6a\x42\x83\x80\x80\x80\x30\x37\x03\x00\x20\x04\x41\xb0\x01\x6a\x42\x83\x80\x80\x80\x10\x37\x03\x00\x20\x04\x42\x81\x80\x80\x80\xc0\x00\x37\x03\xa8\x01\x20\x04\x42\x80\x80\x80\x80\xe0\x87\x01\x37\x03\xa0\x01\x20\x01\x20\x04\x41\xa0\x01\x6a\x10\xe2\x09\x21\x05\x0c\x0c\x0b\x20\x04\x41\xe8\x01\x6a\x41\x07\x36\x02\x00\x20\x04\x41\xe0\x01\x6a\x42\x83\x80\x80\x80\xe0\x00\x37\x03\x00\x20\x04\x42\x81\x80\x80\x80\xd0\x00\x37\x03\xd8\x01\x20\x04\x42\x80\x80\x80\x80\x90\xa8\x80\x80\x3f\x37\x03\xd0\x01\x20\x01\x20\x04\x41\xd0\x01\x6a\x10\xe2\x09\x21\x05\x0c\x0b\x0b\x20\x04\x41\x80\x02\x6a\x42\x83\x80\x80\x80\xf0\x00\x37\x03\x00\x20\x04\x42\x81\x80\x80\x80\xd0\x00\x37\x03\xf8\x01\x20\x04\x42\x80\x80\x80\x80\x80\x28\x37\x03\xf0\x01\x20\x01\x20\x04\x41\xf0\x01\x6a\x10\xe2\x09\x21\x05\x0c\x0a\x0b\x20\x04\x41\xc8\x02\x6a\x42\x84\x80\x80\x80\xf0\x00\x37\x03\x00\x20\x04\x41\xc0\x02\x6a\x42\x83\x80\x80\x80\xe0\x00\x37\x03\x00\x20\x04\x41\xb8\x02\x6a\x42\x81\x80\x80\x80\xb0\x01\x37\x03\x00\x20\x04\x41\xb0\x02\x6a\x42\x9e\x80\x80\x80\x30\x37\x03\x00\x20\x04\x41\xa8\x02\x6a\x42\x9d\x80\x80\x80\x10\x37\x03\x00\x20\x04\x41\xa0\x02\x6a\x42\x83\x80\x80\x80\x10\x37\x03\x00\x20\x04\x42\x81\x80\x80\x80\xf0\x00\x37\x03\x98\x02\x20\x04\x42\x80\x80\x80\x80\xe0\x87\x01\x37\x03\x90\x02\x20\x01\x20\x04\x41\x90\x02\x6a\x10\xe2\x09\x21\x05\x0c\x09\x0b\x20\x04\x41\x98\x03\x6a\x41\x07\x36\x02\x00\x20\x04\x41\x90\x03\x6a\x42\x86\x80\x80\x80\xc0\x00\x37\x03\x00\x20\x04\x41\x88\x03\x6a\x42\x8c\x80\x80\x80\x30\x37\x03\x00\x20\x04\x41\x80\x03\x6a\x42\x83\x80\x80\x80\x10\x37\x03\x00\x20\x04\x41\xf8\x02\x6a\x42\x81\x80\x80\x80\xe0\x03\x37\x03\x00\x20\x04\x41\xf0\x02\x6a\x42\x81\x80\x80\x80\xd0\x03\x37\x03\x00\x20\x04\x41\xe8\x02\x6a\x42\x88\x80\x80\x80\x30\x37\x03\x00\x20\x04\x41\xe0\x02\x6a\x42\x83\x80\x80\x80\x10\x37\x03\x00\x20\x04\x42\x81\x80\x80\x80\xf0\x00\x37\x03\xd8\x02\x20\x04\x42\x80\x80\x80\x80\xe0\xdf\xc1\x00\x37\x03\xd0\x02\x20\x01\x20\x04\x41\xd0\x02\x6a\x10\xe2\x09\x21\x05\x0c\x08\x0b\x20\x01\x41\x01\x10\xe3\x09\x21\x05\x0c\x07\x0b\x20\x01\x41\x02\x10\xe3\x09\x21\x05\x0c\x06\x0b\x20\x01\x41\x07\x10\xe3\x09\x21\x05\x0c\x05\x0b\x20\x04\x41\xb0\x03\x6a\x42\x85\x80\x80\x80\xf0\x00\x37\x03\x00\x20\x04\x42\x81\x80\x80\x80\xd0\x01\x37\x03\xa8\x03\x20\x04\x42\x82\x80\x80\x80\x10\x37\x03\xa0\x03\x20\x01\x20\x04\x41\xa0\x03\x6a\x10\xe2\x09\x21\x05\x0c\x04\x0b\x20\x04\x41\xd0\x03\x6a\x42\x85\x80\x80\x80\xf0\x00\x37\x03\x00\x20\x04\x42\x81\x80\x80\x80\xe0\x01\x37\x03\xc8\x03\x20\x04\x42\x82\x80\x80\x80\xc0\x00\x37\x03\xc0\x03\x20\x01\x20\x04\x41\xc0\x03\x6a\x10\xe2\x09\x21\x05\x0c\x03\x0b\x20\x04\x41\xf0\x03\x6a\x42\x85\x80\x80\x80\xf0\x00\x37\x03\x00\x20\x04\x42\x81\x80\x80\x80\xf0\x01\x37\x03\xe8\x03\x20\x04\x42\x82\x80\x80\x80\xc0\x00\x37\x03\xe0\x03\x20\x01\x20\x04\x41\xe0\x03\x6a\x10\xe2\x09\x21\x05\x0c\x02\x0b\x20\x04\x41\x90\x04\x6a\x42\x85\x80\x80\x80\xf0\x00\x37\x03\x00\x20\x04\x42\x81\x80\x80\x80\xa0\x01\x37\x03\x88\x04\x20\x04\x42\x81\x80\x80\x80\x80\x06\x37\x03\x80\x04\x20\x01\x20\x04\x41\x80\x04\x6a\x10\xe2\x09\x21\x05\x0c\x01\x0b\x41\x7e\x21\x05\x20\x03\x41\x21\x4b\x0d\x09\x20\x01\x20\x03\x41\x10\x6a\x10\xe4\x09\x21\x05\x0b\x20\x05\x45\x0d\x01\x0c\x08\x0b\x41\x7f\x21\x05\x20\x01\x41\x00\x41\x80\x01\x10\xe0\x09\x0d\x07\x0b\x02\x40\x20\x06\x41\xd0\x00\x47\x0d\x00\x20\x01\x10\xd1\x09\x45\x0d\x00\x20\x01\x28\x02\x0c\x20\x01\x28\x02\x08\x41\x00\x20\x01\x28\x02\x10\x11\x01\x00\x1a\x0c\x17\x0b\x20\x04\x20\x07\x41\x01\x6a\x36\x02\x9c\x04\x41\x80\x80\x80\x80\x04\x21\x06\x0c\x15\x0b\x41\x00\x21\x06\x20\x05\x20\x00\x28\x02\x1c\x49\x0d\x13\x0b\x20\x00\x41\xec\xa1\x03\x41\x00\x10\x85\x08\x0c\x14\x0b\x20\x09\x0e\x05\x0a\x0d\x0d\x0d\x08\x0a\x0b\x41\x00\x21\x06\x20\x09\x0e\x02\x06\x0b\x06\x0b\x20\x03\x0e\x05\x09\x0b\x0b\x0b\x07\x09\x0b\x20\x00\x41\xe4\x9f\x03\x41\x00\x10\x85\x08\x0c\x10\x0b\x20\x01\x28\x02\x0c\x20\x01\x28\x02\x08\x41\x00\x20\x01\x28\x02\x10\x11\x01\x00\x1a\x20\x05\x41\x7e\x47\x0d\x01\x0b\x20\x00\x41\x90\xa1\x03\x41\x00\x10\x85\x08\x0c\x0e\x0b\x20\x00\x10\x86\x08\x0c\x0d\x0b\x20\x04\x28\x02\xa8\x05\x21\x01\x20\x04\x28\x02\xac\x05\x21\x06\x20\x04\x28\x02\xb0\x05\x21\x04\x03\x40\x20\x03\x45\x0d\x00\x20\x05\x28\x02\x0c\x20\x05\x28\x02\x08\x41\x00\x20\x05\x28\x02\x10\x11\x01\x00\x1a\x20\x06\x20\x01\x41\x00\x20\x04\x11\x01\x00\x1a\x0c\x00\x0b\x00\x0b\x02\x40\x02\x40\x20\x08\x2d\x00\x00\x22\x01\x41\xdf\x01\x71\x41\xbf\x7f\x6a\x41\xff\x01\x71\x41\x1a\x49\x0d\x00\x20\x00\x28\x02\x28\x21\x06\x20\x03\x45\x0d\x01\x20\x01\x41\xdf\x00\x46\x20\x01\x41\x50\x6a\x41\xff\x01\x71\x41\x0a\x49\x72\x45\x0d\x01\x20\x06\x0d\x0a\x0b\x20\x04\x20\x05\x41\x03\x6a\x36\x02\x9c\x04\x20\x01\x41\x1f\x71\x21\x06\x0c\x0b\x0b\x20\x06\x0d\x08\x20\x04\x20\x07\x36\x02\x9c\x04\x41\xdc\x00\x21\x06\x0c\x0a\x0b\x41\x05\x21\x06\x0c\x03\x0b\x41\x04\x21\x06\x0c\x02\x0b\x41\x03\x21\x06\x0c\x01\x0b\x41\x02\x21\x06\x0b\x20\x01\x41\xec\x00\x36\x02\x10\x41\x00\x21\x07\x20\x01\x41\x00\x36\x02\x08\x20\x01\x42\x00\x37\x02\x00\x20\x01\x20\x00\x28\x02\x40\x36\x02\x0c\x20\x06\x41\x01\x71\x21\x09\x20\x06\x41\x01\x74\x41\x0c\x71\x41\xd8\x9f\x03\x6a\x28\x02\x00\x22\x06\x41\x02\x6a\x21\x03\x20\x06\x2f\x01\x00\x41\x01\x74\x21\x05\x02\x40\x02\x40\x03\x40\x20\x05\x45\x0d\x01\x20\x03\x2f\x01\x00\x21\x00\x02\x40\x20\x01\x28\x02\x00\x22\x06\x20\x01\x28\x02\x04\x48\x0d\x00\x20\x01\x20\x06\x41\x01\x6a\x10\xe5\x09\x0d\x03\x20\x01\x28\x02\x08\x21\x07\x20\x01\x28\x02\x00\x21\x06\x0b\x20\x01\x20\x06\x41\x01\x6a\x36\x02\x00\x20\x07\x20\x06\x41\x02\x74\x6a\x20\x00\x36\x02\x00\x20\x05\x41\x7f\x6a\x21\x05\x20\x03\x41\x02\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x41\x80\x80\x80\x80\x04\x21\x06\x20\x09\x45\x0d\x06\x20\x01\x10\xd1\x09\x45\x0d\x06\x0b\x20\x01\x28\x02\x0c\x20\x01\x28\x02\x08\x41\x00\x20\x01\x28\x02\x10\x11\x01\x00\x1a\x0c\x06\x0b\x20\x00\x28\x02\x28\x41\x01\x74\x21\x01\x0b\x20\x04\x20\x07\x36\x02\x9c\x04\x02\x40\x20\x04\x41\x9c\x04\x6a\x20\x01\x10\x8f\x07\x22\x01\x41\x7f\x4c\x0d\x00\x20\x01\x21\x06\x0c\x04\x0b\x02\x40\x20\x01\x41\x7e\x47\x0d\x00\x20\x04\x28\x02\x9c\x04\x22\x05\x2d\x00\x00\x22\x01\x45\x0d\x00\x41\xae\xa1\x03\x20\x01\x41\x10\x10\x78\x0d\x01\x0b\x20\x00\x28\x02\x28\x0d\x01\x20\x04\x28\x02\x9c\x04\x21\x05\x0b\x20\x06\x41\x80\x01\x49\x0d\x01\x20\x05\x41\x06\x20\x04\x41\x9c\x04\x6a\x10\x9e\x04\x22\x06\x41\x80\x80\x04\x49\x0d\x02\x20\x00\x28\x02\x28\x0d\x02\x20\x00\x41\xfb\xa1\x03\x41\x00\x10\x85\x08\x0c\x03\x0b\x20\x00\x41\xbe\xa1\x03\x41\x00\x10\x85\x08\x0c\x02\x0b\x20\x04\x20\x05\x41\x01\x6a\x36\x02\x9c\x04\x0b\x20\x02\x20\x04\x28\x02\x9c\x04\x36\x02\x00\x0c\x01\x0b\x41\x7f\x21\x06\x0b\x20\x04\x41\xd0\x05\x6a\x24\x00\x20\x06\x0b\x54\x01\x04\x7f\x20\x00\x41\x00\x36\x02\x04\x20\x00\x28\x02\x08\x21\x03\x20\x00\x41\x00\x36\x02\x08\x20\x00\x28\x02\x00\x21\x04\x20\x00\x41\x00\x36\x02\x00\x20\x00\x28\x02\x10\x21\x05\x20\x00\x28\x02\x0c\x21\x06\x20\x00\x20\x03\x20\x04\x20\x01\x20\x02\x41\x00\x10\xd0\x09\x21\x00\x20\x06\x20\x03\x41\x00\x20\x05\x11\x01\x00\x1a\x20\x00\x0b\x35\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x20\x03\x20\x01\x36\x02\x08\x20\x03\x20\x02\x41\x01\x6a\x36\x02\x0c\x20\x00\x20\x03\x41\x08\x6a\x41\x02\x10\xce\x09\x21\x00\x20\x03\x41\x10\x6a\x24\x00\x20\x00\x0b\xc4\x02\x01\x05\x7f\x41\x00\x21\x06\x41\x00\x21\x07\x02\x40\x03\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x06\x20\x02\x4e\x22\x08\x0d\x00\x20\x07\x20\x04\x4e\x0d\x00\x02\x40\x20\x01\x20\x06\x41\x02\x74\x6a\x28\x02\x00\x22\x08\x20\x03\x20\x07\x41\x02\x74\x6a\x28\x02\x00\x22\x09\x4f\x0d\x00\x20\x08\x21\x09\x0c\x02\x0b\x20\x08\x20\x09\x47\x0d\x03\x20\x07\x41\x01\x6a\x21\x07\x20\x06\x41\x01\x6a\x21\x06\x20\x08\x21\x09\x0c\x04\x0b\x20\x08\x0d\x01\x20\x01\x20\x06\x41\x02\x74\x6a\x28\x02\x00\x21\x09\x0b\x20\x06\x41\x01\x6a\x21\x06\x0c\x02\x0b\x20\x07\x20\x04\x4e\x0d\x03\x20\x03\x20\x07\x41\x02\x74\x6a\x28\x02\x00\x21\x09\x0b\x20\x07\x41\x01\x6a\x21\x07\x0b\x02\x40\x02\x40\x02\x40\x20\x05\x41\x02\x4b\x0d\x00\x02\x40\x02\x40\x20\x05\x0e\x03\x03\x00\x01\x03\x0b\x20\x06\x20\x07\x71\x41\x01\x71\x21\x0a\x0c\x03\x0b\x20\x07\x20\x06\x73\x41\x01\x71\x21\x0a\x0c\x02\x0b\x10\x40\x00\x0b\x20\x07\x20\x06\x72\x41\x01\x71\x21\x0a\x0b\x20\x0a\x20\x00\x28\x02\x00\x22\x08\x41\x01\x71\x46\x0d\x00\x02\x40\x20\x08\x20\x00\x28\x02\x04\x48\x0d\x00\x02\x40\x20\x00\x20\x08\x41\x01\x6a\x10\xe5\x09\x45\x0d\x00\x41\x7f\x0f\x0b\x20\x00\x28\x02\x00\x21\x08\x0b\x20\x00\x20\x08\x41\x01\x6a\x36\x02\x00\x20\x00\x28\x02\x08\x20\x08\x41\x02\x74\x6a\x20\x09\x36\x02\x00\x0c\x00\x0b\x00\x0b\x20\x00\x10\xee\x09\x41\x00\x0b\x60\x01\x04\x7f\x41\x7f\x21\x01\x02\x40\x20\x00\x20\x00\x28\x02\x00\x22\x02\x41\x02\x6a\x22\x03\x10\xe5\x09\x0d\x00\x20\x00\x28\x02\x08\x22\x01\x41\x04\x6a\x20\x01\x20\x02\x41\x02\x74\x22\x02\x10\xad\x01\x1a\x41\x00\x21\x01\x20\x00\x28\x02\x08\x22\x04\x41\x00\x36\x02\x00\x20\x02\x20\x04\x6a\x41\x04\x6a\x41\x7f\x36\x02\x00\x20\x00\x20\x03\x36\x02\x00\x20\x00\x10\xee\x09\x0b\x20\x01\x0b\xba\x02\x01\x04\x7f\x02\x40\x20\x01\x28\x02\x00\x22\x02\x41\xfe\xff\x07\x49\x0d\x00\x20\x00\x41\xc6\x9f\x03\x41\x00\x10\x85\x08\x41\x7f\x0f\x0b\x02\x40\x02\x40\x20\x02\x41\x01\x76\x22\x03\x0d\x00\x20\x00\x41\x02\x41\x7f\x10\x82\x08\x1a\x41\x00\x21\x04\x0c\x01\x0b\x02\x40\x20\x02\x41\x02\x74\x20\x01\x28\x02\x08\x6a\x22\x05\x41\x7c\x6a\x28\x02\x00\x22\x02\x41\x7f\x47\x0d\x00\x20\x05\x41\x78\x6a\x28\x02\x00\x21\x02\x0b\x02\x40\x20\x02\x41\xff\xff\x03\x4b\x0d\x00\x20\x00\x41\x15\x20\x03\x10\xdb\x09\x41\x00\x21\x04\x41\x00\x21\x02\x41\x00\x21\x03\x03\x40\x20\x03\x20\x01\x28\x02\x00\x4e\x0d\x02\x20\x00\x20\x01\x28\x02\x08\x20\x02\x6a\x2f\x01\x00\x10\xe6\x09\x20\x00\x41\xff\xff\x03\x20\x01\x28\x02\x08\x20\x02\x6a\x41\x04\x6a\x28\x02\x00\x41\x7f\x6a\x22\x05\x20\x05\x41\x7e\x46\x1b\x41\xff\xff\x03\x71\x10\xe6\x09\x20\x02\x41\x08\x6a\x21\x02\x20\x03\x41\x02\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x41\x16\x20\x03\x10\xdb\x09\x41\x00\x21\x04\x41\x00\x21\x02\x41\x00\x21\x03\x03\x40\x20\x03\x20\x01\x28\x02\x00\x4e\x0d\x01\x20\x00\x20\x01\x28\x02\x08\x20\x02\x6a\x28\x02\x00\x10\x81\x08\x20\x00\x20\x01\x28\x02\x08\x20\x02\x6a\x41\x04\x6a\x28\x02\x00\x41\x7f\x6a\x10\x81\x08\x20\x02\x41\x08\x6a\x21\x02\x20\x03\x41\x02\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x04\x0b\x22\x01\x01\x7f\x02\x40\x20\x00\x28\x02\x3c\x22\x01\x41\x7f\x4a\x0d\x00\x20\x00\x10\xd7\x09\x1a\x20\x00\x28\x02\x3c\x21\x01\x0b\x20\x01\x0b\xb2\x03\x01\x04\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x20\x03\x20\x01\x28\x02\x00\x22\x04\x36\x02\x0c\x20\x02\x41\x01\x74\x21\x05\x20\x00\x21\x06\x02\x40\x02\x40\x03\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x04\x2d\x00\x00\x22\x02\x41\xdc\x00\x46\x0d\x00\x20\x02\x41\x3e\x47\x0d\x01\x20\x06\x20\x00\x46\x0d\x07\x41\x00\x21\x02\x20\x06\x41\x00\x3a\x00\x00\x20\x01\x20\x03\x28\x02\x0c\x41\x01\x6a\x22\x06\x36\x02\x00\x20\x03\x20\x06\x36\x02\x0c\x0c\x08\x0b\x20\x03\x20\x04\x41\x01\x6a\x36\x02\x0c\x20\x04\x2d\x00\x01\x41\xf5\x00\x46\x0d\x01\x0c\x06\x0b\x20\x02\x41\x18\x74\x41\x18\x75\x41\x7f\x4a\x0d\x02\x20\x04\x41\x06\x20\x03\x41\x0c\x6a\x10\x9e\x04\x21\x02\x0c\x01\x0b\x20\x03\x41\x0c\x6a\x20\x05\x10\x8f\x07\x21\x02\x0b\x20\x02\x41\xff\xff\xc3\x00\x4b\x0d\x03\x0c\x01\x0b\x20\x03\x20\x04\x41\x01\x6a\x36\x02\x0c\x0b\x02\x40\x02\x40\x20\x06\x20\x00\x47\x0d\x00\x02\x40\x02\x40\x20\x02\x41\xff\x00\x4b\x0d\x00\x20\x02\x41\x03\x76\x41\xfc\xff\xff\xff\x01\x71\x41\xc0\xa2\x03\x6a\x28\x02\x00\x20\x02\x41\x1f\x71\x76\x41\x01\x71\x21\x04\x0c\x01\x0b\x20\x02\x10\xfa\x07\x21\x04\x0b\x20\x04\x45\x0d\x03\x0c\x01\x0b\x02\x40\x02\x40\x20\x02\x41\xff\x00\x4b\x0d\x00\x20\x02\x41\x03\x76\x41\xfc\xff\xff\xff\x01\x71\x41\xd0\xa2\x03\x6a\x28\x02\x00\x20\x02\x41\x1f\x71\x76\x41\x01\x71\x21\x04\x0c\x01\x0b\x20\x02\x41\x01\x72\x41\x8d\xc0\x00\x46\x20\x02\x10\xf9\x07\x41\x00\x47\x72\x21\x04\x0b\x20\x04\x45\x0d\x02\x0b\x20\x06\x20\x00\x6b\x41\xf9\x00\x4a\x0d\x01\x02\x40\x02\x40\x20\x02\x41\xff\x00\x4b\x0d\x00\x20\x06\x20\x02\x3a\x00\x00\x20\x06\x41\x01\x6a\x21\x06\x0c\x01\x0b\x20\x06\x20\x06\x20\x02\x10\xe8\x02\x6a\x21\x06\x0b\x20\x03\x28\x02\x0c\x21\x04\x0c\x00\x0b\x00\x0b\x41\x7f\x21\x02\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x02\x0b\x5a\x01\x03\x7f\x20\x00\x20\x01\x6a\x21\x03\x20\x02\x10\x71\x21\x04\x41\x01\x21\x01\x02\x40\x03\x40\x02\x40\x20\x00\x20\x03\x49\x0d\x00\x41\x7f\x21\x01\x0c\x02\x0b\x02\x40\x20\x00\x10\x71\x22\x05\x20\x04\x47\x0d\x00\x20\x02\x20\x00\x20\x04\x10\x6b\x45\x0d\x02\x0b\x20\x01\x41\x01\x6a\x21\x01\x20\x05\x20\x00\x6a\x41\x01\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x20\x01\x0b\xee\x02\x01\x06\x7f\x23\x00\x41\x90\x01\x6b\x22\x03\x24\x00\x20\x01\x41\x00\x36\x02\x00\x20\x03\x20\x00\x28\x02\x20\x22\x04\x36\x02\x8c\x01\x41\x01\x21\x05\x03\x7f\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x04\x20\x00\x28\x02\x1c\x22\x06\x49\x0d\x00\x20\x05\x21\x07\x0c\x01\x0b\x20\x04\x2d\x00\x00\x22\x08\x41\xa5\x7f\x6a\x22\x07\x41\x01\x4d\x0d\x02\x20\x08\x41\x28\x47\x0d\x03\x02\x40\x20\x04\x2d\x00\x01\x41\x3f\x47\x0d\x00\x20\x04\x2d\x00\x02\x41\x3c\x47\x0d\x04\x20\x04\x2d\x00\x03\x22\x08\x41\x21\x46\x0d\x04\x20\x08\x41\x3d\x46\x0d\x04\x20\x01\x41\x01\x36\x02\x00\x02\x40\x20\x02\x45\x0d\x00\x20\x03\x20\x04\x41\x03\x6a\x36\x02\x8c\x01\x20\x03\x20\x03\x41\x8c\x01\x6a\x20\x00\x28\x02\x28\x10\xd4\x09\x0d\x00\x20\x03\x20\x02\x10\x77\x45\x0d\x03\x0b\x20\x05\x41\x01\x6a\x21\x07\x20\x05\x41\xfd\x01\x4a\x0d\x01\x20\x03\x28\x02\x8c\x01\x21\x04\x20\x07\x21\x05\x0c\x04\x0b\x20\x05\x41\xfd\x01\x4a\x21\x08\x20\x05\x41\x01\x6a\x22\x07\x21\x05\x20\x08\x45\x0d\x03\x0b\x41\x7f\x20\x07\x20\x02\x1b\x21\x05\x0b\x20\x03\x41\x90\x01\x6a\x24\x00\x20\x05\x0f\x0b\x02\x40\x02\x40\x02\x40\x20\x07\x0e\x02\x01\x00\x01\x0b\x20\x04\x41\x01\x6a\x21\x04\x0c\x01\x0b\x03\x40\x20\x04\x22\x08\x41\x01\x6a\x22\x04\x20\x06\x4f\x0d\x01\x20\x04\x2d\x00\x00\x41\xa4\x7f\x6a\x22\x07\x41\x01\x4b\x0d\x00\x02\x40\x20\x07\x0e\x02\x00\x02\x00\x0b\x20\x08\x41\x02\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x03\x20\x04\x36\x02\x8c\x01\x0b\x20\x03\x20\x04\x41\x01\x6a\x22\x04\x36\x02\x8c\x01\x0c\x00\x0b\x0b\x28\x01\x01\x7f\x02\x40\x20\x00\x28\x02\x38\x22\x01\x41\x7f\x4a\x0d\x00\x20\x00\x20\x00\x20\x00\x41\x3c\x6a\x41\x00\x10\xd6\x09\x22\x01\x36\x02\x38\x0b\x20\x01\x0b\x0d\x00\x20\x00\x20\x01\x41\xff\x01\x71\x10\xcd\x02\x0b\x51\x01\x02\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x02\x40\x02\x40\x20\x01\x28\x02\x00\x22\x04\x2d\x00\x00\x20\x02\x46\x0d\x00\x20\x03\x20\x02\x36\x02\x00\x20\x00\x41\xe0\xa2\x03\x20\x03\x10\x85\x08\x41\x7f\x21\x02\x0c\x01\x0b\x20\x01\x20\x04\x41\x01\x6a\x36\x02\x00\x41\x00\x21\x02\x0b\x20\x03\x41\x10\x6a\x24\x00\x20\x02\x0b\x9a\x01\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x02\x40\x02\x40\x20\x01\x45\x0d\x00\x02\x40\x20\x00\x41\xff\x00\x4b\x0d\x00\x20\x00\x41\x20\x6a\x20\x00\x20\x00\x41\xbf\x7f\x6a\x41\x1a\x49\x1b\x21\x00\x0c\x02\x0b\x20\x02\x41\x04\x6a\x20\x00\x41\x02\x10\xef\x05\x1a\x20\x02\x28\x02\x04\x21\x00\x0c\x01\x0b\x02\x40\x20\x00\x41\xff\x00\x4b\x0d\x00\x20\x00\x41\x60\x6a\x20\x00\x20\x00\x41\x9f\x7f\x6a\x41\x1a\x49\x1b\x21\x00\x0c\x01\x0b\x20\x02\x41\x04\x6a\x20\x00\x41\x00\x10\xef\x05\x41\x01\x47\x0d\x00\x20\x02\x28\x02\x04\x22\x01\x20\x00\x20\x01\x41\xff\x00\x4b\x1b\x21\x00\x0b\x20\x02\x41\x10\x6a\x24\x00\x20\x00\x0b\x19\x00\x20\x00\x20\x01\x41\xff\x01\x71\x10\xcd\x02\x20\x00\x20\x02\x41\xff\xff\x03\x71\x10\xe6\x09\x0b\x1d\x00\x20\x00\x20\x01\x41\xff\x01\x71\x10\xcd\x02\x20\x00\x20\x02\x20\x00\x28\x02\x04\x6b\x41\x7c\x6a\x10\x81\x08\x0b\x4f\x01\x02\x7f\x02\x40\x02\x40\x20\x00\x28\x02\x04\x22\x03\x20\x02\x6a\x22\x04\x20\x00\x28\x02\x08\x4d\x0d\x00\x20\x00\x20\x04\x10\xec\x07\x0d\x01\x20\x00\x28\x02\x04\x21\x03\x0b\x20\x00\x28\x02\x00\x22\x04\x20\x03\x6a\x20\x04\x20\x01\x6a\x20\x02\x10\x70\x1a\x20\x00\x20\x00\x28\x02\x04\x20\x02\x6a\x36\x02\x04\x0b\x0b\x1e\x00\x20\x00\x41\xdf\x00\x46\x20\x00\x41\x50\x6a\x41\x0a\x49\x20\x00\x41\x5f\x71\x41\xbf\x7f\x6a\x41\x1a\x49\x72\x72\x0b\x75\x01\x04\x7f\x20\x01\x10\x71\x21\x02\x41\x00\x21\x03\x02\x40\x03\x40\x02\x40\x20\x00\x2d\x00\x00\x0d\x00\x41\x7f\x21\x03\x0c\x02\x0b\x03\x40\x02\x40\x02\x40\x20\x00\x41\x2c\x10\x76\x22\x04\x0d\x00\x20\x00\x10\x71\x21\x05\x0c\x01\x0b\x20\x04\x20\x00\x6b\x21\x05\x0b\x02\x40\x20\x05\x20\x02\x47\x0d\x00\x20\x00\x20\x01\x20\x02\x10\x6b\x45\x0d\x03\x0b\x20\x05\x20\x00\x6a\x41\x01\x6a\x21\x00\x20\x04\x0d\x00\x0b\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x03\x0b\x70\x01\x02\x7f\x02\x40\x02\x40\x20\x00\x28\x02\x00\x22\x03\x41\x02\x6a\x22\x04\x20\x00\x28\x02\x04\x4c\x0d\x00\x41\x7f\x21\x03\x20\x00\x20\x04\x10\xe5\x09\x0d\x01\x20\x00\x28\x02\x00\x21\x03\x0b\x20\x00\x20\x03\x41\x01\x6a\x36\x02\x00\x20\x00\x28\x02\x08\x22\x04\x20\x03\x41\x02\x74\x6a\x20\x01\x36\x02\x00\x20\x00\x20\x00\x28\x02\x00\x22\x03\x41\x01\x6a\x36\x02\x00\x20\x04\x20\x03\x41\x02\x74\x6a\x20\x02\x36\x02\x00\x41\x00\x21\x03\x0b\x20\x03\x0b\x46\x00\x02\x40\x41\xb0\xf4\x04\x20\x01\x10\xdf\x09\x22\x01\x41\x00\x4e\x0d\x00\x41\x7e\x0f\x0b\x02\x40\x02\x40\x20\x01\x41\x1d\x4a\x0d\x00\x42\x01\x20\x01\xad\x86\xa7\x21\x01\x0c\x01\x0b\x20\x01\x41\x02\x74\x41\xd8\xf8\x04\x6a\x28\x02\x00\x21\x01\x0b\x20\x00\x20\x01\x10\xf1\x09\x0b\xb1\x07\x01\x06\x7f\x23\x00\x41\xe0\x00\x6b\x22\x02\x24\x00\x20\x02\x20\x01\x36\x02\x5c\x41\x00\x21\x01\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x03\x40\x20\x02\x20\x01\x41\x7f\x6a\x22\x03\x41\x14\x6c\x6a\x21\x04\x02\x40\x03\x40\x20\x02\x20\x02\x28\x02\x5c\x22\x05\x41\x04\x6a\x36\x02\x5c\x20\x05\x28\x02\x00\x22\x06\x41\x07\x4b\x0d\x01\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x06\x0e\x08\x00\x01\x02\x03\x03\x03\x04\x08\x00\x0b\x20\x01\x41\x04\x4e\x0d\x10\x20\x05\x28\x02\x04\x21\x06\x20\x02\x20\x01\x41\x14\x6c\x6a\x22\x04\x41\x00\x36\x02\x08\x20\x04\x20\x00\x28\x02\x0c\x36\x02\x0c\x20\x04\x20\x00\x28\x02\x10\x22\x07\x41\x87\x01\x20\x07\x1b\x36\x02\x10\x20\x04\x42\x00\x37\x02\x00\x20\x02\x20\x05\x41\x08\x6a\x36\x02\x5c\x20\x01\x41\x01\x6a\x21\x01\x20\x04\x20\x06\x10\xf1\x09\x45\x0d\x06\x0c\x09\x0b\x20\x01\x41\x04\x4e\x0d\x0e\x20\x05\x28\x02\x04\x21\x06\x20\x02\x20\x01\x41\x14\x6c\x6a\x22\x04\x41\x00\x36\x02\x08\x20\x04\x20\x00\x28\x02\x0c\x36\x02\x0c\x20\x04\x20\x00\x28\x02\x10\x22\x07\x41\x87\x01\x20\x07\x1b\x36\x02\x10\x20\x04\x42\x00\x37\x02\x00\x20\x02\x20\x05\x41\x08\x6a\x36\x02\x5c\x20\x01\x41\x01\x6a\x21\x01\x20\x04\x20\x06\x10\xe4\x09\x45\x0d\x05\x0c\x08\x0b\x20\x01\x41\x04\x4e\x0d\x0c\x20\x05\x28\x02\x04\x21\x06\x20\x02\x20\x01\x41\x14\x6c\x6a\x22\x04\x41\x00\x36\x02\x08\x20\x04\x20\x00\x28\x02\x0c\x36\x02\x0c\x20\x04\x20\x00\x28\x02\x10\x22\x07\x41\x87\x01\x20\x07\x1b\x36\x02\x10\x20\x04\x42\x00\x37\x02\x00\x20\x02\x20\x05\x41\x08\x6a\x36\x02\x5c\x20\x01\x41\x01\x6a\x21\x01\x20\x04\x20\x06\x10\xe3\x09\x45\x0d\x04\x0c\x07\x0b\x20\x01\x41\x01\x4c\x0d\x0a\x20\x01\x41\x04\x4e\x0d\x09\x20\x02\x20\x01\x41\x14\x6c\x6a\x22\x05\x20\x00\x28\x02\x10\x22\x07\x41\x87\x01\x20\x07\x1b\x36\x02\x10\x20\x05\x20\x00\x28\x02\x0c\x36\x02\x0c\x20\x05\x41\x00\x36\x02\x08\x20\x05\x42\x00\x37\x02\x00\x20\x05\x20\x05\x41\x58\x6a\x22\x07\x28\x02\x08\x20\x07\x28\x02\x00\x20\x04\x28\x02\x08\x20\x04\x28\x02\x00\x20\x06\x41\x7d\x6a\x10\xd0\x09\x0d\x05\x20\x02\x20\x01\x41\x7e\x6a\x41\x14\x6c\x6a\x22\x01\x28\x02\x0c\x20\x07\x41\x08\x6a\x22\x06\x28\x02\x00\x41\x00\x20\x01\x28\x02\x10\x11\x01\x00\x1a\x20\x04\x28\x02\x0c\x20\x04\x41\x08\x6a\x28\x02\x00\x41\x00\x20\x04\x28\x02\x10\x11\x01\x00\x1a\x20\x07\x41\x10\x6a\x20\x05\x41\x10\x6a\x28\x02\x00\x36\x02\x00\x20\x06\x20\x05\x41\x08\x6a\x29\x02\x00\x37\x02\x00\x20\x07\x20\x05\x29\x02\x00\x37\x02\x00\x20\x03\x21\x01\x0c\x03\x0b\x20\x01\x41\x00\x4c\x0d\x07\x20\x04\x10\xd1\x09\x45\x0d\x00\x0c\x05\x0b\x00\x0b\x0b\x10\x40\x00\x0b\x20\x01\x41\x01\x47\x0d\x02\x41\x7f\x21\x01\x02\x40\x20\x00\x20\x02\x28\x02\x00\x10\xe5\x09\x0d\x00\x20\x00\x28\x02\x08\x20\x02\x28\x02\x08\x20\x02\x28\x02\x00\x41\x02\x74\x10\x70\x1a\x20\x00\x20\x02\x28\x02\x00\x36\x02\x00\x41\x00\x21\x01\x0b\x20\x02\x28\x02\x0c\x20\x02\x28\x02\x08\x41\x00\x20\x02\x28\x02\x10\x11\x01\x00\x1a\x0c\x09\x0b\x20\x01\x41\x01\x6a\x21\x01\x0b\x20\x02\x41\x10\x6a\x21\x05\x41\x00\x21\x04\x03\x40\x02\x40\x20\x04\x20\x01\x48\x0d\x00\x41\x7f\x21\x01\x0c\x09\x0b\x20\x05\x41\x7c\x6a\x28\x02\x00\x20\x05\x41\x78\x6a\x28\x02\x00\x41\x00\x20\x05\x28\x02\x00\x11\x01\x00\x1a\x20\x05\x41\x14\x6a\x21\x05\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x41\xeb\xc1\x05\x41\x8e\xc1\x05\x41\xa6\x0a\x41\xbc\xc1\x05\x10\x4a\x00\x0b\x41\xdc\xc1\x05\x41\x8e\xc1\x05\x41\x9b\x0a\x41\xbc\xc1\x05\x10\x4a\x00\x0b\x41\xf0\xc0\x05\x41\x8e\xc1\x05\x41\x8c\x0a\x41\xbc\xc1\x05\x10\x4a\x00\x0b\x41\xcd\xc1\x05\x41\x8e\xc1\x05\x41\x8b\x0a\x41\xbc\xc1\x05\x10\x4a\x00\x0b\x41\xf0\xc0\x05\x41\x8e\xc1\x05\x41\x80\x0a\x41\xbc\xc1\x05\x10\x4a\x00\x0b\x41\xf0\xc0\x05\x41\x8e\xc1\x05\x41\xf9\x09\x41\xbc\xc1\x05\x10\x4a\x00\x0b\x41\xf0\xc0\x05\x41\x8e\xc1\x05\x41\xf2\x09\x41\xbc\xc1\x05\x10\x4a\x00\x0b\x20\x02\x41\xe0\x00\x6a\x24\x00\x20\x01\x0b\xe2\x02\x01\x07\x7f\x02\x40\x20\x01\x45\x0d\x00\x41\x00\x21\x02\x41\xe4\xc0\x05\x21\x03\x41\x00\x21\x04\x03\x40\x02\x40\x20\x04\x41\x03\x47\x0d\x00\x20\x01\x41\x06\x71\x45\x20\x01\x41\x01\x71\x22\x05\x45\x72\x21\x06\x41\x00\x21\x01\x03\x40\x20\x01\x41\xe9\x02\x46\x0d\x03\x02\x40\x02\x40\x20\x02\x20\x01\x41\x02\x74\x41\xc0\xa3\x03\x6a\x28\x02\x00\x22\x04\x41\x04\x76\x41\x0f\x71\x22\x07\x76\x41\x01\x71\x45\x0d\x00\x20\x04\x41\x0f\x76\x21\x03\x20\x04\x41\x08\x76\x41\xff\x00\x71\x21\x08\x02\x40\x20\x07\x41\x7c\x6a\x22\x04\x41\x01\x4b\x0d\x00\x02\x40\x02\x40\x20\x04\x0e\x02\x00\x01\x00\x0b\x20\x06\x45\x0d\x01\x20\x05\x20\x03\x6a\x21\x07\x41\x00\x21\x04\x03\x40\x20\x04\x20\x08\x4f\x0d\x03\x20\x07\x20\x04\x6a\x21\x03\x20\x04\x41\x02\x6a\x21\x04\x20\x00\x20\x03\x20\x03\x41\x01\x6a\x10\xe0\x09\x45\x0d\x00\x0c\x04\x0b\x00\x0b\x20\x06\x45\x0d\x00\x20\x03\x41\x01\x6a\x21\x04\x02\x40\x20\x05\x0d\x00\x20\x00\x20\x03\x20\x04\x10\xe0\x09\x0d\x03\x0b\x02\x40\x20\x00\x20\x04\x20\x03\x41\x02\x6a\x22\x08\x10\xe0\x09\x0d\x00\x20\x05\x45\x0d\x02\x20\x00\x20\x08\x20\x03\x41\x03\x6a\x10\xe0\x09\x45\x0d\x02\x0b\x41\x7f\x0f\x0b\x20\x00\x20\x03\x20\x08\x20\x03\x6a\x10\xe0\x09\x0d\x01\x0b\x20\x01\x41\x01\x6a\x21\x01\x0c\x01\x0b\x0b\x41\x7f\x0f\x0b\x02\x40\x20\x01\x20\x04\x76\x41\x01\x71\x45\x0d\x00\x20\x03\x28\x02\x00\x20\x02\x72\x21\x02\x0b\x20\x03\x41\x04\x6a\x21\x03\x20\x04\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x41\x00\x0b\xab\x02\x01\x06\x7f\x20\x01\x41\x02\x74\x41\xe0\x9f\x05\x6a\x28\x02\x00\x22\x02\x20\x01\x41\x01\x74\x41\xb0\xa1\x05\x6a\x2f\x01\x00\x6a\x21\x03\x41\x00\x21\x04\x41\x00\x21\x05\x41\x00\x21\x01\x02\x40\x03\x40\x20\x02\x20\x03\x4f\x0d\x01\x20\x02\x41\x01\x6a\x21\x06\x02\x40\x02\x40\x02\x40\x20\x02\x2d\x00\x00\x22\x07\x41\x3f\x4b\x0d\x00\x20\x05\x20\x07\x41\x03\x76\x6a\x41\x01\x6a\x21\x02\x02\x40\x20\x01\x45\x0d\x00\x20\x00\x20\x05\x20\x02\x10\xe0\x09\x0d\x03\x0b\x20\x01\x41\x01\x73\x21\x01\x20\x07\x41\x07\x71\x20\x02\x6a\x41\x01\x6a\x21\x07\x0c\x01\x0b\x02\x40\x02\x40\x20\x07\x41\x18\x74\x41\x18\x75\x41\x7f\x4a\x0d\x00\x20\x05\x20\x07\x6a\x41\x81\x7f\x6a\x21\x07\x0c\x01\x0b\x02\x40\x20\x07\x41\xdf\x00\x4b\x0d\x00\x20\x02\x41\x02\x6a\x21\x06\x20\x07\x41\x08\x74\x20\x02\x2d\x00\x01\x72\x20\x05\x6a\x41\x81\x80\x7f\x6a\x21\x07\x0c\x01\x0b\x20\x07\x41\x10\x74\x20\x02\x2d\x00\x01\x41\x08\x74\x72\x20\x02\x2d\x00\x02\x72\x20\x05\x6a\x41\x81\x80\x80\x7d\x6a\x21\x07\x20\x02\x41\x03\x6a\x21\x06\x0b\x20\x05\x21\x02\x0b\x02\x40\x20\x01\x45\x0d\x00\x20\x00\x20\x02\x20\x07\x10\xe0\x09\x0d\x01\x0b\x20\x01\x41\x01\x73\x21\x01\x20\x06\x21\x02\x20\x07\x21\x05\x0c\x01\x0b\x0b\x41\x7f\x21\x04\x0b\x20\x04\x0b\x56\x01\x01\x7f\x02\x40\x20\x00\x28\x02\x04\x22\x02\x20\x01\x4e\x0d\x00\x02\x40\x20\x00\x28\x02\x0c\x20\x00\x28\x02\x08\x20\x01\x20\x02\x41\x03\x6c\x41\x02\x6d\x22\x02\x20\x02\x20\x01\x48\x1b\x22\x01\x41\x02\x74\x20\x00\x28\x02\x10\x11\x01\x00\x22\x02\x0d\x00\x41\x7f\x0f\x0b\x20\x00\x20\x01\x36\x02\x04\x20\x00\x20\x02\x36\x02\x08\x0b\x41\x00\x0b\x28\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x20\x02\x20\x01\x3b\x01\x0e\x20\x00\x20\x02\x41\x0e\x6a\x41\x02\x10\xa5\x07\x1a\x20\x02\x41\x10\x6a\x24\x00\x0b\xe8\x1c\x01\x09\x7f\x20\x00\x28\x02\x04\x21\x07\x20\x00\x28\x02\x08\x21\x08\x03\x7f\x20\x05\x21\x09\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x04\x2d\x00\x00\x22\x0a\x41\x7f\x6a\x22\x05\x41\x1b\x4b\x0d\x00\x20\x04\x41\x01\x6a\x21\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x05\x0e\x1c\x02\x01\x09\x0a\x07\x08\x06\x04\x04\x00\x0b\x0b\x0c\x0f\x0d\x0e\x12\x12\x13\x13\x1b\x1a\x05\x05\x10\x11\x19\x17\x02\x0b\x41\x01\x21\x0b\x20\x06\x45\x0d\x1f\x20\x09\x0f\x0b\x20\x0b\x28\x00\x00\x21\x0a\x41\x05\x21\x0c\x0c\x01\x0b\x20\x0b\x2f\x00\x00\x21\x0a\x41\x03\x21\x0c\x0b\x20\x09\x20\x07\x4f\x0d\x1b\x02\x40\x02\x40\x20\x08\x0d\x00\x20\x09\x41\x01\x6a\x21\x05\x20\x09\x2d\x00\x00\x21\x0b\x0c\x01\x0b\x20\x09\x2f\x01\x00\x21\x0b\x20\x09\x41\x02\x6a\x22\x05\x20\x07\x4f\x0d\x00\x20\x08\x41\x02\x47\x0d\x00\x20\x0b\x41\x80\xf8\x03\x71\x41\x80\xb0\x03\x47\x0d\x00\x20\x05\x2f\x01\x00\x22\x0d\x41\x80\xf8\x03\x71\x41\x80\xb8\x03\x47\x0d\x00\x20\x0b\x41\x0a\x74\x41\x80\xf8\x3f\x71\x20\x0d\x41\xff\x07\x71\x72\x41\x80\x80\x04\x6a\x21\x0b\x20\x09\x41\x04\x6a\x21\x05\x0b\x02\x40\x20\x00\x28\x02\x18\x45\x0d\x00\x20\x0b\x20\x00\x28\x02\x1c\x10\xda\x09\x21\x0b\x0b\x20\x04\x20\x0c\x6a\x21\x04\x20\x0a\x20\x0b\x46\x0d\x20\x0c\x1b\x0b\x20\x04\x41\x05\x6a\x22\x0c\x20\x0c\x20\x04\x28\x00\x01\x6a\x22\x0d\x20\x0a\x41\x09\x46\x22\x0a\x1b\x21\x04\x41\x7f\x21\x0b\x20\x09\x21\x05\x20\x00\x20\x01\x20\x02\x20\x03\x20\x0d\x20\x0c\x20\x0a\x1b\x20\x09\x41\x00\x41\x00\x10\xe8\x09\x41\x7f\x4a\x0d\x1f\x0c\x1c\x0b\x20\x04\x28\x00\x01\x21\x0b\x20\x09\x21\x05\x20\x04\x41\x05\x6a\x22\x0c\x21\x04\x20\x00\x20\x01\x20\x02\x20\x03\x20\x0c\x20\x0b\x6a\x20\x09\x20\x0a\x41\x6a\x6a\x41\x00\x10\xe8\x09\x41\x00\x4e\x0d\x1e\x0c\x12\x0b\x20\x0b\x28\x00\x00\x20\x0b\x6a\x41\x04\x6a\x21\x04\x0c\x16\x0b\x20\x09\x21\x05\x20\x0b\x21\x04\x20\x09\x20\x00\x28\x02\x00\x22\x0a\x46\x0d\x1c\x20\x00\x28\x02\x14\x45\x0d\x17\x02\x40\x02\x40\x20\x08\x0d\x00\x20\x09\x41\x7f\x6a\x2d\x00\x00\x21\x0c\x0c\x01\x0b\x20\x09\x41\x7e\x6a\x2f\x01\x00\x21\x0c\x20\x09\x41\x7c\x6a\x22\x05\x20\x0a\x49\x0d\x00\x20\x08\x41\x02\x47\x0d\x00\x20\x0c\x41\x80\xf8\x03\x71\x41\x80\xb8\x03\x47\x0d\x00\x20\x05\x2f\x01\x00\x22\x05\x41\x80\xf8\x03\x71\x41\x80\xb0\x03\x47\x0d\x00\x20\x05\x41\xff\x07\x71\x41\x0a\x74\x20\x0c\x41\xff\x07\x71\x72\x41\x80\x80\x04\x6a\x21\x0c\x0b\x20\x09\x21\x05\x20\x0b\x21\x04\x20\x0c\x10\xe9\x09\x0d\x1c\x0c\x17\x0b\x20\x07\x21\x05\x20\x0b\x21\x04\x20\x09\x20\x07\x46\x0d\x1b\x20\x00\x28\x02\x14\x45\x0d\x16\x02\x40\x02\x40\x20\x08\x0d\x00\x20\x09\x2d\x00\x00\x21\x0a\x0c\x01\x0b\x20\x09\x2f\x01\x00\x21\x0a\x20\x09\x41\x02\x6a\x22\x05\x20\x07\x4f\x0d\x00\x20\x08\x41\x02\x47\x0d\x00\x20\x0a\x41\x80\xf8\x03\x71\x41\x80\xb0\x03\x47\x0d\x00\x20\x05\x2f\x01\x00\x22\x05\x41\x80\xf8\x03\x71\x41\x80\xb8\x03\x47\x0d\x00\x20\x0a\x41\x0a\x74\x41\x80\xf8\x3f\x71\x20\x05\x41\xff\x07\x71\x72\x41\x80\x80\x04\x6a\x21\x0a\x0b\x20\x09\x21\x05\x20\x0b\x21\x04\x20\x0a\x10\xe9\x09\x0d\x1b\x0c\x16\x0b\x20\x09\x20\x07\x46\x0d\x15\x02\x40\x02\x40\x20\x08\x0d\x00\x20\x09\x41\x01\x6a\x21\x05\x20\x09\x2d\x00\x00\x21\x0a\x0c\x01\x0b\x20\x09\x2f\x01\x00\x21\x0a\x20\x09\x41\x02\x6a\x22\x05\x20\x07\x4f\x0d\x00\x20\x08\x41\x02\x47\x0d\x00\x20\x0a\x41\x80\xf8\x03\x71\x41\x80\xb0\x03\x47\x0d\x00\x20\x05\x2f\x01\x00\x22\x04\x41\x80\xf8\x03\x71\x41\x80\xb8\x03\x47\x0d\x00\x20\x0a\x41\x0a\x74\x41\x80\xf8\x3f\x71\x20\x04\x41\xff\x07\x71\x72\x41\x80\x80\x04\x6a\x21\x0a\x20\x09\x41\x04\x6a\x21\x05\x0b\x20\x0b\x21\x04\x20\x0a\x10\xe9\x09\x45\x0d\x1a\x0c\x15\x0b\x20\x09\x20\x07\x46\x0d\x14\x02\x40\x20\x08\x0d\x00\x20\x09\x41\x01\x6a\x21\x05\x20\x0b\x21\x04\x0c\x1a\x0b\x20\x0b\x21\x04\x20\x09\x41\x02\x6a\x22\x05\x20\x07\x4f\x0d\x19\x20\x0b\x21\x04\x20\x08\x41\x02\x47\x0d\x19\x20\x0b\x21\x04\x20\x09\x2f\x01\x00\x41\x80\x78\x71\x41\xff\xff\x03\x71\x41\x80\xb0\x03\x47\x0d\x19\x20\x09\x41\x04\x6a\x20\x05\x20\x09\x2f\x01\x02\x41\x80\xf8\x03\x71\x41\x80\xb8\x03\x46\x1b\x21\x05\x20\x0b\x21\x04\x0c\x19\x0b\x20\x00\x28\x02\x0c\x20\x0b\x2d\x00\x00\x22\x05\x4d\x0d\x0a\x20\x0a\x20\x05\x41\x01\x74\x6a\x41\x02\x74\x20\x01\x6a\x41\x54\x6a\x20\x09\x36\x02\x00\x20\x04\x41\x02\x6a\x21\x04\x0c\x11\x0b\x20\x00\x28\x02\x0c\x20\x04\x2d\x00\x02\x22\x0a\x4d\x0d\x08\x20\x04\x41\x03\x6a\x21\x04\x20\x01\x20\x0b\x2d\x00\x00\x22\x05\x41\x03\x74\x6a\x21\x0b\x03\x40\x20\x05\x20\x0a\x4b\x0d\x11\x20\x0b\x42\x00\x37\x02\x00\x20\x0b\x41\x08\x6a\x21\x0b\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x02\x20\x03\x41\x02\x74\x6a\x20\x04\x28\x00\x01\x36\x02\x00\x20\x03\x41\x01\x6a\x21\x03\x20\x04\x41\x05\x6a\x21\x04\x0c\x0f\x0b\x20\x03\x41\x7f\x6a\x21\x03\x0c\x0f\x0b\x20\x03\x41\x02\x74\x20\x02\x6a\x41\x7c\x6a\x22\x05\x20\x05\x28\x02\x00\x41\x7f\x6a\x22\x05\x36\x02\x00\x20\x04\x41\x05\x6a\x22\x0b\x20\x04\x28\x00\x01\x6a\x20\x0b\x20\x05\x1b\x21\x04\x0c\x0d\x0b\x20\x02\x20\x03\x41\x02\x74\x6a\x20\x09\x36\x02\x00\x20\x03\x41\x01\x6a\x21\x03\x0c\x0d\x0b\x20\x04\x41\x05\x6a\x22\x05\x20\x05\x20\x04\x28\x00\x01\x6a\x20\x02\x20\x03\x41\x7f\x6a\x22\x03\x41\x02\x74\x6a\x28\x02\x00\x20\x09\x46\x1b\x21\x04\x0c\x0b\x0b\x41\x00\x21\x0d\x41\x00\x21\x0c\x02\x40\x20\x09\x20\x00\x28\x02\x00\x22\x04\x46\x0d\x00\x02\x40\x02\x40\x20\x08\x0d\x00\x20\x09\x41\x7f\x6a\x2d\x00\x00\x21\x05\x0c\x01\x0b\x20\x09\x41\x7e\x6a\x2f\x01\x00\x21\x05\x20\x09\x41\x7c\x6a\x22\x0c\x20\x04\x49\x0d\x00\x20\x08\x41\x02\x47\x0d\x00\x20\x05\x41\x80\xf8\x03\x71\x41\x80\xb8\x03\x47\x0d\x00\x20\x0c\x2f\x01\x00\x22\x04\x41\x80\xf8\x03\x71\x41\x80\xb0\x03\x47\x0d\x00\x20\x04\x41\xff\x07\x71\x41\x0a\x74\x20\x05\x41\xff\x07\x71\x72\x41\x80\x80\x04\x6a\x21\x05\x0b\x20\x05\x10\xea\x09\x21\x0c\x0b\x02\x40\x20\x09\x20\x07\x4f\x0d\x00\x02\x40\x02\x40\x20\x08\x0d\x00\x20\x09\x2d\x00\x00\x21\x05\x0c\x01\x0b\x20\x09\x2f\x01\x00\x21\x05\x20\x09\x41\x02\x6a\x22\x04\x20\x07\x4f\x0d\x00\x20\x08\x41\x02\x47\x0d\x00\x20\x05\x41\x80\xf8\x03\x71\x41\x80\xb0\x03\x47\x0d\x00\x20\x04\x2f\x01\x00\x22\x04\x41\x80\xf8\x03\x71\x41\x80\xb8\x03\x47\x0d\x00\x20\x05\x41\x0a\x74\x41\x80\xf8\x3f\x71\x20\x04\x41\xff\x07\x71\x72\x41\x80\x80\x04\x6a\x21\x05\x0b\x20\x05\x10\xea\x09\x21\x0d\x0b\x20\x09\x21\x05\x20\x0b\x21\x04\x20\x0d\x20\x0c\x73\x41\x12\x20\x0a\x6b\x46\x0d\x11\x0c\x0c\x0b\x20\x00\x28\x02\x0c\x20\x04\x2d\x00\x01\x22\x0b\x4d\x0d\x0b\x20\x04\x41\x02\x6a\x21\x04\x20\x09\x21\x05\x20\x01\x20\x0b\x41\x03\x74\x22\x0c\x6a\x28\x02\x00\x22\x0b\x45\x0d\x10\x20\x09\x21\x05\x20\x01\x20\x0c\x41\x04\x72\x6a\x28\x02\x00\x22\x0c\x45\x0d\x10\x20\x0a\x41\x13\x46\x0d\x08\x20\x09\x21\x05\x03\x40\x20\x0c\x20\x0b\x4d\x0d\x11\x20\x05\x20\x00\x28\x02\x00\x22\x0e\x46\x0d\x0c\x02\x40\x02\x40\x02\x40\x02\x40\x20\x08\x45\x0d\x00\x20\x0c\x41\x7e\x6a\x22\x0a\x2f\x01\x00\x21\x09\x20\x0a\x20\x0b\x4d\x0d\x01\x20\x08\x41\x02\x47\x0d\x01\x20\x09\x41\x80\xf8\x03\x71\x41\x80\xb8\x03\x47\x0d\x01\x20\x0c\x41\x7c\x6a\x22\x0c\x2f\x01\x00\x22\x0d\x41\x80\xf8\x03\x71\x41\x80\xb0\x03\x47\x0d\x01\x20\x0d\x41\xff\x07\x71\x41\x0a\x74\x20\x09\x41\xff\x07\x71\x72\x41\x80\x80\x04\x6a\x21\x09\x0c\x02\x0b\x20\x05\x41\x7f\x6a\x22\x05\x2d\x00\x00\x21\x0a\x20\x0c\x41\x7f\x6a\x22\x0c\x2d\x00\x00\x21\x09\x0c\x02\x0b\x20\x0a\x21\x0c\x0b\x20\x05\x41\x7e\x6a\x22\x0d\x2f\x01\x00\x21\x0a\x02\x40\x20\x0d\x20\x0e\x4d\x0d\x00\x20\x08\x41\x02\x47\x0d\x00\x20\x0a\x41\x80\xf8\x03\x71\x41\x80\xb8\x03\x47\x0d\x00\x20\x05\x41\x7c\x6a\x22\x05\x2f\x01\x00\x22\x0e\x41\x80\xf8\x03\x71\x41\x80\xb0\x03\x47\x0d\x00\x20\x0e\x41\xff\x07\x71\x41\x0a\x74\x20\x0a\x41\xff\x07\x71\x72\x41\x80\x80\x04\x6a\x21\x0a\x0c\x01\x0b\x20\x0d\x21\x05\x0b\x02\x40\x20\x00\x28\x02\x18\x45\x0d\x00\x20\x09\x20\x00\x28\x02\x1c\x10\xda\x09\x21\x09\x20\x0a\x20\x00\x28\x02\x1c\x10\xda\x09\x21\x0a\x0b\x20\x09\x20\x0a\x47\x0d\x0c\x0c\x00\x0b\x00\x0b\x10\x40\x00\x0b\x41\x99\xa3\x03\x41\x81\x9c\x03\x41\xdd\x11\x41\x86\xa3\x03\x10\x4a\x00\x0b\x41\xef\xa2\x03\x41\x81\x9c\x03\x41\xd4\x11\x41\x86\xa3\x03\x10\x4a\x00\x0b\x20\x04\x41\x11\x6a\x22\x0d\x20\x04\x28\x00\x01\x6a\x21\x0f\x20\x04\x28\x00\x09\x21\x0c\x20\x04\x28\x00\x05\x21\x0e\x41\x00\x21\x0a\x02\x40\x02\x40\x03\x40\x02\x40\x20\x00\x20\x01\x20\x02\x20\x03\x20\x0d\x20\x09\x41\x01\x10\xe7\x09\x22\x05\x41\x01\x6a\x22\x04\x41\x01\x4b\x0d\x00\x20\x04\x0e\x02\x04\x02\x04\x0b\x20\x0a\x41\x01\x6a\x21\x0a\x20\x05\x21\x09\x20\x0c\x41\xff\xff\xff\xff\x07\x46\x0d\x00\x20\x05\x21\x09\x20\x0a\x20\x0c\x49\x0d\x00\x0c\x02\x0b\x00\x0b\x20\x09\x21\x05\x0b\x20\x0a\x20\x0e\x49\x0d\x07\x20\x0f\x21\x04\x20\x0a\x20\x0e\x4d\x0d\x0c\x20\x0f\x21\x04\x20\x00\x20\x01\x20\x02\x20\x03\x20\x0b\x20\x05\x41\x03\x20\x0a\x20\x0e\x6b\x10\xe8\x09\x41\x00\x4e\x0d\x0c\x0b\x41\x7f\x21\x0b\x0c\x08\x0b\x20\x09\x20\x00\x28\x02\x00\x22\x0a\x46\x0d\x05\x02\x40\x20\x08\x0d\x00\x20\x09\x41\x7f\x6a\x21\x05\x20\x0b\x21\x04\x0c\x0b\x0b\x20\x09\x41\x7e\x6a\x21\x05\x20\x0b\x21\x04\x20\x08\x41\x02\x47\x0d\x0a\x20\x0b\x21\x04\x20\x05\x20\x0a\x4d\x0d\x0a\x20\x0b\x21\x04\x20\x05\x2f\x01\x00\x41\x80\x78\x71\x41\xff\xff\x03\x71\x41\x80\xb8\x03\x47\x0d\x0a\x20\x09\x41\x7c\x6a\x22\x09\x20\x05\x20\x09\x2f\x01\x00\x41\x80\xf8\x03\x71\x41\x80\xb0\x03\x46\x1b\x21\x05\x20\x0b\x21\x04\x0c\x0a\x0b\x20\x09\x20\x07\x4f\x0d\x04\x20\x04\x2f\x00\x01\x21\x0e\x02\x40\x02\x40\x20\x08\x0d\x00\x20\x09\x41\x01\x6a\x21\x05\x20\x09\x2d\x00\x00\x21\x0a\x0c\x01\x0b\x20\x09\x2f\x01\x00\x21\x0a\x20\x09\x41\x02\x6a\x22\x05\x20\x07\x4f\x0d\x00\x20\x08\x41\x02\x47\x0d\x00\x20\x0a\x41\x80\xf8\x03\x71\x41\x80\xb0\x03\x47\x0d\x00\x20\x05\x2f\x01\x00\x22\x0b\x41\x80\xf8\x03\x71\x41\x80\xb8\x03\x47\x0d\x00\x20\x0a\x41\x0a\x74\x41\x80\xf8\x3f\x71\x20\x0b\x41\xff\x07\x71\x72\x41\x80\x80\x04\x6a\x21\x0a\x20\x09\x41\x04\x6a\x21\x05\x0b\x20\x04\x41\x03\x6a\x21\x0c\x02\x40\x20\x00\x28\x02\x18\x45\x0d\x00\x20\x0a\x20\x00\x28\x02\x1c\x10\xda\x09\x21\x0a\x0b\x20\x0a\x20\x0c\x28\x00\x00\x49\x0d\x04\x20\x0a\x20\x04\x20\x0e\x41\x7f\x6a\x22\x09\x41\x03\x74\x6a\x41\x07\x6a\x28\x00\x00\x4b\x0d\x04\x41\x00\x21\x04\x03\x40\x20\x04\x20\x09\x4b\x0d\x05\x02\x40\x20\x0a\x20\x0c\x20\x09\x20\x04\x6a\x41\x01\x76\x22\x0b\x41\x03\x74\x6a\x22\x0d\x28\x00\x00\x4f\x0d\x00\x20\x0b\x41\x7f\x6a\x21\x09\x0c\x01\x0b\x02\x40\x20\x0a\x20\x0d\x28\x00\x04\x4d\x0d\x00\x20\x0b\x41\x01\x6a\x21\x04\x0c\x01\x0b\x0b\x20\x0c\x20\x0e\x41\x03\x74\x6a\x21\x04\x0c\x09\x0b\x20\x09\x20\x07\x4f\x0d\x03\x20\x04\x2f\x00\x01\x21\x0e\x02\x40\x02\x40\x20\x08\x0d\x00\x20\x09\x41\x01\x6a\x21\x05\x20\x09\x2d\x00\x00\x21\x0b\x0c\x01\x0b\x20\x09\x2f\x01\x00\x21\x0b\x20\x09\x41\x02\x6a\x22\x05\x20\x07\x4f\x0d\x00\x20\x08\x41\x02\x47\x0d\x00\x20\x0b\x41\x80\xf8\x03\x71\x41\x80\xb0\x03\x47\x0d\x00\x20\x05\x2f\x01\x00\x22\x0a\x41\x80\xf8\x03\x71\x41\x80\xb8\x03\x47\x0d\x00\x20\x0b\x41\x0a\x74\x41\x80\xf8\x3f\x71\x20\x0a\x41\xff\x07\x71\x72\x41\x80\x80\x04\x6a\x21\x0b\x20\x09\x41\x04\x6a\x21\x05\x0b\x20\x04\x41\x03\x6a\x21\x0c\x02\x40\x20\x00\x28\x02\x18\x45\x0d\x00\x20\x0b\x20\x00\x28\x02\x1c\x10\xda\x09\x21\x0b\x0b\x20\x0b\x20\x0c\x2f\x00\x00\x49\x0d\x03\x20\x04\x20\x0e\x41\x7f\x6a\x22\x09\x41\x02\x74\x6a\x41\x05\x6a\x2f\x00\x00\x21\x04\x02\x40\x02\x40\x20\x0b\x41\xff\xff\x03\x49\x0d\x00\x20\x04\x41\xff\xff\x03\x46\x0d\x01\x0b\x20\x0b\x20\x04\x4b\x0d\x04\x41\x00\x21\x04\x03\x40\x20\x04\x20\x09\x4b\x0d\x05\x02\x40\x20\x0b\x20\x0c\x20\x09\x20\x04\x6a\x41\x01\x76\x22\x0a\x41\x02\x74\x6a\x22\x0d\x2f\x00\x00\x4f\x0d\x00\x20\x0a\x41\x7f\x6a\x21\x09\x0c\x01\x0b\x20\x0b\x20\x0d\x2f\x00\x02\x4d\x0d\x01\x20\x0a\x41\x01\x6a\x21\x04\x0c\x00\x0b\x00\x0b\x20\x0c\x20\x0e\x41\x02\x74\x6a\x21\x04\x0c\x08\x0b\x03\x40\x20\x0b\x20\x0c\x4f\x0d\x01\x20\x09\x20\x07\x4f\x0d\x03\x02\x40\x02\x40\x02\x40\x02\x40\x20\x08\x45\x0d\x00\x20\x0b\x2f\x01\x00\x21\x05\x20\x0b\x41\x02\x6a\x22\x0a\x20\x0c\x4f\x0d\x01\x20\x08\x41\x02\x47\x0d\x01\x20\x05\x41\x80\xf8\x03\x71\x41\x80\xb0\x03\x47\x0d\x01\x20\x0a\x2f\x01\x00\x22\x0d\x41\x80\xf8\x03\x71\x41\x80\xb8\x03\x47\x0d\x01\x20\x05\x41\x0a\x74\x41\x80\xf8\x3f\x71\x20\x0d\x41\xff\x07\x71\x72\x41\x80\x80\x04\x6a\x21\x05\x20\x0b\x41\x04\x6a\x21\x0b\x0c\x02\x0b\x20\x09\x2d\x00\x00\x21\x0a\x20\x0b\x2d\x00\x00\x21\x05\x20\x0b\x41\x01\x6a\x21\x0b\x20\x09\x41\x01\x6a\x21\x09\x0c\x02\x0b\x20\x0a\x21\x0b\x0b\x20\x09\x2f\x01\x00\x21\x0a\x02\x40\x20\x09\x41\x02\x6a\x22\x0d\x20\x07\x4f\x0d\x00\x20\x08\x41\x02\x47\x0d\x00\x20\x0a\x41\x80\xf8\x03\x71\x41\x80\xb0\x03\x47\x0d\x00\x20\x0d\x2f\x01\x00\x22\x0e\x41\x80\xf8\x03\x71\x41\x80\xb8\x03\x47\x0d\x00\x20\x0a\x41\x0a\x74\x41\x80\xf8\x3f\x71\x20\x0e\x41\xff\x07\x71\x72\x41\x80\x80\x04\x6a\x21\x0a\x20\x09\x41\x04\x6a\x21\x09\x0c\x01\x0b\x20\x0d\x21\x09\x0b\x02\x40\x20\x00\x28\x02\x18\x45\x0d\x00\x20\x05\x20\x00\x28\x02\x1c\x10\xda\x09\x21\x05\x20\x0a\x20\x00\x28\x02\x1c\x10\xda\x09\x21\x0a\x0b\x20\x05\x20\x0a\x47\x0d\x03\x0c\x00\x0b\x00\x0b\x20\x09\x21\x05\x0c\x06\x0b\x20\x09\x21\x05\x20\x0b\x21\x04\x0c\x05\x0b\x41\x00\x21\x0b\x20\x06\x0d\x01\x0b\x20\x00\x28\x02\x30\x41\x7f\x6a\x21\x05\x03\x40\x20\x0b\x21\x09\x02\x40\x20\x05\x41\x7f\x47\x0d\x00\x20\x09\x0f\x0b\x02\x40\x02\x40\x20\x00\x28\x02\x28\x20\x00\x28\x02\x24\x20\x05\x6c\x6a\x22\x0a\x2d\x00\x00\x22\x04\x41\x03\x4b\x0d\x00\x02\x40\x02\x40\x20\x04\x0e\x04\x00\x02\x02\x01\x00\x0b\x20\x09\x21\x0b\x20\x09\x0d\x02\x0c\x05\x0b\x20\x09\x21\x0b\x20\x09\x0d\x01\x20\x01\x20\x0a\x41\x10\x6a\x22\x05\x20\x00\x28\x02\x0c\x41\x03\x74\x10\x70\x1a\x20\x02\x20\x05\x20\x00\x28\x02\x0c\x41\x03\x74\x6a\x20\x0a\x2d\x00\x01\x22\x03\x41\x02\x74\x10\x70\x1a\x20\x0a\x28\x02\x08\x21\x05\x20\x0a\x28\x02\x0c\x22\x0b\x28\x00\x0c\x21\x09\x03\x40\x02\x40\x02\x40\x02\x40\x20\x09\x45\x0d\x00\x02\x40\x20\x08\x0d\x00\x20\x05\x41\x7f\x6a\x21\x05\x0c\x03\x0b\x20\x05\x41\x7e\x6a\x21\x04\x20\x08\x41\x02\x47\x0d\x01\x20\x04\x2f\x01\x00\x41\x80\xf8\x03\x71\x41\x80\xb8\x03\x47\x0d\x01\x20\x04\x20\x00\x28\x02\x00\x4d\x0d\x01\x20\x05\x41\x7c\x6a\x22\x05\x20\x04\x20\x05\x2f\x01\x00\x41\x80\xf8\x03\x71\x41\x80\xb0\x03\x46\x1b\x21\x05\x0c\x02\x0b\x20\x0a\x20\x05\x36\x02\x08\x20\x0a\x20\x0a\x28\x02\x04\x41\x7f\x6a\x22\x09\x36\x02\x04\x20\x0b\x20\x0b\x28\x00\x00\x6a\x41\x10\x6a\x21\x04\x20\x09\x0d\x09\x20\x00\x20\x00\x28\x02\x30\x41\x7f\x6a\x36\x02\x30\x0c\x09\x0b\x20\x04\x21\x05\x0b\x20\x09\x41\x7f\x6a\x21\x09\x0c\x00\x0b\x00\x0b\x02\x40\x20\x09\x45\x0d\x00\x20\x04\x41\x01\x46\x0d\x05\x0b\x41\x00\x21\x0b\x20\x04\x41\x02\x47\x0d\x00\x20\x09\x45\x0d\x03\x0b\x20\x00\x20\x05\x36\x02\x30\x20\x05\x41\x7f\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x0b\x0f\x0b\x20\x01\x20\x0a\x41\x10\x6a\x20\x00\x28\x02\x0c\x41\x03\x74\x10\x70\x1a\x0b\x20\x0a\x28\x02\x08\x21\x05\x20\x0a\x28\x02\x0c\x21\x04\x20\x02\x20\x0a\x20\x00\x28\x02\x0c\x41\x03\x74\x6a\x41\x10\x6a\x20\x0a\x2d\x00\x01\x22\x03\x41\x02\x74\x10\x70\x1a\x20\x00\x20\x00\x28\x02\x30\x41\x7f\x6a\x36\x02\x30\x0c\x00\x0b\x0b\xb6\x02\x01\x03\x7f\x02\x40\x02\x40\x20\x00\x28\x02\x30\x22\x08\x41\x01\x6a\x22\x09\x20\x00\x28\x02\x2c\x22\x0a\x4b\x0d\x00\x20\x00\x28\x02\x28\x21\x0a\x0c\x01\x0b\x02\x40\x20\x00\x28\x02\x20\x28\x02\x10\x22\x08\x41\x10\x6a\x20\x00\x28\x02\x28\x20\x00\x28\x02\x24\x20\x0a\x41\x03\x6c\x41\x01\x76\x22\x0a\x41\x08\x20\x0a\x41\x08\x4b\x1b\x22\x09\x6c\x20\x08\x28\x02\x08\x11\x01\x00\x22\x0a\x0d\x00\x41\x7f\x0f\x0b\x20\x00\x20\x0a\x36\x02\x28\x20\x00\x20\x09\x36\x02\x2c\x20\x00\x28\x02\x30\x22\x08\x41\x01\x6a\x21\x09\x0b\x20\x00\x20\x09\x36\x02\x30\x20\x0a\x20\x00\x28\x02\x24\x20\x08\x6c\x22\x09\x6a\x22\x08\x20\x06\x3a\x00\x00\x20\x08\x20\x07\x36\x02\x04\x20\x08\x20\x04\x36\x02\x0c\x20\x08\x20\x05\x36\x02\x08\x20\x08\x20\x03\x3a\x00\x01\x20\x08\x41\x10\x6a\x21\x08\x20\x00\x28\x02\x0c\x22\x04\x41\x01\x74\x21\x00\x02\x40\x03\x40\x20\x00\x45\x0d\x01\x20\x08\x20\x01\x28\x02\x00\x36\x02\x00\x20\x00\x41\x7f\x6a\x21\x00\x20\x08\x41\x04\x6a\x21\x08\x20\x01\x41\x04\x6a\x21\x01\x0c\x00\x0b\x00\x0b\x20\x09\x20\x04\x41\x03\x74\x6a\x20\x0a\x6a\x41\x10\x6a\x21\x00\x03\x7f\x02\x40\x20\x03\x0d\x00\x41\x00\x0f\x0b\x20\x00\x20\x02\x28\x02\x00\x36\x02\x00\x20\x03\x41\x7f\x6a\x21\x03\x20\x00\x41\x04\x6a\x21\x00\x20\x02\x41\x04\x6a\x21\x02\x0c\x00\x0b\x0b\x3c\x01\x02\x7f\x41\x01\x21\x01\x02\x40\x02\x40\x02\x40\x20\x00\x41\x76\x6a\x22\x02\x41\x03\x4d\x0d\x00\x20\x00\x41\xa8\xc0\x00\x46\x0d\x02\x0c\x01\x0b\x20\x02\x0e\x04\x01\x00\x00\x01\x01\x0b\x20\x00\x41\xa9\xc0\x00\x46\x21\x01\x0b\x20\x01\x0b\x1e\x00\x20\x00\x41\xdf\x00\x46\x20\x00\x41\x50\x6a\x41\x0a\x49\x20\x00\x41\x5f\x71\x41\xbf\x7f\x6a\x41\x1a\x49\x72\x72\x0b\xa9\x02\x01\x02\x7f\x23\x00\x41\x10\x6b\x22\x04\x24\x00\x41\x00\x21\x05\x02\x40\x20\x04\x41\x0c\x6a\x20\x00\x20\x02\x20\x03\x10\xec\x09\x22\x02\x41\x00\x48\x0d\x00\x20\x01\x20\x02\x6a\x21\x02\x41\x00\x21\x05\x03\x40\x20\x02\x41\x01\x6a\x21\x01\x02\x40\x02\x40\x20\x02\x2d\x00\x00\x22\x03\x41\x3f\x4b\x0d\x00\x20\x04\x20\x03\x41\x03\x76\x20\x04\x28\x02\x0c\x6a\x41\x01\x6a\x22\x02\x36\x02\x0c\x20\x02\x20\x00\x4b\x0d\x03\x20\x04\x20\x03\x41\x07\x71\x20\x02\x6a\x41\x01\x6a\x22\x03\x36\x02\x0c\x20\x05\x41\x01\x73\x21\x05\x0c\x01\x0b\x02\x40\x20\x03\x41\x18\x74\x41\x18\x75\x41\x7f\x4a\x0d\x00\x20\x04\x20\x03\x20\x04\x28\x02\x0c\x6a\x41\x81\x7f\x6a\x22\x03\x36\x02\x0c\x0c\x01\x0b\x02\x40\x20\x03\x41\xdf\x00\x4b\x0d\x00\x20\x04\x20\x03\x41\x08\x74\x20\x02\x2d\x00\x01\x72\x20\x04\x28\x02\x0c\x6a\x41\x81\x80\x7f\x6a\x22\x03\x36\x02\x0c\x20\x02\x41\x02\x6a\x21\x01\x0c\x01\x0b\x20\x04\x20\x03\x41\x10\x74\x20\x02\x2d\x00\x01\x41\x08\x74\x72\x20\x02\x2d\x00\x02\x72\x20\x04\x28\x02\x0c\x6a\x41\x81\x80\x80\x7d\x6a\x22\x03\x36\x02\x0c\x20\x02\x41\x03\x6a\x21\x01\x0b\x20\x03\x20\x00\x4b\x0d\x01\x20\x05\x41\x01\x73\x21\x05\x20\x01\x21\x02\x0c\x00\x0b\x00\x0b\x20\x04\x41\x10\x6a\x24\x00\x20\x05\x0b\xd6\x01\x01\x03\x7f\x02\x40\x20\x02\x2f\x00\x00\x20\x02\x2d\x00\x02\x41\x10\x74\x41\x80\x80\xfc\x00\x71\x72\x20\x01\x4d\x0d\x00\x20\x00\x41\x00\x36\x02\x00\x41\x00\x0f\x0b\x41\x7f\x21\x04\x02\x40\x20\x02\x20\x03\x41\x7f\x6a\x22\x05\x41\x03\x6c\x6a\x22\x03\x2f\x00\x00\x20\x03\x2d\x00\x02\x41\x10\x74\x72\x20\x01\x4d\x0d\x00\x41\x00\x21\x03\x02\x40\x03\x40\x20\x05\x20\x03\x6b\x41\x02\x48\x0d\x01\x20\x05\x20\x03\x6a\x41\x02\x6d\x22\x04\x20\x05\x20\x02\x20\x04\x41\x03\x6c\x6a\x22\x06\x2f\x00\x00\x20\x06\x2d\x00\x02\x41\x10\x74\x41\x80\x80\xfc\x00\x71\x72\x20\x01\x4b\x22\x06\x1b\x21\x05\x20\x03\x20\x04\x20\x06\x1b\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x20\x02\x20\x03\x41\x03\x6c\x6a\x22\x05\x2f\x00\x00\x20\x05\x2d\x00\x02\x22\x05\x41\x10\x74\x41\x80\x80\xfc\x00\x71\x72\x36\x02\x00\x20\x03\x41\x05\x74\x20\x05\x41\x05\x76\x72\x41\x20\x6a\x21\x04\x0b\x20\x04\x0b\x08\x00\x20\x01\x20\x02\x10\x3d\x0b\xcc\x01\x01\x09\x7f\x20\x00\x28\x02\x08\x22\x01\x41\x08\x6a\x21\x02\x20\x00\x28\x02\x00\x21\x03\x41\x00\x21\x04\x41\x00\x21\x05\x02\x40\x03\x40\x20\x05\x41\x01\x6a\x22\x06\x20\x03\x4e\x0d\x01\x02\x40\x02\x40\x20\x01\x20\x05\x41\x02\x74\x22\x07\x6a\x28\x02\x00\x22\x08\x20\x01\x20\x06\x41\x02\x74\x6a\x28\x02\x00\x47\x0d\x00\x20\x05\x21\x07\x0c\x01\x0b\x20\x02\x20\x07\x6a\x21\x09\x02\x40\x03\x40\x20\x09\x21\x06\x20\x05\x22\x07\x41\x03\x6a\x20\x03\x4e\x0d\x01\x20\x06\x41\x08\x6a\x21\x09\x20\x07\x41\x02\x6a\x21\x05\x20\x06\x41\x7c\x6a\x28\x02\x00\x20\x06\x28\x02\x00\x46\x0d\x00\x0b\x0b\x20\x01\x20\x04\x41\x02\x74\x6a\x22\x05\x20\x08\x36\x02\x00\x20\x05\x41\x04\x6a\x20\x06\x41\x7c\x6a\x28\x02\x00\x36\x02\x00\x20\x04\x41\x02\x6a\x21\x04\x0b\x20\x07\x41\x02\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x00\x20\x04\x36\x02\x00\x0b\x28\x01\x01\x7f\x23\x00\x41\x10\x6b\x22\x02\x24\x00\x20\x02\x20\x01\x36\x02\x0c\x20\x00\x20\x02\x41\x0c\x6a\x41\x04\x10\xa5\x07\x1a\x20\x02\x41\x10\x6a\x24\x00\x0b\x30\x00\x02\x40\x20\x00\x41\x80\x01\x49\x0d\x00\x02\x40\x20\x00\x41\xcf\x01\x4b\x0d\x00\x20\x00\x41\x80\x05\x6a\x0f\x0b\x20\x00\x41\x01\x74\x41\xee\xbc\x04\x6a\x2f\x01\x00\x21\x00\x0b\x20\x00\x0b\xbe\x02\x01\x08\x7f\x20\x01\x41\x06\x71\x21\x02\x20\x01\x41\x02\x76\x41\x01\x71\x21\x03\x41\x00\x21\x04\x41\xf0\xf9\x04\x21\x05\x41\x00\x21\x06\x02\x40\x03\x40\x20\x06\x21\x07\x20\x05\x41\xbe\x97\x05\x4f\x0d\x01\x20\x05\x2d\x00\x00\x22\x06\x41\x1f\x71\x21\x08\x02\x40\x02\x40\x20\x06\x41\x05\x76\x22\x06\x41\x07\x46\x0d\x00\x20\x05\x41\x01\x6a\x21\x05\x0c\x01\x0b\x20\x05\x2c\x00\x01\x22\x09\x41\xff\x01\x71\x21\x06\x02\x40\x20\x09\x41\x00\x48\x0d\x00\x20\x05\x41\x02\x6a\x21\x05\x20\x06\x41\x07\x6a\x21\x06\x0c\x01\x0b\x02\x40\x20\x06\x41\xbf\x01\x4b\x0d\x00\x20\x06\x41\x08\x74\x20\x05\x2d\x00\x02\x72\x41\x87\x81\x7e\x6a\x21\x06\x20\x05\x41\x03\x6a\x21\x05\x0c\x01\x0b\x20\x06\x41\x10\x74\x20\x05\x2d\x00\x02\x41\x08\x74\x72\x20\x05\x2d\x00\x03\x72\x41\x87\x81\x81\x7a\x6a\x21\x06\x20\x05\x41\x04\x6a\x21\x05\x0b\x20\x07\x20\x06\x6a\x41\x01\x6a\x21\x06\x02\x40\x02\x40\x02\x40\x20\x08\x41\x1f\x47\x0d\x00\x20\x02\x45\x0d\x03\x20\x02\x41\x06\x46\x0d\x01\x20\x07\x20\x03\x6a\x21\x07\x03\x40\x20\x07\x20\x06\x4f\x0d\x04\x20\x00\x20\x07\x20\x07\x41\x01\x6a\x10\xe0\x09\x21\x08\x20\x07\x41\x02\x6a\x21\x07\x20\x08\x45\x0d\x00\x0c\x03\x0b\x00\x0b\x20\x01\x20\x08\x76\x41\x01\x71\x45\x0d\x02\x0b\x20\x00\x20\x07\x20\x06\x10\xe0\x09\x45\x0d\x01\x0b\x0b\x41\x7f\x21\x04\x0b\x20\x04\x0b\x74\x00\x02\x40\x20\x00\x20\x01\x72\x41\x0f\x71\x22\x00\x41\x0e\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x00\x0e\x0f\x00\x04\x03\x04\x02\x04\x03\x04\x01\x04\x03\x04\x02\x04\x03\x00\x0b\x41\x88\x01\x41\x89\x01\x20\x01\x41\x10\x46\x1b\x0f\x0b\x41\x8a\x01\x41\x8b\x01\x20\x01\x41\x08\x46\x1b\x0f\x0b\x41\x8c\x01\x41\x8d\x01\x20\x01\x41\x04\x46\x1b\x0f\x0b\x41\x8e\x01\x41\x8f\x01\x20\x01\x41\x02\x46\x1b\x0f\x0b\x41\x90\x01\x41\x91\x01\x20\x01\x41\x01\x46\x1b\x0b\x34\x01\x02\x7e\x20\x00\x29\x03\x00\x21\x03\x20\x00\x20\x01\x29\x03\x00\x37\x03\x00\x20\x00\x29\x03\x08\x21\x04\x20\x00\x20\x01\x29\x03\x08\x37\x03\x08\x20\x01\x20\x04\x37\x03\x08\x20\x01\x20\x03\x37\x03\x00\x0b\x6a\x02\x02\x7e\x02\x7f\x20\x02\x41\x04\x76\x21\x02\x02\x40\x03\x40\x20\x02\x45\x0d\x01\x20\x00\x29\x03\x00\x21\x03\x20\x00\x20\x01\x29\x03\x00\x37\x03\x00\x20\x00\x41\x08\x6a\x22\x05\x29\x03\x00\x21\x04\x20\x05\x20\x01\x41\x08\x6a\x22\x06\x29\x03\x00\x37\x03\x00\x20\x06\x20\x04\x37\x03\x00\x20\x01\x20\x03\x37\x03\x00\x20\x01\x41\x10\x6a\x21\x01\x20\x00\x41\x10\x6a\x21\x00\x20\x02\x41\x7f\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x0b\x1c\x01\x01\x7e\x20\x00\x29\x03\x00\x21\x03\x20\x00\x20\x01\x29\x03\x00\x37\x03\x00\x20\x01\x20\x03\x37\x03\x00\x0b\x46\x01\x01\x7e\x20\x02\x41\x03\x76\x21\x02\x02\x40\x03\x40\x20\x02\x45\x0d\x01\x20\x00\x29\x03\x00\x21\x03\x20\x00\x20\x01\x29\x03\x00\x37\x03\x00\x20\x01\x20\x03\x37\x03\x00\x20\x01\x41\x08\x6a\x21\x01\x20\x00\x41\x08\x6a\x21\x00\x20\x02\x41\x7f\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x0b\x1c\x01\x01\x7f\x20\x00\x28\x02\x00\x21\x03\x20\x00\x20\x01\x28\x02\x00\x36\x02\x00\x20\x01\x20\x03\x36\x02\x00\x0b\x46\x01\x01\x7f\x20\x02\x41\x02\x76\x21\x02\x02\x40\x03\x40\x20\x02\x45\x0d\x01\x20\x00\x28\x02\x00\x21\x03\x20\x00\x20\x01\x28\x02\x00\x36\x02\x00\x20\x01\x20\x03\x36\x02\x00\x20\x01\x41\x04\x6a\x21\x01\x20\x00\x41\x04\x6a\x21\x00\x20\x02\x41\x7f\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x0b\x1c\x01\x01\x7f\x20\x00\x2f\x01\x00\x21\x03\x20\x00\x20\x01\x2f\x01\x00\x3b\x01\x00\x20\x01\x20\x03\x3b\x01\x00\x0b\x46\x01\x01\x7f\x20\x02\x41\x01\x76\x21\x02\x02\x40\x03\x40\x20\x02\x45\x0d\x01\x20\x00\x2f\x01\x00\x21\x03\x20\x00\x20\x01\x2f\x01\x00\x3b\x01\x00\x20\x01\x20\x03\x3b\x01\x00\x20\x01\x41\x02\x6a\x21\x01\x20\x00\x41\x02\x6a\x21\x00\x20\x02\x41\x7f\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x0b\x1c\x01\x01\x7f\x20\x00\x2d\x00\x00\x21\x03\x20\x00\x20\x01\x2d\x00\x00\x3a\x00\x00\x20\x01\x20\x03\x3a\x00\x00\x0b\x3f\x01\x01\x7f\x02\x40\x03\x40\x20\x02\x45\x0d\x01\x20\x00\x2d\x00\x00\x21\x03\x20\x00\x20\x01\x2d\x00\x00\x3a\x00\x00\x20\x01\x20\x03\x3a\x00\x00\x20\x01\x41\x01\x6a\x21\x01\x20\x00\x41\x01\x6a\x21\x00\x20\x02\x41\x7f\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x0b\x94\x01\x02\x02\x7f\x02\x7e\x20\x00\x28\x02\x10\x22\x01\x29\x03\x80\x01\x21\x03\x20\x01\x42\x80\x80\x80\x80\x20\x37\x03\x80\x01\x02\x40\x02\x40\x20\x03\x42\xff\xff\xff\xff\x6f\x56\x0d\x00\x20\x00\x41\x00\x28\x02\xe8\x1a\x20\x03\x10\xfe\x09\x0c\x01\x0b\x20\x03\xa7\x2f\x01\x06\x21\x01\x20\x00\x41\x00\x28\x02\xe8\x1a\x22\x02\x20\x03\x10\xfe\x09\x20\x01\x41\x03\x47\x0d\x00\x02\x40\x20\x00\x20\x03\x41\x94\xc4\x05\x10\xb6\x01\x22\x04\x42\x80\x80\x80\x80\x70\x83\x42\x80\x80\x80\x80\x30\x51\x0d\x00\x20\x00\x20\x02\x20\x04\x10\xfe\x09\x0b\x20\x00\x20\x04\x10\xff\x09\x0b\x20\x00\x20\x03\x10\xff\x09\x0b\x52\x01\x02\x7f\x23\x00\x41\x10\x6b\x22\x03\x24\x00\x02\x40\x02\x40\x20\x00\x41\x00\x20\x02\x41\x00\x10\xb0\x02\x22\x04\x45\x0d\x00\x20\x03\x20\x04\x36\x02\x00\x20\x01\x41\x9a\xc4\x05\x20\x03\x10\x60\x1a\x20\x00\x20\x04\x10\xcf\x02\x0c\x01\x0b\x41\x9e\xc4\x05\x41\x0c\x41\x01\x20\x01\x10\x64\x1a\x0b\x20\x03\x41\x10\x6a\x24\x00\x0b\x38\x01\x01\x7f\x02\x40\x20\x01\x42\x20\x88\xa7\x41\x75\x49\x0d\x00\x20\x01\xa7\x22\x02\x20\x02\x28\x02\x00\x22\x02\x41\x7f\x6a\x36\x02\x00\x20\x02\x41\x01\x4a\x0d\x00\x20\x00\x41\x10\x6a\x28\x02\x00\x20\x01\x10\xd3\x02\x0b\x0b\x5c\x01\x02\x7f\x02\x40\x20\x00\x20\x01\x46\x0d\x00\x02\x40\x20\x00\x28\x02\x10\x22\x02\x45\x0d\x00\x20\x00\x28\x02\x00\x22\x03\x28\x02\x00\x20\x02\x41\x00\x20\x03\x28\x02\x04\x11\x01\x00\x1a\x0b\x20\x00\x20\x01\x29\x02\x00\x37\x02\x00\x20\x00\x41\x10\x6a\x20\x01\x41\x10\x6a\x28\x02\x00\x36\x02\x00\x20\x00\x41\x08\x6a\x20\x01\x41\x08\x6a\x29\x02\x00\x37\x02\x00\x0b\x0b\xf0\x07\x01\x0b\x7f\x41\x03\x41\x80\x80\x80\x80\x02\x41\x01\x41\x1c\x20\x02\x41\x05\x76\x41\x3f\x71\x22\x05\x6b\x74\x20\x05\x41\x3f\x46\x1b\x22\x06\x6b\x21\x07\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x02\x41\x10\x71\x45\x0d\x00\x41\xff\xff\xff\xff\x03\x21\x08\x20\x01\x41\xff\xff\xff\xff\x03\x46\x0d\x01\x20\x00\x28\x02\x08\x20\x01\x6a\x21\x08\x0c\x01\x0b\x20\x01\x21\x08\x20\x02\x41\x08\x71\x45\x0d\x00\x20\x01\x21\x08\x20\x00\x28\x02\x08\x22\x05\x20\x07\x4e\x0d\x00\x20\x01\x41\xff\xff\xff\xff\x03\x46\x0d\x01\x20\x06\x20\x01\x6a\x20\x05\x6a\x41\x7d\x6a\x21\x08\x0b\x02\x40\x02\x40\x02\x40\x20\x02\x41\x07\x71\x22\x09\x41\x06\x47\x0d\x00\x20\x00\x28\x02\x10\x22\x0a\x20\x03\x20\x03\x41\x05\x74\x20\x08\x41\x7f\x73\x6a\x10\x82\x0a\x21\x0b\x0c\x01\x0b\x41\x00\x21\x0b\x20\x00\x28\x02\x10\x21\x0a\x41\x00\x21\x05\x02\x40\x41\x7e\x20\x08\x6b\x41\x7f\x20\x08\x41\x7f\x4a\x1b\x20\x03\x41\x05\x74\x22\x0c\x6a\x22\x0d\x41\x00\x48\x0d\x00\x41\x01\x21\x05\x20\x0a\x20\x0d\x41\x05\x75\x22\x0e\x41\x02\x74\x6a\x22\x0f\x28\x02\x00\x41\x7f\x41\x7e\x20\x0d\x41\x1f\x71\x22\x0d\x74\x41\x7f\x73\x20\x0d\x41\x1f\x46\x1b\x71\x0d\x00\x20\x0e\x41\x01\x6a\x21\x0d\x20\x0f\x41\x7c\x6a\x21\x05\x03\x40\x02\x40\x20\x0d\x41\x7f\x6a\x22\x0d\x41\x01\x4e\x0d\x00\x41\x00\x21\x05\x0c\x02\x0b\x20\x05\x28\x02\x00\x21\x0e\x20\x05\x41\x7c\x6a\x21\x05\x20\x0e\x45\x0d\x00\x0b\x41\x01\x21\x05\x0b\x20\x0a\x20\x03\x20\x0c\x20\x08\x41\x7f\x73\x6a\x10\x82\x0a\x21\x0d\x02\x40\x02\x40\x02\x40\x20\x09\x41\x06\x4b\x0d\x00\x20\x0d\x20\x05\x72\x21\x0e\x02\x40\x02\x40\x02\x40\x20\x09\x0e\x07\x00\x05\x04\x04\x02\x01\x02\x00\x0b\x20\x0d\x45\x0d\x04\x41\x01\x21\x0b\x20\x05\x0d\x04\x20\x0a\x20\x03\x20\x0c\x20\x08\x6b\x10\x82\x0a\x21\x0b\x0c\x04\x0b\x41\x01\x21\x0b\x20\x0e\x0d\x04\x41\x00\x21\x0b\x0c\x05\x0b\x20\x0d\x21\x0b\x20\x0e\x0d\x03\x20\x0d\x21\x0b\x0c\x04\x0b\x10\x40\x00\x0b\x20\x0e\x41\x00\x47\x20\x00\x28\x02\x04\x20\x09\x41\x02\x46\x46\x71\x21\x0b\x0b\x20\x0e\x45\x0d\x01\x0b\x20\x04\x41\x10\x72\x21\x04\x0b\x02\x40\x20\x08\x41\x00\x4a\x0d\x00\x20\x0b\x45\x0d\x03\x20\x00\x41\x01\x10\x98\x09\x1a\x20\x00\x28\x02\x10\x41\x80\x80\x80\x80\x78\x36\x02\x00\x20\x00\x20\x00\x28\x02\x08\x20\x08\x6b\x41\x01\x6a\x36\x02\x08\x20\x04\x41\x18\x72\x0f\x0b\x20\x0b\x45\x0d\x01\x20\x03\x41\x05\x74\x20\x08\x6b\x22\x05\x41\x05\x75\x22\x0c\x41\x7f\x6a\x21\x0d\x41\x01\x20\x05\x41\x1f\x71\x74\x21\x0e\x20\x0a\x20\x0c\x41\x02\x74\x6a\x21\x05\x03\x40\x02\x40\x20\x0d\x41\x01\x6a\x22\x0d\x20\x03\x49\x0d\x00\x20\x0a\x20\x03\x41\x7f\x6a\x22\x0d\x41\x02\x74\x6a\x21\x05\x41\x01\x21\x0e\x02\x40\x03\x40\x20\x0d\x20\x0c\x48\x0d\x01\x20\x05\x20\x0e\x41\x1f\x74\x20\x05\x28\x02\x00\x22\x0e\x41\x01\x76\x72\x36\x02\x00\x20\x0d\x41\x7f\x6a\x21\x0d\x20\x05\x41\x7c\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x00\x20\x00\x28\x02\x08\x41\x01\x6a\x36\x02\x08\x0c\x03\x0b\x20\x05\x20\x05\x28\x02\x00\x22\x0b\x20\x0e\x6a\x22\x09\x36\x02\x00\x41\x01\x21\x0e\x20\x05\x41\x04\x6a\x21\x05\x20\x09\x20\x0b\x49\x0d\x00\x0c\x02\x0b\x00\x0b\x41\xae\xc5\x05\x41\xc3\xc5\x05\x41\xf9\x03\x41\xec\xc5\x05\x10\x4a\x00\x0b\x02\x40\x20\x00\x28\x02\x08\x22\x05\x20\x07\x4e\x0d\x00\x20\x02\x41\x08\x71\x45\x0d\x01\x20\x04\x41\x01\x76\x41\x08\x71\x20\x04\x72\x21\x04\x0b\x02\x40\x20\x05\x20\x06\x4c\x0d\x00\x20\x00\x20\x00\x28\x02\x04\x20\x01\x20\x02\x10\x83\x0a\x0f\x0b\x41\x00\x21\x05\x02\x40\x20\x03\x41\x05\x74\x20\x08\x6b\x22\x0d\x41\x00\x48\x0d\x00\x20\x0d\x41\x05\x75\x21\x05\x20\x0d\x41\x1f\x71\x22\x0d\x45\x0d\x00\x20\x0a\x20\x05\x41\x02\x74\x6a\x22\x0e\x20\x0e\x28\x02\x00\x41\x7f\x41\x20\x20\x0d\x6b\x74\x41\x7f\x73\x20\x0d\x74\x71\x36\x02\x00\x0b\x20\x03\x41\x02\x74\x20\x05\x41\x02\x74\x6b\x41\x04\x6a\x21\x0d\x20\x0a\x20\x05\x41\x7f\x6a\x22\x05\x41\x02\x74\x6a\x21\x0e\x03\x40\x20\x0d\x41\x7c\x6a\x21\x0d\x20\x05\x41\x01\x6a\x21\x05\x20\x0e\x41\x04\x6a\x22\x0e\x28\x02\x00\x45\x0d\x00\x0b\x02\x40\x20\x05\x41\x01\x48\x0d\x00\x20\x0a\x20\x0e\x20\x0d\x10\xad\x01\x1a\x20\x03\x20\x05\x6b\x21\x03\x0b\x20\x00\x20\x03\x10\x98\x09\x1a\x20\x04\x0f\x0b\x20\x00\x20\x00\x28\x02\x04\x10\x9b\x09\x20\x04\x41\x18\x72\x0b\x36\x01\x02\x7f\x41\x00\x21\x03\x02\x40\x20\x02\x41\x00\x48\x0d\x00\x20\x02\x41\x05\x75\x22\x04\x20\x01\x4f\x0d\x00\x20\x00\x20\x04\x41\x02\x74\x6a\x28\x02\x00\x20\x02\x41\x1f\x71\x76\x41\x01\x71\x21\x03\x0b\x20\x03\x0b\xed\x01\x01\x02\x7f\x02\x40\x02\x40\x02\x40\x20\x03\x41\x07\x71\x22\x04\x41\x05\x46\x0d\x00\x20\x02\x41\xff\xff\xff\xff\x03\x46\x0d\x00\x20\x03\x41\x03\x71\x45\x0d\x00\x02\x40\x20\x01\x41\x01\x47\x0d\x00\x20\x04\x41\x02\x46\x0d\x01\x0b\x20\x01\x0d\x01\x20\x04\x41\x03\x47\x0d\x01\x0b\x20\x00\x20\x01\x10\xa2\x04\x0c\x01\x0b\x02\x40\x20\x00\x20\x02\x41\x1f\x6a\x41\x05\x76\x22\x05\x10\x98\x09\x45\x0d\x00\x20\x00\x10\x97\x04\x41\x20\x0f\x0b\x20\x00\x28\x02\x10\x22\x04\x41\x7f\x41\x20\x41\x00\x20\x02\x6b\x41\x1f\x71\x22\x02\x6b\x74\x41\x7f\x73\x20\x02\x74\x41\x7f\x20\x02\x1b\x36\x02\x00\x20\x04\x41\x04\x6a\x21\x04\x41\x01\x21\x02\x02\x40\x03\x40\x20\x02\x20\x05\x4f\x0d\x01\x20\x04\x41\x7f\x36\x02\x00\x20\x04\x41\x04\x6a\x21\x04\x20\x02\x41\x01\x6a\x21\x02\x0c\x00\x0b\x00\x0b\x20\x00\x20\x01\x36\x02\x04\x20\x00\x41\x80\x80\x80\x80\x02\x41\x01\x41\x1c\x20\x03\x41\x05\x76\x41\x3f\x71\x22\x02\x6b\x74\x20\x02\x41\x3f\x46\x1b\x36\x02\x08\x0b\x41\x14\x0b\x5a\x01\x03\x7f\x41\x00\x21\x04\x02\x40\x03\x40\x20\x03\x45\x0d\x01\x20\x00\x20\x02\x28\x02\x00\x22\x05\x20\x01\x28\x02\x00\x6a\x22\x06\x20\x04\x6a\x22\x04\x36\x02\x00\x20\x06\x20\x05\x49\x20\x04\x20\x06\x49\x72\x21\x04\x20\x03\x41\x7f\x6a\x21\x03\x20\x00\x41\x04\x6a\x21\x00\x20\x02\x41\x04\x6a\x21\x02\x20\x01\x41\x04\x6a\x21\x01\x0c\x00\x0b\x00\x0b\x20\x04\x0b\x45\x01\x02\x7f\x41\x00\x21\x03\x02\x40\x03\x40\x20\x01\x45\x0d\x01\x20\x03\x20\x02\x4f\x0d\x01\x20\x00\x20\x00\x28\x02\x00\x22\x04\x20\x01\x6a\x22\x01\x36\x02\x00\x20\x00\x41\x04\x6a\x21\x00\x20\x03\x41\x01\x6a\x21\x03\x20\x01\x20\x04\x49\x21\x01\x0c\x00\x0b\x00\x0b\x20\x01\x0b\x60\x01\x05\x7f\x41\x00\x21\x04\x41\x00\x21\x05\x02\x40\x03\x40\x20\x05\x20\x03\x4e\x0d\x01\x20\x00\x20\x01\x28\x02\x00\x22\x06\x20\x02\x28\x02\x00\x22\x07\x6b\x22\x08\x20\x04\x6b\x36\x02\x00\x20\x06\x20\x07\x49\x20\x08\x20\x04\x49\x72\x21\x04\x20\x00\x41\x04\x6a\x21\x00\x20\x02\x41\x04\x6a\x21\x02\x20\x01\x41\x04\x6a\x21\x01\x20\x05\x41\x01\x6a\x21\x05\x0c\x00\x0b\x00\x0b\x20\x04\x0b\x45\x01\x02\x7f\x41\x7f\x21\x03\x02\x40\x03\x40\x20\x03\x41\x01\x6a\x22\x03\x20\x02\x4e\x0d\x01\x20\x00\x20\x00\x28\x02\x00\x22\x04\x20\x01\x6b\x36\x02\x00\x20\x04\x20\x01\x49\x21\x04\x41\x01\x21\x01\x20\x00\x41\x04\x6a\x21\x00\x20\x04\x0d\x00\x0b\x41\x00\x21\x01\x0b\x20\x01\x0b\x64\x01\x01\x7f\x23\x00\x41\x20\x6b\x22\x06\x24\x00\x02\x40\x02\x40\x02\x40\x20\x03\x20\x05\x20\x03\x20\x05\x48\x1b\x41\xe4\x00\x48\x0d\x00\x20\x06\x20\x01\x36\x02\x18\x41\x7f\x21\x01\x20\x00\x20\x06\x41\x08\x6a\x20\x02\x20\x03\x20\x04\x20\x05\x41\x04\x10\x89\x0a\x45\x0d\x01\x0c\x02\x0b\x20\x01\x20\x02\x20\x03\x20\x04\x20\x05\x10\x8a\x0a\x0b\x41\x00\x21\x01\x0b\x20\x06\x41\x20\x6a\x24\x00\x20\x01\x0b\xcd\x0a\x02\x0e\x7f\x01\x7e\x02\x40\x20\x00\x28\x02\x38\x22\x07\x0d\x00\x41\x00\x21\x08\x02\x40\x20\x00\x28\x02\x00\x41\x00\x41\xb8\x1a\x20\x00\x28\x02\x04\x11\x01\x00\x22\x07\x0d\x00\x41\x7f\x0f\x0b\x20\x07\x41\x04\x6a\x41\x00\x41\xb4\x1a\x10\x74\x21\x09\x20\x07\x20\x00\x36\x02\x00\x20\x00\x20\x07\x36\x02\x38\x20\x07\x21\x0a\x02\x40\x03\x40\x02\x40\x20\x08\x41\x05\x47\x0d\x00\x20\x07\x41\x90\x1a\x6a\x21\x0b\x41\x00\x21\x0c\x41\x04\x21\x0d\x41\x00\x21\x0e\x0c\x02\x0b\x20\x09\x20\x08\x41\x02\x74\x22\x0f\x6a\x42\x80\x80\x80\x80\x80\x80\x80\x80\x20\x20\x0f\x41\x80\xc6\x05\x6a\x28\x02\x00\x22\x0c\xad\x22\x15\x80\xa7\x22\x0d\x36\x02\x00\x41\x01\x21\x10\x20\x0c\x41\x01\x6a\x41\x01\x76\x21\x0b\x41\x00\x21\x00\x03\x40\x02\x40\x20\x00\x41\xa8\x01\x47\x0d\x00\x41\x00\x21\x11\x20\x0a\x21\x0b\x02\x40\x03\x40\x20\x11\x41\x02\x46\x0d\x01\x20\x11\x41\x14\x6c\x20\x0f\x6a\x41\xa0\xc6\x05\x6a\x28\x02\x00\x21\x00\x41\x00\x21\x10\x02\x40\x03\x40\x20\x10\x41\xb0\x7f\x46\x0d\x01\x20\x0b\x20\x10\x6a\x22\x0e\x41\xe8\x00\x6a\x20\x00\x36\x02\x00\x20\x0e\x41\xb0\x07\x6a\x20\x00\xad\x42\x20\x86\x20\x15\x80\x3e\x02\x00\x20\x00\x20\x00\x20\x0c\x20\x0d\x10\x8b\x0a\x21\x00\x20\x10\x41\x7c\x6a\x21\x10\x0c\x00\x0b\x00\x0b\x20\x0b\x41\xd4\x00\x6a\x21\x0b\x20\x11\x41\x01\x6a\x21\x11\x0c\x00\x0b\x00\x0b\x20\x0a\x41\xa8\x01\x6a\x21\x0a\x20\x08\x41\x01\x6a\x21\x08\x0c\x02\x0b\x20\x0a\x20\x00\x6a\x22\x0e\x41\xc8\x13\x6a\x20\x10\x36\x02\x00\x20\x0e\x41\xcc\x13\x6a\x20\x10\xad\x42\x20\x86\x20\x15\x80\x3e\x02\x00\x20\x10\x20\x0b\x20\x0c\x20\x0d\x10\x8b\x0a\x21\x10\x20\x00\x41\x08\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x00\x0b\x03\x40\x20\x0c\x41\x04\x46\x0d\x01\x20\x0e\x41\x02\x74\x21\x10\x20\x0c\x41\x01\x6a\x21\x0c\x20\x0d\x21\x00\x02\x40\x03\x40\x20\x00\x41\x14\x46\x0d\x01\x20\x0b\x20\x10\x6a\x20\x10\x41\xd0\xc6\x05\x6a\x35\x02\x00\x42\x20\x86\x20\x00\x41\x80\xc6\x05\x6a\x35\x02\x00\x80\x3e\x02\x00\x20\x10\x41\x04\x6a\x21\x10\x20\x00\x41\x04\x6a\x21\x00\x20\x0e\x41\x01\x6a\x21\x0e\x0c\x00\x0b\x00\x0b\x20\x0d\x41\x04\x6a\x21\x0d\x0c\x00\x0b\x00\x0b\x20\x05\x20\x03\x6a\x22\x12\x41\x05\x74\x22\x13\x41\x7f\x6a\x21\x0c\x41\x04\x21\x0a\x41\x03\x21\x0d\x41\x00\x21\x08\x41\x00\x21\x11\x41\x7f\x21\x0f\x02\x40\x03\x40\x20\x0d\x41\x06\x46\x0d\x01\x41\x05\x20\x0d\x6b\x41\x02\x74\x41\xa0\xc7\x05\x6a\x28\x02\x00\x22\x0b\x41\x7c\x6a\x41\x02\x6d\x22\x00\x41\xdc\x00\x20\x00\x41\xdc\x00\x48\x1b\x22\x00\x41\x01\x74\x41\x02\x6a\x21\x0e\x02\x40\x03\x40\x41\x00\x41\x20\x20\x0c\x20\x00\x6a\x20\x00\x6e\x22\x10\x41\x7f\x6a\x67\x6b\x20\x10\x41\x02\x49\x1b\x22\x10\x41\x14\x4a\x0d\x01\x02\x40\x20\x10\x20\x0e\x41\x7e\x6a\x22\x0e\x6a\x20\x0b\x4a\x0d\x00\x20\x10\x41\x01\x6a\x20\x10\x74\x20\x0d\x6c\x22\x0e\x20\x0f\x20\x0e\x20\x0f\x49\x22\x0e\x1b\x21\x0f\x20\x0d\x20\x0a\x20\x0e\x1b\x21\x0a\x20\x10\x20\x11\x20\x0e\x1b\x21\x11\x20\x00\x20\x08\x20\x0e\x1b\x21\x08\x0c\x02\x0b\x20\x00\x41\x7f\x6a\x22\x00\x0d\x00\x0b\x0b\x20\x0d\x41\x01\x6a\x21\x0d\x0c\x00\x0b\x00\x0b\x02\x40\x20\x08\x45\x0d\x00\x42\x01\x20\x11\xad\x86\xa7\x21\x0b\x02\x40\x02\x40\x20\x06\x41\x03\x71\x0d\x00\x20\x06\x41\x04\x71\x0d\x01\x20\x01\x41\x00\x10\x98\x09\x1a\x0c\x01\x0b\x20\x04\x20\x02\x20\x06\x41\x02\x71\x22\x00\x1b\x21\x10\x20\x05\x20\x03\x20\x00\x1b\x21\x0e\x20\x02\x20\x04\x20\x00\x1b\x21\x04\x20\x03\x20\x05\x20\x00\x1b\x21\x05\x20\x0e\x21\x03\x20\x10\x21\x02\x0b\x41\x7f\x21\x10\x02\x40\x20\x07\x28\x02\x00\x22\x00\x28\x02\x00\x41\x00\x20\x0a\x20\x0b\x41\x02\x74\x22\x0e\x6c\x22\x0c\x20\x00\x28\x02\x04\x11\x01\x00\x22\x09\x45\x0d\x00\x20\x07\x20\x09\x20\x0b\x20\x02\x20\x03\x20\x08\x41\x3d\x41\x3d\x20\x11\x74\x20\x13\x49\x1b\x20\x08\x20\x08\x41\x3d\x4a\x1b\x22\x13\x41\x05\x20\x0a\x6b\x22\x0f\x20\x0a\x10\x8c\x0a\x02\x40\x20\x06\x41\x07\x71\x41\x01\x47\x0d\x00\x20\x01\x41\x00\x10\x98\x09\x1a\x0b\x20\x06\x41\x04\x71\x21\x14\x20\x07\x28\x02\x00\x22\x00\x28\x02\x00\x21\x10\x20\x00\x28\x02\x04\x21\x0d\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x11\x41\x0d\x4a\x0d\x00\x41\x00\x21\x00\x20\x10\x41\x00\x20\x0c\x20\x0d\x11\x01\x00\x22\x08\x45\x0d\x02\x20\x07\x20\x08\x20\x0b\x20\x04\x20\x05\x20\x13\x20\x0f\x20\x0a\x10\x8c\x0a\x20\x14\x0d\x01\x20\x01\x41\x00\x10\x98\x09\x1a\x0c\x01\x0b\x41\x00\x21\x00\x20\x10\x41\x00\x20\x0e\x20\x0d\x11\x01\x00\x22\x08\x45\x0d\x01\x0b\x20\x0b\x41\x02\x74\x21\x03\x41\x05\x20\x0a\x6b\x21\x02\x41\x00\x21\x10\x20\x11\x41\x0e\x48\x21\x06\x20\x08\x21\x0e\x41\x00\x21\x00\x02\x40\x03\x40\x20\x00\x20\x0a\x4e\x0d\x01\x02\x40\x02\x40\x20\x06\x0d\x00\x20\x07\x20\x08\x20\x0b\x20\x04\x20\x05\x20\x13\x20\x02\x20\x00\x6a\x22\x0c\x41\x01\x10\x8c\x0a\x20\x10\x21\x0d\x20\x08\x21\x0f\x0c\x01\x0b\x20\x00\x20\x0b\x6c\x21\x0d\x20\x00\x20\x0a\x6b\x41\x05\x6a\x21\x0c\x20\x0e\x21\x0f\x0b\x20\x0e\x20\x03\x6a\x21\x0e\x20\x10\x20\x0b\x6a\x21\x10\x20\x00\x41\x01\x6a\x21\x00\x20\x07\x20\x09\x20\x0d\x41\x02\x74\x6a\x20\x0f\x20\x11\x20\x11\x20\x0c\x10\x8d\x0a\x45\x0d\x00\x0b\x20\x08\x21\x00\x0c\x01\x0b\x20\x14\x0d\x01\x41\x00\x21\x00\x20\x01\x41\x00\x10\x98\x09\x1a\x20\x07\x28\x02\x00\x20\x08\x10\x8e\x0a\x20\x01\x20\x12\x10\x98\x09\x45\x0d\x02\x0b\x20\x07\x28\x02\x00\x22\x10\x28\x02\x00\x20\x09\x41\x00\x20\x10\x28\x02\x04\x11\x01\x00\x1a\x20\x07\x28\x02\x00\x20\x00\x10\x8e\x0a\x41\x7f\x0f\x0b\x20\x07\x28\x02\x00\x20\x08\x10\x8e\x0a\x0b\x20\x07\x20\x01\x28\x02\x10\x20\x12\x20\x09\x20\x11\x20\x13\x20\x0a\x10\x8f\x0a\x41\x00\x21\x10\x20\x07\x28\x02\x00\x22\x00\x28\x02\x00\x20\x09\x41\x00\x20\x00\x28\x02\x04\x11\x01\x00\x1a\x0b\x20\x10\x0f\x0b\x10\x40\x00\x0b\xb2\x01\x02\x02\x7e\x04\x7f\x20\x03\x35\x02\x00\x21\x05\x41\x00\x21\x07\x20\x02\x21\x08\x41\x00\x21\x09\x02\x40\x03\x40\x20\x08\x45\x0d\x01\x20\x00\x20\x07\x6a\x20\x01\x20\x07\x6a\x35\x02\x00\x20\x05\x7e\x20\x09\xad\x7c\x22\x06\x3e\x02\x00\x20\x08\x41\x7f\x6a\x21\x08\x20\x07\x41\x04\x6a\x21\x07\x20\x06\x42\x20\x88\xa7\x21\x09\x0c\x00\x0b\x00\x0b\x20\x00\x20\x02\x41\x02\x74\x22\x0a\x6a\x20\x09\x36\x02\x00\x20\x03\x41\x04\x6a\x21\x09\x20\x00\x41\x04\x6a\x21\x07\x41\x01\x21\x08\x02\x40\x03\x40\x20\x08\x20\x04\x4f\x0d\x01\x20\x07\x20\x0a\x6a\x20\x07\x20\x01\x20\x02\x20\x09\x28\x02\x00\x10\x90\x0a\x36\x02\x00\x20\x09\x41\x04\x6a\x21\x09\x20\x07\x41\x04\x6a\x21\x07\x20\x08\x41\x01\x6a\x21\x08\x0c\x00\x0b\x00\x0b\x0b\x10\x00\x20\x01\xad\x20\x00\xad\x7e\x20\x02\x20\x03\x10\x91\x0a\x0b\x99\x03\x02\x0d\x7f\x02\x7e\x41\x00\x21\x08\x20\x01\x41\x00\x20\x02\x41\x02\x74\x22\x09\x20\x07\x6c\x10\x74\x1a\x41\x7f\x20\x05\x41\x1f\x71\x22\x0a\x74\x41\x7f\x73\x41\x7f\x20\x0a\x1b\x21\x0b\x20\x02\x20\x05\x20\x04\x41\x05\x74\x6a\x41\x7f\x6a\x20\x05\x6e\x22\x0a\x20\x0a\x20\x02\x4a\x1b\x21\x0c\x20\x06\x41\x02\x74\x21\x0d\x20\x00\x41\x04\x6a\x21\x0e\x20\x05\x41\x20\x4a\x21\x0f\x20\x05\x41\x3e\x48\x21\x10\x20\x05\x41\x3d\x4a\x21\x11\x20\x05\x41\xc1\x00\x48\x21\x12\x02\x40\x03\x40\x20\x08\x20\x0c\x4e\x0d\x01\x20\x03\x20\x04\x20\x08\x20\x05\x6c\x22\x00\x10\x92\x0a\x21\x02\x02\x40\x02\x40\x20\x0f\x0d\x00\x20\x02\x20\x0b\x71\xad\x22\x15\x21\x16\x0c\x01\x0b\x20\x03\x20\x04\x20\x00\x41\x20\x6a\x10\x92\x0a\x21\x06\x02\x40\x20\x11\x0d\x00\x20\x06\x20\x0b\x71\xad\x42\x20\x86\x20\x02\xad\x22\x15\x84\x21\x16\x0c\x01\x0b\x02\x40\x02\x40\x20\x12\x0d\x00\x20\x03\x20\x04\x20\x00\x41\xc0\x00\x6a\x10\x92\x0a\x20\x0b\x71\x21\x00\x0c\x01\x0b\x20\x06\x20\x0b\x71\x21\x06\x41\x00\x21\x00\x0b\x20\x06\xad\x42\x01\x86\x20\x02\x41\x1f\x76\xad\x84\x20\x00\xad\x42\x21\x86\x84\x21\x16\x20\x02\x41\xff\xff\xff\xff\x07\x71\xad\x21\x15\x0b\x41\x00\x21\x00\x20\x01\x21\x06\x20\x0d\x21\x02\x02\x40\x03\x40\x20\x00\x20\x07\x4e\x0d\x01\x20\x16\x20\x02\x41\x80\xc6\x05\x6a\x28\x02\x00\x22\x13\x20\x0e\x20\x02\x6a\x28\x02\x00\x22\x14\x10\x91\x0a\x21\x0a\x02\x40\x20\x10\x0d\x00\x20\x0a\xad\x42\x1f\x86\x20\x15\x84\x20\x13\x20\x14\x10\x91\x0a\x21\x0a\x0b\x20\x06\x20\x0a\x36\x02\x00\x20\x06\x20\x09\x6a\x21\x06\x20\x02\x41\x04\x6a\x21\x02\x20\x00\x41\x01\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x20\x01\x41\x04\x6a\x21\x01\x20\x08\x41\x01\x6a\x21\x08\x0c\x00\x0b\x00\x0b\x0b\xdd\x02\x02\x09\x7f\x01\x7e\x41\x7f\x21\x06\x02\x40\x20\x00\x20\x01\x20\x03\x20\x03\x41\x01\x76\x22\x07\x41\x13\x20\x07\x41\x13\x49\x1b\x20\x03\x41\x14\x48\x1b\x22\x08\x20\x03\x20\x08\x6b\x22\x07\x41\x01\x20\x08\x74\x22\x09\x41\x01\x20\x07\x74\x22\x0a\x41\x00\x20\x05\x10\x93\x0a\x0d\x00\x20\x00\x20\x02\x20\x08\x20\x07\x20\x09\x20\x0a\x41\x00\x20\x05\x10\x93\x0a\x0d\x00\x02\x40\x02\x40\x20\x07\x45\x0d\x00\x41\x00\x21\x03\x03\x40\x20\x09\x20\x03\x46\x0d\x02\x20\x00\x20\x01\x20\x03\x20\x07\x74\x41\x02\x74\x22\x06\x6a\x20\x02\x20\x06\x6a\x20\x07\x20\x04\x20\x05\x10\x8d\x0a\x1a\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x20\x05\x41\xa8\x01\x6c\x6a\x20\x04\x41\x03\x74\x6a\x22\x06\x41\xcc\x13\x6a\x35\x02\x00\x21\x0f\x20\x06\x41\xc8\x13\x6a\x28\x02\x00\x21\x0b\x20\x05\x41\x02\x74\x22\x04\x41\x80\xc6\x05\x6a\x28\x02\x00\x21\x06\x20\x00\x20\x04\x6a\x41\x04\x6a\x28\x02\x00\x21\x0c\x20\x01\x21\x04\x41\x00\x21\x0d\x03\x40\x20\x0d\x20\x03\x76\x0d\x01\x20\x04\x20\x04\x28\x02\x00\x22\x0e\x41\x00\x20\x06\x20\x0e\x20\x06\x49\x1b\x6b\x20\x02\x28\x02\x00\x20\x06\x20\x0c\x10\x8b\x0a\x22\x0e\x20\x0b\x6c\x20\x06\x20\x0e\xad\x20\x0f\x7e\x42\x20\x88\xa7\x6c\x6b\x36\x02\x00\x20\x04\x41\x04\x6a\x21\x04\x20\x02\x41\x04\x6a\x21\x02\x20\x0d\x41\x01\x6a\x21\x0d\x0c\x00\x0b\x00\x0b\x41\x7f\x41\x00\x20\x00\x20\x01\x20\x08\x20\x07\x20\x09\x20\x0a\x41\x01\x20\x05\x10\x93\x0a\x1b\x21\x06\x0b\x20\x06\x0b\x1c\x00\x02\x40\x20\x01\x45\x0d\x00\x20\x00\x28\x02\x00\x20\x01\x41\x00\x20\x00\x28\x02\x04\x11\x01\x00\x1a\x0b\x0b\xaf\x09\x02\x1f\x7f\x02\x7e\x23\x00\x41\xe0\x00\x6b\x22\x07\x24\x00\x41\x7f\x20\x05\x41\x1f\x71\x22\x08\x74\x41\x7f\x73\x21\x09\x20\x06\x41\x7f\x6a\x22\x0a\x20\x06\x6c\x41\x02\x6d\x21\x0b\x41\x00\x21\x0c\x02\x40\x03\x40\x02\x40\x20\x0c\x41\x14\x47\x0d\x00\x20\x09\x41\x7f\x20\x08\x1b\x21\x0d\x20\x05\x41\x7f\x6a\x21\x09\x41\x00\x20\x06\x6b\x21\x0e\x41\x94\xc6\x05\x20\x06\x41\x02\x74\x6b\x21\x0f\x41\x00\x21\x0c\x02\x40\x03\x40\x20\x0c\x41\x14\x46\x0d\x01\x20\x07\x41\x20\x6a\x20\x0c\x6a\x41\x00\x36\x02\x00\x20\x0c\x41\x04\x6a\x21\x0c\x0c\x00\x0b\x00\x0b\x20\x01\x41\x00\x20\x02\x41\x02\x74\x10\x74\x21\x10\x41\x01\x20\x04\x74\x22\x0c\x20\x09\x20\x02\x41\x05\x74\x6a\x20\x05\x6e\x22\x01\x20\x0c\x20\x01\x48\x1b\x21\x11\x20\x00\x41\xb8\x1a\x6a\x21\x12\x41\x20\x20\x08\x6b\x21\x13\x20\x06\x41\x7e\x6a\x21\x14\x41\x00\x20\x0b\x41\x02\x74\x6b\x21\x15\x20\x0e\x41\x02\x74\x41\x94\xc6\x05\x6a\x21\x16\x41\x01\x20\x06\x6b\x41\x02\x74\x41\x94\xc6\x05\x6a\x21\x17\x20\x07\x41\x20\x6a\x20\x0a\x41\x02\x74\x22\x0c\x6a\x21\x18\x20\x07\x41\xc0\x00\x6a\x20\x0c\x6a\x21\x19\x20\x07\x41\x20\x6a\x20\x09\x41\x05\x76\x22\x1a\x41\x02\x74\x6a\x21\x1b\x20\x07\x41\x20\x6a\x20\x1a\x41\x01\x6a\x22\x1c\x41\x02\x74\x6a\x21\x1d\x20\x07\x20\x0a\x20\x1a\x6b\x41\x02\x74\x6a\x21\x1e\x20\x07\x41\xc0\x00\x6a\x41\x04\x72\x21\x1f\x41\x00\x21\x20\x03\x40\x20\x20\x20\x11\x4e\x0d\x03\x41\x00\x21\x0c\x20\x07\x41\xc0\x00\x6a\x21\x09\x20\x16\x21\x00\x02\x40\x03\x40\x02\x40\x20\x0c\x20\x06\x48\x0d\x00\x41\x00\x21\x0e\x20\x1f\x21\x21\x20\x17\x21\x22\x41\x00\x21\x23\x0c\x02\x0b\x20\x09\x20\x03\x20\x0c\x20\x04\x74\x20\x20\x6a\x41\x02\x74\x6a\x28\x02\x00\x22\x01\x41\x00\x20\x00\x28\x02\x00\x22\x0b\x20\x01\x20\x0b\x49\x1b\x6b\x36\x02\x00\x20\x09\x41\x04\x6a\x21\x09\x20\x00\x41\x04\x6a\x21\x00\x20\x0c\x41\x01\x6a\x21\x0c\x0c\x00\x0b\x00\x0b\x03\x40\x02\x40\x02\x40\x20\x0e\x20\x0a\x4e\x0d\x00\x41\x01\x21\x00\x20\x0e\x41\x01\x6a\x21\x24\x20\x15\x20\x23\x41\x02\x74\x6a\x21\x0c\x20\x07\x41\xc0\x00\x6a\x20\x0e\x41\x02\x74\x6a\x21\x25\x20\x21\x21\x09\x20\x22\x21\x01\x03\x40\x20\x0e\x20\x00\x6a\x20\x06\x4e\x0d\x02\x20\x09\x20\x09\x28\x02\x00\x20\x01\x28\x02\x00\x22\x0b\x6a\x20\x25\x28\x02\x00\x6b\x20\x0c\x41\xf8\xc6\x05\x6a\x28\x02\x00\x20\x0b\x20\x12\x20\x0c\x6a\x28\x02\x00\x10\x94\x0a\x36\x02\x00\x20\x0c\x41\x04\x6a\x21\x0c\x20\x00\x41\x01\x6a\x21\x00\x20\x09\x41\x04\x6a\x21\x09\x20\x01\x41\x04\x6a\x21\x01\x0c\x00\x0b\x00\x0b\x20\x07\x20\x19\x28\x02\x00\x36\x02\x20\x41\x01\x21\x01\x20\x14\x21\x0b\x02\x40\x03\x40\x20\x0b\x41\x01\x48\x0d\x01\x20\x0f\x20\x0b\x41\x02\x74\x22\x0c\x6a\x35\x02\x00\x21\x26\x20\x07\x41\xc0\x00\x6a\x20\x0c\x6a\x28\x02\x00\x21\x00\x20\x07\x41\x20\x6a\x21\x0c\x20\x01\x21\x09\x02\x40\x03\x40\x20\x09\x45\x0d\x01\x20\x0c\x20\x26\x20\x0c\x35\x02\x00\x7e\x20\x00\xad\x7c\x22\x27\x3e\x02\x00\x20\x09\x41\x7f\x6a\x21\x09\x20\x0c\x41\x04\x6a\x21\x0c\x20\x27\x42\x20\x88\xa7\x21\x00\x0c\x00\x0b\x00\x0b\x20\x07\x41\x20\x6a\x20\x01\x41\x02\x74\x6a\x20\x00\x36\x02\x00\x20\x0b\x41\x7f\x6a\x21\x0b\x20\x01\x41\x01\x6a\x21\x01\x0c\x00\x0b\x00\x0b\x20\x0f\x20\x0b\x41\x02\x74\x6a\x35\x02\x00\x21\x26\x20\x07\x41\x20\x6a\x21\x0c\x20\x07\x21\x00\x20\x07\x28\x02\x40\x21\x0b\x20\x01\x21\x09\x02\x40\x03\x40\x20\x09\x45\x0d\x01\x20\x0c\x20\x26\x20\x0c\x35\x02\x00\x7e\x20\x0b\xad\x7c\x20\x00\x35\x02\x00\x7c\x22\x27\x3e\x02\x00\x20\x09\x41\x7f\x6a\x21\x09\x20\x00\x41\x04\x6a\x21\x00\x20\x0c\x41\x04\x6a\x21\x0c\x20\x27\x42\x20\x88\xa7\x21\x0b\x0c\x00\x0b\x00\x0b\x20\x07\x41\x20\x6a\x20\x01\x41\x02\x74\x22\x0c\x6a\x20\x07\x20\x0c\x6a\x28\x02\x00\x20\x0b\x6a\x36\x02\x00\x20\x20\x20\x05\x6c\x21\x0c\x20\x07\x41\x20\x6a\x21\x00\x20\x1a\x21\x09\x02\x40\x03\x40\x20\x09\x45\x0d\x01\x20\x10\x20\x02\x20\x0c\x20\x00\x28\x02\x00\x10\x95\x0a\x20\x09\x41\x7f\x6a\x21\x09\x20\x00\x41\x04\x6a\x21\x00\x20\x0c\x41\x20\x6a\x21\x0c\x0c\x00\x0b\x00\x0b\x20\x10\x20\x02\x20\x0c\x20\x1b\x28\x02\x00\x22\x01\x20\x0d\x71\x10\x95\x0a\x02\x40\x02\x40\x02\x40\x20\x08\x45\x0d\x00\x20\x07\x21\x09\x20\x1d\x21\x00\x20\x1a\x21\x0c\x03\x40\x20\x0c\x20\x0a\x4e\x0d\x02\x20\x09\x20\x01\x20\x08\x76\x20\x00\x28\x02\x00\x22\x01\x20\x13\x74\x72\x36\x02\x00\x20\x09\x41\x04\x6a\x21\x09\x20\x00\x41\x04\x6a\x21\x00\x20\x0c\x41\x01\x6a\x21\x0c\x0c\x00\x0b\x00\x0b\x20\x07\x21\x09\x20\x1d\x21\x00\x20\x1c\x21\x0c\x03\x40\x20\x0c\x20\x06\x4e\x0d\x02\x20\x09\x20\x00\x28\x02\x00\x36\x02\x00\x20\x09\x41\x04\x6a\x21\x09\x20\x00\x41\x04\x6a\x21\x00\x20\x0c\x41\x01\x6a\x21\x0c\x0c\x00\x0b\x00\x0b\x20\x1e\x20\x18\x28\x02\x00\x20\x08\x76\x36\x02\x00\x0b\x20\x20\x41\x01\x6a\x21\x20\x0c\x02\x0b\x20\x21\x41\x04\x6a\x21\x21\x20\x22\x41\x04\x6a\x21\x22\x20\x23\x20\x00\x6a\x41\x7f\x6a\x21\x23\x20\x24\x21\x0e\x0c\x00\x0b\x00\x0b\x00\x0b\x20\x07\x20\x0c\x6a\x41\x00\x36\x02\x00\x20\x0c\x41\x04\x6a\x21\x0c\x0c\x00\x0b\x00\x0b\x20\x07\x41\xe0\x00\x6a\x24\x00\x0b\x53\x01\x02\x7e\x20\x03\xad\x21\x04\x41\x00\x21\x03\x02\x40\x03\x40\x20\x02\x45\x0d\x01\x20\x00\x20\x01\x35\x02\x00\x20\x04\x7e\x20\x03\xad\x7c\x20\x00\x35\x02\x00\x7c\x22\x05\x3e\x02\x00\x20\x02\x41\x7f\x6a\x21\x02\x20\x00\x41\x04\x6a\x21\x00\x20\x01\x41\x04\x6a\x21\x01\x20\x05\x42\x20\x88\xa7\x21\x03\x0c\x00\x0b\x00\x0b\x20\x03\x0b\x40\x00\x20\x00\x20\x00\x42\x1d\x88\x42\xff\xff\xff\xff\x0f\x83\x20\x02\xad\x7e\x42\x20\x88\x20\x01\xad\x7e\x7d\x20\x01\x41\x01\x74\xad\x7d\x22\x00\x20\x00\x42\x20\x88\xa7\x41\x01\x75\x20\x01\x71\xad\x7c\x22\x00\x42\x20\x88\xa7\x20\x01\x71\x20\x00\xa7\x6a\x0b\x65\x01\x03\x7f\x20\x02\x41\x1f\x71\x21\x03\x41\x00\x21\x04\x02\x40\x20\x02\x41\x05\x75\x22\x02\x20\x01\x4f\x0d\x00\x20\x00\x20\x02\x41\x02\x74\x6a\x28\x02\x00\x21\x04\x0b\x02\x40\x20\x03\x45\x0d\x00\x41\x00\x21\x05\x02\x40\x20\x02\x41\x01\x6a\x22\x02\x20\x01\x4f\x0d\x00\x20\x00\x20\x02\x41\x02\x74\x6a\x28\x02\x00\x21\x05\x0b\x20\x05\x41\x20\x20\x03\x6b\x74\x20\x04\x20\x03\x76\x72\x21\x04\x0b\x20\x04\x0b\xa2\x05\x01\x0d\x7f\x41\x00\x21\x08\x02\x40\x20\x00\x28\x02\x00\x22\x09\x28\x02\x00\x41\x00\x20\x04\x41\x02\x74\x20\x09\x28\x02\x04\x11\x01\x00\x22\x0a\x45\x0d\x00\x02\x40\x02\x40\x20\x03\x0d\x00\x20\x00\x20\x01\x20\x01\x20\x0a\x20\x02\x20\x06\x20\x07\x10\x96\x0a\x45\x0d\x01\x0c\x02\x0b\x41\x00\x21\x08\x20\x00\x28\x02\x00\x22\x09\x28\x02\x00\x41\x00\x20\x04\x41\x06\x74\x20\x09\x28\x02\x04\x11\x01\x00\x22\x0b\x45\x0d\x01\x02\x40\x02\x40\x20\x05\x41\x0f\x71\x0d\x00\x20\x00\x20\x07\x41\xa8\x01\x6c\x6a\x20\x06\x41\xd4\x00\x6c\x6a\x20\x03\x20\x02\x6a\x41\x02\x74\x6a\x41\x18\x6a\x28\x02\x00\x21\x0c\x20\x07\x41\x02\x74\x22\x08\x41\x80\xc6\x05\x6a\x28\x02\x00\x21\x0d\x20\x00\x20\x08\x6a\x41\x04\x6a\x28\x02\x00\x21\x0e\x20\x04\x41\x02\x74\x21\x03\x20\x05\x41\x02\x74\x21\x0f\x41\x01\x21\x10\x41\x00\x21\x11\x03\x40\x20\x11\x20\x05\x4f\x0d\x02\x41\x00\x21\x12\x20\x0b\x21\x13\x20\x01\x21\x14\x03\x40\x02\x40\x20\x12\x20\x04\x47\x0d\x00\x41\x10\x21\x09\x20\x0b\x21\x08\x02\x40\x03\x40\x02\x40\x20\x09\x0d\x00\x41\x00\x21\x12\x20\x01\x21\x14\x20\x0b\x21\x13\x0c\x02\x0b\x02\x40\x02\x40\x20\x06\x0d\x00\x20\x00\x20\x08\x20\x08\x20\x0a\x20\x02\x41\x00\x20\x07\x10\x96\x0a\x21\x14\x0c\x01\x0b\x20\x08\x20\x04\x20\x10\x20\x0d\x20\x0e\x10\x97\x0a\x20\x00\x20\x08\x20\x08\x20\x0a\x20\x02\x20\x06\x20\x07\x10\x96\x0a\x21\x14\x0b\x02\x40\x20\x14\x45\x0d\x00\x20\x0b\x21\x08\x0c\x09\x0b\x02\x40\x20\x06\x0d\x00\x20\x08\x20\x04\x20\x10\x20\x0d\x20\x0e\x10\x97\x0a\x0b\x20\x10\x20\x0c\x20\x0d\x20\x0e\x10\x8b\x0a\x21\x10\x20\x09\x41\x7f\x6a\x21\x09\x20\x08\x20\x03\x6a\x21\x08\x0c\x00\x0b\x00\x0b\x03\x40\x02\x40\x02\x40\x20\x12\x20\x04\x46\x0d\x00\x41\x00\x21\x08\x20\x13\x21\x09\x03\x40\x20\x08\x41\xc0\x00\x46\x0d\x02\x20\x14\x20\x08\x6a\x20\x09\x28\x02\x00\x36\x02\x00\x20\x08\x41\x04\x6a\x21\x08\x20\x09\x20\x03\x6a\x21\x09\x0c\x00\x0b\x00\x0b\x20\x01\x41\xc0\x00\x6a\x21\x01\x20\x11\x41\x10\x6a\x21\x11\x0c\x04\x0b\x20\x14\x20\x0f\x6a\x21\x14\x20\x13\x41\x04\x6a\x21\x13\x20\x12\x41\x01\x6a\x21\x12\x0c\x00\x0b\x00\x0b\x41\x00\x21\x08\x20\x13\x21\x09\x02\x40\x03\x40\x20\x08\x41\xc0\x00\x46\x0d\x01\x20\x09\x20\x14\x20\x08\x6a\x28\x02\x00\x36\x02\x00\x20\x09\x20\x03\x6a\x21\x09\x20\x08\x41\x04\x6a\x21\x08\x0c\x00\x0b\x00\x0b\x20\x13\x41\x04\x6a\x21\x13\x20\x14\x20\x0f\x6a\x21\x14\x20\x12\x41\x01\x6a\x21\x12\x0c\x00\x0b\x00\x0b\x00\x0b\x41\xf8\xc6\x05\x41\xc3\xc5\x05\x41\xe1\x3d\x41\x8e\xc7\x05\x10\x4a\x00\x0b\x20\x00\x28\x02\x00\x22\x08\x28\x02\x00\x20\x0b\x41\x00\x20\x08\x28\x02\x04\x11\x01\x00\x1a\x0b\x20\x00\x28\x02\x00\x22\x08\x28\x02\x00\x20\x0a\x41\x00\x20\x08\x28\x02\x04\x11\x01\x00\x1a\x41\x00\x0f\x0b\x20\x00\x28\x02\x00\x20\x08\x10\x8e\x0a\x20\x00\x28\x02\x00\x20\x0a\x10\x8e\x0a\x41\x7f\x0b\x23\x00\x20\x01\x20\x00\x6c\x20\x03\xad\x20\x00\xad\x7e\x42\x20\x88\xa7\x20\x02\x6c\x6b\x22\x00\x41\x00\x20\x02\x20\x00\x20\x02\x49\x1b\x6b\x0b\x61\x01\x02\x7f\x20\x02\x41\x1f\x71\x21\x04\x02\x40\x20\x02\x41\x05\x75\x22\x02\x20\x01\x4f\x0d\x00\x20\x00\x20\x02\x41\x02\x74\x6a\x22\x05\x20\x05\x28\x02\x00\x20\x03\x20\x04\x74\x72\x36\x02\x00\x0b\x02\x40\x20\x04\x45\x0d\x00\x20\x02\x41\x01\x6a\x22\x02\x20\x01\x4f\x0d\x00\x20\x00\x20\x02\x41\x02\x74\x6a\x22\x02\x20\x02\x28\x02\x00\x20\x03\x41\x20\x20\x04\x6b\x76\x72\x36\x02\x00\x0b\x0b\xb0\x03\x02\x14\x7f\x01\x7e\x41\x01\x20\x04\x74\x22\x07\x41\x01\x76\x22\x08\x41\x02\x74\x21\x09\x20\x06\x41\x02\x74\x41\x80\xc6\x05\x6a\x28\x02\x00\x22\x0a\x41\x01\x74\x21\x0b\x41\x01\x21\x0c\x03\x7f\x20\x02\x21\x0d\x02\x40\x02\x40\x02\x40\x20\x07\x41\x02\x47\x0d\x00\x20\x08\x41\x02\x74\x21\x0e\x41\x00\x21\x0f\x03\x40\x20\x08\x45\x0d\x02\x20\x01\x20\x0d\x20\x0e\x6a\x28\x02\x00\x22\x02\x20\x0d\x28\x02\x00\x22\x10\x6a\x22\x11\x41\x00\x20\x0b\x20\x11\x20\x0b\x49\x1b\x6b\x36\x02\x00\x20\x01\x20\x0e\x6a\x20\x10\x20\x02\x6b\x20\x0b\x41\x00\x20\x10\x20\x02\x49\x1b\x6a\x36\x02\x00\x20\x08\x41\x7f\x6a\x21\x08\x20\x01\x41\x04\x6a\x21\x01\x20\x0d\x41\x04\x6a\x21\x0d\x0c\x00\x0b\x00\x0b\x20\x00\x20\x04\x20\x05\x20\x06\x10\x98\x0a\x22\x12\x0d\x01\x41\x7f\x21\x0f\x0b\x20\x0f\x0f\x0b\x20\x07\x41\x01\x76\x21\x07\x20\x0c\x41\x03\x74\x21\x13\x20\x0c\x41\x02\x74\x21\x14\x20\x0c\x41\x01\x74\x21\x15\x41\x00\x21\x16\x20\x03\x21\x17\x20\x0d\x21\x18\x02\x40\x03\x40\x20\x16\x20\x07\x46\x0d\x01\x20\x12\x35\x02\x04\x21\x1b\x20\x12\x28\x02\x00\x21\x19\x20\x0c\x21\x0e\x20\x17\x21\x02\x20\x18\x21\x10\x02\x40\x03\x40\x20\x0e\x45\x0d\x01\x20\x02\x20\x10\x20\x09\x6a\x28\x02\x00\x22\x11\x20\x10\x28\x02\x00\x22\x0f\x6a\x22\x1a\x41\x00\x20\x0b\x20\x1a\x20\x0b\x49\x1b\x6b\x36\x02\x00\x20\x02\x20\x14\x6a\x20\x0f\x20\x11\x6b\x20\x0b\x6a\x22\x11\x20\x19\x6c\x20\x0a\x20\x11\xad\x20\x1b\x7e\x42\x20\x88\xa7\x6c\x6b\x36\x02\x00\x20\x0e\x41\x7f\x6a\x21\x0e\x20\x02\x41\x04\x6a\x21\x02\x20\x10\x41\x04\x6a\x21\x10\x0c\x00\x0b\x00\x0b\x20\x17\x20\x13\x6a\x21\x17\x20\x18\x20\x14\x6a\x21\x18\x20\x16\x41\x01\x6a\x21\x16\x20\x12\x41\x08\x6a\x21\x12\x0c\x00\x0b\x00\x0b\x20\x04\x41\x7f\x6a\x21\x04\x20\x03\x21\x02\x20\x0d\x21\x03\x20\x15\x21\x0c\x0c\x00\x0b\x0b\x51\x01\x02\x7f\x20\x02\xad\x42\x20\x86\x20\x03\xad\x80\xa7\x21\x05\x41\x01\x21\x06\x02\x40\x03\x40\x20\x01\x45\x0d\x01\x20\x00\x20\x00\x28\x02\x00\x20\x06\x20\x03\x20\x04\x10\x8b\x0a\x36\x02\x00\x20\x06\x20\x02\x20\x03\x20\x05\x10\x94\x0a\x21\x06\x20\x01\x41\x7f\x6a\x21\x01\x20\x00\x41\x04\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x0b\xf4\x01\x02\x05\x7f\x01\x7e\x41\x00\x21\x04\x02\x40\x20\x01\x41\x13\x4a\x0d\x00\x20\x00\x20\x03\x41\xa0\x01\x6c\x6a\x20\x02\x41\xd0\x00\x6c\x6a\x20\x01\x41\x02\x74\x6a\x41\xa8\x0d\x6a\x22\x05\x28\x02\x00\x22\x04\x0d\x00\x41\x01\x21\x06\x41\x00\x21\x04\x20\x00\x28\x02\x00\x22\x07\x28\x02\x00\x41\x00\x41\x01\x20\x01\x41\x7f\x6a\x74\x22\x08\x41\x03\x74\x20\x07\x28\x02\x04\x11\x01\x00\x22\x07\x45\x0d\x00\x20\x00\x20\x03\x41\xa8\x01\x6c\x6a\x20\x02\x41\xd4\x00\x6c\x6a\x20\x01\x41\x02\x74\x6a\x22\x01\x41\xe0\x06\x6a\x28\x02\x00\x21\x04\x20\x01\x41\x18\x6a\x28\x02\x00\x21\x00\x20\x03\x41\x02\x74\x41\x80\xc6\x05\x6a\x28\x02\x00\x22\x03\xad\x21\x09\x20\x07\x21\x01\x02\x40\x03\x40\x20\x08\x45\x0d\x01\x20\x01\x20\x06\x36\x02\x00\x20\x01\x41\x04\x6a\x20\x06\xad\x42\x20\x86\x20\x09\x80\x3e\x02\x00\x20\x06\x20\x00\x20\x03\x20\x04\x10\x94\x0a\x21\x06\x20\x08\x41\x7f\x6a\x21\x08\x20\x01\x41\x08\x6a\x21\x01\x0c\x00\x0b\x00\x0b\x20\x05\x20\x07\x36\x02\x00\x20\x07\x21\x04\x0b\x20\x04\x0b\xe0\x05\x01\x0d\x7f\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x03\x41\x02\x4b\x0d\x00\x20\x00\x28\x02\x00\x41\x00\x20\x03\x41\x01\x74\x22\x04\x41\x01\x72\x22\x05\x41\x02\x74\x20\x00\x28\x02\x04\x11\x01\x00\x21\x06\x20\x00\x28\x02\x00\x41\x00\x20\x03\x41\x02\x74\x41\x08\x6a\x20\x00\x28\x02\x04\x11\x01\x00\x21\x07\x20\x06\x45\x0d\x01\x20\x07\x45\x0d\x01\x20\x03\x41\x01\x74\x21\x08\x20\x06\x21\x09\x02\x40\x03\x40\x20\x08\x45\x0d\x01\x20\x09\x41\x00\x36\x02\x00\x20\x08\x41\x7f\x6a\x21\x08\x20\x09\x41\x04\x6a\x21\x09\x0c\x00\x0b\x00\x0b\x20\x06\x20\x04\x41\x02\x74\x6a\x41\x01\x36\x02\x00\x20\x00\x20\x07\x20\x06\x20\x05\x20\x02\x20\x03\x10\x9a\x0a\x0d\x01\x20\x03\x41\x01\x6a\x21\x02\x41\x00\x21\x08\x41\x7f\x21\x09\x02\x40\x03\x40\x20\x03\x20\x09\x46\x0d\x01\x20\x01\x20\x08\x6a\x20\x07\x20\x08\x6a\x28\x02\x00\x36\x02\x00\x20\x09\x41\x01\x6a\x21\x09\x20\x08\x41\x04\x6a\x21\x08\x0c\x00\x0b\x00\x0b\x20\x06\x20\x03\x10\x9b\x0a\x0d\x04\x20\x01\x41\x01\x20\x02\x10\x87\x0a\x1a\x0c\x04\x0b\x20\x00\x28\x02\x00\x41\x00\x20\x03\x20\x03\x41\x7f\x6a\x41\x01\x76\x22\x0a\x6b\x22\x0b\x20\x03\x6a\x22\x09\x41\x01\x6a\x22\x0c\x41\x02\x74\x20\x00\x28\x02\x04\x11\x01\x00\x21\x07\x20\x00\x28\x02\x00\x41\x00\x20\x0b\x41\x0c\x6c\x41\x08\x6a\x20\x00\x28\x02\x04\x11\x01\x00\x21\x06\x20\x07\x45\x0d\x00\x20\x06\x45\x0d\x00\x20\x00\x20\x01\x20\x0a\x41\x02\x74\x22\x08\x6a\x22\x0d\x20\x02\x20\x08\x6a\x20\x0b\x10\x99\x0a\x0d\x01\x20\x00\x20\x07\x20\x02\x20\x03\x20\x0d\x20\x0b\x41\x01\x6a\x22\x04\x10\x88\x0a\x0d\x01\x20\x0b\x41\x01\x74\x21\x0e\x20\x07\x20\x03\x41\x02\x74\x6a\x21\x08\x20\x07\x20\x09\x41\x02\x74\x6a\x21\x0f\x03\x40\x02\x40\x20\x0f\x28\x02\x00\x0d\x00\x20\x07\x21\x08\x41\x00\x21\x02\x41\x00\x21\x09\x02\x40\x03\x40\x20\x09\x20\x0c\x4e\x0d\x01\x20\x08\x41\x00\x20\x08\x28\x02\x00\x22\x05\x6b\x22\x10\x20\x02\x6b\x36\x02\x00\x20\x10\x20\x02\x49\x20\x05\x41\x00\x47\x72\x21\x02\x20\x08\x41\x04\x6a\x21\x08\x20\x09\x41\x01\x6a\x21\x09\x0c\x00\x0b\x00\x0b\x20\x0f\x20\x0f\x28\x02\x00\x41\x01\x6a\x36\x02\x00\x20\x00\x20\x06\x20\x07\x20\x0a\x41\x02\x74\x6a\x20\x0c\x20\x0a\x6b\x20\x0d\x20\x04\x10\x88\x0a\x0d\x03\x20\x06\x20\x03\x41\x03\x74\x20\x0a\x41\x0c\x6c\x6b\x6a\x21\x08\x02\x40\x03\x40\x20\x0a\x45\x0d\x01\x20\x01\x20\x08\x28\x02\x00\x36\x02\x00\x20\x0a\x41\x7f\x6a\x21\x0a\x20\x01\x41\x04\x6a\x21\x01\x20\x08\x41\x04\x6a\x21\x08\x0c\x00\x0b\x00\x0b\x20\x0d\x20\x0d\x20\x06\x20\x0e\x41\x02\x74\x6a\x20\x0b\x10\x84\x0a\x1a\x0c\x05\x0b\x20\x0d\x41\x01\x20\x04\x10\x87\x0a\x1a\x20\x08\x20\x07\x20\x07\x20\x02\x20\x03\x10\x86\x0a\x20\x04\x10\x87\x0a\x1a\x0c\x00\x0b\x00\x0b\x20\x07\x45\x0d\x01\x0b\x20\x00\x28\x02\x00\x20\x07\x41\x00\x20\x00\x28\x02\x04\x11\x01\x00\x1a\x0b\x02\x40\x20\x06\x45\x0d\x00\x20\x00\x28\x02\x00\x20\x06\x41\x00\x20\x00\x28\x02\x04\x11\x01\x00\x1a\x0b\x41\x7f\x0f\x0b\x20\x00\x28\x02\x00\x20\x07\x41\x00\x20\x00\x28\x02\x04\x11\x01\x00\x1a\x20\x00\x28\x02\x00\x20\x06\x41\x00\x20\x00\x28\x02\x04\x11\x01\x00\x1a\x41\x00\x0b\xdb\x0c\x02\x0c\x7f\x03\x7e\x23\x00\x41\x10\x6b\x22\x06\x24\x00\x20\x04\x20\x05\x41\x7f\x6a\x22\x07\x41\x02\x74\x6a\x28\x02\x00\x21\x08\x02\x40\x02\x40\x02\x40\x02\x40\x20\x05\x41\x01\x47\x0d\x00\x41\x00\x21\x07\x20\x06\x41\x00\x36\x02\x0c\x02\x40\x02\x40\x02\x40\x20\x03\x41\x02\x4b\x0d\x00\x20\x02\x20\x03\x41\x02\x74\x41\x7c\x6a\x22\x09\x6a\x21\x0a\x20\x01\x20\x09\x6a\x21\x09\x20\x08\xad\x21\x12\x03\x40\x20\x03\x41\x01\x48\x0d\x02\x20\x03\x41\x7f\x6a\x21\x03\x20\x09\x20\x07\xad\x42\x20\x86\x20\x0a\x28\x02\x00\x22\x07\xad\x84\x20\x12\x80\xa7\x22\x04\x36\x02\x00\x20\x0a\x41\x7c\x6a\x21\x0a\x20\x09\x41\x7c\x6a\x21\x09\x20\x07\x20\x08\x20\x04\x6c\x6b\x21\x07\x0c\x00\x0b\x00\x0b\x20\x01\x20\x03\x41\x7f\x6a\x22\x03\x41\x02\x74\x22\x07\x6a\x21\x0a\x20\x02\x20\x07\x6a\x21\x09\x20\x08\x41\x7f\x73\xad\x42\x20\x86\x42\xff\xff\xff\xff\x0f\x84\x20\x08\xad\x80\xa7\x21\x04\x41\x00\x21\x07\x03\x40\x20\x03\x41\x00\x48\x0d\x02\x20\x0a\x20\x06\x41\x0c\x6a\x20\x07\x20\x09\x28\x02\x00\x20\x08\x20\x04\x10\x9c\x0a\x36\x02\x00\x20\x03\x41\x7f\x6a\x21\x03\x20\x0a\x41\x7c\x6a\x21\x0a\x20\x09\x41\x7c\x6a\x21\x09\x20\x06\x28\x02\x0c\x21\x07\x0c\x00\x0b\x00\x0b\x20\x06\x20\x07\x36\x02\x0c\x0b\x20\x02\x20\x07\x36\x02\x00\x0c\x01\x0b\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x03\x20\x05\x6b\x22\x0b\x20\x05\x20\x0b\x20\x05\x48\x1b\x41\x32\x48\x0d\x00\x02\x40\x20\x0b\x45\x0d\x00\x20\x00\x28\x02\x00\x41\x00\x20\x0b\x41\x01\x6a\x22\x0c\x20\x0b\x20\x0b\x20\x05\x49\x1b\x22\x0b\x41\x01\x6a\x22\x08\x41\x02\x74\x20\x00\x28\x02\x04\x11\x01\x00\x21\x0d\x20\x00\x28\x02\x00\x41\x00\x20\x08\x41\x03\x74\x20\x00\x28\x02\x04\x11\x01\x00\x21\x0e\x20\x0d\x45\x0d\x05\x20\x0e\x45\x0d\x05\x20\x0b\x20\x05\x49\x0d\x02\x20\x0b\x20\x05\x6b\x21\x07\x20\x0e\x21\x0a\x03\x40\x02\x40\x20\x07\x0d\x00\x20\x0e\x20\x0b\x41\x02\x74\x20\x05\x41\x02\x74\x6b\x6a\x21\x0a\x20\x05\x21\x07\x20\x04\x21\x09\x03\x40\x20\x07\x45\x0d\x06\x20\x0a\x20\x09\x28\x02\x00\x36\x02\x00\x20\x07\x41\x7f\x6a\x21\x07\x20\x0a\x41\x04\x6a\x21\x0a\x20\x09\x41\x04\x6a\x21\x09\x0c\x00\x0b\x00\x0b\x20\x0a\x41\x00\x36\x02\x00\x20\x07\x41\x7f\x6a\x21\x07\x20\x0a\x41\x04\x6a\x21\x0a\x0c\x00\x0b\x00\x0b\x41\xb4\xc7\x05\x41\xc3\xc5\x05\x41\xa4\x0b\x41\xbc\xc7\x05\x10\x4a\x00\x0b\x41\x00\x21\x0f\x02\x40\x20\x0b\x41\x03\x49\x0d\x00\x20\x08\x41\x7f\x73\xad\x42\x20\x86\x42\xff\xff\xff\xff\x0f\x84\x20\x08\xad\x80\xa7\x21\x0f\x0b\x20\x04\x20\x07\x41\x02\x74\x6a\x21\x07\x20\x03\x41\x02\x74\x20\x02\x6a\x41\x7c\x6a\x21\x0a\x20\x05\x21\x09\x02\x40\x02\x40\x03\x40\x20\x09\x41\x7f\x6a\x22\x09\x41\x00\x48\x0d\x01\x20\x07\x28\x02\x00\x21\x00\x20\x0a\x28\x02\x00\x21\x0e\x20\x07\x41\x7c\x6a\x21\x07\x20\x0a\x41\x7c\x6a\x21\x0a\x20\x0e\x20\x00\x46\x0d\x00\x0b\x20\x0e\x20\x00\x4f\x0d\x00\x20\x01\x20\x0b\x41\x02\x74\x6a\x41\x00\x36\x02\x00\x0c\x01\x0b\x20\x01\x20\x0b\x41\x02\x74\x22\x07\x6a\x41\x01\x36\x02\x00\x20\x02\x20\x07\x6a\x22\x07\x20\x07\x20\x04\x20\x05\x10\x86\x0a\x1a\x0b\x20\x03\x20\x05\x6b\x41\x02\x74\x20\x02\x6a\x41\x7c\x6a\x21\x0d\x20\x08\xad\x21\x13\x41\x00\x21\x10\x03\x40\x20\x0b\x41\x7f\x6a\x22\x0b\x41\x00\x48\x0d\x08\x02\x40\x02\x40\x20\x02\x20\x0b\x20\x05\x6a\x41\x02\x74\x6a\x22\x0c\x28\x02\x00\x22\x07\x20\x08\x49\x0d\x00\x41\x7f\x21\x00\x0c\x01\x0b\x02\x40\x20\x0f\x45\x0d\x00\x20\x06\x41\x08\x6a\x20\x07\x20\x0c\x41\x7c\x6a\x28\x02\x00\x20\x08\x20\x0f\x10\x9c\x0a\x21\x00\x0c\x01\x0b\x20\x07\xad\x42\x20\x86\x20\x0c\x41\x7c\x6a\x35\x02\x00\x84\x20\x13\x80\xa7\x21\x00\x0b\x20\x02\x20\x0b\x41\x02\x74\x22\x11\x6a\x21\x0e\x20\x00\xad\x21\x14\x41\x00\x21\x07\x20\x05\x21\x03\x41\x00\x21\x0a\x02\x40\x03\x40\x20\x03\x45\x0d\x01\x20\x0d\x20\x07\x6a\x22\x09\x20\x09\x35\x02\x00\x20\x04\x20\x07\x6a\x35\x02\x00\x20\x14\x7e\x7d\x20\x0a\xad\x7d\x22\x12\x3e\x02\x00\x41\x00\x20\x12\x42\x20\x88\xa7\x6b\x21\x0a\x20\x03\x41\x7f\x6a\x21\x03\x20\x07\x41\x04\x6a\x21\x07\x0c\x00\x0b\x00\x0b\x20\x0c\x20\x0c\x28\x02\x00\x22\x07\x20\x0a\x6b\x36\x02\x00\x02\x40\x20\x07\x20\x0a\x4f\x0d\x00\x03\x40\x20\x00\x41\x7f\x6a\x21\x00\x20\x0e\x20\x0e\x20\x04\x20\x05\x10\x84\x0a\x45\x0d\x00\x20\x0c\x20\x0c\x28\x02\x00\x22\x07\x41\x01\x6a\x22\x03\x36\x02\x00\x20\x03\x20\x07\x4f\x0d\x00\x0b\x0b\x20\x01\x20\x11\x6a\x20\x00\x36\x02\x00\x20\x0d\x41\x7c\x6a\x21\x0d\x0c\x00\x0b\x00\x0b\x20\x04\x20\x05\x20\x0b\x6b\x41\x02\x74\x6a\x21\x0a\x20\x0b\x21\x07\x20\x0e\x21\x09\x02\x40\x03\x40\x20\x07\x45\x0d\x01\x20\x09\x20\x0a\x28\x02\x00\x36\x02\x00\x20\x07\x41\x7f\x6a\x21\x07\x20\x09\x41\x04\x6a\x21\x09\x20\x0a\x41\x04\x6a\x21\x0a\x0c\x00\x0b\x00\x0b\x20\x0e\x41\x01\x20\x0b\x10\x85\x0a\x45\x0d\x00\x20\x0d\x41\x00\x20\x0b\x41\x02\x74\x22\x07\x10\x74\x20\x07\x6a\x41\x01\x36\x02\x00\x0c\x01\x0b\x20\x00\x20\x0d\x20\x0e\x20\x0b\x10\x99\x0a\x0d\x01\x0b\x20\x00\x20\x0e\x20\x0d\x20\x08\x20\x02\x20\x03\x41\x02\x74\x22\x07\x6a\x20\x0b\x41\x7f\x73\x41\x02\x74\x6a\x20\x08\x10\x88\x0a\x0d\x00\x20\x0b\x41\x03\x74\x20\x05\x41\x02\x74\x6a\x20\x07\x6b\x20\x0e\x6a\x41\x04\x6a\x21\x09\x20\x03\x41\x01\x6a\x21\x0a\x41\x00\x21\x07\x02\x40\x03\x40\x20\x05\x20\x0a\x46\x0d\x01\x20\x01\x20\x07\x6a\x20\x09\x20\x07\x6a\x28\x02\x00\x36\x02\x00\x20\x0a\x41\x7f\x6a\x21\x0a\x20\x07\x41\x04\x6a\x21\x07\x0c\x00\x0b\x00\x0b\x20\x00\x28\x02\x00\x20\x0e\x41\x00\x20\x00\x28\x02\x04\x11\x01\x00\x1a\x20\x00\x28\x02\x00\x20\x0d\x41\x00\x20\x00\x28\x02\x04\x11\x01\x00\x1a\x20\x00\x28\x02\x00\x41\x00\x20\x03\x41\x02\x74\x41\x04\x6a\x20\x00\x28\x02\x04\x11\x01\x00\x22\x0e\x45\x0d\x03\x20\x00\x20\x0e\x20\x01\x20\x0c\x20\x04\x20\x05\x10\x88\x0a\x0d\x01\x20\x02\x20\x02\x20\x0e\x20\x05\x41\x01\x6a\x22\x0d\x10\x86\x0a\x1a\x20\x00\x28\x02\x00\x20\x0e\x41\x00\x20\x00\x28\x02\x04\x11\x01\x00\x1a\x20\x02\x20\x05\x41\x02\x74\x22\x07\x6a\x21\x0e\x20\x02\x20\x07\x41\x7c\x6a\x22\x07\x6a\x21\x0b\x20\x04\x20\x07\x6a\x21\x08\x03\x40\x02\x40\x20\x0e\x28\x02\x00\x0d\x00\x20\x0b\x21\x07\x20\x08\x21\x03\x20\x0d\x21\x0a\x03\x40\x20\x0a\x41\x7f\x6a\x22\x0a\x41\x01\x48\x0d\x01\x20\x03\x28\x02\x00\x21\x09\x20\x07\x28\x02\x00\x21\x00\x20\x07\x41\x7c\x6a\x21\x07\x20\x03\x41\x7c\x6a\x21\x03\x20\x00\x20\x09\x46\x0d\x00\x0b\x20\x00\x20\x09\x49\x0d\x04\x0b\x20\x02\x20\x02\x20\x04\x20\x05\x10\x86\x0a\x21\x07\x20\x0e\x20\x0e\x28\x02\x00\x20\x07\x6b\x36\x02\x00\x20\x01\x41\x01\x20\x0c\x10\x85\x0a\x1a\x0c\x00\x0b\x00\x0b\x02\x40\x20\x0d\x45\x0d\x00\x20\x00\x28\x02\x00\x20\x0d\x41\x00\x20\x00\x28\x02\x04\x11\x01\x00\x1a\x0b\x20\x0e\x45\x0d\x02\x0b\x20\x00\x28\x02\x00\x20\x0e\x41\x00\x20\x00\x28\x02\x04\x11\x01\x00\x1a\x0c\x01\x0b\x41\x00\x21\x10\x0c\x01\x0b\x41\x7f\x21\x10\x0b\x20\x06\x41\x10\x6a\x24\x00\x20\x10\x0b\x32\x01\x02\x7f\x41\x7f\x21\x02\x03\x40\x02\x40\x20\x02\x41\x01\x6a\x22\x02\x20\x01\x48\x0d\x00\x41\x00\x0f\x0b\x20\x00\x28\x02\x00\x21\x03\x20\x00\x41\x04\x6a\x21\x00\x20\x03\x45\x0d\x00\x0b\x41\x01\x0b\x57\x01\x01\x7e\x20\x00\x20\x01\xad\x42\x20\x86\x20\x02\xad\x84\x20\x04\xad\x20\x01\x20\x02\x41\x1f\x75\x22\x04\x6b\xad\x7e\x20\x04\x20\x03\x71\x20\x02\x6a\xad\x7c\x42\x20\x88\xa7\x20\x01\x6a\x22\x01\xad\x20\x03\xad\x22\x05\x7e\x7d\x20\x05\x7d\x22\x05\x42\x20\x88\xa7\x22\x02\x20\x03\x71\x20\x05\xa7\x6a\x36\x02\x00\x20\x01\x20\x02\x6a\x41\x01\x6a\x0b\xe0\x03\x01\x07\x7f\x20\x02\x28\x02\x04\x20\x01\x28\x02\x04\x73\x21\x05\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x28\x02\x08\x22\x06\x41\xfd\xff\xff\xff\x07\x4a\x0d\x00\x20\x02\x28\x02\x08\x22\x07\x41\xfd\xff\xff\xff\x07\x4a\x0d\x01\x20\x06\x41\x80\x80\x80\x80\x78\x47\x0d\x06\x20\x07\x41\x80\x80\x80\x80\x78\x46\x0d\x04\x0c\x07\x0b\x20\x06\x41\xff\xff\xff\xff\x07\x46\x0d\x01\x20\x02\x28\x02\x08\x21\x07\x0b\x20\x07\x41\xff\xff\xff\xff\x07\x47\x0d\x01\x0b\x20\x00\x10\x97\x04\x41\x00\x0f\x0b\x20\x06\x41\xfe\xff\xff\xff\x07\x47\x22\x01\x0d\x01\x20\x07\x41\xfe\xff\xff\xff\x07\x47\x0d\x01\x0b\x20\x00\x10\x97\x04\x41\x01\x0f\x0b\x20\x01\x0d\x01\x20\x00\x20\x05\x10\xa2\x04\x41\x00\x0f\x0b\x02\x40\x20\x07\x41\x80\x80\x80\x80\x78\x47\x0d\x00\x20\x00\x20\x05\x10\xa2\x04\x41\x02\x0f\x0b\x02\x40\x02\x40\x20\x00\x28\x02\x00\x22\x06\x28\x02\x00\x41\x00\x20\x01\x28\x02\x0c\x22\x07\x20\x03\x41\x21\x6a\x41\x05\x76\x22\x08\x20\x07\x20\x08\x4a\x1b\x22\x08\x20\x02\x28\x02\x0c\x22\x09\x6a\x22\x07\x41\x02\x74\x41\x04\x6a\x20\x06\x28\x02\x04\x11\x01\x00\x22\x0a\x45\x0d\x00\x20\x0a\x41\x00\x20\x07\x20\x01\x28\x02\x0c\x6b\x41\x02\x74\x22\x0b\x10\x74\x22\x0a\x20\x0b\x6a\x20\x01\x28\x02\x10\x20\x01\x28\x02\x0c\x41\x02\x74\x10\x70\x1a\x02\x40\x20\x00\x20\x08\x41\x01\x6a\x10\x98\x09\x0d\x00\x20\x06\x20\x00\x28\x02\x10\x20\x0a\x20\x07\x20\x02\x28\x02\x10\x20\x09\x10\x9a\x0a\x45\x0d\x02\x0b\x20\x06\x28\x02\x00\x20\x0a\x41\x00\x20\x06\x28\x02\x04\x11\x01\x00\x1a\x0b\x20\x00\x10\x97\x04\x41\x20\x0f\x0b\x02\x40\x20\x0a\x20\x09\x10\x9b\x0a\x45\x0d\x00\x20\x00\x28\x02\x10\x22\x06\x20\x06\x28\x02\x00\x41\x01\x72\x36\x02\x00\x0b\x20\x00\x28\x02\x00\x22\x06\x28\x02\x00\x20\x0a\x41\x00\x20\x06\x28\x02\x04\x11\x01\x00\x1a\x20\x00\x20\x05\x36\x02\x04\x20\x00\x20\x01\x28\x02\x08\x20\x02\x28\x02\x08\x6b\x41\x20\x6a\x36\x02\x08\x20\x00\x20\x03\x20\x04\x10\x9c\x09\x0f\x0b\x20\x00\x20\x05\x10\x9b\x09\x41\x00\x0b\x7f\x01\x01\x7f\x23\x00\x41\x20\x6b\x22\x06\x24\x00\x02\x40\x02\x40\x02\x40\x20\x00\x20\x01\x46\x0d\x00\x20\x00\x20\x02\x47\x0d\x01\x0b\x20\x06\x42\x00\x37\x02\x14\x20\x06\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x0c\x20\x06\x20\x00\x28\x02\x00\x36\x02\x08\x20\x06\x41\x08\x6a\x20\x01\x20\x02\x20\x03\x20\x04\x20\x05\x11\x0c\x00\x21\x01\x20\x00\x20\x06\x41\x08\x6a\x10\x80\x0a\x0c\x01\x0b\x20\x00\x20\x01\x20\x02\x20\x03\x20\x04\x20\x05\x11\x0c\x00\x21\x01\x0b\x20\x06\x41\x20\x6a\x24\x00\x20\x01\x0b\x11\x00\x20\x00\x20\x01\x20\x02\x20\x03\x20\x04\x41\x01\x10\xa1\x0a\x0b\x11\x00\x20\x00\x20\x01\x20\x02\x20\x03\x20\x04\x41\x00\x10\xa1\x0a\x0b\xc0\x09\x01\x11\x7f\x20\x02\x20\x01\x20\x01\x20\x02\x10\x93\x04\x22\x06\x41\x00\x48\x22\x07\x1b\x21\x08\x20\x02\x28\x02\x04\x20\x05\x73\x22\x05\x20\x01\x28\x02\x04\x22\x09\x73\x21\x0a\x02\x40\x20\x06\x0d\x00\x20\x0a\x45\x0d\x00\x20\x08\x28\x02\x08\x41\xfd\xff\xff\xff\x07\x4a\x0d\x00\x20\x00\x20\x04\x41\x07\x71\x41\x02\x46\x10\x9b\x09\x41\x00\x0f\x0b\x20\x05\x20\x09\x20\x07\x1b\x21\x09\x20\x01\x20\x02\x20\x07\x1b\x21\x06\x02\x40\x02\x40\x02\x40\x20\x08\x28\x02\x0c\x22\x07\x45\x0d\x00\x20\x06\x28\x02\x0c\x22\x05\x0d\x01\x0b\x02\x40\x20\x08\x28\x02\x08\x22\x01\x41\xfe\xff\xff\xff\x07\x48\x0d\x00\x02\x40\x20\x01\x41\xff\xff\xff\xff\x07\x47\x0d\x00\x20\x00\x10\x97\x04\x41\x00\x0f\x0b\x02\x40\x20\x0a\x45\x0d\x00\x20\x06\x28\x02\x08\x41\xfe\xff\xff\xff\x07\x47\x0d\x00\x20\x00\x10\x97\x04\x41\x01\x0f\x0b\x20\x00\x20\x09\x10\xa2\x04\x41\x00\x0f\x0b\x20\x00\x20\x08\x10\xcc\x04\x1a\x20\x00\x20\x09\x36\x02\x04\x0c\x01\x0b\x20\x00\x20\x08\x28\x02\x08\x36\x02\x08\x20\x00\x20\x09\x36\x02\x04\x20\x08\x28\x02\x08\x22\x01\x20\x06\x28\x02\x08\x22\x02\x6b\x21\x0b\x02\x40\x02\x40\x20\x0a\x0d\x00\x41\x00\x21\x09\x0c\x01\x0b\x41\x01\x21\x09\x20\x0b\x41\x01\x4a\x0d\x00\x20\x07\x41\x05\x74\x21\x0c\x20\x01\x20\x05\x41\x05\x74\x6a\x20\x02\x6b\x21\x0d\x20\x06\x28\x02\x10\x21\x0e\x41\x00\x21\x01\x03\x40\x41\x00\x21\x02\x02\x40\x20\x07\x20\x0c\x20\x01\x6a\x22\x0f\x41\x7f\x6a\x41\x05\x75\x22\x09\x4d\x0d\x00\x20\x08\x28\x02\x10\x20\x09\x41\x02\x74\x6a\x28\x02\x00\x21\x02\x0b\x02\x40\x20\x02\x20\x0e\x20\x05\x20\x0d\x20\x01\x6a\x22\x10\x41\x60\x6a\x10\x92\x0a\x22\x09\x47\x0d\x00\x20\x01\x41\x60\x6a\x21\x01\x0c\x01\x0b\x0b\x20\x09\x20\x02\x73\x22\x0d\x67\x21\x0c\x02\x40\x02\x40\x20\x0d\x41\x02\x4f\x0d\x00\x20\x0c\x20\x01\x6b\x41\x01\x6a\x21\x09\x0c\x01\x0b\x41\x7f\x41\x7f\x41\x1f\x20\x0c\x6b\x22\x0d\x74\x41\x7f\x73\x20\x0d\x41\x20\x46\x1b\x22\x11\x20\x02\x71\x67\x22\x02\x20\x11\x20\x09\x41\x7f\x73\x71\x67\x22\x09\x20\x02\x20\x09\x49\x1b\x22\x02\x20\x01\x6b\x21\x09\x20\x02\x20\x0c\x41\x01\x6a\x6b\x20\x0d\x47\x0d\x01\x0b\x20\x0f\x41\x5f\x6a\x21\x01\x20\x10\x41\x40\x6a\x21\x02\x41\x20\x20\x09\x6b\x21\x0c\x03\x40\x41\x00\x21\x09\x02\x40\x20\x07\x20\x01\x41\x05\x75\x22\x0d\x4d\x0d\x00\x20\x08\x28\x02\x10\x20\x0d\x41\x02\x74\x6a\x28\x02\x00\x21\x09\x0b\x20\x0e\x20\x05\x20\x02\x10\x92\x0a\x21\x0d\x20\x0c\x41\x60\x6a\x21\x0c\x02\x40\x20\x09\x0d\x00\x20\x01\x41\x60\x6a\x21\x01\x20\x02\x41\x60\x6a\x21\x02\x20\x0d\x41\x7f\x46\x0d\x01\x0b\x0b\x20\x09\x67\x22\x01\x20\x0d\x41\x7f\x73\x67\x22\x02\x20\x01\x20\x02\x49\x1b\x20\x0c\x6b\x21\x09\x0b\x02\x40\x20\x00\x20\x03\x20\x09\x6a\x41\x21\x6a\x41\x05\x76\x22\x02\x20\x07\x20\x0b\x41\x1f\x6a\x41\x20\x6d\x20\x05\x6a\x22\x01\x20\x07\x20\x01\x4a\x1b\x22\x01\x20\x02\x20\x01\x48\x1b\x22\x11\x10\x98\x09\x0d\x00\x41\x00\x41\x00\x20\x08\x28\x02\x0c\x22\x12\x20\x11\x6b\x22\x0d\x6b\x20\x0d\x41\x00\x48\x1b\x21\x13\x20\x11\x20\x01\x6b\x21\x01\x41\x00\x20\x0a\x6b\x21\x10\x20\x06\x28\x02\x0c\x22\x14\x41\x05\x74\x21\x15\x41\x00\x20\x14\x20\x11\x6b\x41\x05\x74\x20\x0b\x6a\x22\x07\x6b\x41\x05\x75\x21\x16\x20\x0a\x21\x02\x41\x00\x21\x0f\x03\x40\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x41\x00\x48\x0d\x00\x20\x12\x41\x02\x74\x20\x11\x41\x02\x74\x6b\x21\x0c\x41\x00\x21\x05\x41\x00\x21\x01\x03\x40\x20\x01\x20\x11\x4f\x0d\x02\x41\x00\x21\x09\x02\x40\x20\x08\x28\x02\x0c\x20\x0d\x20\x01\x6a\x4d\x0d\x00\x20\x08\x28\x02\x10\x20\x0c\x6a\x20\x05\x6a\x28\x02\x00\x21\x09\x0b\x20\x00\x28\x02\x10\x20\x05\x6a\x20\x06\x28\x02\x10\x20\x06\x28\x02\x0c\x20\x07\x10\x92\x0a\x20\x10\x73\x22\x0e\x20\x09\x6a\x22\x09\x20\x02\x6a\x22\x02\x36\x02\x00\x20\x09\x20\x0e\x49\x20\x02\x20\x09\x49\x72\x21\x02\x20\x07\x41\x20\x6a\x21\x07\x20\x05\x41\x04\x6a\x21\x05\x20\x01\x41\x01\x6a\x21\x01\x0c\x00\x0b\x00\x0b\x20\x01\x41\x05\x74\x20\x07\x6a\x21\x05\x41\x00\x21\x09\x02\x40\x02\x40\x20\x01\x20\x0d\x6a\x22\x0e\x41\x00\x4e\x0d\x00\x41\x00\x21\x0b\x0c\x01\x0b\x41\x00\x21\x0b\x20\x0e\x20\x12\x4f\x0d\x00\x20\x08\x28\x02\x10\x20\x0e\x41\x02\x74\x6a\x28\x02\x00\x21\x09\x41\x01\x21\x0b\x0b\x02\x40\x20\x05\x41\x61\x48\x0d\x00\x20\x05\x20\x15\x4e\x0d\x00\x20\x06\x28\x02\x10\x20\x14\x20\x05\x10\x92\x0a\x21\x0c\x0c\x02\x0b\x41\x00\x21\x0c\x20\x0b\x0d\x01\x20\x0e\x41\x1f\x75\x20\x13\x71\x21\x01\x41\x00\x21\x0c\x20\x05\x41\x60\x4a\x0d\x02\x20\x01\x20\x16\x20\x01\x20\x16\x48\x1b\x21\x01\x0c\x02\x0b\x20\x00\x28\x02\x10\x22\x01\x20\x01\x28\x02\x00\x20\x0f\x41\x00\x47\x72\x36\x02\x00\x20\x0a\x0d\x04\x20\x02\x45\x0d\x04\x20\x00\x20\x11\x41\x01\x6a\x10\x98\x09\x0d\x03\x20\x00\x28\x02\x10\x20\x11\x41\x02\x74\x6a\x41\x01\x36\x02\x00\x20\x00\x20\x00\x28\x02\x08\x41\x20\x6a\x36\x02\x08\x0c\x04\x0b\x20\x01\x41\x01\x6a\x21\x01\x0b\x20\x0c\x20\x10\x73\x22\x0e\x20\x09\x6a\x22\x05\x20\x0e\x49\x20\x05\x20\x02\x6a\x22\x09\x20\x05\x49\x72\x21\x02\x20\x09\x20\x0f\x72\x21\x0f\x0c\x00\x0b\x00\x0b\x20\x00\x10\x97\x04\x41\x20\x0f\x0b\x20\x00\x20\x03\x20\x04\x10\x9c\x09\x0b\x41\x01\x02\x7f\x23\x00\x41\x10\x6b\x22\x01\x24\x00\x02\x40\x02\x40\x20\x00\x0d\x00\x41\x00\x21\x00\x0c\x01\x0b\x20\x01\x41\x0c\x6a\x20\x00\x20\x00\x67\x22\x02\x41\x1e\x71\x74\x10\xa3\x0a\x20\x02\x41\x01\x76\x76\x21\x00\x0b\x20\x01\x41\x10\x6a\x24\x00\x20\x00\x0b\x98\x01\x01\x04\x7f\x20\x00\x20\x01\x41\x10\x76\x20\x01\x41\x17\x76\x41\xfe\x03\x71\x41\x80\xc7\x05\x6a\x2f\x01\x00\x22\x02\x20\x02\x6c\x6b\x22\x03\x20\x02\x41\x01\x74\x22\x04\x41\x01\x72\x41\x00\x20\x03\x20\x04\x4b\x22\x03\x1b\x6b\x41\x08\x74\x20\x01\x41\x08\x76\x41\xff\x01\x71\x72\x22\x04\x20\x04\x20\x03\x20\x02\x6a\x22\x03\x41\x01\x74\x22\x05\x6e\x22\x02\x20\x05\x6c\x6b\x41\x08\x74\x20\x01\x41\xff\x01\x71\x72\x20\x02\x20\x02\x6c\x6b\x22\x01\x41\x1f\x75\x20\x03\x41\x08\x74\x20\x02\x6a\x22\x02\x41\x7f\x6a\x22\x03\x41\x01\x74\x41\x01\x72\x71\x20\x01\x6a\x36\x02\x00\x20\x03\x20\x02\x20\x01\x41\x00\x48\x1b\x0b\xc2\x04\x02\x0a\x7f\x03\x7e\x23\x00\x41\x10\x6b\x22\x06\x24\x00\x02\x40\x02\x40\x02\x40\x20\x03\x41\x01\x47\x0d\x00\x20\x02\x28\x02\x00\x21\x07\x20\x06\x41\x0c\x6a\x20\x02\x28\x02\x04\x10\xa3\x0a\x22\x08\x41\x10\x74\x20\x06\x35\x02\x0c\x42\x10\x86\x20\x07\x41\x10\x76\xad\x84\x22\x10\x20\x08\x41\x01\x74\xad\x22\x11\x80\x22\x12\xa7\x22\x04\x6a\x21\x08\x02\x40\x20\x10\x20\x12\x20\x11\x7e\x7d\x42\x10\x86\x20\x07\x41\xff\xff\x03\x71\xad\x84\x42\x80\x80\x80\x80\x70\x42\x00\x20\x12\x20\x12\x7e\x42\xff\xff\xff\xff\x0f\x83\x7d\x20\x04\x41\xff\xff\x03\x4b\x1b\x7c\x22\x12\x42\x20\x88\xa7\x22\x07\x41\x7f\x4a\x0d\x00\x20\x08\x41\x7f\x6a\x22\x08\xad\x42\x01\x86\x42\x01\x84\x20\x12\x7c\x22\x12\x42\x20\x88\xa7\x21\x07\x0b\x20\x01\x20\x08\x36\x02\x00\x20\x02\x20\x12\x3e\x02\x00\x20\x05\x20\x07\x36\x02\x00\x0c\x01\x0b\x41\x7f\x21\x07\x20\x00\x20\x01\x20\x03\x41\x01\x76\x22\x09\x41\x02\x74\x6a\x22\x0a\x20\x02\x20\x03\x41\x7e\x71\x22\x0b\x41\x02\x74\x6a\x22\x0c\x20\x03\x20\x09\x6b\x22\x0d\x20\x04\x20\x06\x41\x08\x6a\x10\xa4\x0a\x0d\x01\x02\x40\x20\x06\x28\x02\x08\x22\x08\x45\x0d\x00\x20\x0c\x20\x0c\x20\x0a\x20\x0d\x10\x86\x0a\x1a\x0b\x20\x00\x20\x04\x20\x02\x20\x09\x41\x02\x74\x22\x0e\x6a\x22\x0f\x20\x03\x20\x0a\x20\x0d\x10\x9a\x0a\x0d\x01\x20\x06\x20\x04\x20\x0e\x6a\x28\x02\x00\x20\x08\x6a\x22\x0e\x36\x02\x08\x41\x00\x21\x07\x20\x09\x21\x08\x02\x40\x03\x40\x20\x08\x45\x0d\x01\x20\x01\x20\x07\x6a\x20\x04\x20\x07\x6a\x28\x02\x00\x36\x02\x00\x20\x08\x41\x7f\x6a\x21\x08\x20\x07\x41\x04\x6a\x21\x07\x0c\x00\x0b\x00\x0b\x20\x01\x20\x01\x20\x09\x20\x0e\x41\x01\x71\x10\xa5\x0a\x21\x08\x20\x06\x20\x0e\x41\x01\x76\x22\x07\x36\x02\x08\x02\x40\x02\x40\x20\x08\x0d\x00\x41\x00\x21\x08\x0c\x01\x0b\x20\x0f\x20\x0f\x20\x0a\x20\x0d\x10\x84\x0a\x21\x08\x0b\x20\x0a\x20\x07\x20\x0d\x10\x85\x0a\x1a\x02\x40\x20\x07\x0d\x00\x41\x7f\x21\x07\x20\x00\x20\x02\x20\x03\x41\x02\x74\x6a\x22\x04\x20\x01\x20\x09\x20\x01\x20\x09\x10\x88\x0a\x0d\x02\x20\x02\x20\x02\x20\x04\x20\x0b\x10\x86\x0a\x21\x07\x0b\x02\x40\x20\x08\x20\x0c\x20\x07\x20\x03\x20\x0b\x6b\x10\x87\x0a\x6b\x22\x07\x41\x7f\x4a\x0d\x00\x20\x01\x41\x01\x20\x03\x10\x87\x0a\x1a\x20\x02\x20\x01\x20\x03\x41\x02\x10\x90\x0a\x20\x07\x6a\x20\x02\x41\x01\x20\x03\x10\x85\x0a\x6a\x21\x07\x0b\x20\x05\x20\x07\x36\x02\x00\x0b\x41\x00\x21\x07\x0b\x20\x06\x41\x10\x6a\x24\x00\x20\x07\x0b\x59\x01\x01\x7f\x20\x01\x20\x02\x41\x02\x74\x41\x7c\x6a\x22\x04\x6a\x21\x01\x20\x00\x20\x04\x6a\x21\x00\x02\x40\x03\x40\x20\x02\x41\x01\x48\x0d\x01\x20\x02\x41\x7f\x6a\x21\x02\x20\x00\x20\x03\x41\x1f\x74\x20\x01\x28\x02\x00\x22\x03\x41\x01\x76\x72\x36\x02\x00\x20\x01\x41\x7c\x6a\x21\x01\x20\x00\x41\x7c\x6a\x21\x00\x0c\x00\x0b\x00\x0b\x20\x03\x41\x01\x71\x0b\xa4\x04\x01\x09\x7f\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x02\x40\x20\x00\x20\x01\x46\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x28\x02\x0c\x0d\x00\x02\x40\x20\x01\x28\x02\x08\x41\x82\x80\x80\x80\x78\x6a\x22\x02\x41\x01\x4b\x0d\x00\x02\x40\x20\x02\x0e\x02\x00\x03\x00\x0b\x20\x01\x28\x02\x04\x0d\x02\x0b\x20\x00\x20\x01\x10\xcc\x04\x1a\x0c\x03\x0b\x20\x01\x28\x02\x04\x0d\x00\x20\x01\x28\x02\x00\x21\x05\x20\x00\x20\x02\x41\x01\x74\x41\xc3\x00\x6a\x22\x06\x41\x06\x76\x22\x07\x10\x98\x09\x0d\x00\x41\x00\x21\x08\x20\x05\x28\x02\x00\x41\x00\x20\x07\x41\x03\x74\x22\x09\x20\x05\x28\x02\x04\x11\x01\x00\x22\x0a\x45\x0d\x00\x20\x0a\x41\x00\x20\x07\x41\x01\x74\x22\x0b\x20\x0b\x20\x01\x28\x02\x0c\x22\x0c\x20\x0b\x20\x0c\x48\x1b\x22\x0c\x6b\x41\x02\x74\x10\x74\x22\x0a\x20\x09\x6a\x20\x0c\x41\x02\x74\x22\x09\x6b\x20\x01\x28\x02\x10\x20\x01\x28\x02\x0c\x41\x02\x74\x6a\x20\x09\x6b\x20\x09\x10\x70\x1a\x02\x40\x20\x01\x2d\x00\x08\x41\x01\x71\x45\x0d\x00\x20\x0a\x20\x0a\x20\x0b\x41\x00\x10\xa5\x0a\x21\x08\x0b\x20\x00\x28\x02\x10\x21\x0b\x02\x40\x02\x40\x02\x40\x20\x06\x41\xff\x07\x4b\x0d\x00\x20\x04\x21\x06\x0c\x01\x0b\x20\x05\x28\x02\x00\x41\x00\x20\x06\x41\x05\x76\x41\xfc\xff\xff\x3f\x71\x41\x04\x6a\x20\x05\x28\x02\x04\x11\x01\x00\x22\x06\x45\x0d\x01\x0b\x20\x05\x20\x0b\x20\x0a\x20\x07\x20\x06\x20\x0a\x20\x07\x41\x02\x74\x6a\x10\xa4\x0a\x21\x0b\x02\x40\x20\x06\x20\x04\x46\x0d\x00\x20\x06\x45\x0d\x00\x20\x05\x28\x02\x00\x20\x06\x41\x00\x20\x05\x28\x02\x04\x11\x01\x00\x1a\x0b\x20\x0b\x45\x0d\x02\x0b\x20\x05\x28\x02\x00\x20\x0a\x41\x00\x20\x05\x28\x02\x04\x11\x01\x00\x1a\x0b\x20\x00\x10\x97\x04\x0c\x01\x0b\x02\x40\x20\x08\x0d\x00\x20\x0a\x20\x07\x41\x01\x6a\x10\x9b\x0a\x21\x08\x0b\x20\x05\x28\x02\x00\x20\x0a\x41\x00\x20\x05\x28\x02\x04\x11\x01\x00\x1a\x02\x40\x02\x40\x20\x08\x0d\x00\x20\x01\x28\x02\x10\x20\x01\x28\x02\x0c\x20\x0c\x6b\x10\x9b\x0a\x45\x0d\x01\x0b\x20\x00\x28\x02\x10\x22\x05\x20\x05\x28\x02\x00\x41\x01\x72\x36\x02\x00\x0b\x20\x00\x41\x00\x36\x02\x04\x20\x00\x20\x01\x28\x02\x08\x41\x01\x6a\x41\x01\x75\x36\x02\x08\x20\x00\x20\x02\x20\x03\x10\x9f\x09\x1a\x0b\x20\x04\x41\x20\x6a\x24\x00\x0f\x0b\x41\x80\xcb\x05\x41\xc3\xc5\x05\x41\xd3\x10\x41\x87\xcb\x05\x10\x4a\x00\x0b\x59\x01\x01\x7f\x23\x00\x41\x20\x6b\x22\x05\x24\x00\x20\x05\x42\x00\x37\x02\x14\x20\x05\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x0c\x20\x05\x20\x00\x28\x02\x00\x36\x02\x08\x20\x05\x41\x08\x6a\x20\x02\x10\x95\x04\x1a\x20\x00\x20\x01\x20\x05\x41\x08\x6a\x20\x03\x20\x04\x10\xa2\x09\x1a\x20\x05\x41\x08\x6a\x10\x9a\x09\x20\x05\x41\x20\x6a\x24\x00\x0b\x2a\x00\x02\x40\x20\x02\x41\x01\x4b\x0d\x00\x02\x40\x02\x40\x20\x02\x0e\x02\x00\x01\x00\x0b\x20\x01\x20\x00\x72\x0f\x0b\x20\x01\x20\x00\x73\x0f\x0b\x20\x01\x20\x00\x71\x0b\x8e\x01\x01\x02\x7f\x02\x40\x02\x40\x20\x00\x20\x01\x46\x0d\x00\x02\x40\x20\x02\x0d\x00\x20\x00\x42\x01\x10\xb9\x02\x21\x05\x0c\x02\x0b\x20\x00\x20\x01\x10\xcc\x04\x21\x05\x41\x1e\x20\x02\x67\x6b\x21\x06\x03\x40\x20\x06\x41\x00\x48\x0d\x02\x20\x00\x20\x00\x20\x00\x20\x03\x20\x04\x10\xa2\x09\x20\x05\x72\x21\x05\x02\x40\x20\x02\x20\x06\x76\x41\x01\x71\x45\x0d\x00\x20\x00\x20\x00\x20\x01\x20\x03\x20\x04\x10\xa2\x09\x20\x05\x72\x21\x05\x0b\x20\x06\x41\x7f\x6a\x21\x06\x0c\x00\x0b\x00\x0b\x41\x80\xcb\x05\x41\xc3\xc5\x05\x41\xda\x11\x41\xd8\xcb\x05\x10\x4a\x00\x0b\x20\x05\x0b\xe6\x05\x02\x06\x7f\x01\x7e\x23\x00\x41\x30\x6b\x22\x08\x24\x00\x02\x40\x02\x40\x02\x40\x20\x03\x41\x02\x4b\x0d\x00\x02\x40\x02\x40\x02\x40\x20\x03\x0e\x03\x00\x01\x02\x00\x0b\x41\xde\xcf\x05\x41\xc3\xc5\x05\x41\xb5\x1a\x41\xe5\xcf\x05\x10\x4a\x00\x0b\x20\x01\x20\x02\x28\x02\x10\x20\x02\x28\x02\x0c\x22\x03\x20\x03\x41\x05\x74\x20\x02\x28\x02\x08\x6b\x10\x92\x0a\x36\x02\x00\x0c\x02\x0b\x20\x02\x28\x02\x10\x22\x04\x20\x02\x28\x02\x0c\x22\x03\x20\x03\x41\x05\x74\x20\x02\x28\x02\x08\x6b\x22\x02\x41\x20\x6a\x10\x92\x0a\xad\x42\x20\x86\x20\x04\x20\x03\x20\x02\x10\x92\x0a\x22\x02\xad\x84\x21\x0e\x02\x40\x20\x06\x41\x80\x94\xeb\xdc\x03\x47\x0d\x00\x20\x01\x20\x0e\x42\x80\x94\xeb\xdc\x03\x80\xa7\x22\x03\x36\x02\x04\x20\x01\x20\x02\x20\x03\x41\x80\xec\x94\xa3\x7c\x6c\x6a\x36\x02\x00\x0c\x02\x0b\x20\x01\x20\x0e\x20\x06\xad\x80\xa7\x22\x03\x36\x02\x04\x20\x01\x20\x02\x20\x03\x20\x06\x6c\x6b\x36\x02\x00\x0c\x01\x0b\x20\x08\x42\x00\x37\x02\x24\x20\x08\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x1c\x20\x08\x42\x00\x37\x02\x0c\x20\x08\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x04\x20\x08\x20\x02\x28\x02\x00\x22\x09\x36\x02\x18\x20\x08\x20\x09\x36\x02\x00\x20\x03\x20\x05\x41\x01\x74\x20\x04\x41\x01\x6a\x22\x0a\x76\x41\x01\x6a\x41\x01\x76\x22\x0b\x6b\x21\x0c\x20\x00\x20\x04\x41\x01\x74\x41\x01\x72\x41\x14\x6c\x6a\x21\x09\x41\x00\x21\x0d\x02\x40\x20\x00\x20\x04\x41\x28\x6c\x6a\x22\x03\x28\x02\x0c\x0d\x00\x20\x03\x20\x06\x20\x0b\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa0\x09\x20\x08\x42\x01\x10\xb9\x02\x72\x20\x09\x20\x08\x20\x03\x20\x0b\x41\x01\x6a\x20\x07\x6c\x41\x02\x6a\x41\x00\x10\xa1\x09\x72\x21\x0d\x0b\x02\x40\x02\x40\x20\x08\x41\x18\x6a\x20\x02\x20\x09\x20\x0c\x20\x07\x6c\x41\x00\x10\xa2\x09\x20\x0d\x72\x20\x08\x41\x18\x6a\x41\x01\x10\xcd\x04\x72\x20\x08\x20\x08\x41\x18\x6a\x20\x03\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa2\x09\x72\x20\x08\x20\x02\x20\x08\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa7\x09\x72\x41\x20\x71\x0d\x00\x42\x00\x21\x0e\x41\x00\x21\x02\x02\x40\x03\x40\x20\x08\x28\x02\x04\x45\x0d\x01\x20\x08\x28\x02\x0c\x45\x0d\x01\x20\x08\x20\x08\x20\x03\x41\xff\xff\xff\xff\x03\x41\x01\x10\xbb\x02\x0d\x02\x20\x02\x41\x01\x6a\x21\x02\x20\x0e\x42\x7f\x7c\x21\x0e\x0c\x00\x0b\x00\x0b\x02\x40\x03\x40\x20\x08\x20\x03\x10\x93\x04\x41\x00\x48\x0d\x01\x20\x08\x20\x08\x20\x03\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa7\x09\x0d\x02\x20\x02\x41\x7f\x6a\x21\x02\x20\x0e\x42\x01\x7c\x21\x0e\x0c\x00\x0b\x00\x0b\x02\x40\x20\x02\x45\x0d\x00\x20\x08\x41\x18\x6a\x20\x08\x41\x18\x6a\x20\x0e\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa5\x09\x0d\x01\x0b\x20\x00\x20\x01\x20\x0b\x41\x02\x74\x6a\x20\x08\x41\x18\x6a\x20\x0c\x20\x0a\x20\x05\x20\x06\x20\x07\x10\xaa\x0a\x0d\x00\x20\x00\x20\x01\x20\x08\x20\x0b\x20\x0a\x20\x05\x20\x06\x20\x07\x10\xaa\x0a\x45\x0d\x01\x0b\x20\x08\x41\x18\x6a\x10\x9a\x09\x20\x08\x10\x9a\x09\x41\x7f\x21\x02\x0c\x02\x0b\x20\x08\x41\x18\x6a\x10\x9a\x09\x20\x08\x10\x9a\x09\x0b\x41\x00\x21\x02\x0b\x20\x08\x41\x30\x6a\x24\x00\x20\x02\x0b\xae\x02\x01\x07\x7f\x23\x00\x41\x30\x6b\x22\x03\x24\x00\x20\x02\x41\x07\x71\x21\x04\x20\x00\x28\x02\x00\x22\x05\x41\x08\x6a\x21\x06\x41\x20\x21\x07\x03\x40\x02\x40\x20\x05\x28\x02\x1c\x22\x08\x20\x07\x20\x01\x6a\x22\x09\x4f\x0d\x00\x02\x40\x02\x40\x20\x05\x28\x02\x14\x45\x0d\x00\x20\x06\x28\x02\x00\x21\x08\x0c\x01\x0b\x20\x05\x42\x00\x37\x02\x14\x20\x05\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x0c\x20\x05\x20\x00\x28\x02\x00\x22\x08\x36\x02\x08\x0b\x20\x03\x42\x00\x37\x02\x24\x20\x03\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x1c\x20\x03\x20\x08\x36\x02\x18\x20\x03\x42\x00\x37\x02\x0c\x20\x03\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x04\x20\x03\x20\x08\x36\x02\x00\x20\x06\x20\x03\x41\x18\x6a\x20\x03\x41\x00\x20\x09\x41\x0f\x6a\x41\x03\x6e\x41\x01\x6a\x41\x00\x10\xac\x0a\x20\x06\x20\x06\x20\x03\x20\x09\x41\x00\x10\xa1\x09\x1a\x20\x03\x41\x18\x6a\x10\x9a\x09\x20\x03\x10\x9a\x09\x20\x05\x20\x09\x36\x02\x1c\x20\x09\x21\x08\x0b\x20\x00\x20\x06\x10\xcc\x04\x1a\x20\x00\x41\x00\x36\x02\x04\x02\x40\x20\x00\x20\x01\x20\x04\x20\x08\x10\xbb\x09\x0d\x00\x20\x07\x41\x01\x76\x20\x07\x6a\x21\x07\x0c\x01\x0b\x0b\x20\x00\x20\x01\x20\x02\x10\x9f\x09\x1a\x20\x03\x41\x30\x6a\x24\x00\x0b\x8e\x03\x01\x03\x7f\x23\x00\x41\xd0\x00\x6b\x22\x06\x24\x00\x02\x40\x02\x40\x20\x04\x20\x03\x6b\x22\x07\x41\x01\x47\x0d\x00\x02\x40\x02\x40\x20\x03\x0d\x00\x20\x01\x42\x03\x10\xb9\x02\x1a\x0c\x01\x0b\x20\x01\x20\x03\xad\x10\xb9\x02\x1a\x20\x01\x41\x01\x36\x02\x04\x0b\x20\x02\x20\x03\x41\x01\x74\x41\x01\x72\xad\x10\xb9\x02\x1a\x20\x02\x20\x02\x28\x02\x08\x41\x02\x6a\x36\x02\x08\x20\x00\x20\x01\x10\xcc\x04\x1a\x0c\x01\x0b\x20\x00\x28\x02\x00\x21\x08\x20\x00\x20\x01\x20\x02\x20\x03\x20\x07\x41\x01\x76\x20\x03\x6a\x22\x07\x41\x01\x10\xac\x0a\x20\x06\x42\x00\x37\x02\x44\x20\x06\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x3c\x20\x06\x20\x08\x36\x02\x38\x20\x06\x42\x00\x37\x02\x2c\x20\x06\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x24\x20\x06\x20\x08\x36\x02\x20\x20\x06\x42\x00\x37\x02\x14\x20\x06\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x0c\x20\x06\x20\x08\x36\x02\x08\x20\x06\x41\x38\x6a\x20\x06\x41\x20\x6a\x20\x06\x41\x08\x6a\x20\x07\x20\x04\x20\x05\x10\xac\x0a\x20\x00\x20\x00\x20\x06\x41\x08\x6a\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa2\x09\x1a\x20\x06\x41\x38\x6a\x20\x06\x41\x38\x6a\x20\x01\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa2\x09\x1a\x20\x00\x20\x00\x20\x06\x41\x38\x6a\x41\xff\xff\xff\xff\x03\x41\x01\x10\xbb\x02\x1a\x02\x40\x20\x05\x45\x0d\x00\x20\x01\x20\x01\x20\x06\x41\x20\x6a\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa2\x09\x1a\x0b\x20\x02\x20\x02\x20\x06\x41\x08\x6a\x41\xff\xff\xff\xff\x03\x41\x01\x10\xa2\x09\x1a\x20\x06\x41\x38\x6a\x10\x9a\x09\x20\x06\x41\x20\x6a\x10\x9a\x09\x20\x06\x41\x08\x6a\x10\x9a\x09\x0b\x20\x06\x41\xd0\x00\x6a\x24\x00\x0b\xf6\x01\x01\x02\x7f\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x02\x40\x20\x00\x20\x01\x46\x0d\x00\x02\x40\x02\x40\x02\x40\x02\x40\x20\x01\x28\x02\x0c\x0d\x00\x02\x40\x20\x01\x28\x02\x08\x41\x82\x80\x80\x80\x78\x6a\x22\x02\x41\x01\x4b\x0d\x00\x02\x40\x20\x02\x0e\x02\x00\x03\x00\x0b\x20\x01\x28\x02\x04\x0d\x02\x20\x00\x41\x00\x10\xa2\x04\x0c\x04\x0b\x20\x00\x41\x01\x10\xa2\x04\x0c\x03\x0b\x20\x01\x28\x02\x04\x45\x0d\x01\x0b\x20\x00\x10\x97\x04\x0c\x01\x0b\x20\x00\x28\x02\x00\x21\x05\x20\x04\x42\x00\x37\x02\x14\x20\x04\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x0c\x20\x04\x20\x05\x36\x02\x08\x20\x04\x41\x08\x6a\x42\x01\x10\xb9\x02\x1a\x02\x40\x20\x01\x20\x04\x41\x08\x6a\x10\xae\x0a\x45\x0d\x00\x20\x00\x41\x00\x10\x9b\x09\x20\x04\x41\x08\x6a\x10\x9a\x09\x0c\x01\x0b\x20\x04\x41\x08\x6a\x10\x9a\x09\x20\x00\x20\x01\x20\x02\x20\x03\x41\x92\x01\x41\x00\x10\xb0\x0a\x1a\x0b\x20\x04\x41\x20\x6a\x24\x00\x0f\x0b\x41\x80\xcb\x05\x41\xc3\xc5\x05\x41\xb7\x23\x41\xfd\xcf\x05\x10\x4a\x00\x0b\x0a\x00\x20\x00\x20\x01\x10\xbc\x02\x45\x0b\xdd\x06\x02\x05\x7f\x01\x7e\x23\x00\x41\x80\x01\x6b\x22\x04\x24\x00\x02\x40\x20\x00\x20\x01\x46\x0d\x00\x20\x00\x28\x02\x00\x21\x05\x20\x04\x42\x00\x37\x02\x74\x20\x04\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x6c\x20\x04\x20\x05\x36\x02\x68\x20\x04\x41\xe8\x00\x6a\x20\x01\x10\xcc\x04\x1a\x20\x04\x42\x00\x37\x02\x5c\x20\x04\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x54\x20\x04\x20\x05\x36\x02\x50\x20\x04\x28\x02\x70\x21\x06\x20\x04\x41\x00\x36\x02\x70\x20\x04\x41\xd0\x00\x6a\x42\xaa\xd5\xaa\xd5\x0a\x10\xb9\x02\x1a\x20\x04\x41\x00\x36\x02\x58\x02\x40\x20\x04\x41\xe8\x00\x6a\x20\x04\x41\xd0\x00\x6a\x10\xb1\x0a\x45\x0d\x00\x20\x04\x20\x04\x28\x02\x70\x41\x01\x6a\x36\x02\x70\x20\x06\x41\x7f\x6a\x21\x06\x0b\x20\x04\x41\xd0\x00\x6a\x10\x9a\x09\x20\x02\x41\x01\x6a\x41\x01\x76\x10\xa2\x0a\x21\x07\x20\x04\x42\x00\x37\x02\x5c\x20\x04\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x54\x20\x04\x20\x05\x36\x02\x50\x20\x04\x42\x00\x37\x02\x44\x20\x04\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x3c\x20\x04\x20\x05\x36\x02\x38\x20\x04\x41\xe8\x00\x6a\x20\x04\x41\xe8\x00\x6a\x42\x7f\x41\xff\xff\xff\xff\x03\x41\x00\x10\xa5\x09\x1a\x20\x02\x20\x07\x6a\x20\x02\x20\x07\x41\x01\x74\x6e\x41\x01\x6a\x22\x08\x41\x01\x74\x6a\x41\x20\x6a\x21\x02\x41\x00\x21\x01\x02\x40\x03\x40\x20\x01\x20\x07\x4e\x0d\x01\x20\x04\x41\xd0\x00\x6a\x20\x04\x41\xe8\x00\x6a\x42\x01\x20\x02\x41\x00\x10\xa5\x09\x1a\x20\x04\x41\x38\x6a\x20\x04\x41\xd0\x00\x6a\x20\x02\x41\x06\x10\xa6\x0a\x20\x04\x41\xd0\x00\x6a\x20\x04\x41\x38\x6a\x42\x01\x20\x02\x41\x00\x10\xa5\x09\x1a\x20\x04\x41\xe8\x00\x6a\x20\x04\x41\xe8\x00\x6a\x20\x04\x41\xd0\x00\x6a\x20\x02\x41\x00\x10\xa1\x09\x1a\x20\x01\x41\x01\x6a\x21\x01\x0c\x00\x0b\x00\x0b\x20\x04\x42\x00\x37\x02\x2c\x20\x04\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x24\x20\x04\x20\x05\x36\x02\x20\x20\x04\x42\x00\x37\x02\x14\x20\x04\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x0c\x20\x04\x20\x05\x36\x02\x08\x20\x04\x41\x20\x6a\x20\x04\x41\xe8\x00\x6a\x42\x02\x20\x02\x41\x00\x10\xa5\x09\x1a\x20\x04\x41\x20\x6a\x20\x04\x41\xe8\x00\x6a\x20\x04\x41\x20\x6a\x20\x02\x41\x00\x10\xa1\x09\x1a\x20\x04\x41\x08\x6a\x20\x04\x41\x20\x6a\x20\x04\x41\x20\x6a\x20\x02\x41\x00\x10\xa2\x09\x1a\x20\x00\x42\x00\x10\xb9\x02\x1a\x20\x08\xac\x21\x09\x02\x40\x03\x40\x20\x09\x42\x01\x53\x0d\x01\x20\x04\x41\xd0\x00\x6a\x42\x01\x10\xb9\x02\x1a\x20\x04\x41\x38\x6a\x20\x09\xa7\x41\x01\x74\x41\x01\x72\xac\x10\xb9\x02\x1a\x20\x04\x41\xd0\x00\x6a\x20\x04\x41\xd0\x00\x6a\x20\x04\x41\x38\x6a\x20\x02\x41\x00\x10\xa1\x09\x1a\x20\x00\x20\x00\x20\x04\x41\xd0\x00\x6a\x20\x02\x41\x00\x10\xbb\x02\x1a\x20\x00\x20\x00\x20\x04\x41\x08\x6a\x20\x02\x41\x00\x10\xa2\x09\x1a\x20\x09\x42\x7f\x7c\x21\x09\x0c\x00\x0b\x00\x0b\x20\x00\x20\x00\x42\x01\x20\x02\x41\x00\x10\xa5\x09\x1a\x20\x00\x20\x00\x20\x04\x41\x20\x6a\x20\x02\x41\x00\x10\xa2\x09\x1a\x20\x04\x41\x20\x6a\x10\x9a\x09\x20\x04\x41\x08\x6a\x10\x9a\x09\x20\x04\x41\x38\x6a\x10\x9a\x09\x20\x04\x41\xd0\x00\x6a\x10\x9a\x09\x20\x00\x20\x07\x41\x01\x6a\x41\xff\xff\xff\xff\x03\x41\x01\x10\xba\x02\x1a\x20\x04\x41\xe8\x00\x6a\x20\x02\x41\x06\x10\xab\x0a\x20\x04\x41\xe8\x00\x6a\x20\x04\x41\xe8\x00\x6a\x20\x06\xac\x20\x02\x41\x00\x10\xa7\x0a\x20\x00\x20\x00\x20\x04\x41\xe8\x00\x6a\x20\x02\x41\x00\x10\xbb\x02\x1a\x20\x04\x41\xe8\x00\x6a\x10\x9a\x09\x20\x04\x41\x80\x01\x6a\x24\x00\x41\x10\x0f\x0b\x41\x80\xcb\x05\x41\xc3\xc5\x05\x41\xd7\x22\x41\x84\xd0\x05\x10\x4a\x00\x0b\x8c\x01\x01\x04\x7f\x02\x40\x02\x40\x02\x40\x02\x40\x20\x03\x41\x07\x71\x22\x06\x41\x06\x46\x0d\x00\x41\x20\x21\x07\x03\x40\x20\x00\x20\x01\x20\x07\x20\x02\x6a\x22\x08\x20\x05\x20\x04\x11\x07\x00\x22\x09\x41\x2c\x71\x0d\x04\x20\x09\x41\x10\x71\x45\x0d\x02\x20\x07\x41\x01\x74\x21\x07\x20\x00\x20\x02\x20\x06\x20\x08\x10\xbb\x09\x45\x0d\x00\x0b\x41\x10\x21\x09\x0c\x02\x0b\x20\x00\x20\x01\x20\x02\x20\x05\x20\x04\x11\x07\x00\x1a\x0b\x41\x00\x21\x09\x0b\x20\x00\x28\x02\x0c\x22\x07\x45\x0d\x00\x20\x00\x20\x02\x20\x03\x20\x07\x20\x09\x10\x81\x0a\x21\x09\x0b\x20\x09\x0b\x0c\x00\x20\x00\x20\x01\x10\xbc\x02\x41\x1f\x76\x0b\xcc\x01\x01\x04\x7f\x23\x00\x41\x20\x6b\x22\x04\x24\x00\x20\x00\x28\x02\x00\x21\x05\x20\x04\x41\x04\x6a\x20\x03\x41\x00\x10\xa5\x04\x02\x40\x20\x04\x28\x02\x04\x22\x06\x41\x7f\x4a\x0d\x00\x20\x04\x41\x00\x20\x06\x6b\x22\x06\x36\x02\x04\x0b\x20\x00\x20\x01\x20\x06\x20\x06\x41\x1f\x75\x22\x07\x6a\x20\x07\x73\x20\x02\x41\x00\x41\xc0\x00\x20\x06\x41\x7f\x6a\x67\x41\x01\x74\x6b\x20\x06\x41\x02\x49\x1b\x6a\x41\x08\x6a\x22\x02\x41\xe0\x0f\x10\xa9\x0a\x21\x06\x02\x40\x20\x03\x28\x02\x04\x45\x0d\x00\x20\x04\x42\x00\x37\x02\x14\x20\x04\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x0c\x20\x04\x20\x05\x36\x02\x08\x20\x04\x41\x08\x6a\x42\x01\x10\xb9\x02\x1a\x20\x00\x20\x04\x41\x08\x6a\x20\x00\x20\x02\x41\xe0\x0f\x10\xa1\x09\x20\x06\x72\x21\x06\x20\x04\x41\x08\x6a\x10\x9a\x09\x0b\x20\x04\x41\x20\x6a\x24\x00\x20\x06\x0b\x8f\x05\x02\x03\x7f\x01\x7e\x23\x00\x41\xd0\x00\x6b\x22\x04\x24\x00\x20\x00\x28\x02\x00\x21\x05\x20\x04\x42\x00\x37\x02\x14\x20\x04\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x0c\x20\x04\x20\x05\x36\x02\x08\x20\x04\x41\x08\x6a\x20\x01\x20\x02\x41\x20\x6a\x22\x05\x41\xe6\x0f\x10\xad\x0a\x20\x04\x41\x08\x6a\x20\x04\x41\x08\x6a\x20\x03\x20\x05\x41\xe6\x0f\x10\xa2\x09\x1a\x02\x40\x02\x40\x02\x40\x20\x04\x28\x02\x10\x22\x03\x41\xff\xff\xff\xff\x07\x47\x0d\x00\x20\x00\x10\x97\x04\x0c\x01\x0b\x20\x04\x41\x08\x6a\x20\x00\x46\x0d\x01\x20\x00\x28\x02\x00\x21\x05\x20\x04\x42\x00\x37\x02\x44\x20\x04\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x3c\x20\x04\x20\x05\x36\x02\x38\x02\x40\x02\x40\x20\x03\x41\x7f\x4a\x0d\x00\x02\x40\x20\x04\x28\x02\x0c\x45\x0d\x00\x41\x7f\x21\x06\x20\x04\x41\x7f\x36\x02\x34\x0c\x02\x0b\x41\x00\x21\x06\x20\x04\x41\x00\x36\x02\x34\x0c\x01\x0b\x20\x04\x41\x38\x6a\x41\x20\x41\x01\x10\xab\x0a\x20\x04\x41\x38\x6a\x20\x04\x41\x08\x6a\x20\x04\x41\x38\x6a\x41\x20\x41\x02\x10\xa1\x09\x1a\x20\x04\x41\x34\x6a\x20\x04\x41\x38\x6a\x41\x00\x10\xa5\x04\x20\x04\x28\x02\x34\x21\x06\x0b\x20\x02\x41\x21\x6a\x41\x01\x76\x10\xa2\x0a\x21\x01\x20\x04\x41\x38\x6a\x20\x02\x20\x04\x28\x02\x10\x22\x03\x41\x00\x20\x03\x41\x00\x4a\x1b\x6a\x20\x01\x20\x02\x41\x1f\x6a\x20\x01\x6e\x41\x01\x6a\x22\x03\x6a\x41\x01\x74\x6a\x41\x3a\x6a\x22\x02\x41\x06\x10\xab\x0a\x20\x04\x41\x38\x6a\x20\x04\x41\x38\x6a\x20\x06\xac\x20\x02\x41\x00\x10\xa7\x0a\x20\x04\x41\x38\x6a\x20\x04\x41\x08\x6a\x20\x04\x41\x38\x6a\x20\x02\x41\x00\x10\xa7\x09\x1a\x20\x04\x41\x38\x6a\x41\x00\x20\x01\x6b\x41\xff\xff\xff\xff\x03\x41\x01\x10\xba\x02\x1a\x20\x04\x42\x00\x37\x02\x2c\x20\x04\x42\x80\x80\x80\x80\x80\x80\x80\x80\x80\x7f\x37\x02\x24\x20\x04\x20\x05\x36\x02\x20\x20\x00\x42\x01\x10\xb9\x02\x1a\x20\x03\xad\x21\x07\x02\x40\x03\x40\x20\x07\xa7\x41\x01\x48\x0d\x01\x20\x04\x41\x20\x6a\x20\x07\x10\xb9\x02\x1a\x20\x04\x41\x20\x6a\x20\x04\x41\x38\x6a\x20\x04\x41\x20\x6a\x20\x02\x41\x00\x10\xa1\x09\x1a\x20\x00\x20\x00\x20\x04\x41\x20\x6a\x20\x02\x41\x00\x10\xa2\x09\x1a\x20\x00\x20\x00\x42\x01\x20\x02\x41\x00\x10\xa5\x09\x1a\x20\x07\x42\x7f\x7c\x21\x07\x0c\x00\x0b\x00\x0b\x20\x04\x41\x20\x6a\x10\x9a\x09\x20\x04\x41\x38\x6a\x10\x9a\x09\x41\x00\x21\x03\x02\x40\x03\x40\x20\x03\x20\x01\x4e\x0d\x01\x20\x00\x20\x00\x20\x00\x20\x02\x41\xe0\x0f\x10\xa2\x09\x1a\x20\x03\x41\x01\x6a\x21\x03\x0c\x00\x0b\x00\x0b\x20\x00\x20\x06\x41\xff\xff\xff\xff\x03\x41\xe1\x0f\x10\xba\x02\x1a\x0b\x20\x04\x41\x08\x6a\x10\x9a\x09\x20\x04\x41\xd0\x00\x6a\x24\x00\x41\x10\x0f\x0b\x41\x80\xcb\x05\x41\xc3\xc5\x05\x41\xbe\x21\x41\xa4\xd0\x05\x10\x4a\x00\x0b\x0b\xb1\xca\x05\x02\x00\x41\x80\x08\x0b\xb4\xc8\x05\x41\x73\x73\x65\x72\x74\x69\x6f\x6e\x20\x66\x61\x69\x6c\x65\x64\x3a\x20\x25\x73\x20\x28\x25\x73\x3a\x20\x25\x73\x3a\x20\x25\x64\x29\x0a\x00\x1f\x1e\x1f\x1e\x1f\x1f\x1e\x1f\x1e\x1f\x1f\x1d\x55\x54\x43\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x12\x44\x3b\x02\x3f\x2c\x47\x14\x3d\x33\x30\x0a\x1b\x06\x46\x4b\x45\x37\x0f\x49\x0e\x17\x03\x40\x1d\x3c\x2b\x36\x1f\x4a\x2d\x1c\x01\x20\x25\x29\x21\x08\x0c\x15\x16\x22\x2e\x10\x38\x3e\x0b\x34\x31\x18\x2f\x41\x09\x39\x11\x23\x43\x32\x42\x3a\x05\x04\x26\x28\x27\x0d\x2a\x1e\x35\x07\x1a\x48\x13\x24\x4c\xff\x00\x00\x53\x75\x63\x63\x65\x73\x73\x00\x49\x6c\x6c\x65\x67\x61\x6c\x20\x62\x79\x74\x65\x20\x73\x65\x71\x75\x65\x6e\x63\x65\x00\x44\x6f\x6d\x61\x69\x6e\x20\x65\x72\x72\x6f\x72\x00\x52\x65\x73\x75\x6c\x74\x20\x6e\x6f\x74\x20\x72\x65\x70\x72\x65\x73\x65\x6e\x74\x61\x62\x6c\x65\x00\x4e\x6f\x74\x20\x61\x20\x74\x74\x79\x00\x50\x65\x72\x6d\x69\x73\x73\x69\x6f\x6e\x20\x64\x65\x6e\x69\x65\x64\x00\x4f\x70\x65\x72\x61\x74\x69\x6f\x6e\x20\x6e\x6f\x74\x20\x70\x65\x72\x6d\x69\x74\x74\x65\x64\x00\x4e\x6f\x20\x73\x75\x63\x68\x20\x66\x69\x6c\x65\x20\x6f\x72\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x00\x4e\x6f\x20\x73\x75\x63\x68\x20\x70\x72\x6f\x63\x65\x73\x73\x00\x46\x69\x6c\x65\x20\x65\x78\x69\x73\x74\x73\x00\x56\x61\x6c\x75\x65\x20\x74\x6f\x6f\x20\x6c\x61\x72\x67\x65\x20\x66\x6f\x72\x20\x64\x61\x74\x61\x20\x74\x79\x70\x65\x00\x4e\x6f\x20\x73\x70\x61\x63\x65\x20\x6c\x65\x66\x74\x20\x6f\x6e\x20\x64\x65\x76\x69\x63\x65\x00\x4f\x75\x74\x20\x6f\x66\x20\x6d\x65\x6d\x6f\x72\x79\x00\x52\x65\x73\x6f\x75\x72\x63\x65\x20\x62\x75\x73\x79\x00\x49\x6e\x74\x65\x72\x72\x75\x70\x74\x65\x64\x20\x73\x79\x73\x74\x65\x6d\x20\x63\x61\x6c\x6c\x00\x52\x65\x73\x6f\x75\x72\x63\x65\x20\x74\x65\x6d\x70\x6f\x72\x61\x72\x69\x6c\x79\x20\x75\x6e\x61\x76\x61\x69\x6c\x61\x62\x6c\x65\x00\x49\x6e\x76\x61\x6c\x69\x64\x20\x73\x65\x65\x6b\x00\x43\x72\x6f\x73\x73\x2d\x64\x65\x76\x69\x63\x65\x20\x6c\x69\x6e\x6b\x00\x52\x65\x61\x64\x2d\x6f\x6e\x6c\x79\x20\x66\x69\x6c\x65\x20\x73\x79\x73\x74\x65\x6d\x00\x44\x69\x72\x65\x63\x74\x6f\x72\x79\x20\x6e\x6f\x74\x20\x65\x6d\x70\x74\x79\x00\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x20\x72\x65\x73\x65\x74\x20\x62\x79\x20\x70\x65\x65\x72\x00\x4f\x70\x65\x72\x61\x74\x69\x6f\x6e\x20\x74\x69\x6d\x65\x64\x20\x6f\x75\x74\x00\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x20\x72\x65\x66\x75\x73\x65\x64\x00\x48\x6f\x73\x74\x20\x69\x73\x20\x75\x6e\x72\x65\x61\x63\x68\x61\x62\x6c\x65\x00\x41\x64\x64\x72\x65\x73\x73\x20\x69\x6e\x20\x75\x73\x65\x00\x42\x72\x6f\x6b\x65\x6e\x20\x70\x69\x70\x65\x00\x49\x2f\x4f\x20\x65\x72\x72\x6f\x72\x00\x4e\x6f\x20\x73\x75\x63\x68\x20\x64\x65\x76\x69\x63\x65\x20\x6f\x72\x20\x61\x64\x64\x72\x65\x73\x73\x00\x4e\x6f\x20\x73\x75\x63\x68\x20\x64\x65\x76\x69\x63\x65\x00\x4e\x6f\x74\x20\x61\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x00\x49\x73\x20\x61\x20\x64\x69\x72\x65\x63\x74\x6f\x72\x79\x00\x54\x65\x78\x74\x20\x66\x69\x6c\x65\x20\x62\x75\x73\x79\x00\x45\x78\x65\x63\x20\x66\x6f\x72\x6d\x61\x74\x20\x65\x72\x72\x6f\x72\x00\x49\x6e\x76\x61\x6c\x69\x64\x20\x61\x72\x67\x75\x6d\x65\x6e\x74\x00\x41\x72\x67\x75\x6d\x65\x6e\x74\x20\x6c\x69\x73\x74\x20\x74\x6f\x6f\x20\x6c\x6f\x6e\x67\x00\x53\x79\x6d\x62\x6f\x6c\x69\x63\x20\x6c\x69\x6e\x6b\x20\x6c\x6f\x6f\x70\x00\x46\x69\x6c\x65\x6e\x61\x6d\x65\x20\x74\x6f\x6f\x20\x6c\x6f\x6e\x67\x00\x54\x6f\x6f\x20\x6d\x61\x6e\x79\x20\x6f\x70\x65\x6e\x20\x66\x69\x6c\x65\x73\x20\x69\x6e\x20\x73\x79\x73\x74\x65\x6d\x00\x4e\x6f\x20\x66\x69\x6c\x65\x20\x64\x65\x73\x63\x72\x69\x70\x74\x6f\x72\x73\x20\x61\x76\x61\x69\x6c\x61\x62\x6c\x65\x00\x42\x61\x64\x20\x66\x69\x6c\x65\x20\x64\x65\x73\x63\x72\x69\x70\x74\x6f\x72\x00\x4e\x6f\x20\x63\x68\x69\x6c\x64\x20\x70\x72\x6f\x63\x65\x73\x73\x00\x42\x61\x64\x20\x61\x64\x64\x72\x65\x73\x73\x00\x46\x69\x6c\x65\x20\x74\x6f\x6f\x20\x6c\x61\x72\x67\x65\x00\x54\x6f\x6f\x20\x6d\x61\x6e\x79\x20\x6c\x69\x6e\x6b\x73\x00\x4e\x6f\x20\x6c\x6f\x63\x6b\x73\x20\x61\x76\x61\x69\x6c\x61\x62\x6c\x65\x00\x52\x65\x73\x6f\x75\x72\x63\x65\x20\x64\x65\x61\x64\x6c\x6f\x63\x6b\x20\x77\x6f\x75\x6c\x64\x20\x6f\x63\x63\x75\x72\x00\x53\x74\x61\x74\x65\x20\x6e\x6f\x74\x20\x72\x65\x63\x6f\x76\x65\x72\x61\x62\x6c\x65\x00\x50\x72\x65\x76\x69\x6f\x75\x73\x20\x6f\x77\x6e\x65\x72\x20\x64\x69\x65\x64\x00\x4f\x70\x65\x72\x61\x74\x69\x6f\x6e\x20\x63\x61\x6e\x63\x65\x6c\x65\x64\x00\x46\x75\x6e\x63\x74\x69\x6f\x6e\x20\x6e\x6f\x74\x20\x69\x6d\x70\x6c\x65\x6d\x65\x6e\x74\x65\x64\x00\x4e\x6f\x20\x6d\x65\x73\x73\x61\x67\x65\x20\x6f\x66\x20\x64\x65\x73\x69\x72\x65\x64\x20\x74\x79\x70\x65\x00\x49\x64\x65\x6e\x74\x69\x66\x69\x65\x72\x20\x72\x65\x6d\x6f\x76\x65\x64\x00\x4c\x69\x6e\x6b\x20\x68\x61\x73\x20\x62\x65\x65\x6e\x20\x73\x65\x76\x65\x72\x65\x64\x00\x50\x72\x6f\x74\x6f\x63\x6f\x6c\x20\x65\x72\x72\x6f\x72\x00\x42\x61\x64\x20\x6d\x65\x73\x73\x61\x67\x65\x00\x4e\x6f\x74\x20\x61\x20\x73\x6f\x63\x6b\x65\x74\x00\x44\x65\x73\x74\x69\x6e\x61\x74\x69\x6f\x6e\x20\x61\x64\x64\x72\x65\x73\x73\x20\x72\x65\x71\x75\x69\x72\x65\x64\x00\x4d\x65\x73\x73\x61\x67\x65\x20\x74\x6f\x6f\x20\x6c\x61\x72\x67\x65\x00\x50\x72\x6f\x74\x6f\x63\x6f\x6c\x20\x77\x72\x6f\x6e\x67\x20\x74\x79\x70\x65\x20\x66\x6f\x72\x20\x73\x6f\x63\x6b\x65\x74\x00\x50\x72\x6f\x74\x6f\x63\x6f\x6c\x20\x6e\x6f\x74\x20\x61\x76\x61\x69\x6c\x61\x62\x6c\x65\x00\x50\x72\x6f\x74\x6f\x63\x6f\x6c\x20\x6e\x6f\x74\x20\x73\x75\x70\x70\x6f\x72\x74\x65\x64\x00\x4e\x6f\x74\x20\x73\x75\x70\x70\x6f\x72\x74\x65\x64\x00\x41\x64\x64\x72\x65\x73\x73\x20\x66\x61\x6d\x69\x6c\x79\x20\x6e\x6f\x74\x20\x73\x75\x70\x70\x6f\x72\x74\x65\x64\x20\x62\x79\x20\x70\x72\x6f\x74\x6f\x63\x6f\x6c\x00\x41\x64\x64\x72\x65\x73\x73\x20\x6e\x6f\x74\x20\x61\x76\x61\x69\x6c\x61\x62\x6c\x65\x00\x4e\x65\x74\x77\x6f\x72\x6b\x20\x69\x73\x20\x64\x6f\x77\x6e\x00\x4e\x65\x74\x77\x6f\x72\x6b\x20\x75\x6e\x72\x65\x61\x63\x68\x61\x62\x6c\x65\x00\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x20\x72\x65\x73\x65\x74\x20\x62\x79\x20\x6e\x65\x74\x77\x6f\x72\x6b\x00\x43\x6f\x6e\x6e\x65\x63\x74\x69\x6f\x6e\x20\x61\x62\x6f\x72\x74\x65\x64\x00\x4e\x6f\x20\x62\x75\x66\x66\x65\x72\x20\x73\x70\x61\x63\x65\x20\x61\x76\x61\x69\x6c\x61\x62\x6c\x65\x00\x53\x6f\x63\x6b\x65\x74\x20\x69\x73\x20\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64\x00\x53\x6f\x63\x6b\x65\x74\x20\x6e\x6f\x74\x20\x63\x6f\x6e\x6e\x65\x63\x74\x65\x64\x00\x4f\x70\x65\x72\x61\x74\x69\x6f\x6e\x20\x61\x6c\x72\x65\x61\x64\x79\x20\x69\x6e\x20\x70\x72\x6f\x67\x72\x65\x73\x73\x00\x4f\x70\x65\x72\x61\x74\x69\x6f\x6e\x20\x69\x6e\x20\x70\x72\x6f\x67\x72\x65\x73\x73\x00\x53\x74\x61\x6c\x65\x20\x66\x69\x6c\x65\x20\x68\x61\x6e\x64\x6c\x65\x00\x51\x75\x6f\x74\x61\x20\x65\x78\x63\x65\x65\x64\x65\x64\x00\x4d\x75\x6c\x74\x69\x68\x6f\x70\x20\x61\x74\x74\x65\x6d\x70\x74\x65\x64\x00\x43\x61\x70\x61\x62\x69\x6c\x69\x74\x69\x65\x73\x20\x69\x6e\x73\x75\x66\x66\x69\x63\x69\x65\x6e\x74\x00\x4e\x6f\x20\x65\x72\x72\x6f\x72\x20\x69\x6e\x66\x6f\x72\x6d\x61\x74\x69\x6f\x6e\x00\x00\x2d\x2b\x20\x20\x20\x30\x58\x30\x78\x00\x28\x6e\x75\x6c\x6c\x29\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x0a\x00\x19\x19\x19\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x11\x0a\x19\x19\x19\x03\x0a\x07\x00\x01\x1b\x09\x0b\x18\x00\x00\x09\x06\x0b\x00\x00\x0b\x00\x06\x19\x00\x00\x00\x19\x19\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x0a\x0d\x19\x19\x19\x00\x0d\x00\x00\x02\x00\x09\x0e\x00\x00\x00\x09\x00\x0e\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x13\x00\x00\x00\x00\x13\x00\x00\x00\x00\x09\x0c\x00\x00\x00\x00\x00\x0c\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x04\x0f\x00\x00\x00\x00\x09\x10\x00\x00\x00\x00\x00\x10\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x00\x11\x00\x00\x00\x00\x09\x12\x00\x00\x00\x00\x00\x12\x00\x00\x12\x00\x00\x1a\x00\x00\x00\x1a\x1a\x1a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x00\x00\x1a\x1a\x1a\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x17\x00\x00\x00\x00\x17\x00\x00\x00\x00\x09\x14\x00\x00\x00\x00\x00\x14\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x16\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00\x00\x15\x00\x00\x00\x00\x09\x16\x00\x00\x00\x00\x00\x16\x00\x00\x16\x00\x00\x53\x75\x70\x70\x6f\x72\x74\x20\x66\x6f\x72\x20\x66\x6f\x72\x6d\x61\x74\x74\x69\x6e\x67\x20\x6c\x6f\x6e\x67\x20\x64\x6f\x75\x62\x6c\x65\x20\x76\x61\x6c\x75\x65\x73\x20\x69\x73\x20\x63\x75\x72\x72\x65\x6e\x74\x6c\x79\x20\x64\x69\x73\x61\x62\x6c\x65\x64\x2e\x0a\x54\x6f\x20\x65\x6e\x61\x62\x6c\x65\x20\x69\x74\x2c\x20\x61\x64\x64\x20\x2d\x6c\x63\x2d\x70\x72\x69\x6e\x74\x73\x63\x61\x6e\x2d\x6c\x6f\x6e\x67\x2d\x64\x6f\x75\x62\x6c\x65\x20\x74\x6f\x20\x74\x68\x65\x20\x6c\x69\x6e\x6b\x20\x63\x6f\x6d\x6d\x61\x6e\x64\x2e\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x41\x42\x43\x44\x45\x46\x2d\x30\x58\x2b\x30\x58\x20\x30\x58\x2d\x30\x78\x2b\x30\x78\x20\x30\x78\x00\x69\x6e\x66\x00\x49\x4e\x46\x00\x6e\x61\x6e\x00\x4e\x41\x4e\x00\x2e\x00\x00\x00\x00\xb0\x68\x01\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x64\x00\x00\x00\xe8\x03\x00\x00\x10\x27\x00\x00\xa0\x86\x01\x00\x40\x42\x0f\x00\x80\x96\x98\x00\x00\xe1\xf5\x05\x18\x00\x00\x00\x35\x00\x00\x00\x35\x00\x00\x00\x6b\xff\xff\xff\xce\xfb\xff\xff\xce\xfb\xff\xff\x00\x38\xfa\xfe\x42\x2e\xe6\x3f\x30\x67\xc7\x93\x57\xf3\x2e\x3d\x01\x00\x00\x00\x00\x00\xe0\xbf\x5b\x30\x51\x55\x55\x55\xd5\x3f\x90\x45\xeb\xff\xff\xff\xcf\xbf\x11\x01\xf1\x24\xb3\x99\xc9\x3f\x9f\xc8\x06\xe5\x75\x55\xc5\xbf\x00\x00\x00\x00\x00\x00\xe0\xbf\x77\x55\x55\x55\x55\x55\xd5\x3f\xcb\xfd\xff\xff\xff\xff\xcf\xbf\x0c\xdd\x95\x99\x99\x99\xc9\x3f\xa7\x45\x67\x55\x55\x55\xc5\xbf\x30\xde\x44\xa3\x24\x49\xc2\x3f\x65\x3d\x42\xa4\xff\xff\xbf\xbf\xca\xd6\x2a\x28\x84\x71\xbc\x3f\xff\x68\xb0\x43\xeb\x99\xb9\xbf\x85\xd0\xaf\xf7\x82\x81\xb7\x3f\xcd\x45\xd1\x75\x13\x52\xb5\xbf\x9f\xde\xe0\xc3\xf0\x34\xf7\x3f\x00\x90\xe6\x79\x7f\xcc\xd7\xbf\x1f\xe9\x2c\x6a\x78\x13\xf7\x3f\x00\x00\x0d\xc2\xee\x6f\xd7\xbf\xa0\xb5\xfa\x08\x60\xf2\xf6\x3f\x00\xe0\x51\x13\xe3\x13\xd7\xbf\x7d\x8c\x13\x1f\xa6\xd1\xf6\x3f\x00\x78\x28\x38\x5b\xb8\xd6\xbf\xd1\xb4\xc5\x0b\x49\xb1\xf6\x3f\x00\x78\x80\x90\x55\x5d\xd6\xbf\xba\x0c\x2f\x33\x47\x91\xf6\x3f\x00\x00\x18\x76\xd0\x02\xd6\xbf\x23\x42\x22\x18\x9f\x71\xf6\x3f\x00\x90\x90\x86\xca\xa8\xd5\xbf\xd9\x1e\xa5\x99\x4f\x52\xf6\x3f\x00\x50\x03\x56\x43\x4f\xd5\xbf\xc4\x24\x8f\xaa\x56\x33\xf6\x3f\x00\x40\x6b\xc3\x37\xf6\xd4\xbf\x14\xdc\x9d\x6b\xb3\x14\xf6\x3f\x00\x50\xa8\xfd\xa7\x9d\xd4\xbf\x4c\x5c\xc6\x52\x64\xf6\xf5\x3f\x00\xa8\x89\x39\x92\x45\xd4\xbf\x4f\x2c\x91\xb5\x67\xd8\xf5\x3f\x00\xb8\xb0\x39\xf4\xed\xd3\xbf\xde\x90\x5b\xcb\xbc\xba\xf5\x3f\x00\x70\x8f\x44\xce\x96\xd3\xbf\x78\x1a\xd9\xf2\x61\x9d\xf5\x3f\x00\xa0\xbd\x17\x1e\x40\xd3\xbf\x87\x56\x46\x12\x56\x80\xf5\x3f\x00\x80\x46\xef\xe2\xe9\xd2\xbf\xd3\x6b\xe7\xce\x97\x63\xf5\x3f\x00\xe0\x30\x38\x1b\x94\xd2\xbf\x93\x7f\xa7\xe2\x25\x47\xf5\x3f\x00\x88\xda\x8c\xc5\x3e\xd2\xbf\x83\x45\x06\x42\xff\x2a\xf5\x3f\x00\x90\x27\x29\xe1\xe9\xd1\xbf\xdf\xbd\xb2\xdb\x22\x0f\xf5\x3f\x00\xf8\x48\x2b\x6d\x95\xd1\xbf\xd7\xde\x34\x47\x8f\xf3\xf4\x3f\x00\xf8\xb9\x9a\x67\x41\xd1\xbf\x40\x28\xde\xcf\x43\xd8\xf4\x3f\x00\x98\xef\x94\xd0\xed\xd0\xbf\xc8\xa3\x78\xc0\x3e\xbd\xf4\x3f\x00\x10\xdb\x18\xa5\x9a\xd0\xbf\x8a\x25\xe0\xc3\x7f\xa2\xf4\x3f\x00\xb8\x63\x52\xe6\x47\xd0\xbf\x34\x84\xd4\x24\x05\x88\xf4\x3f\x00\xf0\x86\x45\x22\xeb\xcf\xbf\x0b\x2d\x19\x1b\xce\x6d\xf4\x3f\x00\xb0\x17\x75\x4a\x47\xcf\xbf\x54\x18\x39\xd3\xd9\x53\xf4\x3f\x00\x30\x10\x3d\x44\xa4\xce\xbf\x5a\x84\xb4\x44\x27\x3a\xf4\x3f\x00\xb0\xe9\x44\x0d\x02\xce\xbf\xfb\xf8\x15\x41\xb5\x20\xf4\x3f\x00\xf0\x77\x29\xa2\x60\xcd\xbf\xb1\xf4\x3e\xda\x82\x07\xf4\x3f\x00\x90\x95\x04\x01\xc0\xcc\xbf\x8f\xfe\x57\x5d\x8f\xee\xf3\x3f\x00\x10\x89\x56\x29\x20\xcc\xbf\xe9\x4c\x0b\xa0\xd9\xd5\xf3\x3f\x00\x10\x81\x8d\x17\x81\xcb\xbf\x2b\xc1\x10\xc0\x60\xbd\xf3\x3f\x00\xd0\xd3\xcc\xc9\xe2\xca\xbf\xb8\xda\x75\x2b\x24\xa5\xf3\x3f\x00\x90\x12\x2e\x40\x45\xca\xbf\x02\xd0\x9f\xcd\x22\x8d\xf3\x3f\x00\xf0\x1d\x68\x77\xa8\xc9\xbf\x1c\x7a\x84\xc5\x5b\x75\xf3\x3f\x00\x30\x48\x69\x6d\x0c\xc9\xbf\xe2\x36\xad\x49\xce\x5d\xf3\x3f\x00\xc0\x45\xa6\x20\x71\xc8\xbf\x40\xd4\x4d\x98\x79\x46\xf3\x3f\x00\x30\x14\xb4\x8f\xd6\xc7\xbf\x24\xcb\xff\xce\x5c\x2f\xf3\x3f\x00\x70\x62\x3c\xb8\x3c\xc7\xbf\x49\x0d\xa1\x75\x77\x18\xf3\x3f\x00\x60\x37\x9b\x9a\xa3\xc6\xbf\x90\x39\x3e\x37\xc8\x01\xf3\x3f\x00\xa0\xb7\x54\x31\x0b\xc6\xbf\x41\xf8\x95\xbb\x4e\xeb\xf2\x3f\x00\x30\x24\x76\x7d\x73\xc5\xbf\xd1\xa9\x19\x02\x0a\xd5\xf2\x3f\x00\x30\xc2\x8f\x7b\xdc\xc4\xbf\x2a\xfd\xb7\xa8\xf9\xbe\xf2\x3f\x00\x00\xd2\x51\x2c\x46\xc4\xbf\xab\x1b\x0c\x7a\x1c\xa9\xf2\x3f\x00\x00\x83\xbc\x8a\xb0\xc3\xbf\x30\xb5\x14\x60\x72\x93\xf2\x3f\x00\x00\x49\x6b\x99\x1b\xc3\xbf\xf5\xa1\x57\x57\xfa\x7d\xf2\x3f\x00\x40\xa4\x90\x54\x87\xc2\xbf\xbf\x3b\x1d\x9b\xb3\x68\xf2\x3f\x00\xa0\x79\xf8\xb9\xf3\xc1\xbf\xbd\xf5\x8f\x83\x9d\x53\xf2\x3f\x00\xa0\x2c\x25\xc8\x60\xc1\xbf\x3b\x08\xc9\xaa\xb7\x3e\xf2\x3f\x00\x20\xf7\x57\x7f\xce\xc0\xbf\xb6\x40\xa9\x2b\x01\x2a\xf2\x3f\x00\xa0\xfe\x49\xdc\x3c\xc0\xbf\x32\x41\xcc\x96\x79\x15\xf2\x3f\x00\x80\x4b\xbc\xbd\x57\xbf\xbf\x9b\xfc\xd2\x1d\x20\x01\xf2\x3f\x00\x40\x40\x96\x08\x37\xbe\xbf\x0b\x48\x4d\x49\xf4\xec\xf1\x3f\x00\x40\xf9\x3e\x98\x17\xbd\xbf\x69\x65\x8f\x52\xf5\xd8\xf1\x3f\x00\xa0\xd8\x4e\x67\xf9\xbb\xbf\x7c\x7e\x57\x11\x23\xc5\xf1\x3f\x00\x60\x2f\x20\x79\xdc\xba\xbf\xe9\x26\xcb\x74\x7c\xb1\xf1\x3f\x00\x80\x28\xe7\xc3\xc0\xb9\xbf\xb6\x1a\x2c\x0c\x01\x9e\xf1\x3f\x00\xc0\x72\xb3\x46\xa6\xb8\xbf\xbd\x70\xb6\x7b\xb0\x8a\xf1\x3f\x00\x00\xac\xb3\x01\x8d\xb7\xbf\xb6\xbc\xef\x25\x8a\x77\xf1\x3f\x00\x00\x38\x45\xf1\x74\xb6\xbf\xda\x31\x4c\x35\x8d\x64\xf1\x3f\x00\x80\x87\x6d\x0e\x5e\xb5\xbf\xdd\x5f\x27\x90\xb9\x51\xf1\x3f\x00\xe0\xa1\xde\x5c\x48\xb4\xbf\x4c\xd2\x32\xa4\x0e\x3f\xf1\x3f\x00\xa0\x6a\x4d\xd9\x33\xb3\xbf\xda\xf9\x10\x72\x8b\x2c\xf1\x3f\x00\x60\xc5\xf8\x79\x20\xb2\xbf\x31\xb5\xec\x28\x30\x1a\xf1\x3f\x00\x20\x62\x98\x46\x0e\xb1\xbf\xaf\x34\x84\xda\xfb\x07\xf1\x3f\x00\x00\xd2\x6a\x6c\xfa\xaf\xbf\xb3\x6b\x4e\x0f\xee\xf5\xf0\x3f\x00\x40\x77\x4a\x8d\xda\xad\xbf\xce\x9f\x2a\x5d\x06\xe4\xf0\x3f\x00\x00\x85\xe4\xec\xbc\xab\xbf\x21\xa5\x2c\x63\x44\xd2\xf0\x3f\x00\xc0\x12\x40\x89\xa1\xa9\xbf\x1a\x98\xe2\x7c\xa7\xc0\xf0\x3f\x00\xc0\x02\x33\x58\x88\xa7\xbf\xd1\x36\xc6\x83\x2f\xaf\xf0\x3f\x00\x80\xd6\x67\x5e\x71\xa5\xbf\x39\x13\xa0\x98\xdb\x9d\xf0\x3f\x00\x80\x65\x49\x8a\x5c\xa3\xbf\xdf\xe7\x52\xaf\xab\x8c\xf0\x3f\x00\x40\x15\x64\xe3\x49\xa1\xbf\xfb\x28\x4e\x2f\x9f\x7b\xf0\x3f\x00\x80\xeb\x82\xc0\x72\x9e\xbf\x19\x8f\x35\x8c\xb5\x6a\xf0\x3f\x00\x80\x52\x52\xf1\x55\x9a\xbf\x2c\xf9\xec\xa5\xee\x59\xf0\x3f\x00\x80\x81\xcf\x62\x3d\x96\xbf\x90\x2c\xd1\xcd\x49\x49\xf0\x3f\x00\x00\xaa\x8c\xfb\x28\x92\xbf\xa9\xad\xf0\xc6\xc6\x38\xf0\x3f\x00\x00\xf9\x20\x7b\x31\x8c\xbf\xa9\x32\x79\x13\x65\x28\xf0\x3f\x00\x00\xaa\x5d\x35\x19\x84\xbf\x48\x73\xea\x27\x24\x18\xf0\x3f\x00\x00\xec\xc2\x03\x12\x78\xbf\x95\xb1\x14\x06\x04\x08\xf0\x3f\x00\x00\x24\x79\x09\x04\x60\xbf\x1a\xfa\x26\xf7\x1f\xe0\xef\x3f\x00\x00\x90\x84\xf3\xef\x6f\x3f\x74\xea\x61\xc2\x1c\xa1\xef\x3f\x00\x00\x3d\x35\x41\xdc\x87\x3f\x2e\x99\x81\xb0\x10\x63\xef\x3f\x00\x80\xc2\xc4\xa3\xce\x93\x3f\xcd\xad\xee\x3c\xf6\x25\xef\x3f\x00\x00\x89\x14\xc1\x9f\x9b\x3f\xe7\x13\x91\x03\xc8\xe9\xee\x3f\x00\x00\x11\xce\xd8\xb0\xa1\x3f\xab\xb1\xcb\x78\x80\xae\xee\x3f\x00\xc0\x01\xd0\x5b\x8a\xa5\x3f\x9b\x0c\x9d\xa2\x1a\x74\xee\x3f\x00\x80\xd8\x40\x83\x5c\xa9\x3f\xb5\x99\x0a\x83\x91\x3a\xee\x3f\x00\x80\x57\xef\x6a\x27\xad\x3f\x56\x9a\x60\x09\xe0\x01\xee\x3f\x00\xc0\x98\xe5\x98\x75\xb0\x3f\x98\xbb\x77\xe5\x01\xca\xed\x3f\x00\x20\x0d\xe3\xf5\x53\xb2\x3f\x03\x91\x7c\x0b\xf2\x92\xed\x3f\x00\x00\x38\x8b\xdd\x2e\xb4\x3f\xce\x5c\xfb\x66\xac\x5c\xed\x3f\x00\xc0\x57\x87\x59\x06\xb6\x3f\x9d\xde\x5e\xaa\x2c\x27\xed\x3f\x00\x00\x6a\x35\x76\xda\xb7\x3f\xcd\x2c\x6b\x3e\x6e\xf2\xec\x3f\x00\x60\x1c\x4e\x43\xab\xb9\x3f\x02\x79\xa7\xa2\x6d\xbe\xec\x3f\x00\x60\x0d\xbb\xc7\x78\xbb\x3f\x6d\x08\x37\x6d\x26\x8b\xec\x3f\x00\x20\xe7\x32\x13\x43\xbd\x3f\x04\x58\x5d\xbd\x94\x58\xec\x3f\x00\x60\xde\x71\x31\x0a\xbf\x3f\x8c\x9f\xbb\x33\xb5\x26\xec\x3f\x00\x40\x91\x2b\x15\x67\xc0\x3f\x3f\xe7\xec\xee\x83\xf5\xeb\x3f\x00\xb0\x92\x82\x85\x47\xc1\x3f\xc1\x96\xdb\x75\xfd\xc4\xeb\x3f\x00\x30\xca\xcd\x6e\x26\xc2\x3f\x28\x4a\x86\x0c\x1e\x95\xeb\x3f\x00\x50\xc5\xa6\xd7\x03\xc3\x3f\x2c\x3e\xef\xc5\xe2\x65\xeb\x3f\x00\x10\x33\x3c\xc3\xdf\xc3\x3f\x8b\x88\xc9\x67\x48\x37\xeb\x3f\x00\x80\x7a\x6b\x36\xba\xc4\x3f\x4a\x30\x1d\x21\x4b\x09\xeb\x3f\x00\xf0\xd1\x28\x39\x93\xc5\x3f\x7e\xef\xf2\x85\xe8\xdb\xea\x3f\x00\xf0\x18\x24\xcd\x6a\xc6\x3f\xa2\x3d\x60\x31\x1d\xaf\xea\x3f\x00\x90\x66\xec\xf8\x40\xc7\x3f\xa7\x58\xd3\x3f\xe6\x82\xea\x3f\x00\xf0\x1a\xf5\xc0\x15\xc8\x3f\x8b\x73\x09\xef\x40\x57\xea\x3f\x00\x80\xf6\x54\x29\xe9\xc8\x3f\x27\x4b\xab\x90\x2a\x2c\xea\x3f\x00\x40\xf8\x02\x36\xbb\xc9\x3f\xd1\xf2\x93\x13\xa0\x01\xea\x3f\x00\x00\x2c\x1c\xed\x8b\xca\x3f\x1b\x3c\xdb\x24\x9f\xd7\xe9\x3f\x00\xd0\x01\x5c\x51\x5b\xcb\x3f\x90\xb1\xc7\x05\x25\xae\xe9\x3f\x00\xc0\xbc\xcc\x67\x29\xcc\x3f\x2f\xce\x97\xf2\x2e\x85\xe9\x3f\x00\x60\x48\xd5\x35\xf6\xcc\x3f\x75\x4b\xa4\xee\xba\x5c\xe9\x3f\x00\xc0\x46\x34\xbd\xc1\xcd\x3f\x38\x48\xe7\x9d\xc6\x34\xe9\x3f\x00\xe0\xcf\xb8\x01\x8c\xce\x3f\xe6\x52\x67\x2f\x4f\x0d\xe9\x3f\x00\x90\x17\xc0\x09\x55\xcf\x3f\x9d\xd7\xff\x8e\x52\xe6\xe8\x3f\x00\xb8\x1f\x12\x6c\x0e\xd0\x3f\x7c\x00\xcc\x9f\xce\xbf\xe8\x3f\x00\xd0\x93\x0e\xb8\x71\xd0\x3f\x0e\xc3\xbe\xda\xc0\x99\xe8\x3f\x00\x70\x86\x9e\x6b\xd4\xd0\x3f\xfb\x17\x23\xaa\x27\x74\xe8\x3f\x00\xd0\x4b\x33\x87\x36\xd1\x3f\x08\x9a\xb3\xac\x00\x4f\xe8\x3f\x00\x48\x23\x67\x0d\x98\xd1\x3f\x55\x3e\x65\xe8\x49\x2a\xe8\x3f\x00\x80\xcc\xe0\xff\xf8\xd1\x3f\x60\x02\xf4\x95\x01\x06\xe8\x3f\x00\x68\x63\xd7\x5f\x59\xd2\x3f\x29\xa3\xe0\x63\x25\xe2\xe7\x3f\x00\xa8\x14\x09\x30\xb9\xd2\x3f\xad\xb5\xdc\x77\xb3\xbe\xe7\x3f\x00\x60\x43\x10\x72\x18\xd3\x3f\xc2\x25\x97\x67\xaa\x9b\xe7\x3f\x00\x18\xec\x6d\x26\x77\xd3\x3f\x57\x06\x17\xf2\x07\x79\xe7\x3f\x00\x30\xaf\xfb\x4f\xd5\xd3\x3f\x0c\x13\xd6\xdb\xca\x56\xe7\x3f\x00\xe0\x2f\xe3\xee\x32\xd4\x3f\x6b\xb6\x4f\x01\x00\x10\xe6\x3f\x3c\x5b\x42\x91\x6c\x02\x7e\x3c\x95\xb4\x4d\x03\x00\x30\xe6\x3f\x41\x5d\x00\x48\xea\xbf\x8d\x3c\x78\xd4\x94\x0d\x00\x50\xe6\x3f\xb7\xa5\xd6\x86\xa7\x7f\x8e\x3c\xad\x6f\x4e\x07\x00\x70\xe6\x3f\x4c\x25\x54\x6b\xea\xfc\x61\x3c\xae\x0f\xdf\xfe\xff\x8f\xe6\x3f\xfd\x0e\x59\x4c\x27\x7e\x7c\xbc\xbc\xc5\x63\x07\x00\xb0\xe6\x3f\x01\xda\xdc\x48\x68\xc1\x8a\xbc\xf6\xc1\x5c\x1e\x00\xd0\xe6\x3f\x11\x93\x49\x9d\x1c\x3f\x83\x3c\x3e\xf6\x05\xeb\xff\xef\xe6\x3f\x53\x2d\xe2\x1a\x04\x80\x7e\xbc\x80\x97\x86\x0e\x00\x10\xe7\x3f\x52\x79\x09\x71\x66\xff\x7b\x3c\x12\xe9\x67\xfc\xff\x2f\xe7\x3f\x24\x87\xbd\x26\xe2\x00\x8c\x3c\x6a\x11\x81\xdf\xff\x4f\xe7\x3f\xd2\x01\xf1\x6e\x91\x02\x6e\xbc\x90\x9c\x67\x0f\x00\x70\xe7\x3f\x74\x9c\x54\xcd\x71\xfc\x67\xbc\x35\xc8\x7e\xfa\xff\x8f\xe7\x3f\x83\x04\xf5\x9e\xc1\xbe\x81\x3c\xe6\xc2\x20\xfe\xff\xaf\xe7\x3f\x65\x64\xcc\x29\x17\x7e\x70\xbc\x00\xc9\x3f\xed\xff\xcf\xe7\x3f\x1c\x8b\x7b\x08\x72\x80\x80\xbc\x76\x1a\x26\xe9\xff\xef\xe7\x3f\xae\xf9\x9d\x6d\x28\xc0\x8d\x3c\xe8\xa3\x9c\x04\x00\x10\xe8\x3f\x33\x4c\xe5\x51\xd2\x7f\x89\x3c\x8f\x2c\x93\x17\x00\x30\xe8\x3f\x81\xf3\x30\xb6\xe9\xfe\x8a\xbc\x9c\x73\x33\x06\x00\x50\xe8\x3f\xbc\x35\x65\x6b\xbf\xbf\x89\x3c\xc6\x89\x42\x20\x00\x70\xe8\x3f\x75\x7b\x11\xf3\x65\xbf\x8b\xbc\x04\x79\xf5\xeb\xff\x8f\xe8\x3f\x57\xcb\x3d\xa2\x6e\x00\x89\xbc\xdf\x04\xbc\x22\x00\xb0\xe8\x3f\x0a\x4b\xe0\x38\xdf\x00\x7d\xbc\x8a\x1b\x0c\xe5\xff\xcf\xe8\x3f\x05\x9f\xff\x46\x71\x00\x88\xbc\x43\x8e\x91\xfc\xff\xef\xe8\x3f\x38\x70\x7a\xd0\x7b\x81\x83\x3c\xc7\x5f\xfa\x1e\x00\x10\xe9\x3f\x03\xb4\xdf\x76\x91\x3e\x89\x3c\xb9\x7b\x46\x13\x00\x30\xe9\x3f\x76\x02\x98\x4b\x4e\x80\x7f\x3c\x6f\x07\xee\xe6\xff\x4f\xe9\x3f\x2e\x62\xff\xd9\xf0\x7e\x8f\xbc\xd1\x12\x3c\xde\xff\x6f\xe9\x3f\xba\x38\x26\x96\xaa\x82\x70\xbc\x0d\x8a\x45\xf4\xff\x8f\xe9\x3f\xef\xa8\x64\x91\x1b\x80\x87\xbc\x3e\x2e\x98\xdd\xff\xaf\xe9\x3f\x37\x93\x5a\x8a\xe0\x40\x87\xbc\x66\xfb\x49\xed\xff\xcf\xe9\x3f\x00\xe0\x9b\xc1\x08\xce\x3f\x3c\x51\x9c\xf1\x20\x00\xf0\xe9\x3f\x0a\x5b\x88\x27\xaa\x3f\x8a\xbc\x06\xb0\x45\x11\x00\x10\xea\x3f\x56\xda\x58\x99\x48\xff\x74\x3c\xfa\xf6\xbb\x07\x00\x30\xea\x3f\x18\x6d\x2b\x8a\xab\xbe\x8c\x3c\x79\x1d\x97\x10\x00\x50\xea\x3f\x30\x79\x78\xdd\xca\xfe\x88\x3c\x48\x2e\xf5\x1d\x00\x70\xea\x3f\xdb\xab\xd8\x3d\x76\x41\x8f\xbc\x52\x33\x59\x1c\x00\x90\xea\x3f\x12\x76\xc2\x84\x02\xbf\x8e\xbc\x4b\x3e\x4f\x2a\x00\xb0\xea\x3f\x5f\x3f\xff\x3c\x04\xfd\x69\xbc\xd1\x1e\xae\xd7\xff\xcf\xea\x3f\xb4\x70\x90\x12\xe7\x3e\x82\xbc\x78\x04\x51\xee\xff\xef\xea\x3f\xa3\xde\x0e\xe0\x3e\x06\x6a\x3c\x5b\x0d\x65\xdb\xff\x0f\xeb\x3f\xb9\x0a\x1f\x38\xc8\x06\x5a\x3c\x57\xca\xaa\xfe\xff\x2f\xeb\x3f\x1d\x3c\x23\x74\x1e\x01\x79\xbc\xdc\xba\x95\xd9\xff\x4f\xeb\x3f\x9f\x2a\x86\x68\x10\xff\x79\xbc\x9c\x65\x9e\x24\x00\x70\xeb\x3f\x3e\x4f\x86\xd0\x45\xff\x8a\x3c\x40\x16\x87\xf9\xff\x8f\xeb\x3f\xf9\xc3\xc2\x96\x77\xfe\x7c\x3c\x4f\xcb\x04\xd2\xff\xaf\xeb\x3f\xc4\x2b\xf2\xee\x27\xff\x63\xbc\x45\x5c\x41\xd2\xff\xcf\xeb\x3f\x21\xea\x3b\xee\xb7\xff\x6c\xbc\xdf\x09\x63\xf8\xff\xef\xeb\x3f\x5c\x0b\x2e\x97\x03\x41\x81\xbc\x53\x76\xb5\xe1\xff\x0f\xec\x3f\x19\x6a\xb7\x94\x64\xc1\x8b\x3c\xe3\x57\xfa\xf1\xff\x2f\xec\x3f\xed\xc6\x30\x8d\xef\xfe\x64\xbc\x24\xe4\xbf\xdc\xff\x4f\xec\x3f\x75\x47\xec\xbc\x68\x3f\x84\xbc\xf7\xb9\x54\xed\xff\x6f\xec\x3f\xec\xe0\x53\xf0\xa3\x7e\x84\x3c\xd5\x8f\x99\xeb\xff\x8f\xec\x3f\xf1\x92\xf9\x8d\x06\x83\x73\x3c\x9a\x21\x25\x21\x00\xb0\xec\x3f\x04\x0e\x18\x64\x8e\xfd\x68\xbc\x9c\x46\x94\xdd\xff\xcf\xec\x3f\x72\xea\xc7\x1c\xbe\x7e\x8e\x3c\x76\xc4\xfd\xea\xff\xef\xec\x3f\xfe\x88\x9f\xad\x39\xbe\x8e\x3c\x2b\xf8\x9a\x16\x00\x10\xed\x3f\x71\x5a\xb9\xa8\x91\x7d\x75\x3c\x1d\xf7\x0f\x0d\x00\x30\xed\x3f\xda\xc7\x70\x69\x90\xc1\x89\x3c\xc4\x0f\x79\xea\xff\x4f\xed\x3f\x0c\xfe\x58\xc5\x37\x0e\x58\xbc\xe5\x87\xdc\x2e\x00\x70\xed\x3f\x44\x0f\xc1\x4d\xd6\x80\x7f\xbc\xaa\x82\xdc\x21\x00\x90\xed\x3f\x5c\x5c\xfd\x94\x8f\x7c\x74\xbc\x83\x02\x6b\xd8\xff\xaf\xed\x3f\x7e\x61\x21\xc5\x1d\x7f\x8c\x3c\x39\x47\x6c\x29\x00\xd0\xed\x3f\x53\xb1\xff\xb2\x9e\x01\x88\x3c\xf5\x90\x44\xe5\xff\xef\xed\x3f\x89\xcc\x52\xc6\xd2\x00\x6e\x3c\x94\xf6\xab\xcd\xff\x0f\xee\x3f\xd2\x69\x2d\x20\x40\x83\x7f\xbc\xdd\xc8\x52\xdb\xff\x2f\xee\x3f\x64\x08\x1b\xca\xc1\x00\x7b\x3c\xef\x16\x42\xf2\xff\x4f\xee\x3f\x51\xab\x94\xb0\xa8\xff\x72\x3c\x11\x5e\x8a\xe8\xff\x6f\xee\x3f\x59\xbe\xef\xb1\x73\xf6\x57\xbc\x0d\xff\x9e\x11\x00\x90\xee\x3f\x01\xc8\x0b\x5e\x8d\x80\x84\xbc\x44\x17\xa5\xdf\xff\xaf\xee\x3f\xb5\x20\x43\xd5\x06\x00\x78\x3c\xa1\x7f\x12\x1a\x00\xd0\xee\x3f\x92\x5c\x56\x60\xf8\x02\x50\xbc\xc4\xbc\xba\x07\x00\xf0\xee\x3f\x11\xe6\x35\x5d\x44\x40\x85\xbc\x02\x8d\x7a\xf5\xff\x0f\xef\x3f\x05\x91\xef\x39\x31\xfb\x4f\xbc\xc7\x8a\xe5\x1e\x00\x30\xef\x3f\x55\x11\x73\xf2\xac\x81\x8a\x3c\x94\x34\x82\xf5\xff\x4f\xef\x3f\x43\xc7\xd7\xd4\x41\x3f\x8a\x3c\x6b\x4c\xa9\xfc\xff\x6f\xef\x3f\x75\x78\x98\x1c\xf4\x02\x62\xbc\x41\xc4\xf9\xe1\xff\x8f\xef\x3f\x4b\xe7\x77\xf4\xd1\x7d\x77\x3c\x7e\xe3\xe0\xd2\xff\xaf\xef\x3f\x31\xa3\x7c\x9a\x19\x01\x6f\xbc\x9e\xe4\x77\x1c\x00\xd0\xef\x3f\xb1\xac\xce\x4b\xee\x81\x71\x3c\x31\xc3\xe0\xf7\xff\xef\xef\x3f\x5a\x87\x70\x01\x37\x05\x6e\xbc\x6e\x60\x65\xf4\xff\x0f\xf0\x3f\xda\x0a\x1c\x49\xad\x7e\x8a\xbc\x58\x7a\x86\xf3\xff\x2f\xf0\x3f\xe0\xb2\xfc\xc3\x69\x7f\x97\xbc\x17\x0d\xfc\xfd\xff\x4f\xf0\x3f\x5b\x94\xcb\x34\xfe\xbf\x97\x3c\x82\x4d\xcd\x03\x00\x70\xf0\x3f\xcb\x56\xe4\xc0\x83\x00\x82\x3c\xe8\xcb\xf2\xf9\xff\x8f\xf0\x3f\x1a\x75\x37\xbe\xdf\xff\x6d\xbc\x65\xda\x0c\x01\x00\xb0\xf0\x3f\xeb\x26\xe6\xae\x7f\x3f\x91\xbc\x38\xd3\xa4\x01\x00\xd0\xf0\x3f\xf7\x9f\x48\x79\xfa\x7d\x80\x3c\xfd\xfd\xda\xfa\xff\xef\xf0\x3f\xc0\x6b\xd6\x70\x05\x04\x77\xbc\x96\xfd\xba\x0b\x00\x10\xf1\x3f\x62\x0b\x6d\x84\xd4\x80\x8e\x3c\x5d\xf4\xe5\xfa\xff\x2f\xf1\x3f\xef\x36\xfd\x64\xfa\xbf\x9d\x3c\xd9\x9a\xd5\x0d\x00\x50\xf1\x3f\xae\x50\x12\x70\x77\x00\x9a\x3c\x9a\x55\x21\x0f\x00\x70\xf1\x3f\xee\xde\xe3\xe2\xf9\xfd\x8d\x3c\x26\x54\x27\xfc\xff\x8f\xf1\x3f\x73\x72\x3b\xdc\x30\x00\x91\x3c\x59\x3c\x3d\x12\x00\xb0\xf1\x3f\x88\x01\x03\x80\x79\x7f\x99\x3c\xb7\x9e\x29\xf8\xff\xcf\xf1\x3f\x67\x8c\x9f\xab\x32\xf9\x65\xbc\x00\xd4\x8a\xf4\xff\xef\xf1\x3f\xeb\x5b\xa7\x9d\xbf\x7f\x93\x3c\xa4\x86\x8b\x0c\x00\x10\xf2\x3f\x22\x5b\xfd\x91\x6b\x80\x9f\x3c\x03\x43\x85\x03\x00\x30\xf2\x3f\x33\xbf\x9f\xeb\xc2\xff\x93\x3c\x84\xf6\xbc\xff\xff\x4f\xf2\x3f\x72\x2e\x2e\x7e\xe7\x01\x76\x3c\xd9\x21\x29\xf5\xff\x6f\xf2\x3f\x61\x0c\x7f\x76\xbb\xfc\x7f\x3c\x3c\x3a\x93\x14\x00\x90\xf2\x3f\x2b\x41\x02\x3c\xca\x02\x72\xbc\x13\x63\x55\x14\x00\xb0\xf2\x3f\x02\x1f\xf2\x33\x82\x80\x92\xbc\x3b\x52\xfe\xeb\xff\xcf\xf2\x3f\xf2\xdc\x4f\x38\x7e\xff\x88\xbc\x96\xad\xb8\x0b\x00\xf0\xf2\x3f\xc5\x41\x30\x50\x51\xff\x85\xbc\xaf\xe2\x7a\xfb\xff\x0f\xf3\x3f\x9d\x28\x5e\x88\x71\x00\x81\xbc\x7f\x5f\xac\xfe\xff\x2f\xf3\x3f\x15\xb7\xb7\x3f\x5d\xff\x91\xbc\x56\x67\xa6\x0c\x00\x50\xf3\x3f\xbd\x82\x8b\x22\x82\x7f\x95\x3c\x21\xf7\xfb\x11\x00\x70\xf3\x3f\xcc\xd5\x0d\xc4\xba\x00\x80\x3c\xb9\x2f\x59\xf9\xff\x8f\xf3\x3f\x51\xa7\xb2\x2d\x9d\x3f\x94\xbc\x42\xd2\xdd\x04\x00\xb0\xf3\x3f\xe1\x38\x76\x70\x6b\x7f\x85\x3c\x57\xc9\xb2\xf5\xff\xcf\xf3\x3f\x31\x12\xbf\x10\x3a\x02\x7a\x3c\x18\xb4\xb0\xea\xff\xef\xf3\x3f\xb0\x52\xb1\x66\x6d\x7f\x98\x3c\xf4\xaf\x32\x15\x00\x10\xf4\x3f\x24\x85\x19\x5f\x37\xf8\x67\x3c\x29\x8b\x47\x17\x00\x30\xf4\x3f\x43\x51\xdc\x72\xe6\x01\x83\x3c\x63\xb4\x95\xe7\xff\x4f\xf4\x3f\x5a\x89\xb2\xb8\x69\xff\x89\x3c\xe0\x75\x04\xe8\xff\x6f\xf4\x3f\x54\xf2\xc2\x9b\xb1\xc0\x95\xbc\xe7\xc1\x6f\xef\xff\x8f\xf4\x3f\x72\x2a\x3a\xf2\x09\x40\x9b\x3c\x04\xa7\xbe\xe5\xff\xaf\xf4\x3f\x45\x7d\x0d\xbf\xb7\xff\x94\xbc\xde\x27\x10\x17\x00\xd0\xf4\x3f\x3d\x6a\xdc\x71\x64\xc0\x99\xbc\xe2\x3e\xf0\x0f\x00\xf0\xf4\x3f\x1c\x53\x85\x0b\x89\x7f\x97\x3c\xd1\x4b\xdc\x12\x00\x10\xf5\x3f\x36\xa4\x66\x71\x65\x04\x60\x3c\x7a\x27\x05\x16\x00\x30\xf5\x3f\x09\x32\x23\xce\xce\xbf\x96\xbc\x4c\x70\xdb\xec\xff\x4f\xf5\x3f\xd7\xa1\x05\x05\x72\x02\x89\xbc\xa9\x54\x5f\xef\xff\x6f\xf5\x3f\x12\x64\xc9\x0e\xe6\xbf\x9b\x3c\x12\x10\xe6\x17\x00\x90\xf5\x3f\x90\xef\xaf\x81\xc5\x7e\x88\x3c\x92\x3e\xc9\x03\x00\xb0\xf5\x3f\xc0\x0c\xbf\x0a\x08\x41\x9f\xbc\xbc\x19\x49\x1d\x00\xd0\xf5\x3f\x29\x47\x25\xfb\x2a\x81\x98\xbc\x89\x7a\xb8\xe7\xff\xef\xf5\x3f\x04\x69\xed\x80\xb7\x7e\x94\xbc\x00\x00\x00\x00\x00\x00\x00\x00\x4f\xbb\x61\x05\x67\xac\xdd\x3f\x18\x2d\x44\x54\xfb\x21\xe9\x3f\x9b\xf6\x81\xd2\x0b\x73\xef\x3f\x18\x2d\x44\x54\xfb\x21\xf9\x3f\xe2\x65\x2f\x22\x7f\x2b\x7a\x3c\x07\x5c\x14\x33\x26\xa6\x81\x3c\xbd\xcb\xf0\x7a\x88\x07\x70\x3c\x07\x5c\x14\x33\x26\xa6\x91\x3c\x18\x2d\x44\x54\xfb\x21\xe9\x3f\x18\x2d\x44\x54\xfb\x21\xe9\xbf\xd2\x21\x33\x7f\x7c\xd9\x02\x40\xd2\x21\x33\x7f\x7c\xd9\x02\xc0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x18\x2d\x44\x54\xfb\x21\x09\x40\x18\x2d\x44\x54\xfb\x21\x09\xc0\xfe\x82\x2b\x65\x47\x15\x67\x40\x00\x00\x00\x00\x00\x00\x38\x43\x00\x00\xfa\xfe\x42\x2e\x76\xbf\x3a\x3b\x9e\xbc\x9a\xf7\x0c\xbd\xbd\xfd\xff\xff\xff\xff\xdf\x3f\x3c\x54\x55\x55\x55\x55\xc5\x3f\x91\x2b\x17\xcf\x55\x55\xa5\x3f\x17\xd0\xa4\x67\x11\x11\x81\x3f\x00\x00\x00\x00\x00\x00\xc8\x42\xef\x39\xfa\xfe\x42\x2e\xe6\x3f\x24\xc4\x82\xff\xbd\xbf\xce\x3f\xb5\xf4\x0c\xd7\x08\x6b\xac\x3f\xcc\x50\x46\xd2\xab\xb2\x83\x3f\x84\x3a\x4e\x9b\xe0\xd7\x55\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x3f\x6e\xbf\x88\x1a\x4f\x3b\x9b\x3c\x35\x33\xfb\xa9\x3d\xf6\xef\x3f\x5d\xdc\xd8\x9c\x13\x60\x71\xbc\x61\x80\x77\x3e\x9a\xec\xef\x3f\xd1\x66\x87\x10\x7a\x5e\x90\xbc\x85\x7f\x6e\xe8\x15\xe3\xef\x3f\x13\xf6\x67\x35\x52\xd2\x8c\x3c\x74\x85\x15\xd3\xb0\xd9\xef\x3f\xfa\x8e\xf9\x23\x80\xce\x8b\xbc\xde\xf6\xdd\x29\x6b\xd0\xef\x3f\x61\xc8\xe6\x61\x4e\xf7\x60\x3c\xc8\x9b\x75\x18\x45\xc7\xef\x3f\x99\xd3\x33\x5b\xe4\xa3\x90\x3c\x83\xf3\xc6\xca\x3e\xbe\xef\x3f\x6d\x7b\x83\x5d\xa6\x9a\x97\x3c\x0f\x89\xf9\x6c\x58\xb5\xef\x3f\xfc\xef\xfd\x92\x1a\xb5\x8e\x3c\xf7\x47\x72\x2b\x92\xac\xef\x3f\xd1\x9c\x2f\x70\x3d\xbe\x3e\x3c\xa2\xd1\xd3\x32\xec\xa3\xef\x3f\x0b\x6e\x90\x89\x34\x03\x6a\xbc\x1b\xd3\xfe\xaf\x66\x9b\xef\x3f\x0e\xbd\x2f\x2a\x52\x56\x95\xbc\x51\x5b\x12\xd0\x01\x93\xef\x3f\x55\xea\x4e\x8c\xef\x80\x50\xbc\xcc\x31\x6c\xc0\xbd\x8a\xef\x3f\x16\xf4\xd5\xb9\x23\xc9\x91\xbc\xe0\x2d\xa9\xae\x9a\x82\xef\x3f\xaf\x55\x5c\xe9\xe3\xd3\x80\x3c\x51\x8e\xa5\xc8\x98\x7a\xef\x3f\x48\x93\xa5\xea\x15\x1b\x80\xbc\x7b\x51\x7d\x3c\xb8\x72\xef\x3f\x3d\x32\xde\x55\xf0\x1f\x8f\xbc\xea\x8d\x8c\x38\xf9\x6a\xef\x3f\xbf\x53\x13\x3f\x8c\x89\x8b\x3c\x75\xcb\x6f\xeb\x5b\x63\xef\x3f\x26\xeb\x11\x76\x9c\xd9\x96\xbc\xd4\x5c\x04\x84\xe0\x5b\xef\x3f\x60\x2f\x3a\x3e\xf7\xec\x9a\x3c\xaa\xb9\x68\x31\x87\x54\xef\x3f\x9d\x38\x86\xcb\x82\xe7\x8f\xbc\x1d\xd9\xfc\x22\x50\x4d\xef\x3f\x8d\xc3\xa6\x44\x41\x6f\x8a\x3c\xd6\x8c\x62\x88\x3b\x46\xef\x3f\x7d\x04\xe4\xb0\x05\x7a\x80\x3c\x96\xdc\x7d\x91\x49\x3f\xef\x3f\x94\xa8\xa8\xe3\xfd\x8e\x96\x3c\x38\x62\x75\x6e\x7a\x38\xef\x3f\x7d\x48\x74\xf2\x18\x5e\x87\x3c\x3f\xa6\xb2\x4f\xce\x31\xef\x3f\xf2\xe7\x1f\x98\x2b\x47\x80\x3c\xdd\x7c\xe2\x65\x45\x2b\xef\x3f\x5e\x08\x71\x3f\x7b\xb8\x96\xbc\x81\x63\xf5\xe1\xdf\x24\xef\x3f\x31\xab\x09\x6d\xe1\xf7\x82\x3c\xe1\xde\x1f\xf5\x9d\x1e\xef\x3f\xfa\xbf\x6f\x1a\x9b\x21\x3d\xbc\x90\xd9\xda\xd0\x7f\x18\xef\x3f\xb4\x0a\x0c\x72\x82\x37\x8b\x3c\x0b\x03\xe4\xa6\x85\x12\xef\x3f\x8f\xcb\xce\x89\x92\x14\x6e\x3c\x56\x2f\x3e\xa9\xaf\x0c\xef\x3f\xb6\xab\xb0\x4d\x75\x4d\x83\x3c\x15\xb7\x31\x0a\xfe\x06\xef\x3f\x4c\x74\xac\xe2\x01\x42\x86\x3c\x31\xd8\x4c\xfc\x70\x01\xef\x3f\x4a\xf8\xd3\x5d\x39\xdd\x8f\x3c\xff\x16\x64\xb2\x08\xfc\xee\x3f\x04\x5b\x8e\x3b\x80\xa3\x86\xbc\xf1\x9f\x92\x5f\xc5\xf6\xee\x3f\x68\x50\x4b\xcc\xed\x4a\x92\xbc\xcb\xa9\x3a\x37\xa7\xf1\xee\x3f\x8e\x2d\x51\x1b\xf8\x07\x99\xbc\x66\xd8\x05\x6d\xae\xec\xee\x3f\xd2\x36\x94\x3e\xe8\xd1\x71\xbc\xf7\x9f\xe5\x34\xdb\xe7\xee\x3f\x15\x1b\xce\xb3\x19\x19\x99\xbc\xe5\xa8\x13\xc3\x2d\xe3\xee\x3f\x6d\x4c\x2a\xa7\x48\x9f\x85\x3c\x22\x34\x12\x4c\xa6\xde\xee\x3f\x8a\x69\x28\x7a\x60\x12\x93\xbc\x1c\x80\xac\x04\x45\xda\xee\x3f\x5b\x89\x17\x48\x8f\xa7\x58\xbc\x2a\x2e\xf7\x21\x0a\xd6\xee\x3f\x1b\x9a\x49\x67\x9b\x2c\x7c\xbc\x97\xa8\x50\xd9\xf5\xd1\xee\x3f\x11\xac\xc2\x60\xed\x63\x43\x3c\x2d\x89\x61\x60\x08\xce\xee\x3f\xef\x64\x06\x3b\x09\x66\x96\x3c\x57\x00\x1d\xed\x41\xca\xee\x3f\x79\x03\xa1\xda\xe1\xcc\x6e\x3c\xd0\x3c\xc1\xb5\xa2\xc6\xee\x3f\x30\x12\x0f\x3f\x8e\xff\x93\x3c\xde\xd3\xd7\xf0\x2a\xc3\xee\x3f\xb0\xaf\x7a\xbb\xce\x90\x76\x3c\x27\x2a\x36\xd5\xda\xbf\xee\x3f\x77\xe0\x54\xeb\xbd\x1d\x93\x3c\x0d\xdd\xfd\x99\xb2\xbc\xee\x3f\x8e\xa3\x71\x00\x34\x94\x8f\xbc\xa7\x2c\x9d\x76\xb2\xb9\xee\x3f\x49\xa3\x93\xdc\xcc\xde\x87\xbc\x42\x66\xcf\xa2\xda\xb6\xee\x3f\x5f\x38\x0f\xbd\xc6\xde\x78\xbc\x82\x4f\x9d\x56\x2b\xb4\xee\x3f\xf6\x5c\x7b\xec\x46\x12\x86\xbc\x0f\x92\x5d\xca\xa4\xb1\xee\x3f\x8e\xd7\xfd\x18\x05\x35\x93\x3c\xda\x27\xb5\x36\x47\xaf\xee\x3f\x05\x9b\x8a\x2f\xb7\x98\x7b\x3c\xfd\xc7\x97\xd4\x12\xad\xee\x3f\x09\x54\x1c\xe2\xe1\x63\x90\x3c\x29\x54\x48\xdd\x07\xab\xee\x3f\xea\xc6\x19\x50\x85\xc7\x34\x3c\xb7\x46\x59\x8a\x26\xa9\xee\x3f\x35\xc0\x64\x2b\xe6\x32\x94\x3c\x48\x21\xad\x15\x6f\xa7\xee\x3f\x9f\x76\x99\x61\x4a\xe4\x8c\xbc\x09\xdc\x76\xb9\xe1\xa5\xee\x3f\xa8\x4d\xef\x3b\xc5\x33\x8c\xbc\x85\x55\x3a\xb0\x7e\xa4\xee\x3f\xae\xe9\x2b\x89\x78\x53\x84\xbc\x20\xc3\xcc\x34\x46\xa3\xee\x3f\x58\x58\x56\x78\xdd\xce\x93\xbc\x25\x22\x55\x82\x38\xa2\xee\x3f\x64\x19\x7e\x80\xaa\x10\x57\x3c\x73\xa9\x4c\xd4\x55\xa1\xee\x3f\x28\x22\x5e\xbf\xef\xb3\x93\xbc\xcd\x3b\x7f\x66\x9e\xa0\xee\x3f\x82\xb9\x34\x87\xad\x12\x6a\xbc\xbf\xda\x0b\x75\x12\xa0\xee\x3f\xee\xa9\x6d\xb8\xef\x67\x63\xbc\x2f\x1a\x65\x3c\xb2\x9f\xee\x3f\x51\x88\xe0\x54\x3d\xdc\x80\xbc\x84\x94\x51\xf9\x7d\x9f\xee\x3f\xcf\x3e\x5a\x7e\x64\x1f\x78\xbc\x74\x5f\xec\xe8\x75\x9f\xee\x3f\xb0\x7d\x8b\xc0\x4a\xee\x86\xbc\x74\x81\xa5\x48\x9a\x9f\xee\x3f\x8a\xe6\x55\x1e\x32\x19\x86\xbc\xc9\x67\x42\x56\xeb\x9f\xee\x3f\xd3\xd4\x09\x5e\xcb\x9c\x90\x3c\x3f\x5d\xde\x4f\x69\xa0\xee\x3f\x1d\xa5\x4d\xb9\xdc\x32\x7b\xbc\x87\x01\xeb\x73\x14\xa1\xee\x3f\x6b\xc0\x67\x54\xfd\xec\x94\x3c\x32\xc1\x30\x01\xed\xa1\xee\x3f\x55\x6c\xd6\xab\xe1\xeb\x65\x3c\x62\x4e\xcf\x36\xf3\xa2\xee\x3f\x42\xcf\xb3\x2f\xc5\xa1\x88\xbc\x12\x1a\x3e\x54\x27\xa4\xee\x3f\x34\x37\x3b\xf1\xb6\x69\x93\xbc\x13\xce\x4c\x99\x89\xa5\xee\x3f\x1e\xff\x19\x3a\x84\x5e\x80\xbc\xad\xc7\x23\x46\x1a\xa7\xee\x3f\x6e\x57\x72\xd8\x50\xd4\x94\xbc\xed\x92\x44\x9b\xd9\xa8\xee\x3f\x00\x8a\x0e\x5b\x67\xad\x90\x3c\x99\x66\x8a\xd9\xc7\xaa\xee\x3f\xb4\xea\xf0\xc1\x2f\xb7\x8d\x3c\xdb\xa0\x2a\x42\xe5\xac\xee\x3f\xff\xe7\xc5\x9c\x60\xb6\x65\xbc\x8c\x44\xb5\x16\x32\xaf\xee\x3f\x44\x5f\xf3\x59\x83\xf6\x7b\x3c\x36\x77\x15\x99\xae\xb1\xee\x3f\x83\x3d\x1e\xa7\x1f\x09\x93\xbc\xc6\xff\x91\x0b\x5b\xb4\xee\x3f\x29\x1e\x6c\x8b\xb8\xa9\x5d\xbc\xe5\xc5\xcd\xb0\x37\xb7\xee\x3f\x59\xb9\x90\x7c\xf9\x23\x6c\xbc\x0f\x52\xc8\xcb\x44\xba\xee\x3f\xaa\xf9\xf4\x22\x43\x43\x92\xbc\x50\x4e\xde\x9f\x82\xbd\xee\x3f\x4b\x8e\x66\xd7\x6c\xca\x85\xbc\xba\x07\xca\x70\xf1\xc0\xee\x3f\x27\xce\x91\x2b\xfc\xaf\x71\x3c\x90\xf0\xa3\x82\x91\xc4\xee\x3f\xbb\x73\x0a\xe1\x35\xd2\x6d\x3c\x23\x23\xe3\x19\x63\xc8\xee\x3f\x63\x22\x62\x22\x04\xc5\x87\xbc\x65\xe5\x5d\x7b\x66\xcc\xee\x3f\xd5\x31\xe2\xe3\x86\x1c\x8b\x3c\x33\x2d\x4a\xec\x9b\xd0\xee\x3f\x15\xbb\xbc\xd3\xd1\xbb\x91\xbc\x5d\x25\x3e\xb2\x03\xd5\xee\x3f\xd2\x31\xee\x9c\x31\xcc\x90\x3c\x58\xb3\x30\x13\x9e\xd9\xee\x3f\xb3\x5a\x73\x6e\x84\x69\x84\x3c\xbf\xfd\x79\x55\x6b\xde\xee\x3f\xb4\x9d\x8e\x97\xcd\xdf\x82\xbc\x7a\xf3\xd3\xbf\x6b\xe3\xee\x3f\x87\x33\xcb\x92\x77\x1a\x8c\x3c\xad\xd3\x5a\x99\x9f\xe8\xee\x3f\xfa\xd9\xd1\x4a\x8f\x7b\x90\xbc\x66\xb6\x8d\x29\x07\xee\xee\x3f\xba\xae\xdc\x56\xd9\xc3\x55\xbc\xfb\x15\x4f\xb8\xa2\xf3\xee\x3f\x40\xf6\xa6\x3d\x0e\xa4\x90\xbc\x3a\x59\xe5\x8d\x72\xf9\xee\x3f\x34\x93\xad\x38\xf4\xd6\x68\xbc\x47\x5e\xfb\xf2\x76\xff\xee\x3f\x35\x8a\x58\x6b\xe2\xee\x91\xbc\x4a\x06\xa1\x30\xb0\x05\xef\x3f\xcd\xdd\x5f\x0a\xd7\xff\x74\x3c\xd2\xc1\x4b\x90\x1e\x0c\xef\x3f\xac\x98\x92\xfa\xfb\xbd\x91\xbc\x09\x1e\xd7\x5b\xc2\x12\xef\x3f\xb3\x0c\xaf\x30\xae\x6e\x73\x3c\x9c\x52\x85\xdd\x9b\x19\xef\x3f\x94\xfd\x9f\x5c\x32\xe3\x8e\x3c\x7a\xd0\xff\x5f\xab\x20\xef\x3f\xac\x59\x09\xd1\x8f\xe0\x84\x3c\x4b\xd1\x57\x2e\xf1\x27\xef\x3f\x67\x1a\x4e\x38\xaf\xcd\x63\x3c\xb5\xe7\x06\x94\x6d\x2f\xef\x3f\x68\x19\x92\x6c\x2c\x6b\x67\x3c\x69\x90\xef\xdc\x20\x37\xef\x3f\xd2\xb5\xcc\x83\x18\x8a\x80\xbc\xfa\xc3\x5d\x55\x0b\x3f\xef\x3f\x6f\xfa\xff\x3f\x5d\xad\x8f\xbc\x7c\x89\x07\x4a\x2d\x47\xef\x3f\x49\xa9\x75\x38\xae\x0d\x90\xbc\xf2\x89\x0d\x08\x87\x4f\xef\x3f\xa7\x07\x3d\xa6\x85\xa3\x74\x3c\x87\xa4\xfb\xdc\x18\x58\xef\x3f\x0f\x22\x40\x20\x9e\x91\x82\xbc\x98\x83\xc9\x16\xe3\x60\xef\x3f\xac\x92\xc1\xd5\x50\x5a\x8e\x3c\x85\x32\xdb\x03\xe6\x69\xef\x3f\x4b\x6b\x01\xac\x59\x3a\x84\x3c\x60\xb4\x01\xf3\x21\x73\xef\x3f\x1f\x3e\xb4\x07\x21\xd5\x82\xbc\x5f\x9b\x7b\x33\x97\x7c\xef\x3f\xc9\x0d\x47\x3b\xb9\x2a\x89\xbc\x29\xa1\xf5\x14\x46\x86\xef\x3f\xd3\x88\x3a\x60\x04\xb6\x74\x3c\xf6\x3f\x8b\xe7\x2e\x90\xef\x3f\x71\x72\x9d\x51\xec\xc5\x83\x3c\x83\x4c\xc7\xfb\x51\x9a\xef\x3f\xf0\x91\xd3\x8f\x12\xf7\x8f\xbc\xda\x90\xa4\xa2\xaf\xa4\xef\x3f\x7d\x74\x23\xe2\x98\xae\x8d\xbc\xf1\x67\x8e\x2d\x48\xaf\xef\x3f\x08\x20\xaa\x41\xbc\xc3\x8e\x3c\x27\x5a\x61\xee\x1b\xba\xef\x3f\x32\xeb\xa9\xc3\x94\x2b\x84\x3c\x97\xba\x6b\x37\x2b\xc5\xef\x3f\xee\x85\xd1\x31\xa9\x64\x8a\x3c\x40\x45\x6e\x5b\x76\xd0\xef\x3f\xed\xe3\x3b\xe4\xba\x37\x8e\xbc\x14\xbe\x9c\xad\xfd\xdb\xef\x3f\x9d\xcd\x91\x4d\x3b\x89\x77\x3c\xd8\x90\x9e\x81\xc1\xe7\xef\x3f\x89\xcc\x60\x41\xc1\x05\x53\x3c\xf1\x71\x8f\x2b\xc2\xf3\xef\x3f\x03\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x06\x00\x00\x00\x83\xf9\xa2\x00\x44\x4e\x6e\x00\xfc\x29\x15\x00\xd1\x57\x27\x00\xdd\x34\xf5\x00\x62\xdb\xc0\x00\x3c\x99\x95\x00\x41\x90\x43\x00\x63\x51\xfe\x00\xbb\xde\xab\x00\xb7\x61\xc5\x00\x3a\x6e\x24\x00\xd2\x4d\x42\x00\x49\x06\xe0\x00\x09\xea\x2e\x00\x1c\x92\xd1\x00\xeb\x1d\xfe\x00\x29\xb1\x1c\x00\xe8\x3e\xa7\x00\xf5\x35\x82\x00\x44\xbb\x2e\x00\x9c\xe9\x84\x00\xb4\x26\x70\x00\x41\x7e\x5f\x00\xd6\x91\x39\x00\x53\x83\x39\x00\x9c\xf4\x39\x00\x8b\x5f\x84\x00\x28\xf9\xbd\x00\xf8\x1f\x3b\x00\xde\xff\x97\x00\x0f\x98\x05\x00\x11\x2f\xef\x00\x0a\x5a\x8b\x00\x6d\x1f\x6d\x00\xcf\x7e\x36\x00\x09\xcb\x27\x00\x46\x4f\xb7\x00\x9e\x66\x3f\x00\x2d\xea\x5f\x00\xba\x27\x75\x00\xe5\xeb\xc7\x00\x3d\x7b\xf1\x00\xf7\x39\x07\x00\x92\x52\x8a\x00\xfb\x6b\xea\x00\x1f\xb1\x5f\x00\x08\x5d\x8d\x00\x30\x03\x56\x00\x7b\xfc\x46\x00\xf0\xab\x6b\x00\x20\xbc\xcf\x00\x36\xf4\x9a\x00\xe3\xa9\x1d\x00\x5e\x61\x91\x00\x08\x1b\xe6\x00\x85\x99\x65\x00\xa0\x14\x5f\x00\x8d\x40\x68\x00\x80\xd8\xff\x00\x27\x73\x4d\x00\x06\x06\x31\x00\xca\x56\x15\x00\xc9\xa8\x73\x00\x7b\xe2\x60\x00\x6b\x8c\xc0\x00\x19\xc4\x47\x00\xcd\x67\xc3\x00\x09\xe8\xdc\x00\x59\x83\x2a\x00\x8b\x76\xc4\x00\xa6\x1c\x96\x00\x44\xaf\xdd\x00\x19\x57\xd1\x00\xa5\x3e\x05\x00\x05\x07\xff\x00\x33\x7e\x3f\x00\xc2\x32\xe8\x00\x98\x4f\xde\x00\xbb\x7d\x32\x00\x26\x3d\xc3\x00\x1e\x6b\xef\x00\x9f\xf8\x5e\x00\x35\x1f\x3a\x00\x7f\xf2\xca\x00\xf1\x87\x1d\x00\x7c\x90\x21\x00\x6a\x24\x7c\x00\xd5\x6e\xfa\x00\x30\x2d\x77\x00\x15\x3b\x43\x00\xb5\x14\xc6\x00\xc3\x19\x9d\x00\xad\xc4\xc2\x00\x2c\x4d\x41\x00\x0c\x00\x5d\x00\x86\x7d\x46\x00\xe3\x71\x2d\x00\x9b\xc6\x9a\x00\x33\x62\x00\x00\xb4\xd2\x7c\x00\xb4\xa7\x97\x00\x37\x55\xd5\x00\xd7\x3e\xf6\x00\xa3\x10\x18\x00\x4d\x76\xfc\x00\x64\x9d\x2a\x00\x70\xd7\xab\x00\x63\x7c\xf8\x00\x7a\xb0\x57\x00\x17\x15\xe7\x00\xc0\x49\x56\x00\x3b\xd6\xd9\x00\xa7\x84\x38\x00\x24\x23\xcb\x00\xd6\x8a\x77\x00\x5a\x54\x23\x00\x00\x1f\xb9\x00\xf1\x0a\x1b\x00\x19\xce\xdf\x00\x9f\x31\xff\x00\x66\x1e\x6a\x00\x99\x57\x61\x00\xac\xfb\x47\x00\x7e\x7f\xd8\x00\x22\x65\xb7\x00\x32\xe8\x89\x00\xe6\xbf\x60\x00\xef\xc4\xcd\x00\x6c\x36\x09\x00\x5d\x3f\xd4\x00\x16\xde\xd7\x00\x58\x3b\xde\x00\xde\x9b\x92\x00\xd2\x22\x28\x00\x28\x86\xe8\x00\xe2\x58\x4d\x00\xc6\xca\x32\x00\x08\xe3\x16\x00\xe0\x7d\xcb\x00\x17\xc0\x50\x00\xf3\x1d\xa7\x00\x18\xe0\x5b\x00\x2e\x13\x34\x00\x83\x12\x62\x00\x83\x48\x01\x00\xf5\x8e\x5b\x00\xad\xb0\x7f\x00\x1e\xe9\xf2\x00\x48\x4a\x43\x00\x10\x67\xd3\x00\xaa\xdd\xd8\x00\xae\x5f\x42\x00\x6a\x61\xce\x00\x0a\x28\xa4\x00\xd3\x99\xb4\x00\x06\xa6\xf2\x00\x5c\x77\x7f\x00\xa3\xc2\x83\x00\x61\x3c\x88\x00\x8a\x73\x78\x00\xaf\x8c\x5a\x00\x6f\xd7\xbd\x00\x2d\xa6\x63\x00\xf4\xbf\xcb\x00\x8d\x81\xef\x00\x26\xc1\x67\x00\x55\xca\x45\x00\xca\xd9\x36\x00\x28\xa8\xd2\x00\xc2\x61\x8d\x00\x12\xc9\x77\x00\x04\x26\x14\x00\x12\x46\x9b\x00\xc4\x59\xc4\x00\xc8\xc5\x44\x00\x4d\xb2\x91\x00\x00\x17\xf3\x00\xd4\x43\xad\x00\x29\x49\xe5\x00\xfd\xd5\x10\x00\x00\xbe\xfc\x00\x1e\x94\xcc\x00\x70\xce\xee\x00\x13\x3e\xf5\x00\xec\xf1\x80\x00\xb3\xe7\xc3\x00\xc7\xf8\x28\x00\x93\x05\x94\x00\xc1\x71\x3e\x00\x2e\x09\xb3\x00\x0b\x45\xf3\x00\x88\x12\x9c\x00\xab\x20\x7b\x00\x2e\xb5\x9f\x00\x47\x92\xc2\x00\x7b\x32\x2f\x00\x0c\x55\x6d\x00\x72\xa7\x90\x00\x6b\xe7\x1f\x00\x31\xcb\x96\x00\x79\x16\x4a\x00\x41\x79\xe2\x00\xf4\xdf\x89\x00\xe8\x94\x97\x00\xe2\xe6\x84\x00\x99\x31\x97\x00\x88\xed\x6b\x00\x5f\x5f\x36\x00\xbb\xfd\x0e\x00\x48\x9a\xb4\x00\x67\xa4\x6c\x00\x71\x72\x42\x00\x8d\x5d\x32\x00\x9f\x15\xb8\x00\xbc\xe5\x09\x00\x8d\x31\x25\x00\xf7\x74\x39\x00\x30\x05\x1c\x00\x0d\x0c\x01\x00\x4b\x08\x68\x00\x2c\xee\x58\x00\x47\xaa\x90\x00\x74\xe7\x02\x00\xbd\xd6\x24\x00\xf7\x7d\xa6\x00\x6e\x48\x72\x00\x9f\x16\xef\x00\x8e\x94\xa6\x00\xb4\x91\xf6\x00\xd1\x53\x51\x00\xcf\x0a\xf2\x00\x20\x98\x33\x00\xf5\x4b\x7e\x00\xb2\x63\x68\x00\xdd\x3e\x5f\x00\x40\x5d\x03\x00\x85\x89\x7f\x00\x55\x52\x29\x00\x37\x64\xc0\x00\x6d\xd8\x10\x00\x32\x48\x32\x00\x5b\x4c\x75\x00\x4e\x71\xd4\x00\x45\x54\x6e\x00\x0b\x09\xc1\x00\x2a\xf5\x69\x00\x14\x66\xd5\x00\x27\x07\x9d\x00\x5d\x04\x50\x00\xb4\x3b\xdb\x00\xea\x76\xc5\x00\x87\xf9\x17\x00\x49\x6b\x7d\x00\x1d\x27\xba\x00\x96\x69\x29\x00\xc6\xcc\xac\x00\xad\x14\x54\x00\x90\xe2\x6a\x00\x88\xd9\x89\x00\x2c\x72\x50\x00\x04\xa4\xbe\x00\x77\x07\x94\x00\xf3\x30\x70\x00\x00\xfc\x27\x00\xea\x71\xa8\x00\x66\xc2\x49\x00\x64\xe0\x3d\x00\x97\xdd\x83\x00\xa3\x3f\x97\x00\x43\x94\xfd\x00\x0d\x86\x8c\x00\x31\x41\xde\x00\x92\x39\x9d\x00\xdd\x70\x8c\x00\x17\xb7\xe7\x00\x08\xdf\x3b\x00\x15\x37\x2b\x00\x5c\x80\xa0\x00\x5a\x80\x93\x00\x10\x11\x92\x00\x0f\xe8\xd8\x00\x6c\x80\xaf\x00\xdb\xff\x4b\x00\x38\x90\x0f\x00\x59\x18\x76\x00\x62\xa5\x15\x00\x61\xcb\xbb\x00\xc7\x89\xb9\x00\x10\x40\xbd\x00\xd2\xf2\x04\x00\x49\x75\x27\x00\xeb\xb6\xf6\x00\xdb\x22\xbb\x00\x0a\x14\xaa\x00\x89\x26\x2f\x00\x64\x83\x76\x00\x09\x3b\x33\x00\x0e\x94\x1a\x00\x51\x3a\xaa\x00\x1d\xa3\xc2\x00\xaf\xed\xae\x00\x5c\x26\x12\x00\x6d\xc2\x4d\x00\x2d\x7a\x9c\x00\xc0\x56\x97\x00\x03\x3f\x83\x00\x09\xf0\xf6\x00\x2b\x40\x8c\x00\x6d\x31\x99\x00\x39\xb4\x07\x00\x0c\x20\x15\x00\xd8\xc3\x5b\x00\xf5\x92\xc4\x00\xc6\xad\x4b\x00\x4e\xca\xa5\x00\xa7\x37\xcd\x00\xe6\xa9\x36\x00\xab\x92\x94\x00\xdd\x42\x68\x00\x19\x63\xde\x00\x76\x8c\xef\x00\x68\x8b\x52\x00\xfc\xdb\x37\x00\xae\xa1\xab\x00\xdf\x15\x31\x00\x00\xae\xa1\x00\x0c\xfb\xda\x00\x64\x4d\x66\x00\xed\x05\xb7\x00\x29\x65\x30\x00\x57\x56\xbf\x00\x47\xff\x3a\x00\x6a\xf9\xb9\x00\x75\xbe\xf3\x00\x28\x93\xdf\x00\xab\x80\x30\x00\x66\x8c\xf6\x00\x04\xcb\x15\x00\xfa\x22\x06\x00\xd9\xe4\x1d\x00\x3d\xb3\xa4\x00\x57\x1b\x8f\x00\x36\xcd\x09\x00\x4e\x42\xe9\x00\x13\xbe\xa4\x00\x33\x23\xb5\x00\xf0\xaa\x1a\x00\x4f\x65\xa8\x00\xd2\xc1\xa5\x00\x0b\x3f\x0f\x00\x5b\x78\xcd\x00\x23\xf9\x76\x00\x7b\x8b\x04\x00\x89\x17\x72\x00\xc6\xa6\x53\x00\x6f\x6e\xe2\x00\xef\xeb\x00\x00\x9b\x4a\x58\x00\xc4\xda\xb7\x00\xaa\x66\xba\x00\x76\xcf\xcf\x00\xd1\x02\x1d\x00\xb1\xf1\x2d\x00\x8c\x99\xc1\x00\xc3\xad\x77\x00\x86\x48\xda\x00\xf7\x5d\xa0\x00\xc6\x80\xf4\x00\xac\xf0\x2f\x00\xdd\xec\x9a\x00\x3f\x5c\xbc\x00\xd0\xde\x6d\x00\x90\xc7\x1f\x00\x2a\xdb\xb6\x00\xa3\x25\x3a\x00\x00\xaf\x9a\x00\xad\x53\x93\x00\xb6\x57\x04\x00\x29\x2d\xb4\x00\x4b\x80\x7e\x00\xda\x07\xa7\x00\x76\xaa\x0e\x00\x7b\x59\xa1\x00\x16\x12\x2a\x00\xdc\xb7\x2d\x00\xfa\xe5\xfd\x00\x89\xdb\xfe\x00\x89\xbe\xfd\x00\xe4\x76\x6c\x00\x06\xa9\xfc\x00\x3e\x80\x70\x00\x85\x6e\x15\x00\xfd\x87\xff\x00\x28\x3e\x07\x00\x61\x67\x33\x00\x2a\x18\x86\x00\x4d\xbd\xea\x00\xb3\xe7\xaf\x00\x8f\x6d\x6e\x00\x95\x67\x39\x00\x31\xbf\x5b\x00\x84\xd7\x48\x00\x30\xdf\x16\x00\xc7\x2d\x43\x00\x25\x61\x35\x00\xc9\x70\xce\x00\x30\xcb\xb8\x00\xbf\x6c\xfd\x00\xa4\x00\xa2\x00\x05\x6c\xe4\x00\x5a\xdd\xa0\x00\x21\x6f\x47\x00\x62\x12\xd2\x00\xb9\x5c\x84\x00\x70\x61\x49\x00\x6b\x56\xe0\x00\x99\x52\x01\x00\x50\x55\x37\x00\x1e\xd5\xb7\x00\x33\xf1\xc4\x00\x13\x6e\x5f\x00\x5d\x30\xe4\x00\x85\x2e\xa9\x00\x1d\xb2\xc3\x00\xa1\x32\x36\x00\x08\xb7\xa4\x00\xea\xb1\xd4\x00\x16\xf7\x21\x00\x8f\x69\xe4\x00\x27\xff\x77\x00\x0c\x03\x80\x00\x8d\x40\x2d\x00\x4f\xcd\xa0\x00\x20\xa5\x99\x00\xb3\xa2\xd3\x00\x2f\x5d\x0a\x00\xb4\xf9\x42\x00\x11\xda\xcb\x00\x7d\xbe\xd0\x00\x9b\xdb\xc1\x00\xab\x17\xbd\x00\xca\xa2\x81\x00\x08\x6a\x5c\x00\x2e\x55\x17\x00\x27\x00\x55\x00\x7f\x14\xf0\x00\xe1\x07\x86\x00\x14\x0b\x64\x00\x96\x41\x8d\x00\x87\xbe\xde\x00\xda\xfd\x2a\x00\x6b\x25\xb6\x00\x7b\x89\x34\x00\x05\xf3\xfe\x00\xb9\xbf\x9e\x00\x68\x6a\x4f\x00\x4a\x2a\xa8\x00\x4f\xc4\x5a\x00\x2d\xf8\xbc\x00\xd7\x5a\x98\x00\xf4\xc7\x95\x00\x0d\x4d\x8d\x00\x20\x3a\xa6\x00\xa4\x57\x5f\x00\x14\x3f\xb1\x00\x80\x38\x95\x00\xcc\x20\x01\x00\x71\xdd\x86\x00\xc9\xde\xb6\x00\xbf\x60\xf5\x00\x4d\x65\x11\x00\x01\x07\x6b\x00\x8c\xb0\xac\x00\xb2\xc0\xd0\x00\x51\x55\x48\x00\x1e\xfb\x0e\x00\x95\x72\xc3\x00\xa3\x06\x3b\x00\xc0\x40\x35\x00\x06\xdc\x7b\x00\xe0\x45\xcc\x00\x4e\x29\xfa\x00\xd6\xca\xc8\x00\xe8\xf3\x41\x00\x7c\x64\xde\x00\x9b\x64\xd8\x00\xd9\xbe\x31\x00\xa4\x97\xc3\x00\x77\x58\xd4\x00\x69\xe3\xc5\x00\xf0\xda\x13\x00\xba\x3a\x3c\x00\x46\x18\x46\x00\x55\x75\x5f\x00\xd2\xbd\xf5\x00\x6e\x92\xc6\x00\xac\x2e\x5d\x00\x0e\x44\xed\x00\x1c\x3e\x42\x00\x61\xc4\x87\x00\x29\xfd\xe9\x00\xe7\xd6\xf3\x00\x22\x7c\xca\x00\x6f\x91\x35\x00\x08\xe0\xc5\x00\xff\xd7\x8d\x00\x6e\x6a\xe2\x00\xb0\xfd\xc6\x00\x93\x08\xc1\x00\x7c\x5d\x74\x00\x6b\xad\xb2\x00\xcd\x6e\x9d\x00\x3e\x72\x7b\x00\xc6\x11\x6a\x00\xf7\xcf\xa9\x00\x29\x73\xdf\x00\xb5\xc9\xba\x00\xb7\x00\x51\x00\xe2\xb2\x0d\x00\x74\xba\x24\x00\xe5\x7d\x60\x00\x74\xd8\x8a\x00\x0d\x15\x2c\x00\x81\x18\x0c\x00\x7e\x66\x94\x00\x01\x29\x16\x00\x9f\x7a\x76\x00\xfd\xfd\xbe\x00\x56\x45\xef\x00\xd9\x7e\x36\x00\xec\xd9\x13\x00\x8b\xba\xb9\x00\xc4\x97\xfc\x00\x31\xa8\x27\x00\xf1\x6e\xc3\x00\x94\xc5\x36\x00\xd8\xa8\x56\x00\xb4\xa8\xb5\x00\xcf\xcc\x0e\x00\x12\x89\x2d\x00\x6f\x57\x34\x00\x2c\x56\x89\x00\x99\xce\xe3\x00\xd6\x20\xb9\x00\x6b\x5e\xaa\x00\x3e\x2a\x9c\x00\x11\x5f\xcc\x00\xfd\x0b\x4a\x00\xe1\xf4\xfb\x00\x8e\x3b\x6d\x00\xe2\x86\x2c\x00\xe9\xd4\x84\x00\xfc\xb4\xa9\x00\xef\xee\xd1\x00\x2e\x35\xc9\x00\x2f\x39\x61\x00\x38\x21\x44\x00\x1b\xd9\xc8\x00\x81\xfc\x0a\x00\xfb\x4a\x6a\x00\x2f\x1c\xd8\x00\x53\xb4\x84\x00\x4e\x99\x8c\x00\x54\x22\xcc\x00\x2a\x55\xdc\x00\xc0\xc6\xd6\x00\x0b\x19\x96\x00\x1a\x70\xb8\x00\x69\x95\x64\x00\x26\x5a\x60\x00\x3f\x52\xee\x00\x7f\x11\x0f\x00\xf4\xb5\x11\x00\xfc\xcb\xf5\x00\x34\xbc\x2d\x00\x34\xbc\xee\x00\xe8\x5d\xcc\x00\xdd\x5e\x60\x00\x67\x8e\x9b\x00\x92\x33\xef\x00\xc9\x17\xb8\x00\x61\x58\x9b\x00\xe1\x57\xbc\x00\x51\x83\xc6\x00\xd8\x3e\x10\x00\xdd\x71\x48\x00\x2d\x1c\xdd\x00\xaf\x18\xa1\x00\x21\x2c\x46\x00\x59\xf3\xd7\x00\xd9\x7a\x98\x00\x9e\x54\xc0\x00\x4f\x86\xfa\x00\x56\x06\xfc\x00\xe5\x79\xae\x00\x89\x22\x36\x00\x38\xad\x22\x00\x67\x93\xdc\x00\x55\xe8\xaa\x00\x82\x26\x38\x00\xca\xe7\x9b\x00\x51\x0d\xa4\x00\x99\x33\xb1\x00\xa9\xd7\x0e\x00\x69\x05\x48\x00\x65\xb2\xf0\x00\x7f\x88\xa7\x00\x88\x4c\x97\x00\xf9\xd1\x36\x00\x21\x92\xb3\x00\x7b\x82\x4a\x00\x98\xcf\x21\x00\x40\x9f\xdc\x00\xdc\x47\x55\x00\xe1\x74\x3a\x00\x67\xeb\x42\x00\xfe\x9d\xdf\x00\x5e\xd4\x5f\x00\x7b\x67\xa4\x00\xba\xac\x7a\x00\x55\xf6\xa2\x00\x2b\x88\x23\x00\x41\xba\x55\x00\x59\x6e\x08\x00\x21\x2a\x86\x00\x39\x47\x83\x00\x89\xe3\xe6\x00\xe5\x9e\xd4\x00\x49\xfb\x40\x00\xff\x56\xe9\x00\x1c\x0f\xca\x00\xc5\x59\x8a\x00\x94\xfa\x2b\x00\xd3\xc1\xc5\x00\x0f\xc5\xcf\x00\xdb\x5a\xae\x00\x47\xc5\x86\x00\x85\x43\x62\x00\x21\x86\x3b\x00\x2c\x79\x94\x00\x10\x61\x87\x00\x2a\x4c\x7b\x00\x80\x2c\x1a\x00\x43\xbf\x12\x00\x88\x26\x90\x00\x78\x3c\x89\x00\xa8\xc4\xe4\x00\xe5\xdb\x7b\x00\xc4\x3a\xc2\x00\x26\xf4\xea\x00\xf7\x67\x8a\x00\x0d\x92\xbf\x00\x65\xa3\x2b\x00\x3d\x93\xb1\x00\xbd\x7c\x0b\x00\xa4\x51\xdc\x00\x27\xdd\x63\x00\x69\xe1\xdd\x00\x9a\x94\x19\x00\xa8\x29\x95\x00\x68\xce\x28\x00\x09\xed\xb4\x00\x44\x9f\x20\x00\x4e\x98\xca\x00\x70\x82\x63\x00\x7e\x7c\x23\x00\x0f\xb9\x32\x00\xa7\xf5\x8e\x00\x14\x56\xe7\x00\x21\xf1\x08\x00\xb5\x9d\x2a\x00\x6f\x7e\x4d\x00\xa5\x19\x51\x00\xb5\xf9\xab\x00\x82\xdf\xd6\x00\x96\xdd\x61\x00\x16\x36\x02\x00\xc4\x3a\x9f\x00\x83\xa2\xa1\x00\x72\xed\x6d\x00\x39\x8d\x7a\x00\x82\xb8\xa9\x00\x6b\x32\x5c\x00\x46\x27\x5b\x00\x00\x34\xed\x00\xd2\x00\x77\x00\xfc\xf4\x55\x00\x01\x59\x4d\x00\xe0\x71\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xfb\x21\xf9\x3f\x00\x00\x00\x00\x2d\x44\x74\x3e\x00\x00\x00\x80\x98\x46\xf8\x3c\x00\x00\x00\x60\x51\xcc\x78\x3b\x00\x00\x00\x80\x83\x1b\xf0\x39\x00\x00\x00\x40\x20\x25\x7a\x38\x00\x00\x00\x80\x22\x82\xe3\x36\x00\x00\x00\x00\x1d\xf3\x69\x35\x00\x00\x20\x65\x47\x15\xf7\x3f\x00\xa2\xef\x2e\xfc\x05\xe7\x3d\x39\x83\x2b\x65\x47\x15\xe7\xbf\xbe\x04\x3a\xdc\x09\xc7\xde\x3f\xfb\x2f\x70\x64\x47\x15\xd7\xbf\x48\x4c\x03\x50\x6c\x77\xd2\x3f\xbc\x92\xea\x28\xb3\xc7\xce\xbf\x2e\xf9\x17\xe1\x25\x62\xca\x3f\xfe\x82\x2b\x65\x47\x15\xe7\xbf\xf7\x03\x3a\xdc\x09\xc7\xde\x3f\x3f\x7c\x2b\x65\x47\x15\xd7\xbf\xe4\x5b\xf0\x50\x6c\x77\xd2\x3f\xe5\x8f\x76\xdd\x09\xc7\xce\xbf\x36\xe7\xc4\x1e\x76\x61\xca\x3f\x9b\xa7\x64\xbc\x3f\x15\xc7\xbf\x4a\x1b\xf0\x54\xd1\x84\xc4\x3f\x3c\x38\x2c\xa7\xe4\x89\xc2\xbf\x66\xee\x5a\x28\x2f\xb3\xc0\x3f\xf8\xac\xb1\x6b\x28\x24\xf7\x3f\x00\xb0\xcd\xee\x5f\x09\xe1\xbf\xa1\xcc\xd2\x66\xf7\xe1\xf6\x3f\x00\xd0\x76\xbd\x94\x84\xe0\xbf\x8a\xd4\x30\x0e\x3d\xa1\xf6\x3f\x00\xf8\xe8\xae\x43\x01\xe0\xbf\x85\x6c\xd0\x32\xec\x61\xf6\x3f\x00\x40\x0b\x36\xc5\xfe\xde\xbf\xf8\x98\x11\x95\xfa\x23\xf6\x3f\x00\xe0\xb7\x1a\xd9\xfd\xdd\xbf\x6c\x02\xcf\xa4\x5b\xe7\xf5\x3f\x00\x90\xc7\x0c\xae\xff\xdc\xbf\xb8\x4f\x21\x5a\x05\xac\xf5\x3f\x00\xa0\xfd\x11\x38\x04\xdc\xbf\x1e\x6e\x16\x0f\xed\x71\xf5\x3f\x00\xe0\x3a\x32\x67\x0b\xdb\xbf\x35\xf8\x0b\x59\x09\x39\xf5\x3f\x00\xb0\x2d\x5a\x2f\x15\xda\xbf\xdd\xad\x61\xed\x4f\x01\xf5\x3f\x00\x60\xf8\x5a\x7f\x21\xd9\xbf\xd0\x7b\x48\x8e\xb8\xca\xf4\x3f\x00\x90\x71\xb0\x4d\x30\xd8\xbf\xee\x4f\x33\xb4\x39\x95\xf4\x3f\x00\xe0\xa9\xf9\x89\x41\xd7\xbf\x69\xd5\xaf\xdf\xcb\x60\xf4\x3f\x00\x90\x19\xb5\x2b\x55\xd6\xbf\x53\xb9\xe4\x4e\x66\x2d\xf4\x3f\x00\x10\x9b\xa2\x23\x6b\xd5\xbf\xa6\xd8\x1d\x11\x01\xfb\xf3\x3f\x00\xa0\x5f\x0f\x65\x83\xd4\xbf\x36\x58\x0c\xb7\x95\xc9\xf3\x3f\x00\xa0\xf6\x37\xe9\x9d\xd3\xbf\x4a\xfd\xb6\x4a\x1c\x99\xf3\x3f\x00\x60\x8d\x53\xa1\xba\xd2\xbf\xb5\x99\xe0\x0c\x8e\x69\xf3\x3f\x00\x40\xca\x40\x83\xd9\xd1\xbf\xb2\xe7\x13\x82\xe4\x3a\xf3\x3f\x00\xe0\x40\x3a\x85\xfa\xd0\xbf\xb1\xbd\x85\x19\x19\x0d\xf3\x3f\x00\x30\xe7\x32\x9c\x1d\xd0\xbf\xd7\x71\xb2\xca\x25\xe0\xf2\x3f\x00\x60\xfa\xa2\x7d\x85\xce\xbf\x82\xcd\x13\xcf\x04\xb4\xf2\x3f\x00\x80\x3d\x63\xc8\xd3\xcc\xbf\x50\xcb\x7c\x2c\xb0\x88\xf2\x3f\x00\xa0\x14\x4c\x03\x26\xcb\xbf\xe5\x4d\x94\x63\x22\x5e\xf2\x3f\x00\xe0\x4f\x2f\x1c\x7c\xc9\xbf\xb1\x15\x86\x3d\x56\x34\xf2\x3f\x00\x00\x80\x3f\x02\xd6\xc7\xbf\x38\xaf\x3e\xe3\x46\x0b\xf2\x3f\x00\xe0\x05\x1a\xa7\x33\xc6\xbf\xdd\xa3\xcd\xfd\xee\xe2\xf1\x3f\x00\x00\x57\xe9\xf5\x94\xc4\xbf\x30\x39\x0b\x58\x4a\xbb\xf1\x3f\x00\xa0\xe0\x24\xe4\xf9\xc2\xbf\x00\x22\x7f\x84\x53\x94\xf1\x3f\x00\xc0\xfd\x5a\x59\x62\xc1\xbf\x3c\xd7\xd5\xc0\x06\x6e\xf1\x3f\x00\x80\xbd\x75\x9a\x9c\xbf\xbf\xc2\xe4\xb7\x47\x5f\x48\xf1\x3f\x00\xc0\xf9\x5b\x57\x7b\xbc\xbf\xd1\x85\x00\xad\x58\x23\xf1\x3f\x00\x80\xf4\x0f\xc6\x60\xb9\xbf\x27\x22\x53\x0f\xf0\xfe\xf0\x3f\x00\x00\xb6\x47\xe2\x4c\xb6\xbf\x8f\x3a\xd0\x77\x20\xdb\xf0\x3f\x00\x40\x01\xb2\x78\x3f\xb3\xbf\xd9\x80\x59\xd6\xe6\xb7\xf0\x3f\x00\xc0\x42\x1a\x7d\x38\xb0\xbf\x8d\x40\x7b\xfe\x3e\x95\xf0\x3f\x00\x00\xb5\x08\x92\x6f\xaa\xbf\x83\x3b\xc5\xca\x25\x73\xf0\x3f\x00\x00\x77\x4f\x95\x7a\xa4\xbf\x5c\x1b\x0d\xe4\x97\x51\xf0\x3f\x00\x00\x0c\xc5\xa8\x23\x9d\xbf\xa2\x8e\x20\xc1\x91\x30\xf0\x3f\x00\x00\x78\x29\x26\x6a\x91\xbf\x21\x7e\xb3\x25\x10\x10\xf0\x3f\x00\x00\xe8\xd8\xf8\x20\x77\xbf\x6b\xa7\xca\xf9\x7e\xc0\xef\x3f\x00\x00\x50\xb1\x53\xfe\x86\x3f\x84\xf1\xf6\xd3\x65\x44\xef\x3f\x00\x80\x0f\xe1\xcc\x1c\xa1\x3f\x7f\x10\x84\x9f\x07\xcc\xee\x3f\x00\x80\x8b\x8c\xfc\x4d\xac\x3f\xe8\x5a\x97\x99\x3a\x57\xee\x3f\x00\x40\x57\x1e\x32\xaa\xb3\x3f\xe6\x3d\xbd\xf0\xd6\xe5\xed\x3f\x00\x80\x8b\xd0\xa0\x18\xb9\x3f\xb3\x38\xff\x81\xb6\x77\xed\x3f\x00\x40\x04\xda\xe9\x72\xbe\x3f\x43\xe9\x4d\x72\xb5\x0c\xed\x3f\x00\x60\x7f\x50\xd2\xdc\xc1\x3f\x63\x75\x0e\xdc\xb2\xa4\xec\x3f\x00\xa0\xde\x03\xab\x76\xc4\x3f\x51\xcb\xd6\xe8\x8e\x3f\xec\x3f\x00\x20\xe2\x77\x43\x07\xc7\x3f\x4c\x0c\x02\x4f\x2b\xdd\xeb\x3f\x00\x40\xa9\x8b\xde\x8e\xc9\x3f\xca\x15\x60\x00\x6c\x7d\xeb\x3f\x00\xe0\xd2\x6a\xb8\x0d\xcc\x3f\x8f\x33\x2e\x6e\x36\x20\xeb\x3f\x00\xe0\xce\xaf\x0a\x84\xce\x3f\x39\x50\x29\x26\x70\xc5\xea\x3f\x00\x80\x67\xb4\x0a\x79\xd0\x3f\xdd\x31\x27\xbc\x01\x6d\xea\x3f\x00\xc0\x01\x68\x05\xac\xd1\x3f\x8b\xf1\x3f\xbc\xd3\x16\xea\x3f\x00\xe0\xfe\xd4\x11\xdb\xd2\x3f\xad\xfe\x67\x49\xd1\xc2\xe9\x3f\x00\x80\xc5\x4e\x46\x06\xd4\x3f\x02\x99\x7c\xf4\xe4\x70\xe9\x3f\x00\xf0\x3a\x09\xbe\x2d\xd5\x3f\xf2\xbc\x82\x39\xfb\x20\xe9\x3f\x00\xd0\x50\x20\x90\x51\xd6\x3f\xf1\x59\xf7\x87\x01\xd3\xe8\x3f\x00\xf0\xea\xcd\xd2\x71\xd7\x3f\x6d\xf6\xb9\xeb\xe5\x86\xe8\x3f\x00\x90\x7d\x85\x9c\x8e\xd8\x3f\x94\xb9\x58\xb6\x97\x3c\xe8\x3f\x00\x60\xe1\x55\x01\xa8\xd9\x3f\x22\x10\xc6\xff\x05\xf4\xe7\x3f\x00\xd0\xd3\x6e\x18\xbe\xda\x3f\xca\x15\x14\x18\x22\xad\xe7\x3f\x00\xe0\xa0\xae\xf2\xd0\xdb\x3f\x8c\xff\x9e\xf9\xdc\x67\xe7\x3f\x00\x40\xbf\x3d\xa4\xe0\xdc\x3f\x8e\x0a\xb9\x12\x00\x20\xe6\x3f\x05\xb6\x44\x06\xab\x04\x89\x3c\xa6\x34\x57\x04\x00\x60\xe6\x3f\xa9\xf7\x62\xea\x9b\xff\x61\x3c\xc5\xf2\x25\xc3\xff\x9f\xe6\x3f\xba\x90\x3c\xcb\xcf\x7e\x82\x3c\x04\x5a\xb9\x38\x00\xe0\xe6\x3f\x26\x93\x73\x56\x88\xff\x88\x3c\xe3\x94\x99\xe0\xff\x1f\xe7\x3f\xb1\x82\x5f\x27\x40\xfd\x8a\x3c\x10\x0e\x59\x15\x00\x60\xe7\x3f\x41\x83\x23\xb4\x75\xfd\x72\xbc\xd5\x5b\x65\x12\x00\xa0\xe7\x3f\x76\x2b\x24\x7c\xe6\x08\x78\x3c\xa6\xe9\x59\x32\x00\xe0\xe7\x3f\xb7\x22\xf6\x26\xe4\x08\x62\xbc\xd2\xb2\xb4\xed\xff\x1f\xe8\x3f\x2f\xc9\xa5\x1e\x46\x02\x84\xbc\xc3\xfc\xfa\x2d\x00\x60\xe8\x3f\x1f\x9a\xf2\xa2\xf4\xf7\x6d\x3c\x50\x6b\x8c\xf7\xff\x9f\xe8\x3f\xfd\x95\x49\x09\x53\x04\x8e\xbc\x66\x15\x67\x39\x00\xe0\xe8\x3f\x45\x7b\xc7\xbe\xf3\x04\x8a\xbc\x45\x17\xbf\xe2\xff\x1f\xe9\x3f\x3c\x20\x0e\x40\x34\xfa\x77\xbc\xd1\x9f\x5c\xcc\xff\x5f\xe9\x3f\x5d\x69\xa0\x05\x80\xff\x76\xbc\x67\x47\xba\x3b\x00\xa0\xe9\x3f\x03\x7e\xec\xc4\xc4\xf8\x70\x3c\xa5\x2d\xb9\xe7\xff\xdf\xe9\x3f\x02\x46\x8c\x47\xd9\x7f\x8e\x3c\xaf\xfd\x2e\xd7\xff\x1f\xea\x3f\x7e\xae\xcd\x4d\x55\x0c\x6a\xbc\x95\xff\x04\xde\xff\x5f\xea\x3f\x6b\xb2\xe9\x8c\xa9\x7d\x86\x3c\x2b\x8d\x5e\xca\xff\x9f\xea\x3f\xde\x13\x4c\xb5\xc9\x84\x82\xbc\xea\x03\xad\xdd\xff\xdf\xea\x3f\x3c\x2e\x60\xea\xc8\x12\x58\x3c\x4d\x3d\x0d\xf1\xff\x1f\xeb\x3f\x9c\x78\x27\xad\xdd\xfa\x8e\xbc\x5a\x16\x21\xce\xff\x5f\xeb\x3f\x37\x12\xc6\x19\x17\xcb\x53\x3c\x74\xe6\x50\xd9\xff\x9f\xeb\x3f\x00\xce\x94\x41\xd9\xf7\x73\x3c\xaf\xa8\x9c\x13\x00\xe0\xeb\x3f\xc0\x9b\x5d\x21\xc4\x0a\x75\x3c\x99\xdf\x46\x5b\x00\x20\xec\x3f\xc9\xc1\xe9\x53\xa6\xee\x6b\x3c\xae\xf7\xb9\x40\x00\x60\xec\x3f\xd6\x70\x4a\x27\x9f\x07\x7c\xbc\x8a\xfd\x55\x62\x00\xa0\xec\x3f\x1f\x4c\xe8\x76\x40\x0b\x7a\xbc\x5d\x09\x4c\xd9\xff\xdf\xec\x3f\xd7\xb5\x9a\xf9\x33\xf9\x88\x3c\xcf\xd6\x75\xf9\xff\x1f\xed\x3f\xbe\xe1\x5f\x66\x08\x2c\x58\xbc\x93\x1c\x56\xa2\xff\x5f\xed\x3f\xf3\x95\xd2\x9b\x28\x04\x7b\xbc\x0c\x8b\x22\x9d\xff\x9f\xed\x3f\x36\xa2\x0f\x34\x51\x02\x87\x3c\x16\x7e\xbc\x65\x00\xe0\xed\x3f\x0c\xd8\xa4\x16\x1e\x01\x75\xbc\x91\x47\xf6\x02\x00\x20\xee\x3f\xe0\x62\xef\x09\x2f\x80\x89\x3c\xd8\xa6\xd7\x57\x00\x60\xee\x3f\xfa\xf7\x0c\x58\x75\x0b\x7e\xbc\x0c\xc0\xed\x27\x00\xa0\xee\x3f\x11\x98\x45\x09\x83\x84\x8c\xbc\x7c\xcb\xf5\x6c\x00\xe0\xee\x3f\xf4\x76\x15\x95\x27\x80\x8f\xbc\xcc\x7d\x2b\x78\x00\x20\xef\x3f\x8f\x53\x74\x72\xd9\x81\x8f\xbc\x0a\x45\x0c\x26\x00\x60\xef\x3f\xdc\xff\x27\x27\x00\x71\x40\xbc\x33\xd5\x8c\xe8\xff\x9f\xef\x3f\xb0\xa8\xfd\xe1\xdc\x1b\x58\xbc\x89\x86\x0f\xd5\xff\xdf\xef\x3f\x6e\x8e\x91\xcb\x1a\xf9\x87\x3c\x67\x23\x29\x04\x00\x20\xf0\x3f\x81\x46\x32\x65\xf3\x7f\x9b\x3c\x68\xd6\xe3\xe3\xff\x5f\xf0\x3f\x7b\x95\xae\xdd\x08\xfa\x86\x3c\x57\xa7\x85\x0a\x00\xa0\xf0\x3f\x91\xfb\xd3\x80\xde\xe2\x57\xbc\xcc\x3f\x5f\x1a\x00\xe0\xf0\x3f\x14\xf0\xc5\x05\x33\x82\x91\xbc\xf5\xba\xaf\xf8\xff\x1f\xf1\x3f\xc2\xba\x80\x66\xbb\xfa\x8b\xbc\xad\x91\x4d\xe5\xff\x5f\xf1\x3f\xef\xe7\x37\x17\x12\x7f\x9d\xbc\xe1\x36\xac\x11\x00\xa0\xf1\x3f\xff\xf5\x16\x05\x0a\x00\x9c\x3c\x48\x42\xc8\x19\x00\xe0\xf1\x3f\xa0\x5d\xda\xe4\xfb\x82\x90\xbc\x6e\x5e\xfe\x0f\x00\x20\xf2\x3f\x43\xfb\x9c\x4c\xd0\xfd\x88\xbc\x91\xd8\x9f\x26\x00\x60\xf2\x3f\x82\xd1\x94\x79\x2a\xfe\x8c\x3c\xda\xe6\xa6\x29\x00\xa0\xf2\x3f\xc5\x8b\x5e\x71\x73\x02\x70\xbc\x39\x3e\x29\xe0\xff\xdf\xf2\x3f\xf9\xa6\xb2\xda\x39\x7c\x9b\x3c\x82\xf0\xdc\xf7\xff\x1f\xf3\x3f\x54\x52\xdc\x6e\x33\xf1\x7d\x3c\x60\x8b\x5a\xf0\xff\x5f\xf3\x3f\xeb\x31\xcd\x4c\x56\x03\x9e\xbc\xcc\xae\x0e\x2e\x00\xa0\xf3\x3f\x77\xa4\xd3\x4b\xe7\xf0\x75\x3c\x36\xb2\x3b\x04\x00\xe0\xf3\x3f\x33\x88\x9d\x14\xcb\x7d\x9c\x3c\xff\x87\xd1\x02\x00\x20\xf4\x3f\x28\x3d\x2d\xcf\xaf\x08\x7e\x3c\xb1\x7c\x38\x0d\x00\x60\xf4\x3f\xa6\x99\x65\x85\x37\x08\x82\x3c\x89\x9f\x56\x04\x00\xa0\xf4\x3f\xd2\xbc\x4f\x90\x5c\xfa\x89\xbc\xf3\x43\x35\x04\x00\xe0\xf4\x3f\x29\x53\x17\xed\x25\x11\x78\xbc\x0f\x7f\x02\xcc\xff\x1f\xf5\x3f\xdc\x54\x77\x84\xd8\x83\x98\x3c\x6f\xb3\x87\xfd\xff\x5f\xf5\x3f\x07\x28\xd0\x31\xe7\x09\x87\xbc\xba\xf7\x1d\xf2\xff\x9f\xf5\x3f\x02\x7b\x72\x68\x9f\xf7\x87\x3c\x81\x34\xfc\xeb\xff\xdf\xf5\x3f\x3e\xe9\x30\x2e\x90\x80\x91\xbc\x00\x38\xfa\xfe\x42\x2e\xe6\x3f\x30\x67\xc7\x93\x57\xf3\x2e\x3d\x00\x00\x00\x00\x00\x00\xe0\xbf\x60\x55\x55\x55\x55\x55\xe5\xbf\x06\x00\x00\x00\x00\x00\xe0\x3f\x4e\x55\x59\x99\x99\x99\xe9\x3f\x7a\xa4\x29\x55\x55\x55\xe5\xbf\xe9\x45\x48\x9b\x5b\x49\xf2\xbf\xc3\x3f\x26\x8b\x2b\x00\xf0\x3f\x00\x00\x00\x00\x00\xa0\xf6\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\xb9\xf2\x82\x2c\xd6\xbf\x80\x56\x37\x28\x24\xb4\xfa\x3c\x00\x00\x00\x00\x00\x80\xf6\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x58\xbf\xbd\xd1\xd5\xbf\x20\xf7\xe0\xd8\x08\xa5\x1c\xbd\x00\x00\x00\x00\x00\x60\xf6\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x45\x17\x77\x76\xd5\xbf\x6d\x50\xb6\xd5\xa4\x62\x23\xbd\x00\x00\x00\x00\x00\x40\xf6\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x2d\x87\xad\x1a\xd5\xbf\xd5\x67\xb0\x9e\xe4\x84\xe6\xbc\x00\x00\x00\x00\x00\x20\xf6\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x77\x95\x5f\xbe\xd4\xbf\xe0\x3e\x29\x93\x69\x1b\x04\xbd\x00\x00\x00\x00\x00\x00\xf6\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x1c\xc2\x8b\x61\xd4\xbf\xcc\x84\x4c\x48\x2f\xd8\x13\x3d\x00\x00\x00\x00\x00\xe0\xf5\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\x86\x86\x30\x04\xd4\xbf\x3a\x0b\x82\xed\xf3\x42\xdc\x3c\x00\x00\x00\x00\x00\xc0\xf5\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\x69\x55\x4c\xa6\xd3\xbf\x60\x94\x51\x86\xc6\xb1\x20\x3d\x00\x00\x00\x00\x00\xa0\xf5\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x98\x9a\xdd\x47\xd3\xbf\x92\x80\xc5\xd4\x4d\x59\x25\x3d\x00\x00\x00\x00\x00\x80\xf5\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\xe1\xba\xe2\xe8\xd2\xbf\xd8\x2b\xb7\x99\x1e\x7b\x26\x3d\x00\x00\x00\x00\x00\x60\xf5\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\xde\x13\x5a\x89\xd2\xbf\x3f\xb0\xcf\xb6\x14\xca\x15\x3d\x00\x00\x00\x00\x00\x60\xf5\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\xde\x13\x5a\x89\xd2\xbf\x3f\xb0\xcf\xb6\x14\xca\x15\x3d\x00\x00\x00\x00\x00\x40\xf5\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\xcf\xfb\x41\x29\xd2\xbf\x76\xda\x53\x28\x24\x5a\x16\xbd\x00\x00\x00\x00\x00\x20\xf5\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x69\xc1\x98\xc8\xd1\xbf\x04\x54\xe7\x68\xbc\xaf\x1f\xbd\x00\x00\x00\x00\x00\x00\xf5\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa8\xab\xab\x5c\x67\xd1\xbf\xf0\xa8\x82\x33\xc6\x1f\x1f\x3d\x00\x00\x00\x00\x00\xe0\xf4\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x48\xae\xf9\x8b\x05\xd1\xbf\x66\x5a\x05\xfd\xc4\xa8\x26\xbd\x00\x00\x00\x00\x00\xc0\xf4\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x73\xe2\x24\xa3\xd0\xbf\x0e\x03\xf4\x7e\xee\x6b\x0c\xbd\x00\x00\x00\x00\x00\xa0\xf4\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\xb4\x94\x25\x40\xd0\xbf\x7f\x2d\xf4\x9e\xb8\x36\xf0\xbc\x00\x00\x00\x00\x00\xa0\xf4\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\xb4\x94\x25\x40\xd0\xbf\x7f\x2d\xf4\x9e\xb8\x36\xf0\xbc\x00\x00\x00\x00\x00\x80\xf4\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x5e\x6d\x18\xb9\xcf\xbf\x87\x3c\x99\xab\x2a\x57\x0d\x3d\x00\x00\x00\x00\x00\x60\xf4\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\xdc\xcb\xad\xf0\xce\xbf\x24\xaf\x86\x9c\xb7\x26\x2b\x3d\x00\x00\x00\x00\x00\x40\xf4\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x2a\x6e\x07\x27\xce\xbf\x10\xff\x3f\x54\x4f\x2f\x17\xbd\x00\x00\x00\x00\x00\x20\xf4\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x4f\x6b\x21\x5c\xcd\xbf\x1b\x68\xca\xbb\x91\xba\x21\x3d\x00\x00\x00\x00\x00\x00\xf4\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x9a\xc7\xf7\x8f\xcc\xbf\x34\x84\x9f\x68\x4f\x79\x27\x3d\x00\x00\x00\x00\x00\x00\xf4\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x9a\xc7\xf7\x8f\xcc\xbf\x34\x84\x9f\x68\x4f\x79\x27\x3d\x00\x00\x00\x00\x00\xe0\xf3\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x2d\x74\x86\xc2\xcb\xbf\x8f\xb7\x8b\x31\xb0\x4e\x19\x3d\x00\x00\x00\x00\x00\xc0\xf3\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x80\x4e\xc9\xf3\xca\xbf\x66\x90\xcd\x3f\x63\x4e\xba\x3c\x00\x00\x00\x00\x00\xa0\xf3\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\xe2\x1f\xbc\x23\xca\xbf\xea\xc1\x46\xdc\x64\x8c\x25\xbd\x00\x00\x00\x00\x00\xa0\xf3\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\xe2\x1f\xbc\x23\xca\xbf\xea\xc1\x46\xdc\x64\x8c\x25\xbd\x00\x00\x00\x00\x00\x80\xf3\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\xf4\x9c\x5a\x52\xc9\xbf\xe3\xd4\xc1\x04\xd9\xd1\x2a\xbd\x00\x00\x00\x00\x00\x60\xf3\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\x20\x65\xa0\x7f\xc8\xbf\x09\xfa\xdb\x7f\xbf\xbd\x2b\x3d\x00\x00\x00\x00\x00\x40\xf3\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x10\x02\x89\xab\xc7\xbf\x58\x4a\x53\x72\x90\xdb\x2b\x3d\x00\x00\x00\x00\x00\x40\xf3\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x10\x02\x89\xab\xc7\xbf\x58\x4a\x53\x72\x90\xdb\x2b\x3d\x00\x00\x00\x00\x00\x20\xf3\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\x19\xe7\x0f\xd6\xc6\xbf\x66\xe2\xb2\xa3\x6a\xe4\x10\xbd\x00\x00\x00\x00\x00\x00\xf3\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xa7\x70\x30\xff\xc5\xbf\x39\x50\x10\x9f\x43\x9e\x1e\xbd\x00\x00\x00\x00\x00\x00\xf3\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xa7\x70\x30\xff\xc5\xbf\x39\x50\x10\x9f\x43\x9e\x1e\xbd\x00\x00\x00\x00\x00\xe0\xf2\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\xa1\xe3\xe5\x26\xc5\xbf\x8f\x5b\x07\x90\x8b\xde\x20\xbd\x00\x00\x00\x00\x00\xc0\xf2\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xcb\x6c\x2b\x4d\xc4\xbf\x3c\x78\x35\x61\xc1\x0c\x17\x3d\x00\x00\x00\x00\x00\xc0\xf2\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xcb\x6c\x2b\x4d\xc4\xbf\x3c\x78\x35\x61\xc1\x0c\x17\x3d\x00\x00\x00\x00\x00\xa0\xf2\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x1e\x20\xfc\x71\xc3\xbf\x3a\x54\x27\x4d\x86\x78\xf1\x3c\x00\x00\x00\x00\x00\x80\xf2\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x1f\xf8\x52\x95\xc2\xbf\x08\xc4\x71\x17\x30\x8d\x24\xbd\x00\x00\x00\x00\x00\x60\xf2\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x2f\xd5\x2a\xb7\xc1\xbf\x96\xa3\x11\x18\xa4\x80\x2e\xbd\x00\x00\x00\x00\x00\x60\xf2\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x2f\xd5\x2a\xb7\xc1\xbf\x96\xa3\x11\x18\xa4\x80\x2e\xbd\x00\x00\x00\x00\x00\x40\xf2\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xd0\x7c\x7e\xd7\xc0\xbf\xf4\x5b\xe8\x88\x96\x69\x0a\x3d\x00\x00\x00\x00\x00\x40\xf2\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xd0\x7c\x7e\xd7\xc0\xbf\xf4\x5b\xe8\x88\x96\x69\x0a\x3d\x00\x00\x00\x00\x00\x20\xf2\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\xdb\x31\x91\xec\xbf\xbf\xf2\x33\xa3\x5c\x54\x75\x25\xbd\x00\x00\x00\x00\x00\x00\xf2\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x6e\x07\x27\xbe\xbf\x3c\x00\xf0\x2a\x2c\x34\x2a\x3d\x00\x00\x00\x00\x00\x00\xf2\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2b\x6e\x07\x27\xbe\xbf\x3c\x00\xf0\x2a\x2c\x34\x2a\x3d\x00\x00\x00\x00\x00\xe0\xf1\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x5b\x8f\x54\x5e\xbc\xbf\x06\xbe\x5f\x58\x57\x0c\x1d\xbd\x00\x00\x00\x00\x00\xc0\xf1\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x4a\x3a\x6d\x92\xba\xbf\xc8\xaa\x5b\xe8\x35\x39\x25\x3d\x00\x00\x00\x00\x00\xc0\xf1\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x4a\x3a\x6d\x92\xba\xbf\xc8\xaa\x5b\xe8\x35\x39\x25\x3d\x00\x00\x00\x00\x00\xa0\xf1\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x31\xd6\x45\xc3\xb8\xbf\x68\x56\x2f\x4d\x29\x7c\x13\x3d\x00\x00\x00\x00\x00\xa0\xf1\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x31\xd6\x45\xc3\xb8\xbf\x68\x56\x2f\x4d\x29\x7c\x13\x3d\x00\x00\x00\x00\x00\x80\xf1\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\xe5\x8a\xd2\xf0\xb6\xbf\xda\x73\x33\xc9\x37\x97\x26\xbd\x00\x00\x00\x00\x00\x60\xf1\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x06\x3f\x07\x1b\xb5\xbf\x57\x5e\xc6\x61\x5b\x02\x1f\x3d\x00\x00\x00\x00\x00\x60\xf1\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x06\x3f\x07\x1b\xb5\xbf\x57\x5e\xc6\x61\x5b\x02\x1f\x3d\x00\x00\x00\x00\x00\x40\xf1\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x1b\x96\xd7\x41\xb3\xbf\xdf\x13\xf9\xcc\xda\x5e\x2c\x3d\x00\x00\x00\x00\x00\x40\xf1\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x1b\x96\xd7\x41\xb3\xbf\xdf\x13\xf9\xcc\xda\x5e\x2c\x3d\x00\x00\x00\x00\x00\x20\xf1\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xa3\xee\x36\x65\xb1\xbf\x09\xa3\x8f\x76\x5e\x7c\x14\x3d\x00\x00\x00\x00\x00\x00\xf1\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x11\xc0\x30\x0a\xaf\xbf\x91\x8e\x36\x83\x9e\x59\x2d\x3d\x00\x00\x00\x00\x00\x00\xf1\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x11\xc0\x30\x0a\xaf\xbf\x91\x8e\x36\x83\x9e\x59\x2d\x3d\x00\x00\x00\x00\x00\xe0\xf0\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x19\x71\xdd\x42\xab\xbf\x4c\x70\xd6\xe5\x7a\x82\x1c\x3d\x00\x00\x00\x00\x00\xe0\xf0\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x19\x71\xdd\x42\xab\xbf\x4c\x70\xd6\xe5\x7a\x82\x1c\x3d\x00\x00\x00\x00\x00\xc0\xf0\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x32\xf6\x58\x74\xa7\xbf\xee\xa1\xf2\x34\x46\xfc\x2c\xbd\x00\x00\x00\x00\x00\xc0\xf0\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x32\xf6\x58\x74\xa7\xbf\xee\xa1\xf2\x34\x46\xfc\x2c\xbd\x00\x00\x00\x00\x00\xa0\xf0\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xfe\xb9\x87\x9e\xa3\xbf\xaa\xfe\x26\xf5\xb7\x02\xf5\x3c\x00\x00\x00\x00\x00\xa0\xf0\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xfe\xb9\x87\x9e\xa3\xbf\xaa\xfe\x26\xf5\xb7\x02\xf5\x3c\x00\x00\x00\x00\x00\x80\xf0\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x0e\x9b\x82\x9f\xbf\xe4\x09\x7e\x7c\x26\x80\x29\xbd\x00\x00\x00\x00\x00\x80\xf0\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x78\x0e\x9b\x82\x9f\xbf\xe4\x09\x7e\x7c\x26\x80\x29\xbd\x00\x00\x00\x00\x00\x60\xf0\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xd5\x07\x1b\xb9\x97\xbf\x39\xa6\xfa\x93\x54\x8d\x28\xbd\x00\x00\x00\x00\x00\x40\xf0\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xb0\xa8\xc0\x8f\xbf\x9c\xa6\xd3\xf6\x7c\x1e\xdf\xbc\x00\x00\x00\x00\x00\x40\xf0\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfc\xb0\xa8\xc0\x8f\xbf\x9c\xa6\xd3\xf6\x7c\x1e\xdf\xbc\x00\x00\x00\x00\x00\x20\xf0\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x6b\x2a\xe0\x7f\xbf\xe4\x40\xda\x0d\x3f\xe2\x19\xbd\x00\x00\x00\x00\x00\x20\xf0\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x6b\x2a\xe0\x7f\xbf\xe4\x40\xda\x0d\x3f\xe2\x19\xbd\x00\x00\x00\x00\x00\x00\xf0\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xef\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x89\x75\x15\x10\x80\x3f\xe8\x2b\x9d\x99\x6b\xc7\x10\xbd\x00\x00\x00\x00\x00\x80\xef\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x93\x58\x56\x20\x90\x3f\xd2\xf7\xe2\x06\x5b\xdc\x23\xbd\x00\x00\x00\x00\x00\x40\xef\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc9\x28\x25\x49\x98\x3f\x34\x0c\x5a\x32\xba\xa0\x2a\xbd\x00\x00\x00\x00\x00\x00\xef\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xe7\x89\x5d\x41\xa0\x3f\x53\xd7\xf1\x5c\xc0\x11\x01\x3d\x00\x00\x00\x00\x00\xc0\xee\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2e\xd4\xae\x66\xa4\x3f\x28\xfd\xbd\x75\x73\x16\x2c\xbd\x00\x00\x00\x00\x00\x80\xee\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x9f\x14\xaa\x94\xa8\x3f\x7d\x26\x5a\xd0\x95\x79\x19\xbd\x00\x00\x00\x00\x00\x40\xee\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xdd\xcd\x73\xcb\xac\x3f\x07\x28\xd8\x47\xf2\x68\x1a\xbd\x00\x00\x00\x00\x00\x20\xee\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x06\xc0\x31\xea\xae\x3f\x7b\x3b\xc9\x4f\x3e\x11\x0e\xbd\x00\x00\x00\x00\x00\xe0\xed\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x46\xd1\x3b\x97\xb1\x3f\x9b\x9e\x0d\x56\x5d\x32\x25\xbd\x00\x00\x00\x00\x00\xa0\xed\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\xd1\xa7\xf5\xbd\xb3\x3f\xd7\x4e\xdb\xa5\x5e\xc8\x2c\x3d\x00\x00\x00\x00\x00\x60\xed\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x97\x4d\x5a\xe9\xb5\x3f\x1e\x1d\x5d\x3c\x06\x69\x2c\xbd\x00\x00\x00\x00\x00\x40\xed\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\xea\x0a\xd3\x00\xb7\x3f\x32\xed\x9d\xa9\x8d\x1e\xec\x3c\x00\x00\x00\x00\x00\x00\xed\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x59\x5d\x5e\x33\xb9\x3f\xda\x47\xbd\x3a\x5c\x11\x23\x3d\x00\x00\x00\x00\x00\xc0\xec\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\xad\x8d\xc8\x6a\xbb\x3f\xe5\x68\xf7\x2b\x80\x90\x13\xbd\x00\x00\x00\x00\x00\xa0\xec\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xbc\x01\x58\x88\xbc\x3f\xd3\xac\x5a\xc6\xd1\x46\x26\x3d\x00\x00\x00\x00\x00\x60\xec\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x0a\x83\x39\xc7\xbe\x3f\xe0\x45\xe6\xaf\x68\xc0\x2d\xbd\x00\x00\x00\x00\x00\x40\xec\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\xdb\x39\x91\xe8\xbf\x3f\xfd\x0a\xa1\x4f\xd6\x34\x25\xbd\x00\x00\x00\x00\x00\x00\xec\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x27\x82\x8e\x17\xc1\x3f\xf2\x07\x2d\xce\x78\xef\x21\x3d\x00\x00\x00\x00\x00\xe0\xeb\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x23\x7e\x2b\xaa\xc1\x3f\x34\x99\x38\x44\x8e\xa7\x2c\x3d\x00\x00\x00\x00\x00\xa0\xeb\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x86\x0c\x61\xd1\xc2\x3f\xa1\xb4\x81\xcb\x6c\x9d\x03\x3d\x00\x00\x00\x00\x00\x80\xeb\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x15\xb0\xfc\x65\xc3\x3f\x89\x72\x4b\x23\xa8\x2f\xc6\x3c\x00\x00\x00\x00\x00\x40\xeb\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x33\x83\x3d\x91\xc4\x3f\x78\xb6\xfd\x54\x79\x83\x25\x3d\x00\x00\x00\x00\x00\x20\xeb\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\xa1\xe4\xe5\x27\xc5\x3f\xc7\x7d\x69\xe5\xe8\x33\x26\x3d\x00\x00\x00\x00\x00\xe0\xea\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x8c\xbe\x4e\x57\xc6\x3f\x78\x2e\x3c\x2c\x8b\xcf\x19\x3d\x00\x00\x00\x00\x00\xc0\xea\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x75\x8b\x12\xf0\xc6\x3f\xe1\x21\x9c\xe5\x8d\x11\x25\xbd\x00\x00\x00\x00\x00\xa0\xea\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x44\x85\x8d\x89\xc7\x3f\x05\x43\x91\x70\x10\x66\x1c\xbd\x00\x00\x00\x00\x00\x60\xea\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x39\xeb\xaf\xbe\xc8\x3f\xd1\x2c\xe9\xaa\x54\x3d\x07\xbd\x00\x00\x00\x00\x00\x40\xea\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf7\xdc\x5a\x5a\xc9\x3f\x6f\xff\xa0\x58\x28\xf2\x07\x3d\x00\x00\x00\x00\x00\x00\xea\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x8a\x3c\xed\x93\xca\x3f\x69\x21\x56\x50\x43\x72\x28\xbd\x00\x00\x00\x00\x00\xe0\xe9\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\x5b\x57\xd8\x31\xcb\x3f\xaa\xe1\xac\x4e\x8d\x35\x0c\xbd\x00\x00\x00\x00\x00\xc0\xe9\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x3b\x38\x87\xd0\xcb\x3f\xb6\x12\x54\x59\xc4\x4b\x2d\xbd\x00\x00\x00\x00\x00\xa0\xe9\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\xf0\xc6\xfb\x6f\xcc\x3f\xd2\x2b\x96\xc5\x72\xec\xf1\xbc\x00\x00\x00\x00\x00\x60\xe9\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xd4\xb0\x3d\xb1\xcd\x3f\x35\xb0\x15\xf7\x2a\xff\x2a\xbd\x00\x00\x00\x00\x00\x40\xe9\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\xe7\xff\x0e\x53\xce\x3f\x30\xf4\x41\x60\x27\x12\xc2\x3c\x00\x00\x00\x00\x00\x20\xe9\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\xe4\xad\xf5\xce\x3f\x11\x8e\xbb\x65\x15\x21\xca\xbc\x00\x00\x00\x00\x00\x00\xe9\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\xb3\x6c\x1c\x99\xcf\x3f\x30\xdf\x0c\xca\xec\xcb\x1b\x3d\x00\x00\x00\x00\x00\xc0\xe8\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x58\x4d\x60\x38\x71\xd0\x3f\x91\x4e\xed\x16\xdb\x9c\xf8\x3c\x00\x00\x00\x00\x00\xa0\xe8\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x61\x67\x2d\xc4\xd0\x3f\xe9\xea\x3c\x16\x8b\x18\x27\x3d\x00\x00\x00\x00\x00\x80\xe8\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\x27\x82\x8e\x17\xd1\x3f\x1c\xf0\xa5\x63\x0e\x21\x2c\xbd\x00\x00\x00\x00\x00\x60\xe8\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\xac\xcb\x5c\x6b\xd1\x3f\x81\x16\xa5\xf7\xcd\x9a\x2b\x3d\x00\x00\x00\x00\x00\x40\xe8\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x68\x5a\x63\x99\xbf\xd1\x3f\xb7\xbd\x47\x51\xed\xa6\x2c\x3d\x00\x00\x00\x00\x00\x20\xe8\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb8\x0e\x6d\x45\x14\xd2\x3f\xea\xba\x46\xba\xde\x87\x0a\x3d\x00\x00\x00\x00\x00\xe0\xe7\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xdc\x7c\xf0\xbe\xd2\x3f\xf4\x04\x50\x4a\xfa\x9c\x2a\x3d\x00\x00\x00\x00\x00\xc0\xe7\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\xd3\xe1\xf1\x14\xd3\x3f\xb8\x3c\x21\xd3\x7a\xe2\x28\xbd\x00\x00\x00\x00\x00\xa0\xe7\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\xbe\x76\x67\x6b\xd3\x3f\xc8\x77\xf1\xb0\xcd\x6e\x11\x3d\x00\x00\x00\x00\x00\x80\xe7\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x33\x77\x52\xc2\xd3\x3f\x5c\xbd\x06\xb6\x54\x3b\x18\x3d\x00\x00\x00\x00\x00\x60\xe7\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe8\xd5\x23\xb4\x19\xd4\x3f\x9d\xe0\x90\xec\x36\xe4\x08\x3d\x00\x00\x00\x00\x00\x40\xe7\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc8\x71\xc2\x8d\x71\xd4\x3f\x75\xd6\x67\x09\xce\x27\x2f\xbd\x00\x00\x00\x00\x00\x20\xe7\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x17\x9e\xe0\xc9\xd4\x3f\xa4\xd8\x0a\x1b\x89\x20\x2e\xbd\x00\x00\x00\x00\x00\x00\xe7\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x38\x07\xae\x22\xd5\x3f\x59\xc7\x64\x81\x70\xbe\x2e\x3d\x00\x00\x00\x00\x00\xe0\xe6\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd0\xc8\x53\xf7\x7b\xd5\x3f\xef\x40\x5d\xee\xed\xad\x1f\x3d\x00\x00\x00\x00\x00\xc0\xe6\x3f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x59\xdf\xbd\xd5\xd5\x3f\xdc\x65\xa4\x08\x2a\x0b\x0a\xbd\x00\x00\x00\x00\x00\x00\x00\x00\x02\x48\x28\x62\x75\x69\x6c\x64\x2f\x70\x72\x6f\x6d\x69\x73\x65\x5f\x61\x70\x69\x2e\x6a\x73\x2e\x63\x72\x6f\x73\x73\x5f\x63\x6f\x6e\x74\x72\x61\x63\x74\x5f\x63\x61\x6c\x6c\x62\x61\x63\x6b\x2a\x63\x72\x6f\x73\x73\x5f\x63\x6f\x6e\x74\x72\x61\x63\x74\x5f\x63\x61\x6c\x6c\x65\x65\x20\x74\x65\x73\x74\x5f\x70\x72\x6f\x6d\x69\x73\x65\x5f\x61\x6e\x64\x26\x74\x65\x73\x74\x5f\x70\x72\x6f\x6d\x69\x73\x65\x5f\x63\x72\x65\x61\x74\x65\x22\x74\x65\x73\x74\x5f\x70\x72\x6f\x6d\x69\x73\x65\x5f\x74\x68\x65\x6e\x1e\x73\x69\x67\x6e\x65\x72\x41\x63\x63\x6f\x75\x6e\x74\x49\x64\x28\x70\x72\x65\x64\x65\x63\x65\x73\x73\x6f\x72\x41\x63\x63\x6f\x75\x6e\x74\x49\x64\x0a\x70\x61\x6e\x69\x63\x20\x63\x75\x72\x72\x65\x6e\x74\x41\x63\x63\x6f\x75\x6e\x74\x49\x64\x16\x76\x61\x6c\x75\x65\x52\x65\x74\x75\x72\x6e\x1a\x70\x72\x6f\x6d\x69\x73\x65\x43\x72\x65\x61\x74\x65\x16\x70\x72\x6f\x6d\x69\x73\x65\x54\x68\x65\x6e\x14\x70\x72\x6f\x6d\x69\x73\x65\x41\x6e\x64\x26\x70\x72\x6f\x6d\x69\x73\x65\x52\x65\x73\x75\x6c\x74\x73\x43\x6f\x75\x6e\x74\x1a\x50\x72\x6f\x6d\x69\x73\x65\x52\x65\x73\x75\x6c\x74\x1a\x70\x72\x6f\x6d\x69\x73\x65\x52\x65\x73\x75\x6c\x74\x1c\x75\x38\x41\x72\x72\x61\x79\x54\x6f\x42\x79\x74\x65\x73\x0a\x62\x79\x74\x65\x73\x24\x63\x68\x65\x63\x6b\x53\x74\x72\x69\x6e\x67\x49\x73\x42\x79\x74\x65\x73\x0c\x61\x72\x72\x61\x79\x4e\x16\x63\x61\x6c\x6c\x69\x6e\x67\x44\x61\x74\x61\x06\x65\x6e\x76\x22\x73\x69\x67\x6e\x65\x72\x5f\x61\x63\x63\x6f\x75\x6e\x74\x5f\x69\x64\x1a\x72\x65\x61\x64\x5f\x72\x65\x67\x69\x73\x74\x65\x72\x2c\x70\x72\x65\x64\x65\x63\x65\x73\x73\x6f\x72\x5f\x61\x63\x63\x6f\x75\x6e\x74\x5f\x69\x64\x06\x6d\x73\x67\x24\x63\x75\x72\x72\x65\x6e\x74\x5f\x61\x63\x63\x6f\x75\x6e\x74\x5f\x69\x64\x18\x76\x61\x6c\x75\x65\x5f\x72\x65\x74\x75\x72\x6e\x12\x61\x63\x63\x6f\x75\x6e\x74\x49\x64\x14\x6d\x65\x74\x68\x6f\x64\x4e\x61\x6d\x65\x08\x61\x72\x67\x73\x0c\x61\x6d\x6f\x75\x6e\x74\x06\x67\x61\x73\x1c\x70\x72\x6f\x6d\x69\x73\x65\x5f\x63\x72\x65\x61\x74\x65\x18\x70\x72\x6f\x6d\x69\x73\x65\x49\x6e\x64\x65\x78\x18\x70\x72\x6f\x6d\x69\x73\x65\x5f\x74\x68\x65\x6e\x16\x70\x72\x6f\x6d\x69\x73\x65\x5f\x61\x6e\x64\x2a\x70\x72\x6f\x6d\x69\x73\x65\x5f\x72\x65\x73\x75\x6c\x74\x73\x5f\x63\x6f\x75\x6e\x74\x10\x4e\x6f\x74\x52\x65\x61\x64\x79\x14\x53\x75\x63\x63\x65\x73\x73\x66\x75\x6c\x0c\x46\x61\x69\x6c\x65\x64\x12\x72\x65\x73\x75\x6c\x74\x49\x64\x78\x1c\x70\x72\x6f\x6d\x69\x73\x65\x5f\x72\x65\x73\x75\x6c\x74\x2e\x55\x6e\x65\x78\x70\x65\x63\x74\x65\x64\x20\x72\x65\x74\x75\x72\x6e\x20\x63\x6f\x64\x65\x2e\x0a\x61\x72\x72\x61\x79\x06\x72\x65\x74\x02\x65\x18\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65\x18\x73\x74\x72\x4f\x72\x55\x38\x41\x72\x72\x61\x79\x48\x62\x79\x74\x65\x73\x3a\x20\x65\x78\x70\x65\x63\x74\x65\x64\x20\x73\x74\x72\x69\x6e\x67\x20\x6f\x72\x20\x55\x69\x6e\x74\x38\x41\x72\x72\x61\x79\x06\x73\x74\x72\x02\x69\x14\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74\x0e\x73\x74\x72\x69\x6e\x67\x20\x14\x20\x61\x74\x20\x69\x6e\x64\x65\x78\x20\x04\x3a\x20\x28\x20\x69\x73\x20\x6e\x6f\x74\x20\x61\x20\x76\x61\x6c\x69\x64\x20\x62\x79\x74\x65\x02\x6e\x08\x6b\x65\x79\x73\x12\x73\x74\x72\x69\x6e\x67\x69\x66\x79\x06\x6d\x61\x70\x1c\x70\x72\x6f\x6d\x69\x73\x65\x52\x65\x73\x75\x6c\x74\x73\x32\x63\x61\x6c\x6c\x65\x65\x2d\x63\x6f\x6e\x74\x72\x61\x63\x74\x2e\x74\x65\x73\x74\x2e\x6e\x65\x61\x72\x06\x61\x62\x63\x06\x70\x6f\x77\x12\x70\x72\x6f\x6d\x69\x73\x65\x49\x64\x32\x63\x61\x6c\x6c\x65\x72\x2d\x63\x6f\x6e\x74\x72\x61\x63\x74\x2e\x74\x65\x73\x74\x2e\x6e\x65\x61\x72\x06\x64\x65\x66\x14\x70\x72\x6f\x6d\x69\x73\x65\x49\x64\x32\x18\x70\x72\x6f\x6d\x69\x73\x65\x49\x64\x41\x6e\x64\x06\x67\x68\x69\x0f\xbc\x03\x00\x05\x00\x12\xbe\x03\x00\x11\xc0\x03\x00\x15\xc2\x03\x00\x13\xc4\x03\x00\x14\xc6\x03\x00\x00\x0e\x00\x06\x01\xa0\x01\x00\x00\x00\x03\x16\x16\x74\x00\xc8\x03\x00\x01\xca\x03\x01\x01\xcc\x03\x02\x01\xce\x03\x03\x01\xb0\x01\x04\x01\xd0\x03\x05\x01\xd2\x03\x06\x01\xd4\x03\x07\x01\xd6\x03\x08\x01\xd8\x03\x09\x01\xda\x03\x0a\x01\xdc\x03\x0b\x01\xde\x03\x0c\x01\xe0\x03\x0d\x01\xe2\x03\x0e\x01\xe4\x03\x0f\x01\xe6\x03\x10\x01\xc0\x03\x11\x01\xbe\x03\x12\x01\xc4\x03\x13\x01\xc6\x03\x14\x01\xc2\x03\x15\x01\x08\xea\x63\xc0\x00\xe1\xc0\x01\xe2\xc0\x02\xe3\xc0\x03\xe4\xc0\x04\x5f\x04\x00\xc0\x05\x5f\x05\x00\xc0\x06\x5f\x06\x00\xc0\x07\x5f\x07\x00\xc0\x08\x5f\x08\x00\xc0\x09\x5f\x09\x00\xc0\x0b\x5f\x0b\x00\xc0\x0c\x5f\x0c\x00\xc0\x0d\x5f\x0d\x00\xc0\x0e\x5f\x0e\x00\xc0\x0f\x5f\x0f\x00\xc0\x10\x5f\x10\x00\xc0\x11\x5f\x11\x00\xc0\x12\x5f\x12\x00\xc0\x13\x5f\x13\x00\xc0\x14\x5f\x14\x00\xc0\x15\x5f\x15\x00\x29\xc0\x0a\x5e\x0a\x00\x11\xeb\x06\x0e\x0b\x60\x0a\x00\xef\x29\xbc\x03\x01\x08\x01\x00\x65\x5c\x00\x0e\x9c\x01\x0e\x43\x06\x01\xc8\x03\x00\x00\x00\x03\x00\x00\x1d\x00\x38\xf4\x00\x00\x00\x42\xf5\x00\x00\x00\xb5\x24\x01\x00\x0e\x38\xf4\x00\x00\x00\x42\xf6\x00\x00\x00\xb5\x25\x01\x00\xbc\x03\x01\x02\x03\x4e\x0e\x43\x06\x01\xca\x03\x00\x00\x00\x03\x00\x00\x1d\x00\x38\xf4\x00\x00\x00\x42\xf7\x00\x00\x00\xb5\x24\x01\x00\x0e\x38\xf4\x00\x00\x00\x42\xf6\x00\x00\x00\xb5\x25\x01\x00\xbc\x03\x05\x02\x03\x4e\x0e\x43\x06\x01\xcc\x03\x01\x00\x01\x03\x00\x00\x28\x01\xf0\x03\x00\x01\x00\xd1\x38\x45\x00\x00\x00\xac\xea\x11\x38\xf4\x00\x00\x00\x42\xe6\x00\x00\x00\xd1\x24\x01\x00\x0e\x29\x38\xf4\x00\x00\x00\x42\xe6\x00\x00\x00\x24\x00\x00\x0e\x29\xbc\x03\x09\x05\x03\x30\x4e\x08\x4a\x0e\x43\x06\x01\xce\x03\x00\x00\x00\x03\x00\x00\x1d\x00\x38\xf4\x00\x00\x00\x42\xf9\x00\x00\x00\xb5\x24\x01\x00\x0e\x38\xf4\x00\x00\x00\x42\xf6\x00\x00\x00\xb5\x25\x01\x00\xbc\x03\x11\x02\x03\x4e\x0e\x43\x06\x01\xb0\x01\x00\x00\x00\x03\x00\x00\x1d\x00\x38\xf4\x00\x00\x00\x42\x58\x00\x00\x00\xb5\x24\x01\x00\x0e\x38\xf4\x00\x00\x00\x42\xf6\x00\x00\x00\xb5\x25\x01\x00\xbc\x03\x15\x02\x03\x4e\x0e\x43\x06\x01\xd0\x03\x01\x00\x01\x03\x00\x00\x0f\x01\x80\x01\x00\x01\x00\x38\xf4\x00\x00\x00\x42\xfa\x00\x00\x00\xd1\x24\x01\x00\x29\xbc\x03\x19\x02\x03\x49\x0e\x43\x06\x01\xd2\x03\x05\x00\x05\x07\x00\x00\x14\x05\xf6\x03\x00\x01\x00\xf8\x03\x00\x01\x00\xfa\x03\x00\x01\x00\xfc\x03\x00\x01\x00\xfe\x03\x00\x01\x00\x38\xf4\x00\x00\x00\x42\x00\x01\x00\x00\xd1\xd2\xd3\xd4\x5b\x04\x00\x25\x05\x00\xbc\x03\x1c\x01\x03\x0e\x43\x06\x01\xd4\x03\x06\x00\x06\x08\x00\x00\x17\x06\x82\x04\x00\x01\x00\xf6\x03\x00\x01\x00\xf8\x03\x00\x01\x00\xfa\x03\x00\x01\x00\xfc\x03\x00\x01\x00\xfe\x03\x00\x01\x00\x38\xf4\x00\x00\x00\x42\x02\x01\x00\x00\xd1\xd2\xd3\xd4\x5b\x04\x00\x5b\x05\x00\x25\x06\x00\xbc\x03\x1f\x01\x03\x0e\x41\x06\x01\xd6\x03\x01\x00\x00\x05\x00\x00\x1a\x01\x82\x04\x00\x01\x00\x0d\x00\x00\xd5\x38\xf4\x00\x00\x00\x42\x03\x01\x00\x00\x26\x00\x00\xb5\xd1\x52\x0e\x18\x27\x00\x00\x28\xbc\x03\x22\x01\x17\x0e\x43\x06\x01\xd8\x03\x00\x00\x00\x02\x00\x00\x0d\x00\x38\xf4\x00\x00\x00\x42\x04\x01\x00\x00\x25\x00\x00\xbc\x03\x25\x01\x03\x0e\x43\x06\x01\x00\x01\x00\x01\x05\x00\x00\x34\x01\xda\x03\x00\x01\x00\xd1\xd1\x04\x05\x01\x00\x00\x71\xb5\x16\x49\x04\x05\x01\x00\x00\x49\xd1\xd1\x04\x06\x01\x00\x00\x71\xb6\x16\x49\x04\x06\x01\x00\x00\x49\xd1\xd1\x04\x07\x01\x00\x00\x71\xb7\x16\x49\x04\x07\x01\x00\x00\x49\x29\xbc\x03\x2a\x04\x03\x58\x58\x58\x0e\x43\x06\x01\xdc\x03\x01\x01\x01\x04\x02\x00\x54\x02\x90\x04\x00\x01\x00\x90\x02\x01\x00\x20\xda\x03\x0a\x00\xcc\x03\x02\x00\x61\x00\x00\x38\xf4\x00\x00\x00\x42\x09\x01\x00\x00\xd1\xb5\x24\x02\x00\xc9\x62\x00\x00\xdd\x41\x06\x01\x00\x00\xa9\xea\x0f\x38\xf4\x00\x00\x00\x42\xf6\x00\x00\x00\xb5\x25\x01\x00\x62\x00\x00\xdd\x41\x07\x01\x00\x00\xa9\x11\xeb\x0c\x0e\x62\x00\x00\xdd\x41\x05\x01\x00\x00\xa9\xea\x05\x62\x00\x00\x28\xde\x04\x0a\x01\x00\x00\xef\x0e\x29\xbc\x03\x30\x08\x12\x54\x3f\x49\x85\x12\x08\x2c\x0e\x43\x06\x01\xde\x03\x01\x02\x01\x07\x00\x00\x30\x03\x96\x04\x00\x01\x00\x98\x04\x01\x00\x20\x9a\x04\x02\x01\x20\x61\x00\x00\xc1\xc9\x61\x01\x00\xd1\x7d\xec\x1b\xca\x62\x00\x00\x38\x96\x00\x00\x00\x42\x0e\x01\x00\x00\x62\x01\x00\x24\x01\x00\x9d\x11\x63\x00\x00\x0e\x80\x00\xea\xe3\x0e\x83\x62\x00\x00\x28\xbc\x03\x3c\x05\x12\x0e\x2b\x80\x22\x0e\x43\x06\x01\xe0\x03\x01\x00\x01\x03\x02\x00\x2c\x01\x9e\x04\x00\x01\x00\xe2\x03\x0e\x00\xde\x03\x0c\x00\xd1\x97\x04\x48\x00\x00\x00\xa9\xea\x06\xdd\xd1\x23\x01\x00\xd1\x38\xa5\x00\x00\x00\xa7\xea\x06\xde\xd1\x23\x01\x00\x38\x94\x00\x00\x00\x11\x04\x10\x01\x00\x00\x21\x01\x00\x2f\xbc\x03\x45\x05\x03\x35\x1c\x30\x1e\x0e\x43\x06\x01\xe2\x03\x01\x01\x01\x0a\x00\x00\x5a\x02\xa2\x04\x00\x01\x00\xa4\x04\x02\x00\x20\x61\x00\x00\xb5\xc9\x62\x00\x00\xd1\xe9\xa3\xea\x4c\xd1\x42\x13\x01\x00\x00\x62\x00\x00\x24\x01\x00\xbe\xff\x00\xa5\xea\x30\x38\x94\x00\x00\x00\x11\x04\x14\x01\x00\x00\x42\x5c\x00\x00\x00\xd1\x04\x15\x01\x00\x00\x62\x00\x00\x04\x16\x01\x00\x00\xd1\x62\x00\x00\x47\x04\x17\x01\x00\x00\x24\x06\x00\x21\x01\x00\x2f\x62\x00\x00\x91\x63\x00\x00\x0e\xec\xae\xd1\x28\xbc\x03\x4f\x06\x03\x44\x5d\xe9\x08\x36\x0e\x43\x06\x01\xe4\x03\x01\x00\x01\x05\x00\x00\x1c\x01\xb0\x04\x00\x01\x00\x26\x00\x00\xb5\x38\x93\x00\x00\x00\x38\x95\x00\x00\x00\xd1\xef\xef\x42\x19\x01\x00\x00\x24\x00\x00\x52\x0e\x28\xbc\x03\x59\x01\x03\x0e\x43\x06\x01\xe6\x03\x00\x00\x00\x02\x04\x00\x1e\x00\xce\x03\x03\x00\xc8\x03\x00\x00\xca\x03\x01\x00\xb0\x01\x04\x00\x0b\xdd\xee\x4c\xe7\x00\x00\x00\xde\xee\x4c\xe4\x00\x00\x00\xdf\xee\x4c\xe5\x00\x00\x00\xe0\xee\x4c\x58\x00\x00\x00\x28\xbc\x03\x5d\x06\x03\x08\x26\x26\x26\x26\x0e\x43\x06\x01\xc0\x03\x00\x00\x00\x05\x03\x00\x14\x00\xd0\x03\x05\x00\xe0\x03\x0d\x00\xe6\x03\x10\x00\xdd\xde\x38\x9b\x00\x00\x00\x42\x1a\x01\x00\x00\xdf\xee\x24\x01\x00\xef\xef\x29\xbc\x03\x66\x02\x03\x62\x0e\x43\x06\x01\xbe\x03\x00\x00\x00\x08\x06\x01\x31\x00\xdc\x03\x0b\x00\xd0\x03\x05\x00\xe0\x03\x0d\x00\xe6\x03\x10\x00\xe4\x03\x0f\x00\xd8\x03\x09\x00\xde\xdf\x38\x9b\x00\x00\x00\x42\x1a\x01\x00\x00\x0b\xe0\xee\x07\x53\x06\x0e\x0e\x5e\x04\x00\x5e\x05\x00\xee\xef\x42\x1b\x01\x00\x00\xc0\x00\x24\x01\x00\x4c\x1c\x01\x00\x00\x24\x01\x00\xef\xef\x29\xbc\x03\x69\x04\x03\x67\x76\x1c\x0e\x42\x06\x01\x00\x01\x00\x01\x02\x01\x00\x05\x01\xa4\x04\x00\x01\x00\xdc\x03\x00\x00\xdd\xd1\x23\x01\x00\xbc\x03\x6b\x00\x0e\x43\x06\x01\xc4\x03\x00\x00\x00\x0a\x02\x00\x2a\x00\xd2\x03\x06\x00\xe0\x03\x0d\x00\xdd\x04\x1d\x01\x00\x00\x04\xe0\x00\x00\x00\xde\x04\x1e\x01\x00\x00\xef\xb5\xb7\x38\x9a\x00\x00\x00\x42\x1f\x01\x00\x00\xbd\x0a\xbd\x0d\x24\x02\x00\x9a\x22\x05\x00\x29\xbc\x03\x6e\x02\x03\xd0\x0e\x43\x06\x01\xc6\x03\x00\x01\x00\x0b\x03\x00\x5a\x01\xc0\x04\x01\x00\x20\xd2\x03\x06\x00\xe0\x03\x0d\x00\xd4\x03\x07\x00\x61\x00\x00\xdd\x04\x1d\x01\x00\x00\x04\xe0\x00\x00\x00\xde\x04\x1e\x01\x00\x00\xef\xb5\xb7\x38\x9a\x00\x00\x00\x42\x1f\x01\x00\x00\xbd\x0a\xbd\x0d\x24\x02\x00\x9a\x22\x05\x00\xc9\xdf\x62\x00\x00\x04\x21\x01\x00\x00\x04\xdf\x00\x00\x00\xde\x04\x22\x01\x00\x00\xef\xb5\xb7\x38\x9a\x00\x00\x00\x42\x1f\x01\x00\x00\xbd\x0a\xbd\x0d\x24\x02\x00\x9a\x22\x06\x00\x29\xbc\x03\x71\x03\x12\xd5\xdf\x0e\x43\x06\x01\xc2\x03\x00\x03\x00\x0b\x04\x00\x93\x01\x03\xc0\x04\x01\x00\x20\xc6\x04\x01\x01\x20\xc8\x04\x01\x02\x20\xd2\x03\x06\x00\xe0\x03\x0d\x00\xd6\x03\x08\x00\xd4\x03\x07\x00\x61\x02\x00\x61\x01\x00\x61\x00\x00\xdd\x04\x1d\x01\x00\x00\x04\xe0\x00\x00\x00\xde\x04\x1e\x01\x00\x00\xef\xb5\xb7\x38\x9a\x00\x00\x00\x42\x1f\x01\x00\x00\xbd\x0a\xbd\x0d\x24\x02\x00\x9a\x22\x05\x00\xc9\xdd\x04\x1d\x01\x00\x00\x04\xe0\x00\x00\x00\xde\x04\x22\x01\x00\x00\xef\xb5\xb7\x38\x9a\x00\x00\x00\x42\x1f\x01\x00\x00\xbd\x0a\xbd\x0d\x24\x02\x00\x9a\x22\x05\x00\xca\xdf\x62\x00\x00\x62\x01\x00\xf0\xcb\xe0\x62\x02\x00\x04\x21\x01\x00\x00\x04\xdf\x00\x00\x00\xde\x04\x25\x01\x00\x00\xef\xb5\xb8\x38\x9a\x00\x00\x00\x42\x1f\x01\x00\x00\xbd\x0a\xbd\x0d\x24\x02\x00\x9a\x22\x06\x00\x29\xbc\x03\x75\x05\x30\xd5\xd5\x30\xdf\x74\x65\x73\x74\x5f\x70\x72\x6f\x6d\x69\x73\x65\x5f\x74\x68\x65\x6e\x00\x72\x65\x61\x64\x5f\x72\x65\x67\x69\x73\x74\x65\x72\x00\x72\x65\x67\x69\x73\x74\x65\x72\x5f\x6c\x65\x6e\x00\x77\x72\x69\x74\x65\x5f\x72\x65\x67\x69\x73\x74\x65\x72\x00\x63\x75\x72\x72\x65\x6e\x74\x5f\x61\x63\x63\x6f\x75\x6e\x74\x5f\x69\x64\x00\x73\x69\x67\x6e\x65\x72\x5f\x61\x63\x63\x6f\x75\x6e\x74\x5f\x69\x64\x00\x73\x69\x67\x6e\x65\x72\x5f\x61\x63\x63\x6f\x75\x6e\x74\x5f\x70\x6b\x00\x70\x72\x65\x64\x65\x63\x65\x73\x73\x6f\x72\x5f\x61\x63\x63\x6f\x75\x6e\x74\x5f\x69\x64\x00\x69\x6e\x70\x75\x74\x00\x62\x6c\x6f\x63\x6b\x5f\x69\x6e\x64\x65\x78\x00\x62\x6c\x6f\x63\x6b\x5f\x74\x69\x6d\x65\x73\x74\x61\x6d\x70\x00\x65\x70\x6f\x63\x68\x5f\x68\x65\x69\x67\x68\x74\x00\x73\x74\x6f\x72\x61\x67\x65\x5f\x75\x73\x61\x67\x65\x00\x61\x63\x63\x6f\x75\x6e\x74\x5f\x62\x61\x6c\x61\x6e\x63\x65\x00\x61\x63\x63\x6f\x75\x6e\x74\x5f\x6c\x6f\x63\x6b\x65\x64\x5f\x62\x61\x6c\x61\x6e\x63\x65\x00\x61\x74\x74\x61\x63\x68\x65\x64\x5f\x64\x65\x70\x6f\x73\x69\x74\x00\x70\x72\x65\x70\x61\x69\x64\x5f\x67\x61\x73\x00\x75\x73\x65\x64\x5f\x67\x61\x73\x00\x72\x61\x6e\x64\x6f\x6d\x5f\x73\x65\x65\x64\x00\x73\x68\x61\x32\x35\x36\x00\x6b\x65\x63\x63\x61\x6b\x32\x35\x36\x00\x6b\x65\x63\x63\x61\x6b\x35\x31\x32\x00\x72\x69\x70\x65\x6d\x64\x31\x36\x30\x00\x65\x63\x72\x65\x63\x6f\x76\x65\x72\x00\x76\x61\x6c\x75\x65\x5f\x72\x65\x74\x75\x72\x6e\x00\x70\x61\x6e\x69\x63\x00\x70\x61\x6e\x69\x63\x5f\x75\x74\x66\x38\x00\x6c\x6f\x67\x5f\x75\x74\x66\x38\x00\x6c\x6f\x67\x5f\x75\x74\x66\x31\x36\x00\x70\x72\x6f\x6d\x69\x73\x65\x5f\x63\x72\x65\x61\x74\x65\x00\x70\x72\x6f\x6d\x69\x73\x65\x5f\x74\x68\x65\x6e\x00\x70\x72\x6f\x6d\x69\x73\x65\x5f\x61\x6e\x64\x00\x70\x72\x6f\x6d\x69\x73\x65\x5f\x62\x61\x74\x63\x68\x5f\x63\x72\x65\x61\x74\x65\x00\x70\x72\x6f\x6d\x69\x73\x65\x5f\x62\x61\x74\x63\x68\x5f\x74\x68\x65\x6e\x00\x70\x72\x6f\x6d\x69\x73\x65\x5f\x62\x61\x74\x63\x68\x5f\x61\x63\x74\x69\x6f\x6e\x5f\x63\x72\x65\x61\x74\x65\x5f\x61\x63\x63\x6f\x75\x6e\x74\x00\x70\x72\x6f\x6d\x69\x73\x65\x5f\x62\x61\x74\x63\x68\x5f\x61\x63\x74\x69\x6f\x6e\x5f\x64\x65\x70\x6c\x6f\x79\x5f\x63\x6f\x6e\x74\x72\x61\x63\x74\x00\x70\x72\x6f\x6d\x69\x73\x65\x5f\x62\x61\x74\x63\x68\x5f\x61\x63\x74\x69\x6f\x6e\x5f\x66\x75\x6e\x63\x74\x69\x6f\x6e\x5f\x63\x61\x6c\x6c\x00\x70\x72\x6f\x6d\x69\x73\x65\x5f\x62\x61\x74\x63\x68\x5f\x61\x63\x74\x69\x6f\x6e\x5f\x74\x72\x61\x6e\x73\x66\x65\x72\x00\x70\x72\x6f\x6d\x69\x73\x65\x5f\x62\x61\x74\x63\x68\x5f\x61\x63\x74\x69\x6f\x6e\x5f\x73\x74\x61\x6b\x65\x00\x70\x72\x6f\x6d\x69\x73\x65\x5f\x62\x61\x74\x63\x68\x5f\x61\x63\x74\x69\x6f\x6e\x5f\x61\x64\x64\x5f\x6b\x65\x79\x5f\x77\x69\x74\x68\x5f\x66\x75\x6c\x6c\x5f\x61\x63\x63\x65\x73\x73\x00\x70\x72\x6f\x6d\x69\x73\x65\x5f\x62\x61\x74\x63\x68\x5f\x61\x63\x74\x69\x6f\x6e\x5f\x61\x64\x64\x5f\x6b\x65\x79\x5f\x77\x69\x74\x68\x5f\x66\x75\x6e\x63\x74\x69\x6f\x6e\x5f\x63\x61\x6c\x6c\x00\x70\x72\x6f\x6d\x69\x73\x65\x5f\x62\x61\x74\x63\x68\x5f\x61\x63\x74\x69\x6f\x6e\x5f\x64\x65\x6c\x65\x74\x65\x5f\x6b\x65\x79\x00\x70\x72\x6f\x6d\x69\x73\x65\x5f\x62\x61\x74\x63\x68\x5f\x61\x63\x74\x69\x6f\x6e\x5f\x64\x65\x6c\x65\x74\x65\x5f\x61\x63\x63\x6f\x75\x6e\x74\x00\x70\x72\x6f\x6d\x69\x73\x65\x5f\x72\x65\x73\x75\x6c\x74\x73\x5f\x63\x6f\x75\x6e\x74\x00\x70\x72\x6f\x6d\x69\x73\x65\x5f\x72\x65\x73\x75\x6c\x74\x00\x70\x72\x6f\x6d\x69\x73\x65\x5f\x72\x65\x74\x75\x72\x6e\x00\x73\x74\x6f\x72\x61\x67\x65\x5f\x77\x72\x69\x74\x65\x00\x73\x74\x6f\x72\x61\x67\x65\x5f\x72\x65\x61\x64\x00\x73\x74\x6f\x72\x61\x67\x65\x5f\x72\x65\x6d\x6f\x76\x65\x00\x73\x74\x6f\x72\x61\x67\x65\x5f\x68\x61\x73\x5f\x6b\x65\x79\x00\x76\x61\x6c\x69\x64\x61\x74\x6f\x72\x5f\x73\x74\x61\x6b\x65\x00\x76\x61\x6c\x69\x64\x61\x74\x6f\x72\x5f\x74\x6f\x74\x61\x6c\x5f\x73\x74\x61\x6b\x65\x00\x65\x6e\x76\x00\x45\x78\x70\x65\x63\x74\x20\x55\x69\x6e\x74\x36\x34\x20\x66\x6f\x72\x20\x72\x65\x67\x69\x73\x74\x65\x72\x5f\x69\x64\x00\x45\x78\x70\x65\x63\x74\x20\x55\x69\x6e\x74\x36\x34\x20\x66\x6f\x72\x20\x70\x72\x6f\x6d\x69\x73\x65\x5f\x69\x64\x78\x00\x45\x78\x70\x65\x63\x74\x20\x55\x69\x6e\x74\x36\x34\x20\x66\x6f\x72\x20\x72\x65\x73\x75\x6c\x74\x5f\x69\x64\x78\x00\x45\x78\x70\x65\x63\x74\x20\x55\x69\x6e\x74\x36\x34\x20\x66\x6f\x72\x20\x70\x72\x6f\x6d\x69\x73\x65\x5f\x69\x6e\x64\x65\x78\x00\x45\x78\x70\x65\x63\x74\x20\x55\x69\x6e\x74\x36\x34\x20\x66\x6f\x72\x20\x6e\x6f\x6e\x63\x65\x00\x45\x78\x70\x65\x63\x74\x20\x55\x69\x6e\x74\x31\x32\x38\x20\x66\x6f\x72\x20\x61\x6c\x6c\x6f\x77\x61\x6e\x63\x65\x00\x45\x78\x70\x65\x63\x74\x20\x55\x69\x6e\x74\x31\x32\x38\x20\x66\x6f\x72\x20\x61\x6d\x6f\x75\x6e\x74\x00\x45\x78\x70\x65\x63\x74\x20\x55\x69\x6e\x74\x36\x34\x20\x66\x6f\x72\x20\x67\x61\x73\x00\x45\x78\x70\x65\x63\x74\x20\x55\x69\x6e\x74\x36\x34\x20\x66\x6f\x72\x20\x70\x72\x6f\x6d\x69\x73\x65\x5f\x69\x64\x00\x45\x78\x70\x65\x63\x74\x20\x55\x69\x6e\x74\x36\x34\x20\x66\x6f\x72\x20\x6d\x61\x6c\x6c\x65\x61\x62\x69\x6c\x69\x74\x79\x5f\x66\x6c\x61\x67\x00\x45\x78\x70\x65\x63\x74\x20\x55\x69\x6e\x74\x36\x34\x20\x66\x6f\x72\x20\x76\x00\x74\x65\x73\x74\x5f\x70\x72\x6f\x6d\x69\x73\x65\x5f\x63\x72\x65\x61\x74\x65\x00\x74\x65\x73\x74\x5f\x70\x72\x6f\x6d\x69\x73\x65\x5f\x61\x6e\x64\x00\x63\x72\x6f\x73\x73\x5f\x63\x6f\x6e\x74\x72\x61\x63\x74\x5f\x63\x61\x6c\x6c\x65\x65\x00\x63\x72\x6f\x73\x73\x5f\x63\x6f\x6e\x74\x72\x61\x63\x74\x5f\x63\x61\x6c\x6c\x62\x61\x63\x6b\x00\x70\x2d\x3e\x72\x65\x66\x5f\x63\x6f\x75\x6e\x74\x20\x3d\x3d\x20\x30\x00\x6e\x6f\x64\x65\x5f\x6d\x6f\x64\x75\x6c\x65\x73\x2f\x6e\x65\x61\x72\x2d\x73\x64\x6b\x2d\x6a\x73\x2f\x71\x75\x69\x63\x6b\x6a\x73\x2f\x71\x75\x69\x63\x6b\x6a\x73\x2e\x63\x00\x66\x72\x65\x65\x5f\x7a\x65\x72\x6f\x5f\x72\x65\x66\x63\x6f\x75\x6e\x74\x00\x5f\x5f\x4a\x53\x5f\x46\x72\x65\x65\x56\x61\x6c\x75\x65\x3a\x20\x75\x6e\x6b\x6e\x6f\x77\x6e\x20\x74\x61\x67\x3d\x25\x64\x0a\x00\x73\x2d\x3e\x69\x73\x5f\x77\x65\x61\x6b\x00\x72\x65\x73\x65\x74\x5f\x77\x65\x61\x6b\x5f\x72\x65\x66\x00\x21\x6d\x72\x2d\x3e\x65\x6d\x70\x74\x79\x00\x63\x74\x78\x2d\x3e\x68\x65\x61\x64\x65\x72\x2e\x72\x65\x66\x5f\x63\x6f\x75\x6e\x74\x20\x3d\x3d\x20\x30\x00\x4a\x53\x5f\x46\x72\x65\x65\x43\x6f\x6e\x74\x65\x78\x74\x00\x76\x61\x72\x5f\x72\x65\x66\x2d\x3e\x68\x65\x61\x64\x65\x72\x2e\x72\x65\x66\x5f\x63\x6f\x75\x6e\x74\x20\x3e\x20\x30\x00\x66\x72\x65\x65\x5f\x76\x61\x72\x5f\x72\x65\x66\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x05\x00\x01\x14\x05\x00\x01\x15\x05\x00\x01\x15\x05\x00\x01\x17\x05\x00\x01\x17\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x02\x00\x01\x05\x03\x00\x01\x0a\x01\x01\x00\x00\x01\x02\x01\x00\x01\x03\x02\x00\x01\x01\x02\x00\x01\x02\x03\x00\x01\x02\x04\x00\x01\x03\x06\x00\x01\x02\x03\x00\x01\x03\x04\x00\x01\x04\x05\x00\x01\x03\x03\x00\x01\x04\x04\x00\x01\x05\x05\x00\x01\x02\x02\x00\x01\x04\x04\x00\x01\x03\x03\x00\x01\x03\x03\x00\x01\x04\x04\x00\x01\x05\x05\x00\x03\x02\x01\x0d\x03\x01\x01\x0d\x03\x01\x00\x0d\x03\x02\x01\x0d\x03\x02\x00\x0d\x03\x00\x01\x0d\x03\x03\x01\x0a\x01\x01\x00\x00\x01\x00\x00\x00\x01\x01\x02\x00\x01\x00\x00\x00\x01\x02\x02\x00\x01\x02\x00\x00\x01\x01\x00\x00\x01\x01\x00\x00\x06\x00\x00\x18\x05\x01\x01\x0f\x03\x02\x01\x0a\x01\x02\x01\x00\x01\x01\x01\x00\x01\x01\x01\x00\x05\x00\x01\x17\x05\x00\x01\x17\x05\x00\x01\x17\x05\x01\x00\x17\x05\x01\x00\x17\x05\x02\x00\x17\x01\x02\x03\x00\x01\x03\x00\x00\x06\x00\x00\x18\x06\x00\x00\x18\x06\x01\x00\x18\x05\x01\x01\x17\x05\x01\x02\x17\x05\x02\x00\x17\x01\x02\x01\x00\x01\x03\x00\x00\x01\x03\x01\x00\x01\x02\x01\x00\x01\x02\x02\x00\x01\x03\x00\x00\x01\x03\x01\x00\x01\x04\x00\x00\x05\x02\x01\x17\x05\x01\x01\x17\x01\x02\x02\x00\x01\x02\x01\x00\x01\x02\x02\x00\x01\x03\x02\x00\x01\x03\x02\x00\x02\x03\x03\x05\x06\x02\x01\x18\x02\x03\x01\x05\x06\x02\x02\x18\x06\x03\x03\x18\x03\x00\x01\x10\x03\x01\x00\x10\x03\x01\x01\x10\x03\x00\x01\x11\x03\x01\x00\x11\x03\x01\x01\x11\x03\x00\x01\x12\x03\x01\x00\x12\x03\x01\x01\x12\x03\x00\x00\x10\x03\x00\x01\x10\x03\x01\x00\x10\x03\x01\x00\x10\x03\x00\x01\x12\x03\x01\x00\x12\x03\x01\x00\x12\x03\x00\x00\x10\x05\x01\x00\x16\x05\x01\x00\x16\x05\x00\x00\x16\x05\x00\x01\x16\x05\x00\x00\x16\x01\x01\x00\x00\x01\x01\x01\x00\x01\x01\x01\x00\x01\x02\x02\x00\x0a\x01\x00\x1a\x0a\x02\x01\x1a\x0a\x01\x00\x1a\x0a\x01\x00\x1a\x0a\x01\x00\x1a\x0a\x01\x00\x1a\x07\x00\x02\x19\x07\x00\x02\x19\x07\x00\x02\x19\x05\x00\x02\x17\x01\x01\x01\x00\x01\x01\x03\x00\x01\x01\x03\x00\x01\x01\x03\x00\x02\x03\x05\x05\x01\x01\x01\x00\x01\x01\x02\x00\x01\x03\x00\x00\x01\x04\x04\x00\x01\x04\x04\x00\x02\x04\x05\x05\x01\x00\x00\x00\x01\x01\x02\x00\x01\x01\x02\x00\x01\x01\x02\x00\x01\x01\x01\x00\x01\x01\x01\x00\x01\x01\x01\x00\x01\x01\x01\x00\x01\x01\x01\x00\x01\x01\x02\x00\x01\x01\x02\x00\x02\x00\x00\x07\x02\x00\x00\x07\x02\x01\x00\x07\x01\x01\x01\x00\x01\x01\x01\x00\x01\x01\x01\x00\x01\x02\x01\x00\x05\x00\x01\x17\x01\x02\x01\x00\x01\x02\x01\x00\x01\x02\x01\x00\x01\x02\x01\x00\x01\x02\x01\x00\x01\x02\x01\x00\x01\x02\x01\x00\x01\x02\x01\x00\x01\x02\x01\x00\x01\x02\x01\x00\x01\x02\x01\x00\x01\x02\x01\x00\x01\x02\x01\x00\x01\x02\x01\x00\x01\x02\x01\x00\x01\x02\x01\x00\x01\x02\x01\x00\x01\x02\x01\x00\x01\x02\x01\x00\x01\x02\x01\x00\x01\x02\x01\x00\x01\x02\x01\x00\x01\x01\x01\x00\x01\x02\x01\x00\x01\x02\x01\x00\x01\x00\x00\x00\x03\x00\x00\x0a\x03\x00\x00\x0a\x05\x00\x00\x16\x07\x00\x01\x19\x07\x00\x01\x19\x07\x01\x00\x19\x07\x00\x01\x19\x0b\x00\x02\x1b\x07\x00\x02\x19\x07\x00\x02\x19\x07\x01\x01\x19\x07\x01\x02\x19\x07\x01\x01\x19\x05\x01\x01\x13\x05\x00\x00\x13\x01\x00\x01\x01\x01\x00\x01\x01\x01\x00\x01\x01\x01\x00\x01\x01\x01\x00\x01\x01\x01\x00\x01\x01\x01\x00\x01\x01\x01\x00\x01\x01\x01\x00\x01\x01\x02\x00\x01\x06\x03\x00\x01\x0b\x02\x00\x01\x08\x02\x00\x01\x08\x01\x00\x01\x00\x02\x00\x01\x07\x02\x01\x00\x07\x02\x01\x01\x07\x01\x00\x01\x02\x01\x00\x01\x02\x01\x00\x01\x02\x01\x00\x01\x02\x01\x01\x00\x02\x01\x01\x00\x02\x01\x01\x00\x02\x01\x01\x00\x02\x01\x01\x01\x02\x01\x01\x01\x02\x01\x01\x01\x02\x01\x01\x01\x02\x01\x00\x01\x03\x01\x00\x01\x03\x01\x00\x01\x03\x01\x00\x01\x03\x01\x01\x00\x03\x01\x01\x00\x03\x01\x01\x00\x03\x01\x01\x00\x03\x01\x01\x01\x03\x01\x01\x01\x03\x01\x01\x01\x03\x01\x01\x01\x03\x01\x00\x01\x04\x01\x00\x01\x04\x01\x00\x01\x04\x01\x00\x01\x04\x01\x01\x00\x04\x01\x01\x00\x04\x01\x01\x00\x04\x01\x01\x00\x04\x01\x01\x01\x04\x01\x01\x01\x04\x01\x01\x01\x04\x01\x01\x01\x04\x01\x01\x01\x00\x02\x01\x00\x09\x02\x01\x00\x09\x02\x00\x00\x09\x03\x00\x00\x0c\x01\x01\x01\x0e\x01\x01\x01\x0e\x01\x01\x01\x0e\x01\x01\x01\x0e\x01\x01\x01\x00\x01\x01\x01\x00\x01\x01\x01\x00\x01\x01\x01\x00\x73\x68\x2d\x3e\x68\x65\x61\x64\x65\x72\x2e\x72\x65\x66\x5f\x63\x6f\x75\x6e\x74\x20\x3d\x3d\x20\x30\x00\x6a\x73\x5f\x66\x72\x65\x65\x5f\x73\x68\x61\x70\x65\x30\x00\x69\x20\x21\x3d\x20\x30\x00\x4a\x53\x5f\x46\x72\x65\x65\x41\x74\x6f\x6d\x53\x74\x72\x75\x63\x74\x00\x72\x74\x2d\x3e\x61\x74\x6f\x6d\x5f\x63\x6f\x75\x6e\x74\x20\x3e\x3d\x20\x30\x00\x20\x20\x20\x20\x61\x74\x20\x25\x73\x00\x3a\x25\x64\x00\x3c\x61\x6e\x6f\x6e\x79\x6d\x6f\x75\x73\x3e\x00\x3c\x6e\x75\x6c\x6c\x3e\x00\x20\x28\x25\x73\x00\x20\x28\x6e\x61\x74\x69\x76\x65\x29\x00\x25\x75\x00\x61\x74\x6f\x6d\x20\x3c\x20\x72\x74\x2d\x3e\x61\x74\x6f\x6d\x5f\x73\x69\x7a\x65\x00\x5f\x5f\x4a\x53\x5f\x41\x74\x6f\x6d\x54\x6f\x56\x61\x6c\x75\x65\x00\x25\x64\x00\x63\x61\x6e\x6e\x6f\x74\x20\x63\x6f\x6e\x76\x65\x72\x74\x20\x73\x79\x6d\x62\x6f\x6c\x20\x74\x6f\x20\x73\x74\x72\x69\x6e\x67\x00\x5b\x75\x6e\x73\x75\x70\x70\x6f\x72\x74\x65\x64\x20\x74\x79\x70\x65\x5d\x00\x5b\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x62\x79\x74\x65\x63\x6f\x64\x65\x5d\x00\x25\x2e\x2a\x66\x00\x6e\x20\x3c\x20\x62\x75\x66\x5f\x73\x69\x7a\x65\x00\x6a\x73\x5f\x66\x63\x76\x74\x31\x00\x25\x2b\x2e\x2a\x65\x00\x74\x6f\x50\x72\x69\x6d\x69\x74\x69\x76\x65\x00\x6e\x6f\x74\x20\x61\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x00\x69\x6d\x70\x6f\x72\x74\x2e\x6d\x65\x74\x61\x20\x6e\x6f\x74\x20\x73\x75\x70\x70\x6f\x72\x74\x65\x64\x20\x69\x6e\x20\x74\x68\x69\x73\x20\x63\x6f\x6e\x74\x65\x78\x74\x00\x64\x65\x72\x69\x76\x65\x64\x20\x63\x6c\x61\x73\x73\x20\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\x20\x6d\x75\x73\x74\x20\x72\x65\x74\x75\x72\x6e\x20\x61\x6e\x20\x6f\x62\x6a\x65\x63\x74\x20\x6f\x72\x20\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x00\x63\x6c\x61\x73\x73\x20\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\x73\x20\x6d\x75\x73\x74\x20\x62\x65\x20\x69\x6e\x76\x6f\x6b\x65\x64\x20\x77\x69\x74\x68\x20\x27\x6e\x65\x77\x27\x00\x65\x78\x70\x65\x63\x74\x69\x6e\x67\x20\x3c\x62\x72\x61\x6e\x64\x3e\x20\x70\x72\x69\x76\x61\x74\x65\x20\x66\x69\x65\x6c\x64\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x62\x72\x61\x6e\x64\x20\x6f\x6e\x20\x6f\x62\x6a\x65\x63\x74\x00\x27\x25\x73\x27\x20\x69\x73\x20\x72\x65\x61\x64\x2d\x6f\x6e\x6c\x79\x00\x75\x6e\x73\x75\x70\x70\x6f\x72\x74\x65\x64\x20\x72\x65\x66\x65\x72\x65\x6e\x63\x65\x20\x74\x6f\x20\x27\x73\x75\x70\x65\x72\x27\x00\x69\x74\x65\x72\x61\x74\x6f\x72\x20\x64\x6f\x65\x73\x20\x6e\x6f\x74\x20\x68\x61\x76\x65\x20\x61\x20\x74\x68\x72\x6f\x77\x20\x6d\x65\x74\x68\x6f\x64\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x74\x68\x72\x6f\x77\x20\x76\x61\x72\x20\x74\x79\x70\x65\x20\x25\x64\x00\x63\x61\x6e\x6e\x6f\x74\x20\x64\x65\x66\x69\x6e\x65\x20\x76\x61\x72\x69\x61\x62\x6c\x65\x20\x27\x25\x73\x27\x00\x27\x74\x68\x69\x73\x27\x20\x63\x61\x6e\x20\x62\x65\x20\x69\x6e\x69\x74\x69\x61\x6c\x69\x7a\x65\x64\x20\x6f\x6e\x6c\x79\x20\x6f\x6e\x63\x65\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x72\x65\x74\x20\x76\x61\x6c\x75\x65\x00\x69\x74\x65\x72\x61\x74\x6f\x72\x20\x6d\x75\x73\x74\x20\x72\x65\x74\x75\x72\x6e\x20\x61\x6e\x20\x6f\x62\x6a\x65\x63\x74\x00\x69\x74\x65\x72\x61\x74\x6f\x72\x5f\x63\x6c\x6f\x73\x65\x5f\x72\x65\x74\x75\x72\x6e\x00\x70\x72\x69\x76\x61\x74\x65\x20\x63\x6c\x61\x73\x73\x20\x66\x69\x65\x6c\x64\x20\x27\x25\x73\x27\x20\x61\x6c\x72\x65\x61\x64\x79\x20\x65\x78\x69\x73\x74\x73\x00\x67\x65\x74\x20\x00\x73\x65\x74\x20\x00\x00\x70\x61\x72\x65\x6e\x74\x20\x63\x6c\x61\x73\x73\x20\x6d\x75\x73\x74\x20\x62\x65\x20\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\x00\x70\x61\x72\x65\x6e\x74\x20\x70\x72\x6f\x74\x6f\x74\x79\x70\x65\x20\x6d\x75\x73\x74\x20\x62\x65\x20\x61\x6e\x20\x6f\x62\x6a\x65\x63\x74\x20\x6f\x72\x20\x6e\x75\x6c\x6c\x00\x62\x2d\x3e\x66\x75\x6e\x63\x5f\x6b\x69\x6e\x64\x20\x3d\x3d\x20\x4a\x53\x5f\x46\x55\x4e\x43\x5f\x4e\x4f\x52\x4d\x41\x4c\x00\x6a\x73\x5f\x6f\x70\x5f\x64\x65\x66\x69\x6e\x65\x5f\x63\x6c\x61\x73\x73\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x69\x6e\x64\x65\x78\x20\x66\x6f\x72\x20\x61\x70\x70\x65\x6e\x64\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x27\x69\x6e\x27\x20\x6f\x70\x65\x72\x61\x6e\x64\x00\x76\x61\x6c\x75\x65\x20\x68\x61\x73\x20\x6e\x6f\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x6f\x70\x63\x6f\x64\x65\x3a\x20\x70\x63\x3d\x25\x75\x20\x6f\x70\x63\x6f\x64\x65\x3d\x30\x78\x25\x30\x32\x78\x00\x00\x00\x00\x00\x00\x00\x00\xd8\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x26\x00\x00\x00\x0a\x00\x00\x00\x93\x00\x00\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x0f\x00\x00\x00\x10\x00\x00\x00\x11\x00\x00\x00\x12\x00\x00\x00\x13\x00\x00\x00\x14\x00\x00\x00\x15\x00\x00\x00\x16\x00\x00\x00\x19\x00\x00\x00\x17\x00\x00\x00\x18\x00\x00\x00\x1a\x00\x00\x00\x1b\x00\x00\x00\x1c\x00\x00\x00\x1d\x00\x00\x00\x22\x00\x00\x00\x23\x00\x00\x00\x24\x00\x00\x00\x25\x00\x00\x00\x1e\x00\x00\x00\x21\x00\x00\x00\x1f\x00\x00\x00\x20\x00\x00\x00\x29\x00\x00\x00\x28\x00\x00\x00\x28\x00\x00\x00\x2a\x00\x00\x00\x2a\x00\x00\x00\x2b\x00\x00\x00\x2c\x00\x00\x00\x2d\x00\x00\x00\xda\x00\x00\x00\x2e\x00\x00\x00\x2f\x00\x00\x00\x30\x00\x00\x00\x31\x00\x00\x00\xd9\x00\x00\x00\x32\x00\x00\x00\x33\x00\x00\x00\x34\x00\x00\x00\x35\x00\x00\x00\x36\x00\x00\x00\x37\x00\x00\x00\x38\x00\x00\x00\x39\x00\x00\x00\x3a\x00\x00\x00\x3a\x00\x00\x00\x3b\x00\x00\x00\x3b\x00\x00\x00\x3c\x00\x00\x00\xa0\x00\x00\x00\xa3\x00\x00\x00\x3e\x00\x00\x00\x3d\x00\x00\x00\x3f\x00\x00\x00\x90\x00\x00\x00\x91\x00\x00\x00\x92\x00\x00\x00\x94\x00\x00\x00\x95\x00\x00\x00\x96\x00\x00\x00\x9e\x00\x00\x00\x9f\x00\x00\x00\xa2\x00\x00\x00\xa1\x00\x00\x00\xa4\x00\x00\x00\x97\x00\x00\x00\x98\x00\x00\x00\x99\x00\x00\x00\x9a\x00\x00\x00\x9b\x00\x00\x00\xa5\x00\x00\x00\xa6\x00\x00\x00\xa7\x00\x00\x00\x9c\x00\x00\x00\x9c\x00\x00\x00\x9d\x00\x00\x00\x9d\x00\x00\x00\x40\x00\x00\x00\x41\x00\x00\x00\x42\x00\x00\x00\x43\x00\x00\x00\x44\x00\x00\x00\x45\x00\x00\x00\x6d\x00\x00\x00\x6e\x00\x00\x00\x6f\x00\x00\x00\x73\x00\x00\x00\x74\x00\x00\x00\x75\x00\x00\x00\x76\x00\x00\x00\x70\x00\x00\x00\x71\x00\x00\x00\x72\x00\x00\x00\x77\x00\x00\x00\x7e\x00\x00\x00\x7d\x00\x00\x00\x7a\x00\x00\x00\x81\x00\x00\x00\x82\x00\x00\x00\x83\x00\x00\x00\xcb\x00\x00\x00\xcc\x00\x00\x00\xcd\x00\x00\x00\xce\x00\x00\x00\xce\x00\x00\x00\xce\x00\x00\x00\xce\x00\x00\x00\xce\x00\x00\x00\xce\x00\x00\x00\x78\x00\x00\x00\x78\x00\x00\x00\x78\x00\x00\x00\x79\x00\x00\x00\x84\x00\x00\x00\x86\x00\x00\x00\x88\x00\x00\x00\x85\x00\x00\x00\x87\x00\x00\x00\x8a\x00\x00\x00\x89\x00\x00\x00\x8b\x00\x00\x00\x8c\x00\x00\x00\x8d\x00\x00\x00\x8e\x00\x00\x00\xd9\x00\x00\x00\xd0\x00\x00\x00\xd1\x00\x00\x00\xd1\x00\x00\x00\xcf\x00\x00\x00\xb0\x00\x00\x00\xaf\x00\x00\x00\xb2\x00\x00\x00\xb1\x00\x00\x00\xb3\x00\x00\x00\xb3\x00\x00\x00\xb5\x00\x00\x00\xb4\x00\x00\x00\xa9\x00\x00\x00\xb6\x00\x00\x00\x8f\x00\x00\x00\xc8\x00\x00\x00\xc9\x00\x00\x00\xca\x00\x00\x00\xab\x00\x00\x00\xac\x00\x00\x00\xad\x00\x00\x00\xa8\x00\x00\x00\xaa\x00\x00\x00\xae\x00\x00\x00\xb7\x00\x00\x00\xb9\x00\x00\x00\xb8\x00\x00\x00\xbd\x00\x00\x00\xbe\x00\x00\x00\xbf\x00\x00\x00\xc0\x00\x00\x00\xc7\x00\x00\x00\xc6\x00\x00\x00\xc1\x00\x00\x00\xc2\x00\x00\x00\xc3\x00\x00\x00\xc4\x00\x00\x00\xba\x00\x00\x00\xbc\x00\x00\x00\xbb\x00\x00\x00\xd3\x00\x00\x00\xc5\x00\x00\x00\xad\x00\x00\x00\xd2\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\x46\x00\x00\x00\x47\x00\x00\x00\x48\x00\x00\x00\x49\x00\x00\x00\x4a\x00\x00\x00\x4b\x00\x00\x00\x4c\x00\x00\x00\x4d\x00\x00\x00\x4e\x00\x00\x00\x4f\x00\x00\x00\x50\x00\x00\x00\x51\x00\x00\x00\x52\x00\x00\x00\x53\x00\x00\x00\x54\x00\x00\x00\x55\x00\x00\x00\x56\x00\x00\x00\x57\x00\x00\x00\x58\x00\x00\x00\x59\x00\x00\x00\x5a\x00\x00\x00\x5b\x00\x00\x00\x5c\x00\x00\x00\x5d\x00\x00\x00\x5e\x00\x00\x00\x5f\x00\x00\x00\x60\x00\x00\x00\x61\x00\x00\x00\x62\x00\x00\x00\x63\x00\x00\x00\x64\x00\x00\x00\x65\x00\x00\x00\x66\x00\x00\x00\x67\x00\x00\x00\x68\x00\x00\x00\x69\x00\x00\x00\x6a\x00\x00\x00\x6b\x00\x00\x00\x6c\x00\x00\x00\x09\x00\x00\x00\x80\x00\x00\x00\x7f\x00\x00\x00\x7c\x00\x00\x00\x7b\x00\x00\x00\x27\x00\x00\x00\x27\x00\x00\x00\x27\x00\x00\x00\x27\x00\x00\x00\xd4\x00\x00\x00\xd5\x00\x00\x00\xd6\x00\x00\x00\xd7\x00\x00\x00\xd8\x00\x00\x00\xd8\x00\x00\x00\xd8\x00\x00\x00\xd8\x00\x00\x00\xd8\x00\x00\x00\xd8\x00\x00\x00\xd8\x00\x00\x00\xd8\x00\x00\x00\xd8\x00\x00\x00\xd8\x00\x00\x00\x63\x6f\x75\x6c\x64\x20\x6e\x6f\x74\x20\x64\x65\x6c\x65\x74\x65\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x00\x21\x73\x68\x2d\x3e\x69\x73\x5f\x68\x61\x73\x68\x65\x64\x00\x63\x6f\x6d\x70\x61\x63\x74\x5f\x70\x72\x6f\x70\x65\x72\x74\x69\x65\x73\x00\x6e\x65\x77\x5f\x73\x69\x7a\x65\x20\x3c\x3d\x20\x73\x68\x2d\x3e\x70\x72\x6f\x70\x5f\x73\x69\x7a\x65\x00\x6a\x20\x3d\x3d\x20\x28\x73\x68\x2d\x3e\x70\x72\x6f\x70\x5f\x63\x6f\x75\x6e\x74\x20\x2d\x20\x73\x68\x2d\x3e\x64\x65\x6c\x65\x74\x65\x64\x5f\x70\x72\x6f\x70\x5f\x63\x6f\x75\x6e\x74\x29\x00\x4a\x53\x5f\x41\x74\x6f\x6d\x49\x73\x41\x72\x72\x61\x79\x49\x6e\x64\x65\x78\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x27\x69\x6e\x73\x74\x61\x6e\x63\x65\x6f\x66\x27\x20\x72\x69\x67\x68\x74\x20\x6f\x70\x65\x72\x61\x6e\x64\x00\x6f\x70\x65\x72\x61\x6e\x64\x20\x27\x70\x72\x6f\x74\x6f\x74\x79\x70\x65\x27\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x69\x73\x20\x6e\x6f\x74\x20\x61\x6e\x20\x6f\x62\x6a\x65\x63\x74\x00\x00\x00\x00\x00\x00\x00\x2b\x00\x00\x00\x2d\x00\x00\x00\x2a\x00\x00\x00\x2f\x00\x00\x00\x25\x00\x00\x00\x2a\x2a\x00\x00\x7c\x00\x00\x00\x26\x00\x00\x00\x5e\x00\x00\x00\x3c\x3c\x00\x00\x3e\x3e\x00\x00\x3e\x3e\x3e\x00\x3d\x3d\x00\x00\x3c\x00\x00\x00\x70\x6f\x73\x00\x6e\x65\x67\x00\x2b\x2b\x00\x00\x2d\x2d\x00\x00\x7e\x00\x00\x00\x6f\x70\x65\x72\x61\x74\x6f\x72\x20\x25\x73\x3a\x20\x6e\x6f\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x64\x65\x66\x69\x6e\x65\x64\x00\x00\x00\x00\x0f\x00\x00\x00\x0e\x00\x00\x00\x11\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x05\x00\x00\x00\x09\x00\x00\x00\x0a\x00\x00\x00\x0b\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0c\x00\x00\x00\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x25\x73\x20\x6f\x62\x6a\x65\x63\x74\x20\x65\x78\x70\x65\x63\x74\x65\x64\x00\x62\x69\x67\x69\x6e\x74\x20\x6f\x70\x65\x72\x61\x6e\x64\x73\x20\x61\x72\x65\x20\x66\x6f\x72\x62\x69\x64\x64\x65\x6e\x20\x66\x6f\x72\x20\x3e\x3e\x3e\x00\x63\x61\x6e\x6e\x6f\x74\x20\x63\x6f\x6e\x76\x65\x72\x74\x20\x62\x69\x67\x64\x65\x63\x69\x6d\x61\x6c\x20\x74\x6f\x20\x6e\x75\x6d\x62\x65\x72\x00\x63\x61\x6e\x6e\x6f\x74\x20\x63\x6f\x6e\x76\x65\x72\x74\x20\x62\x69\x67\x69\x6e\x74\x20\x74\x6f\x20\x6e\x75\x6d\x62\x65\x72\x00\x63\x61\x6e\x6e\x6f\x74\x20\x63\x6f\x6e\x76\x65\x72\x74\x20\x62\x69\x67\x66\x6c\x6f\x61\x74\x20\x74\x6f\x20\x6e\x75\x6d\x62\x65\x72\x00\x63\x61\x6e\x6e\x6f\x74\x20\x63\x6f\x6e\x76\x65\x72\x74\x20\x73\x79\x6d\x62\x6f\x6c\x20\x74\x6f\x20\x6e\x75\x6d\x62\x65\x72\x00\x62\x6f\x74\x68\x20\x6f\x70\x65\x72\x61\x6e\x64\x73\x20\x6d\x75\x73\x74\x20\x62\x65\x20\x62\x69\x67\x69\x6e\x74\x00\x6e\x6f\x20\x6f\x76\x65\x72\x6c\x6f\x61\x64\x65\x64\x20\x6f\x70\x65\x72\x61\x74\x6f\x72\x20\x25\x73\x00\x69\x6e\x74\x65\x67\x65\x72\x20\x6f\x76\x65\x72\x66\x6c\x6f\x77\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x6f\x70\x65\x72\x61\x74\x69\x6f\x6e\x00\x64\x69\x76\x69\x73\x69\x6f\x6e\x20\x62\x79\x20\x7a\x65\x72\x6f\x00\x25\x73\x00\x73\x74\x72\x69\x6e\x67\x20\x74\x6f\x6f\x20\x6c\x6f\x6e\x67\x00\x00\x00\x00\x93\x00\x00\x00\x94\x00\x00\x00\x95\x00\x00\x00\x67\x65\x74\x20\x25\x73\x00\x73\x65\x74\x20\x25\x73\x00\x28\x70\x72\x2d\x3e\x75\x2e\x69\x6e\x69\x74\x2e\x72\x65\x61\x6c\x6d\x5f\x61\x6e\x64\x5f\x69\x64\x20\x26\x20\x33\x29\x20\x3d\x3d\x20\x30\x00\x4a\x53\x5f\x44\x65\x66\x69\x6e\x65\x41\x75\x74\x6f\x49\x6e\x69\x74\x50\x72\x6f\x70\x65\x72\x74\x79\x00\x28\x6e\x65\x77\x5f\x68\x61\x73\x68\x5f\x73\x69\x7a\x65\x20\x26\x20\x28\x6e\x65\x77\x5f\x68\x61\x73\x68\x5f\x73\x69\x7a\x65\x20\x2d\x20\x31\x29\x29\x20\x3d\x3d\x20\x30\x00\x4a\x53\x5f\x52\x65\x73\x69\x7a\x65\x41\x74\x6f\x6d\x48\x61\x73\x68\x00\x6a\x73\x5f\x67\x65\x74\x5f\x61\x74\x6f\x6d\x5f\x69\x6e\x64\x65\x78\x00\x65\x78\x70\x6f\x72\x74\x20\x27\x25\x73\x27\x20\x69\x6e\x20\x6d\x6f\x64\x75\x6c\x65\x20\x27\x25\x73\x27\x20\x69\x73\x20\x61\x6d\x62\x69\x67\x75\x6f\x75\x73\x00\x63\x69\x72\x63\x75\x6c\x61\x72\x20\x72\x65\x66\x65\x72\x65\x6e\x63\x65\x20\x77\x68\x65\x6e\x20\x6c\x6f\x6f\x6b\x69\x6e\x67\x20\x66\x6f\x72\x20\x65\x78\x70\x6f\x72\x74\x20\x27\x25\x73\x27\x20\x69\x6e\x20\x6d\x6f\x64\x75\x6c\x65\x20\x27\x25\x73\x27\x00\x43\x6f\x75\x6c\x64\x20\x6e\x6f\x74\x20\x66\x69\x6e\x64\x20\x65\x78\x70\x6f\x72\x74\x20\x27\x25\x73\x27\x20\x69\x6e\x20\x6d\x6f\x64\x75\x6c\x65\x20\x27\x25\x73\x27\x00\x4a\x53\x5f\x41\x74\x6f\x6d\x47\x65\x74\x53\x74\x72\x52\x54\x00\x21\x61\x74\x6f\x6d\x5f\x69\x73\x5f\x66\x72\x65\x65\x28\x70\x29\x00\x6e\x75\x6d\x5f\x69\x6e\x64\x65\x78\x20\x3d\x3d\x20\x6e\x75\x6d\x5f\x6b\x65\x79\x73\x5f\x63\x6f\x75\x6e\x74\x00\x4a\x53\x5f\x47\x65\x74\x4f\x77\x6e\x50\x72\x6f\x70\x65\x72\x74\x79\x4e\x61\x6d\x65\x73\x49\x6e\x74\x65\x72\x6e\x61\x6c\x00\x73\x74\x72\x5f\x69\x6e\x64\x65\x78\x20\x3d\x3d\x20\x6e\x75\x6d\x5f\x6b\x65\x79\x73\x5f\x63\x6f\x75\x6e\x74\x20\x2b\x20\x73\x74\x72\x5f\x6b\x65\x79\x73\x5f\x63\x6f\x75\x6e\x74\x00\x73\x79\x6d\x5f\x69\x6e\x64\x65\x78\x20\x3d\x3d\x20\x61\x74\x6f\x6d\x5f\x63\x6f\x75\x6e\x74\x00\x61\x74\x6f\x6d\x31\x5f\x69\x73\x5f\x69\x6e\x74\x65\x67\x65\x72\x20\x26\x26\x20\x61\x74\x6f\x6d\x32\x5f\x69\x73\x5f\x69\x6e\x74\x65\x67\x65\x72\x00\x6e\x75\x6d\x5f\x6b\x65\x79\x73\x5f\x63\x6d\x70\x00\x41\x72\x72\x61\x79\x42\x75\x66\x66\x65\x72\x20\x69\x73\x20\x64\x65\x74\x61\x63\x68\x65\x64\x00\x76\x61\x6c\x75\x65\x20\x69\x73\x20\x6e\x6f\x74\x20\x69\x74\x65\x72\x61\x62\x6c\x65\x00\x6e\x75\x6c\x6c\x20\x6f\x72\x20\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x20\x61\x72\x65\x20\x66\x6f\x72\x62\x69\x64\x64\x65\x6e\x00\x72\x65\x63\x65\x69\x76\x65\x72\x20\x69\x73\x20\x6e\x6f\x74\x20\x61\x6e\x20\x6f\x62\x6a\x65\x63\x74\x00\x73\x65\x74\x74\x65\x72\x20\x69\x73\x20\x66\x6f\x72\x62\x69\x64\x64\x65\x6e\x00\x63\x61\x6e\x6e\x6f\x74\x20\x63\x72\x65\x61\x74\x65\x20\x6e\x75\x6d\x65\x72\x69\x63\x20\x69\x6e\x64\x65\x78\x20\x69\x6e\x20\x74\x79\x70\x65\x64\x20\x61\x72\x72\x61\x79\x00\x6f\x62\x6a\x65\x63\x74\x20\x69\x73\x20\x6e\x6f\x74\x20\x65\x78\x74\x65\x6e\x73\x69\x62\x6c\x65\x00\x70\x72\x6f\x78\x79\x3a\x20\x69\x6e\x63\x6f\x6e\x73\x69\x73\x74\x65\x6e\x74\x20\x69\x73\x45\x78\x74\x65\x6e\x73\x69\x62\x6c\x65\x00\x72\x65\x76\x6f\x6b\x65\x64\x20\x70\x72\x6f\x78\x79\x00\x4a\x53\x5f\x41\x74\x6f\x6d\x49\x73\x4e\x75\x6d\x65\x72\x69\x63\x49\x6e\x64\x65\x78\x31\x00\x6e\x00\x66\x00\x69\x00\x6e\x00\x69\x00\x74\x00\x79\x00\x6e\x66\x69\x6e\x69\x74\x79\x00\x6e\x6f\x20\x73\x65\x74\x74\x65\x72\x20\x66\x6f\x72\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x00\x6f\x75\x74\x2d\x6f\x66\x2d\x62\x6f\x75\x6e\x64\x20\x6e\x75\x6d\x65\x72\x69\x63\x20\x69\x6e\x64\x65\x78\x00\x63\x61\x6e\x6e\x6f\x74\x20\x63\x6f\x6e\x76\x65\x72\x74\x20\x74\x6f\x20\x62\x69\x67\x69\x6e\x74\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x62\x69\x67\x69\x6e\x74\x20\x6c\x69\x74\x65\x72\x61\x6c\x00\x5b\x00\x5d\x00\x70\x72\x6f\x78\x79\x3a\x20\x62\x61\x64\x20\x70\x72\x6f\x74\x6f\x74\x79\x70\x65\x00\x70\x72\x6f\x78\x79\x3a\x20\x69\x6e\x63\x6f\x6e\x73\x69\x73\x74\x65\x6e\x74\x20\x70\x72\x6f\x74\x6f\x74\x79\x70\x65\x00\x63\x69\x72\x63\x75\x6c\x61\x72\x20\x70\x72\x6f\x74\x6f\x74\x79\x70\x65\x20\x63\x68\x61\x69\x6e\x00\x70\x72\x69\x76\x61\x74\x65\x20\x63\x6c\x61\x73\x73\x20\x66\x69\x65\x6c\x64\x20\x27\x25\x73\x27\x20\x64\x6f\x65\x73\x20\x6e\x6f\x74\x20\x65\x78\x69\x73\x74\x00\x6e\x6f\x74\x20\x61\x20\x73\x79\x6d\x62\x6f\x6c\x00\x63\x61\x6e\x6e\x6f\x74\x20\x73\x65\x74\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x27\x25\x73\x27\x20\x6f\x66\x20\x6e\x75\x6c\x6c\x00\x63\x61\x6e\x6e\x6f\x74\x20\x73\x65\x74\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x27\x25\x73\x27\x20\x6f\x66\x20\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x00\x70\x2d\x3e\x63\x6c\x61\x73\x73\x5f\x69\x64\x20\x3d\x3d\x20\x4a\x53\x5f\x43\x4c\x41\x53\x53\x5f\x41\x52\x52\x41\x59\x00\x4a\x53\x5f\x53\x65\x74\x50\x72\x6f\x70\x65\x72\x74\x79\x49\x6e\x74\x65\x72\x6e\x61\x6c\x00\x70\x72\x6f\x70\x20\x3d\x3d\x20\x4a\x53\x5f\x41\x54\x4f\x4d\x5f\x6c\x65\x6e\x67\x74\x68\x00\x6e\x6f\x74\x20\x61\x6e\x20\x6f\x62\x6a\x65\x63\x74\x00\x6e\x6f\x74\x20\x63\x6f\x6e\x66\x69\x67\x75\x72\x61\x62\x6c\x65\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x61\x72\x72\x61\x79\x20\x6c\x65\x6e\x67\x74\x68\x00\x24\x00\x00\x00\x21\x00\x00\x00\x22\x00\x00\x00\x07\x00\x00\x00\x05\x00\x00\x00\x21\x00\x00\x00\x21\x00\x00\x00\x21\x00\x00\x00\x21\x00\x00\x00\x21\x00\x00\x00\x21\x00\x00\x00\x04\x00\x00\x00\x06\x00\x00\x00\x21\x00\x00\x00\x21\x00\x00\x00\x21\x00\x00\x00\x21\x00\x00\x00\x21\x00\x00\x00\x04\x00\x00\x00\x27\x25\x73\x27\x20\x69\x73\x20\x6e\x6f\x74\x20\x64\x65\x66\x69\x6e\x65\x64\x00\x6e\x6f\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x66\x69\x6c\x65\x6e\x61\x6d\x65\x20\x66\x6f\x72\x20\x69\x6d\x70\x6f\x72\x74\x28\x29\x00\x62\x79\x74\x65\x63\x6f\x64\x65\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x65\x78\x70\x65\x63\x74\x65\x64\x00\x2e\x00\x2e\x2e\x00\x63\x6f\x75\x6c\x64\x20\x6e\x6f\x74\x20\x6c\x6f\x61\x64\x20\x6d\x6f\x64\x75\x6c\x65\x20\x27\x25\x73\x27\x00\x72\x65\x73\x6f\x6c\x76\x69\x6e\x67\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x61\x6c\x72\x65\x61\x64\x79\x20\x73\x65\x74\x00\x73\x74\x72\x69\x6e\x67\x20\x65\x78\x70\x65\x63\x74\x65\x64\x00\x6e\x6f\x74\x20\x61\x20\x6f\x62\x6a\x65\x63\x74\x00\x74\x6f\x6f\x20\x6d\x61\x6e\x79\x20\x61\x72\x67\x75\x6d\x65\x6e\x74\x73\x00\x3c\x69\x6e\x70\x75\x74\x3e\x00\x65\x76\x61\x6c\x20\x69\x73\x20\x6e\x6f\x74\x20\x73\x75\x70\x70\x6f\x72\x74\x65\x64\x00\x6c\x65\x78\x69\x63\x61\x6c\x20\x76\x61\x72\x69\x61\x62\x6c\x65\x00\x25\x73\x20\x69\x73\x20\x6e\x6f\x74\x20\x69\x6e\x69\x74\x69\x61\x6c\x69\x7a\x65\x64\x00\x72\x65\x64\x65\x63\x6c\x61\x72\x61\x74\x69\x6f\x6e\x20\x6f\x66\x20\x27\x25\x73\x27\x00\x21\x5f\x5f\x4a\x53\x5f\x41\x74\x6f\x6d\x49\x73\x54\x61\x67\x67\x65\x64\x49\x6e\x74\x28\x64\x65\x73\x63\x72\x29\x00\x4a\x53\x5f\x4e\x65\x77\x53\x79\x6d\x62\x6f\x6c\x46\x72\x6f\x6d\x41\x74\x6f\x6d\x00\x64\x65\x73\x63\x72\x20\x3c\x20\x72\x74\x2d\x3e\x61\x74\x6f\x6d\x5f\x73\x69\x7a\x65\x00\x6e\x6f\x74\x20\x61\x20\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\x00\x70\x72\x73\x20\x21\x3d\x20\x4e\x55\x4c\x4c\x00\x4a\x53\x5f\x44\x65\x66\x69\x6e\x65\x50\x72\x6f\x70\x65\x72\x74\x79\x00\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x69\x73\x20\x6e\x6f\x74\x20\x63\x6f\x6e\x66\x69\x67\x75\x72\x61\x62\x6c\x65\x00\x6e\x6f\x6e\x20\x69\x6e\x74\x65\x67\x65\x72\x20\x69\x6e\x64\x65\x78\x20\x69\x6e\x20\x74\x79\x70\x65\x64\x20\x61\x72\x72\x61\x79\x00\x6e\x65\x67\x61\x74\x69\x76\x65\x20\x69\x6e\x64\x65\x78\x20\x69\x6e\x20\x74\x79\x70\x65\x64\x20\x61\x72\x72\x61\x79\x00\x00\x00\x00\x01\x01\x02\x02\x03\x03\x02\x03\x6f\x75\x74\x2d\x6f\x66\x2d\x62\x6f\x75\x6e\x64\x20\x69\x6e\x64\x65\x78\x20\x69\x6e\x20\x74\x79\x70\x65\x64\x20\x61\x72\x72\x61\x79\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x64\x65\x73\x63\x72\x69\x70\x74\x6f\x72\x20\x66\x6c\x61\x67\x73\x00\x70\x2d\x3e\x73\x68\x61\x70\x65\x2d\x3e\x68\x65\x61\x64\x65\x72\x2e\x72\x65\x66\x5f\x63\x6f\x75\x6e\x74\x20\x3d\x3d\x20\x31\x00\x61\x64\x64\x5f\x70\x72\x6f\x70\x65\x72\x74\x79\x00\x63\x61\x6e\x6e\x6f\x74\x20\x63\x6f\x6e\x76\x65\x72\x74\x20\x74\x6f\x20\x6f\x62\x6a\x65\x63\x74\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x6f\x62\x6a\x65\x63\x74\x20\x74\x79\x70\x65\x00\x00\x0d\x00\x10\x00\x34\x00\x38\x00\x69\x6e\x74\x65\x72\x72\x75\x70\x74\x65\x64\x00\x63\x61\x6e\x6e\x6f\x74\x20\x72\x65\x61\x64\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x27\x25\x73\x27\x20\x6f\x66\x20\x6e\x75\x6c\x6c\x00\x63\x61\x6e\x6e\x6f\x74\x20\x72\x65\x61\x64\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x27\x25\x73\x27\x20\x6f\x66\x20\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x00\x00\x00\x00\x00\x00\x00\x00\x6e\x75\x6c\x6c\x00\x66\x61\x6c\x73\x65\x00\x74\x72\x75\x65\x00\x69\x66\x00\x65\x6c\x73\x65\x00\x72\x65\x74\x75\x72\x6e\x00\x76\x61\x72\x00\x74\x68\x69\x73\x00\x64\x65\x6c\x65\x74\x65\x00\x76\x6f\x69\x64\x00\x74\x79\x70\x65\x6f\x66\x00\x6e\x65\x77\x00\x69\x6e\x00\x69\x6e\x73\x74\x61\x6e\x63\x65\x6f\x66\x00\x64\x6f\x00\x77\x68\x69\x6c\x65\x00\x66\x6f\x72\x00\x62\x72\x65\x61\x6b\x00\x63\x6f\x6e\x74\x69\x6e\x75\x65\x00\x73\x77\x69\x74\x63\x68\x00\x63\x61\x73\x65\x00\x64\x65\x66\x61\x75\x6c\x74\x00\x74\x68\x72\x6f\x77\x00\x74\x72\x79\x00\x63\x61\x74\x63\x68\x00\x66\x69\x6e\x61\x6c\x6c\x79\x00\x66\x75\x6e\x63\x74\x69\x6f\x6e\x00\x64\x65\x62\x75\x67\x67\x65\x72\x00\x77\x69\x74\x68\x00\x63\x6c\x61\x73\x73\x00\x63\x6f\x6e\x73\x74\x00\x65\x6e\x75\x6d\x00\x65\x78\x70\x6f\x72\x74\x00\x65\x78\x74\x65\x6e\x64\x73\x00\x69\x6d\x70\x6f\x72\x74\x00\x73\x75\x70\x65\x72\x00\x69\x6d\x70\x6c\x65\x6d\x65\x6e\x74\x73\x00\x69\x6e\x74\x65\x72\x66\x61\x63\x65\x00\x6c\x65\x74\x00\x70\x61\x63\x6b\x61\x67\x65\x00\x70\x72\x69\x76\x61\x74\x65\x00\x70\x72\x6f\x74\x65\x63\x74\x65\x64\x00\x70\x75\x62\x6c\x69\x63\x00\x73\x74\x61\x74\x69\x63\x00\x79\x69\x65\x6c\x64\x00\x61\x77\x61\x69\x74\x00\x00\x6c\x65\x6e\x67\x74\x68\x00\x66\x69\x6c\x65\x4e\x61\x6d\x65\x00\x6c\x69\x6e\x65\x4e\x75\x6d\x62\x65\x72\x00\x6d\x65\x73\x73\x61\x67\x65\x00\x65\x72\x72\x6f\x72\x73\x00\x73\x74\x61\x63\x6b\x00\x6e\x61\x6d\x65\x00\x74\x6f\x53\x74\x72\x69\x6e\x67\x00\x74\x6f\x4c\x6f\x63\x61\x6c\x65\x53\x74\x72\x69\x6e\x67\x00\x76\x61\x6c\x75\x65\x4f\x66\x00\x65\x76\x61\x6c\x00\x70\x72\x6f\x74\x6f\x74\x79\x70\x65\x00\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\x00\x63\x6f\x6e\x66\x69\x67\x75\x72\x61\x62\x6c\x65\x00\x77\x72\x69\x74\x61\x62\x6c\x65\x00\x65\x6e\x75\x6d\x65\x72\x61\x62\x6c\x65\x00\x76\x61\x6c\x75\x65\x00\x67\x65\x74\x00\x73\x65\x74\x00\x6f\x66\x00\x5f\x5f\x70\x72\x6f\x74\x6f\x5f\x5f\x00\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x00\x6e\x75\x6d\x62\x65\x72\x00\x62\x6f\x6f\x6c\x65\x61\x6e\x00\x73\x74\x72\x69\x6e\x67\x00\x6f\x62\x6a\x65\x63\x74\x00\x73\x79\x6d\x62\x6f\x6c\x00\x69\x6e\x74\x65\x67\x65\x72\x00\x75\x6e\x6b\x6e\x6f\x77\x6e\x00\x61\x72\x67\x75\x6d\x65\x6e\x74\x73\x00\x63\x61\x6c\x6c\x65\x65\x00\x63\x61\x6c\x6c\x65\x72\x00\x3c\x65\x76\x61\x6c\x3e\x00\x3c\x72\x65\x74\x3e\x00\x3c\x76\x61\x72\x3e\x00\x3c\x61\x72\x67\x5f\x76\x61\x72\x3e\x00\x3c\x77\x69\x74\x68\x3e\x00\x6c\x61\x73\x74\x49\x6e\x64\x65\x78\x00\x74\x61\x72\x67\x65\x74\x00\x69\x6e\x64\x65\x78\x00\x69\x6e\x70\x75\x74\x00\x64\x65\x66\x69\x6e\x65\x50\x72\x6f\x70\x65\x72\x74\x69\x65\x73\x00\x61\x70\x70\x6c\x79\x00\x6a\x6f\x69\x6e\x00\x63\x6f\x6e\x63\x61\x74\x00\x73\x70\x6c\x69\x74\x00\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x00\x67\x65\x74\x50\x72\x6f\x74\x6f\x74\x79\x70\x65\x4f\x66\x00\x73\x65\x74\x50\x72\x6f\x74\x6f\x74\x79\x70\x65\x4f\x66\x00\x69\x73\x45\x78\x74\x65\x6e\x73\x69\x62\x6c\x65\x00\x70\x72\x65\x76\x65\x6e\x74\x45\x78\x74\x65\x6e\x73\x69\x6f\x6e\x73\x00\x68\x61\x73\x00\x64\x65\x6c\x65\x74\x65\x50\x72\x6f\x70\x65\x72\x74\x79\x00\x64\x65\x66\x69\x6e\x65\x50\x72\x6f\x70\x65\x72\x74\x79\x00\x67\x65\x74\x4f\x77\x6e\x50\x72\x6f\x70\x65\x72\x74\x79\x44\x65\x73\x63\x72\x69\x70\x74\x6f\x72\x00\x6f\x77\x6e\x4b\x65\x79\x73\x00\x61\x64\x64\x00\x64\x6f\x6e\x65\x00\x6e\x65\x78\x74\x00\x76\x61\x6c\x75\x65\x73\x00\x73\x6f\x75\x72\x63\x65\x00\x66\x6c\x61\x67\x73\x00\x67\x6c\x6f\x62\x61\x6c\x00\x75\x6e\x69\x63\x6f\x64\x65\x00\x72\x61\x77\x00\x6e\x65\x77\x2e\x74\x61\x72\x67\x65\x74\x00\x74\x68\x69\x73\x2e\x61\x63\x74\x69\x76\x65\x5f\x66\x75\x6e\x63\x00\x3c\x68\x6f\x6d\x65\x5f\x6f\x62\x6a\x65\x63\x74\x3e\x00\x3c\x63\x6f\x6d\x70\x75\x74\x65\x64\x5f\x66\x69\x65\x6c\x64\x3e\x00\x3c\x73\x74\x61\x74\x69\x63\x5f\x63\x6f\x6d\x70\x75\x74\x65\x64\x5f\x66\x69\x65\x6c\x64\x3e\x00\x3c\x63\x6c\x61\x73\x73\x5f\x66\x69\x65\x6c\x64\x73\x5f\x69\x6e\x69\x74\x3e\x00\x3c\x62\x72\x61\x6e\x64\x3e\x00\x23\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\x00\x61\x73\x00\x66\x72\x6f\x6d\x00\x6d\x65\x74\x61\x00\x2a\x64\x65\x66\x61\x75\x6c\x74\x2a\x00\x2a\x00\x4d\x6f\x64\x75\x6c\x65\x00\x74\x68\x65\x6e\x00\x72\x65\x73\x6f\x6c\x76\x65\x00\x72\x65\x6a\x65\x63\x74\x00\x70\x72\x6f\x6d\x69\x73\x65\x00\x70\x72\x6f\x78\x79\x00\x72\x65\x76\x6f\x6b\x65\x00\x61\x73\x79\x6e\x63\x00\x65\x78\x65\x63\x00\x67\x72\x6f\x75\x70\x73\x00\x73\x74\x61\x74\x75\x73\x00\x72\x65\x61\x73\x6f\x6e\x00\x67\x6c\x6f\x62\x61\x6c\x54\x68\x69\x73\x00\x62\x69\x67\x69\x6e\x74\x00\x62\x69\x67\x66\x6c\x6f\x61\x74\x00\x62\x69\x67\x64\x65\x63\x69\x6d\x61\x6c\x00\x72\x6f\x75\x6e\x64\x69\x6e\x67\x4d\x6f\x64\x65\x00\x6d\x61\x78\x69\x6d\x75\x6d\x53\x69\x67\x6e\x69\x66\x69\x63\x61\x6e\x74\x44\x69\x67\x69\x74\x73\x00\x6d\x61\x78\x69\x6d\x75\x6d\x46\x72\x61\x63\x74\x69\x6f\x6e\x44\x69\x67\x69\x74\x73\x00\x74\x6f\x4a\x53\x4f\x4e\x00\x4f\x62\x6a\x65\x63\x74\x00\x41\x72\x72\x61\x79\x00\x45\x72\x72\x6f\x72\x00\x4e\x75\x6d\x62\x65\x72\x00\x53\x74\x72\x69\x6e\x67\x00\x42\x6f\x6f\x6c\x65\x61\x6e\x00\x53\x79\x6d\x62\x6f\x6c\x00\x41\x72\x67\x75\x6d\x65\x6e\x74\x73\x00\x4d\x61\x74\x68\x00\x4a\x53\x4f\x4e\x00\x44\x61\x74\x65\x00\x46\x75\x6e\x63\x74\x69\x6f\x6e\x00\x47\x65\x6e\x65\x72\x61\x74\x6f\x72\x46\x75\x6e\x63\x74\x69\x6f\x6e\x00\x46\x6f\x72\x49\x6e\x49\x74\x65\x72\x61\x74\x6f\x72\x00\x52\x65\x67\x45\x78\x70\x00\x41\x72\x72\x61\x79\x42\x75\x66\x66\x65\x72\x00\x53\x68\x61\x72\x65\x64\x41\x72\x72\x61\x79\x42\x75\x66\x66\x65\x72\x00\x55\x69\x6e\x74\x38\x43\x6c\x61\x6d\x70\x65\x64\x41\x72\x72\x61\x79\x00\x49\x6e\x74\x38\x41\x72\x72\x61\x79\x00\x55\x69\x6e\x74\x38\x41\x72\x72\x61\x79\x00\x49\x6e\x74\x31\x36\x41\x72\x72\x61\x79\x00\x55\x69\x6e\x74\x31\x36\x41\x72\x72\x61\x79\x00\x49\x6e\x74\x33\x32\x41\x72\x72\x61\x79\x00\x55\x69\x6e\x74\x33\x32\x41\x72\x72\x61\x79\x00\x42\x69\x67\x49\x6e\x74\x36\x34\x41\x72\x72\x61\x79\x00\x42\x69\x67\x55\x69\x6e\x74\x36\x34\x41\x72\x72\x61\x79\x00\x46\x6c\x6f\x61\x74\x33\x32\x41\x72\x72\x61\x79\x00\x46\x6c\x6f\x61\x74\x36\x34\x41\x72\x72\x61\x79\x00\x44\x61\x74\x61\x56\x69\x65\x77\x00\x42\x69\x67\x49\x6e\x74\x00\x42\x69\x67\x46\x6c\x6f\x61\x74\x00\x42\x69\x67\x46\x6c\x6f\x61\x74\x45\x6e\x76\x00\x42\x69\x67\x44\x65\x63\x69\x6d\x61\x6c\x00\x4f\x70\x65\x72\x61\x74\x6f\x72\x53\x65\x74\x00\x4f\x70\x65\x72\x61\x74\x6f\x72\x73\x00\x4d\x61\x70\x00\x53\x65\x74\x00\x57\x65\x61\x6b\x4d\x61\x70\x00\x57\x65\x61\x6b\x53\x65\x74\x00\x4d\x61\x70\x20\x49\x74\x65\x72\x61\x74\x6f\x72\x00\x53\x65\x74\x20\x49\x74\x65\x72\x61\x74\x6f\x72\x00\x41\x72\x72\x61\x79\x20\x49\x74\x65\x72\x61\x74\x6f\x72\x00\x53\x74\x72\x69\x6e\x67\x20\x49\x74\x65\x72\x61\x74\x6f\x72\x00\x52\x65\x67\x45\x78\x70\x20\x53\x74\x72\x69\x6e\x67\x20\x49\x74\x65\x72\x61\x74\x6f\x72\x00\x47\x65\x6e\x65\x72\x61\x74\x6f\x72\x00\x50\x72\x6f\x78\x79\x00\x50\x72\x6f\x6d\x69\x73\x65\x00\x50\x72\x6f\x6d\x69\x73\x65\x52\x65\x73\x6f\x6c\x76\x65\x46\x75\x6e\x63\x74\x69\x6f\x6e\x00\x50\x72\x6f\x6d\x69\x73\x65\x52\x65\x6a\x65\x63\x74\x46\x75\x6e\x63\x74\x69\x6f\x6e\x00\x41\x73\x79\x6e\x63\x46\x75\x6e\x63\x74\x69\x6f\x6e\x00\x41\x73\x79\x6e\x63\x46\x75\x6e\x63\x74\x69\x6f\x6e\x52\x65\x73\x6f\x6c\x76\x65\x00\x41\x73\x79\x6e\x63\x46\x75\x6e\x63\x74\x69\x6f\x6e\x52\x65\x6a\x65\x63\x74\x00\x41\x73\x79\x6e\x63\x47\x65\x6e\x65\x72\x61\x74\x6f\x72\x46\x75\x6e\x63\x74\x69\x6f\x6e\x00\x41\x73\x79\x6e\x63\x47\x65\x6e\x65\x72\x61\x74\x6f\x72\x00\x45\x76\x61\x6c\x45\x72\x72\x6f\x72\x00\x52\x61\x6e\x67\x65\x45\x72\x72\x6f\x72\x00\x52\x65\x66\x65\x72\x65\x6e\x63\x65\x45\x72\x72\x6f\x72\x00\x53\x79\x6e\x74\x61\x78\x45\x72\x72\x6f\x72\x00\x54\x79\x70\x65\x45\x72\x72\x6f\x72\x00\x55\x52\x49\x45\x72\x72\x6f\x72\x00\x49\x6e\x74\x65\x72\x6e\x61\x6c\x45\x72\x72\x6f\x72\x00\x3c\x62\x72\x61\x6e\x64\x3e\x00\x53\x79\x6d\x62\x6f\x6c\x2e\x74\x6f\x50\x72\x69\x6d\x69\x74\x69\x76\x65\x00\x53\x79\x6d\x62\x6f\x6c\x2e\x69\x74\x65\x72\x61\x74\x6f\x72\x00\x53\x79\x6d\x62\x6f\x6c\x2e\x6d\x61\x74\x63\x68\x00\x53\x79\x6d\x62\x6f\x6c\x2e\x6d\x61\x74\x63\x68\x41\x6c\x6c\x00\x53\x79\x6d\x62\x6f\x6c\x2e\x72\x65\x70\x6c\x61\x63\x65\x00\x53\x79\x6d\x62\x6f\x6c\x2e\x73\x65\x61\x72\x63\x68\x00\x53\x79\x6d\x62\x6f\x6c\x2e\x73\x70\x6c\x69\x74\x00\x53\x79\x6d\x62\x6f\x6c\x2e\x74\x6f\x53\x74\x72\x69\x6e\x67\x54\x61\x67\x00\x53\x79\x6d\x62\x6f\x6c\x2e\x69\x73\x43\x6f\x6e\x63\x61\x74\x53\x70\x72\x65\x61\x64\x61\x62\x6c\x65\x00\x53\x79\x6d\x62\x6f\x6c\x2e\x68\x61\x73\x49\x6e\x73\x74\x61\x6e\x63\x65\x00\x53\x79\x6d\x62\x6f\x6c\x2e\x73\x70\x65\x63\x69\x65\x73\x00\x53\x79\x6d\x62\x6f\x6c\x2e\x75\x6e\x73\x63\x6f\x70\x61\x62\x6c\x65\x73\x00\x53\x79\x6d\x62\x6f\x6c\x2e\x61\x73\x79\x6e\x63\x49\x74\x65\x72\x61\x74\x6f\x72\x00\x53\x79\x6d\x62\x6f\x6c\x2e\x6f\x70\x65\x72\x61\x74\x6f\x72\x53\x65\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x92\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x93\x00\x00\x00\x96\x00\x00\x00\x97\x00\x00\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x95\x00\x00\x00\x98\x00\x00\x00\x99\x00\x00\x00\x96\x00\x00\x00\x98\x00\x00\x00\x99\x00\x00\x00\x97\x00\x00\x00\x98\x00\x00\x00\x99\x00\x00\x00\x98\x00\x00\x00\x98\x00\x00\x00\x99\x00\x00\x00\x99\x00\x00\x00\x96\x00\x00\x00\x97\x00\x00\x00\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9c\x00\x00\x00\x98\x00\x00\x00\x99\x00\x00\x00\x92\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9d\x00\x00\x00\x9a\x00\x00\x00\x9b\x00\x00\x00\x9d\x00\x00\x00\x9c\x00\x00\x00\x9d\x00\x00\x00\x9d\x00\x00\x00\x9e\x00\x00\x00\x9f\x00\x00\x00\x9d\x00\x00\x00\xa0\x00\x00\x00\xa1\x00\x00\x00\x9e\x00\x00\x00\x9c\x00\x00\x00\x9d\x00\x00\x00\x9f\x00\x00\x00\xa2\x00\x00\x00\xa3\x00\x00\x00\xa0\x00\x00\x00\xa4\x00\x00\x00\x00\x00\x00\x00\xa1\x00\x00\x00\xa5\x00\x00\x00\x00\x00\x00\x00\xa2\x00\x00\x00\xa5\x00\x00\x00\x00\x00\x00\x00\xa3\x00\x00\x00\xa6\x00\x00\x00\xa7\x00\x00\x00\xa4\x00\x00\x00\xa6\x00\x00\x00\xa7\x00\x00\x00\xa5\x00\x00\x00\xa6\x00\x00\x00\xa7\x00\x00\x00\xa6\x00\x00\x00\xa6\x00\x00\x00\xa7\x00\x00\x00\xa7\x00\x00\x00\xa6\x00\x00\x00\xa7\x00\x00\x00\xa8\x00\x00\x00\xa6\x00\x00\x00\xa7\x00\x00\x00\xa9\x00\x00\x00\xa6\x00\x00\x00\xa7\x00\x00\x00\xaa\x00\x00\x00\xa6\x00\x00\x00\xa7\x00\x00\x00\xab\x00\x00\x00\xa6\x00\x00\x00\xa7\x00\x00\x00\xac\x00\x00\x00\xa6\x00\x00\x00\xa7\x00\x00\x00\xad\x00\x00\x00\xa6\x00\x00\x00\xa7\x00\x00\x00\xae\x00\x00\x00\xa6\x00\x00\x00\xa7\x00\x00\x00\xaf\x00\x00\x00\x98\x00\x00\x00\x99\x00\x00\x00\xb0\x00\x00\x00\x98\x00\x00\x00\x99\x00\x00\x00\xb1\x00\x00\x00\xa8\x00\x00\x00\x00\x00\x00\x00\xb2\x00\x00\x00\x98\x00\x00\x00\x99\x00\x00\x00\xb3\x00\x00\x00\xa9\x00\x00\x00\xaa\x00\x00\x00\xb5\x00\x00\x00\xab\x00\x00\x00\xac\x00\x00\x00\xb6\x00\x00\x00\xab\x00\x00\x00\xac\x00\x00\x00\xb7\x00\x00\x00\xab\x00\x00\x00\xac\x00\x00\x00\xb8\x00\x00\x00\xab\x00\x00\x00\xac\x00\x00\x00\xb9\x00\x00\x00\xad\x00\x00\x00\xae\x00\x00\x00\xba\x00\x00\x00\xad\x00\x00\x00\xae\x00\x00\x00\xbb\x00\x00\x00\xaf\x00\x00\x00\xb0\x00\x00\x00\xbc\x00\x00\x00\xaf\x00\x00\x00\xb0\x00\x00\x00\xbd\x00\x00\x00\xb1\x00\x00\x00\xb2\x00\x00\x00\xbe\x00\x00\x00\xb3\x00\x00\x00\xb4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb6\x00\x00\x00\x00\x00\x00\x00\xb7\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb9\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6c\x69\x73\x74\x5f\x65\x6d\x70\x74\x79\x28\x26\x72\x74\x2d\x3e\x67\x63\x5f\x6f\x62\x6a\x5f\x6c\x69\x73\x74\x29\x00\x4a\x53\x5f\x46\x72\x65\x65\x52\x75\x6e\x74\x69\x6d\x65\x00\x70\x2d\x3e\x6d\x61\x72\x6b\x20\x3d\x3d\x20\x30\x00\x67\x63\x5f\x64\x65\x63\x72\x65\x66\x00\x70\x2d\x3e\x72\x65\x66\x5f\x63\x6f\x75\x6e\x74\x20\x3e\x20\x30\x00\x67\x63\x5f\x73\x63\x61\x6e\x00\x70\x2d\x3e\x67\x63\x5f\x6f\x62\x6a\x5f\x74\x79\x70\x65\x20\x3d\x3d\x20\x4a\x53\x5f\x47\x43\x5f\x4f\x42\x4a\x5f\x54\x59\x50\x45\x5f\x4a\x53\x5f\x4f\x42\x4a\x45\x43\x54\x20\x7c\x7c\x20\x70\x2d\x3e\x67\x63\x5f\x6f\x62\x6a\x5f\x74\x79\x70\x65\x20\x3d\x3d\x20\x4a\x53\x5f\x47\x43\x5f\x4f\x42\x4a\x5f\x54\x59\x50\x45\x5f\x46\x55\x4e\x43\x54\x49\x4f\x4e\x5f\x42\x59\x54\x45\x43\x4f\x44\x45\x00\x67\x63\x5f\x66\x72\x65\x65\x5f\x63\x79\x63\x6c\x65\x73\x00\x76\x61\x72\x5f\x72\x65\x66\x2d\x3e\x69\x73\x5f\x64\x65\x74\x61\x63\x68\x65\x64\x00\x6d\x61\x72\x6b\x5f\x63\x68\x69\x6c\x64\x72\x65\x6e\x00\x67\x63\x5f\x64\x65\x63\x72\x65\x66\x5f\x63\x68\x69\x6c\x64\x00\x73\x66\x2d\x3e\x63\x75\x72\x5f\x73\x70\x20\x21\x3d\x20\x4e\x55\x4c\x4c\x00\x61\x73\x79\x6e\x63\x5f\x66\x75\x6e\x63\x5f\x66\x72\x65\x65\x00\x6d\x75\x73\x74\x20\x62\x65\x20\x63\x61\x6c\x6c\x65\x64\x20\x77\x69\x74\x68\x20\x6e\x65\x77\x00\x6d\x72\x2d\x3e\x65\x6d\x70\x74\x79\x00\x6d\x61\x70\x5f\x64\x65\x63\x72\x65\x66\x5f\x72\x65\x63\x6f\x72\x64\x00\x6d\x72\x31\x20\x21\x3d\x20\x4e\x55\x4c\x4c\x00\x64\x65\x6c\x65\x74\x65\x5f\x77\x65\x61\x6b\x5f\x72\x65\x66\x00\x75\x6e\x73\x75\x70\x70\x6f\x72\x74\x65\x64\x20\x6f\x70\x65\x72\x61\x74\x69\x6f\x6e\x00\xba\x00\x00\x00\xbb\x00\x00\x00\xbc\x00\x00\x00\x00\x00\x00\x00\x73\x69\x7a\x65\x20\x21\x3d\x20\x30\x00\x6a\x73\x5f\x64\x65\x66\x5f\x6d\x61\x6c\x6c\x6f\x63\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x81\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xbd\x00\x00\x00\x79\x81\x00\x00\x03\x03\x00\x00\x7e\x81\x00\x00\x00\x00\x00\x00\x84\x81\x00\x00\x03\x03\x00\x00\xd2\x63\x00\x00\x00\x00\x00\x00\x10\x81\x00\x00\x1a\x81\x00\x00\x25\x81\x00\x00\x34\x81\x00\x00\x40\x81\x00\x00\x4a\x81\x00\x00\x53\x81\x00\x00\x61\x81\x00\x00\x45\x76\x61\x6c\x45\x72\x72\x6f\x72\x00\x52\x61\x6e\x67\x65\x45\x72\x72\x6f\x72\x00\x52\x65\x66\x65\x72\x65\x6e\x63\x65\x45\x72\x72\x6f\x72\x00\x53\x79\x6e\x74\x61\x78\x45\x72\x72\x6f\x72\x00\x54\x79\x70\x65\x45\x72\x72\x6f\x72\x00\x55\x52\x49\x45\x72\x72\x6f\x72\x00\x49\x6e\x74\x65\x72\x6e\x61\x6c\x45\x72\x72\x6f\x72\x00\x41\x67\x67\x72\x65\x67\x61\x74\x65\x45\x72\x72\x6f\x72\x00\x74\x6f\x53\x74\x72\x69\x6e\x67\x00\x6e\x61\x6d\x65\x00\x45\x72\x72\x6f\x72\x00\x6d\x65\x73\x73\x61\x67\x65\x00\x3a\x20\x00\x4f\x62\x6a\x65\x63\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x52\x9c\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\xbe\x00\x00\x00\xab\x8f\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\xbf\x00\x00\x00\xe9\x8f\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\xc0\x00\x00\x00\x70\x8f\x00\x00\x03\x00\x00\x00\x03\x01\x00\x00\xc1\x00\x00\x00\x59\x9c\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\xc2\x00\x00\x00\x6a\x9c\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xc3\x00\x00\x00\x7e\x9c\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xc4\x00\x00\x00\x3d\x9a\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\xc5\x00\x00\x00\x36\x9a\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\xc5\x00\x00\x00\x42\x9a\x00\x00\x03\x00\x02\x00\x01\x01\x00\x00\xc5\x00\x00\x00\xbe\x8f\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\xc6\x00\x00\x00\xd3\x8f\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\xc7\x00\x00\x00\x92\x8f\x00\x00\x03\x00\x00\x00\x02\x01\x00\x00\xc8\x00\x00\x00\x94\x9c\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xc9\x00\x00\x00\xae\x9c\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\xca\x00\x00\x00\xb1\x9c\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\xcb\x00\x00\x00\xb8\x9c\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\xcc\x00\x00\x00\xbd\x9c\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\xcc\x00\x00\x00\xc4\x9c\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\xcd\x00\x00\x00\xcd\x9c\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\xcd\x00\x00\x00\xd6\x9c\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xce\x00\x00\x00\xe1\x9c\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xcf\x00\x00\x00\x70\x81\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xd0\x00\x00\x00\xee\x97\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xd1\x00\x00\x00\x43\x8e\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xd2\x00\x00\x00\xd2\x9b\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xd3\x00\x00\x00\xe1\x9b\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xd4\x00\x00\x00\xef\x9b\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xd5\x00\x00\x00\x04\x9c\x00\x00\x01\x01\x00\x00\xd6\x00\x00\x00\xd7\x00\x00\x00\x0e\x9c\x00\x00\x03\x00\x00\x00\x02\x01\x00\x00\xd8\x00\x00\x00\x1f\x9c\x00\x00\x03\x00\x01\x00\x02\x01\x00\x00\xd8\x00\x00\x00\x30\x9c\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\xd9\x00\x00\x00\x41\x9c\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\xd9\x00\x00\x00\x3c\x9b\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xda\x00\x00\x00\x60\x8f\x00\x00\x03\x00\x00\x00\x02\x01\x00\x00\xdb\x00\x00\x00\x41\x9b\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xdc\x00\x00\x00\x70\x81\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x00\x00\x46\x9b\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xde\x00\x00\x00\x5b\x9b\x00\x00\x01\x01\x00\x00\xdf\x00\x00\x00\x00\x00\x00\x00\x64\x9b\x00\x00\x01\x01\x00\x00\xe0\x00\x00\x00\x00\x00\x00\x00\x46\x75\x6e\x63\x74\x69\x6f\x6e\x00\x00\x00\x00\x00\x00\x00\x00\x85\x95\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xe1\x00\x00\x00\x68\x94\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xe2\x00\x00\x00\xa9\x99\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\xe3\x00\x00\x00\xaf\x99\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\xe3\x00\x00\x00\xb4\x99\x00\x00\x03\x00\x02\x00\x01\x01\x00\x00\xe3\x00\x00\x00\xbc\x99\x00\x00\x03\x00\x03\x00\x01\x01\x00\x00\xe3\x00\x00\x00\xc0\x99\x00\x00\x03\x00\x04\x00\x01\x01\x00\x00\xe3\x00\x00\x00\xc7\x99\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\xe4\x00\x00\x00\xce\x99\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\xe4\x00\x00\x00\xda\x99\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xe5\x00\x00\x00\xdf\x99\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\xe6\x00\x00\x00\xe4\x99\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\xe6\x00\x00\x00\x7b\x94\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xe7\x00\x00\x00\x83\x94\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xe8\x00\x00\x00\x8f\x94\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xe9\x00\x00\x00\xee\x99\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\xea\x00\x00\x00\x70\x81\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xeb\x00\x00\x00\xee\x97\x00\x00\x03\x00\x01\x00\x00\x01\x00\x00\xea\x00\x00\x00\xf3\x99\x00\x00\x03\x00\x00\x00\x00\x01\x00\x00\xec\x00\x00\x00\xf7\x99\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\xed\x00\x00\x00\xfc\x99\x00\x00\x03\x00\x01\x00\x00\x01\x00\x00\xec\x00\x00\x00\x02\x9a\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\xed\x00\x00\x00\x0a\x9a\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xee\x00\x00\x00\x12\x9a\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xef\x00\x00\x00\xd9\x94\x00\x00\x03\x00\x00\x00\x02\x01\x00\x00\xf0\x00\x00\x00\x17\x9a\x00\x00\x03\x00\x01\x00\x02\x01\x00\x00\xf0\x00\x00\x00\x1e\x9a\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\xf1\x00\x00\x00\x29\x9a\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\xf2\x00\x00\x00\x31\x9a\x00\x00\x03\x00\x00\x00\x00\x01\x00\x00\xf2\x00\x00\x00\x36\x9a\x00\x00\x03\x00\x01\x00\x00\x01\x00\x00\x71\x00\x00\x00\x85\x95\x00\x00\x03\x09\x00\x00\x36\x9a\x00\x00\xff\xff\xff\xff\x3d\x9a\x00\x00\x03\x00\x00\x00\x00\x01\x00\x00\x71\x00\x00\x00\x42\x9a\x00\x00\x03\x00\x02\x00\x00\x01\x00\x00\x71\x00\x00\x00\x41\x72\x72\x61\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x99\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xf3\x00\x00\x00\x90\x99\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xf4\x00\x00\x00\x95\x99\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xf5\x00\x00\x00\x98\x99\x00\x00\x01\x01\x00\x00\xf6\x00\x00\x00\x00\x00\x00\x00\x63\x6f\x70\x79\x57\x69\x74\x68\x69\x6e\x00\x65\x6e\x74\x72\x69\x65\x73\x00\x66\x69\x6c\x6c\x00\x66\x69\x6e\x64\x00\x66\x69\x6e\x64\x49\x6e\x64\x65\x78\x00\x66\x6c\x61\x74\x00\x66\x6c\x61\x74\x4d\x61\x70\x00\x69\x6e\x63\x6c\x75\x64\x65\x73\x00\x6b\x65\x79\x73\x00\x76\x61\x6c\x75\x65\x73\x00\x00\x00\x00\x00\x00\x00\x00\xea\x8d\x00\x00\x03\x00\x00\x00\x00\x0c\x00\x00\x72\x00\x00\x00\xd5\x8d\x00\x00\x01\x03\x00\x00\x79\x99\x00\x00\x00\x00\x00\x00\x2f\x97\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\xf7\x00\x00\x00\x38\x97\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xf8\x00\x00\x00\x43\x97\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xf9\x00\x00\x00\x49\x97\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xfa\x00\x00\x00\x42\x98\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\xfb\x00\x00\x00\x4c\x98\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\xfb\x00\x00\x00\x5f\x98\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\xfc\x00\x00\x00\x69\x98\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\xfc\x00\x00\x00\x7c\x98\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xfd\x00\x00\x00\x83\x98\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xfe\x00\x00\x00\xd0\x67\x01\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x7f\xcc\x67\x01\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x7f\x8c\x98\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x96\x98\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xff\x00\x00\x00\xcc\x97\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x00\x01\x00\x00\xda\x97\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x01\x01\x00\x00\xe2\x97\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x02\x01\x00\x00\x70\x81\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\x03\x01\x00\x00\xee\x97\x00\x00\x03\x00\x01\x00\x00\x01\x00\x00\x03\x01\x00\x00\x43\x8e\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04\x01\x00\x00\x4e\x75\x6d\x62\x65\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x97\x00\x00\x03\x09\x00\x00\x2f\x97\x00\x00\x00\x00\x00\x00\x38\x97\x00\x00\x03\x09\x00\x00\x38\x97\x00\x00\x00\x00\x00\x00\x43\x97\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x05\x01\x00\x00\x49\x97\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x06\x01\x00\x00\x52\x97\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x07\x01\x00\x00\x5c\x97\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x08\x01\x00\x00\x6a\x97\x00\x00\x00\x06\x00\x00\xff\xff\xff\xff\xff\xff\xef\x7f\x74\x97\x00\x00\x00\x06\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xcc\x67\x01\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x7f\x7e\x97\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xff\x90\x97\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x7f\xa2\x97\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x3c\xaa\x97\x00\x00\x00\x06\x00\x00\xff\xff\xff\xff\xff\xff\x3f\x43\xbb\x97\x00\x00\x00\x06\x00\x00\xff\xff\xff\xff\xff\xff\x3f\xc3\x70\x81\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x09\x01\x00\x00\x43\x8e\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x0a\x01\x00\x00\x42\x6f\x6f\x6c\x65\x61\x6e\x00\x53\x74\x72\x69\x6e\x67\x00\x00\xe5\x96\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x0b\x01\x00\x00\xf2\x96\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x0c\x01\x00\x00\x00\x97\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x0d\x01\x00\x00\x4f\x94\x00\x00\x01\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\x94\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x0e\x01\x00\x00\x61\x94\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x0f\x01\x00\x00\x68\x94\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x10\x01\x00\x00\x6f\x94\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x11\x01\x00\x00\x7b\x94\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\x12\x01\x00\x00\x83\x94\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\x12\x01\x00\x00\x8f\x94\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\x13\x01\x00\x00\x98\x94\x00\x00\x03\x00\x02\x00\x01\x01\x00\x00\x13\x01\x00\x00\xa1\x94\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\x13\x01\x00\x00\xac\x94\x00\x00\x03\x00\xd2\x00\x01\x01\x00\x00\x14\x01\x00\x00\xb2\x94\x00\x00\x03\x00\xd3\x00\x01\x01\x00\x00\x14\x01\x00\x00\xbb\x94\x00\x00\x03\x00\xd5\x00\x01\x01\x00\x00\x14\x01\x00\x00\xc2\x94\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x15\x01\x00\x00\xc8\x94\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x16\x01\x00\x00\xd2\x94\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x17\x01\x00\x00\xd9\x94\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x18\x01\x00\x00\xdf\x94\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x19\x01\x00\x00\xe6\x94\x00\x00\x03\x00\x00\x00\x02\x01\x00\x00\x1a\x01\x00\x00\xee\x94\x00\x00\x03\x00\x01\x00\x02\x01\x00\x00\x1a\x01\x00\x00\xf9\x94\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\x1b\x01\x00\x00\x00\x95\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\x1b\x01\x00\x00\x09\x95\x00\x00\x03\x00\x03\x00\x00\x01\x00\x00\x1c\x01\x00\x00\x0e\x95\x00\x00\x03\x00\x02\x00\x00\x01\x00\x00\x1c\x01\x00\x00\x16\x95\x00\x00\x03\x09\x00\x00\x0e\x95\x00\x00\xff\xff\xff\xff\x20\x95\x00\x00\x03\x00\x01\x00\x00\x01\x00\x00\x1c\x01\x00\x00\x2a\x95\x00\x00\x03\x09\x00\x00\x20\x95\x00\x00\xff\xff\xff\xff\x70\x81\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x1d\x01\x00\x00\x43\x8e\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x1d\x01\x00\x00\x33\x95\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x1e\x01\x00\x00\x3b\x95\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x1f\x01\x00\x00\x49\x95\x00\x00\x03\x00\x01\x00\x00\x01\x00\x00\x20\x01\x00\x00\x55\x95\x00\x00\x03\x00\x00\x00\x00\x01\x00\x00\x20\x01\x00\x00\x61\x95\x00\x00\x03\x00\x01\x00\x00\x01\x00\x00\x20\x01\x00\x00\x73\x95\x00\x00\x03\x00\x00\x00\x00\x01\x00\x00\x20\x01\x00\x00\x85\x95\x00\x00\x03\x00\x05\x00\x00\x01\x00\x00\x71\x00\x00\x00\x97\x95\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\x21\x01\x00\x00\x9e\x95\x00\x00\x03\x00\x01\x00\x00\x01\x00\x00\x21\x01\x00\x00\xa2\x95\x00\x00\x03\x00\x02\x00\x00\x01\x00\x00\x21\x01\x00\x00\xa8\x95\x00\x00\x03\x00\x03\x00\x00\x01\x00\x00\x21\x01\x00\x00\xad\x95\x00\x00\x03\x00\x04\x00\x00\x01\x00\x00\x21\x01\x00\x00\xb3\x95\x00\x00\x03\x00\x05\x00\x01\x01\x00\x00\x21\x01\x00\x00\xbd\x95\x00\x00\x03\x00\x06\x00\x01\x01\x00\x00\x21\x01\x00\x00\xc6\x95\x00\x00\x03\x00\x07\x00\x00\x01\x00\x00\x21\x01\x00\x00\xce\x95\x00\x00\x03\x00\x08\x00\x01\x01\x00\x00\x21\x01\x00\x00\xd3\x95\x00\x00\x03\x00\x09\x00\x00\x01\x00\x00\x21\x01\x00\x00\xd9\x95\x00\x00\x03\x00\x0a\x00\x00\x01\x00\x00\x21\x01\x00\x00\xe0\x95\x00\x00\x03\x00\x0b\x00\x00\x01\x00\x00\x21\x01\x00\x00\xe4\x95\x00\x00\x03\x00\x0c\x00\x00\x01\x00\x00\x21\x01\x00\x00\xea\x8d\x00\x00\x03\x00\x00\x00\x00\x0c\x00\x00\x22\x01\x00\x00\xd5\x8d\x00\x00\x01\x03\x00\x00\x3f\x94\x00\x00\x00\x00\x00\x00\x9b\x90\x00\x00\x03\x08\x00\x00\xa0\x90\x00\x00\x2c\x00\x00\x00\x6c\x8e\x00\x00\x03\x08\x00\x00\x80\x8e\x00\x00\x0e\x00\x00\x00\x70\x81\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x23\x01\x00\x00\x43\x8e\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x24\x01\x00\x00\x4b\x8e\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x24\x01\x00\x00\xd5\x8d\x00\x00\x01\x03\x00\x00\x30\x8d\x00\x00\x00\x00\x00\x00\x60\x8e\x00\x00\x01\x01\x00\x00\x25\x01\x00\x00\x00\x00\x00\x00\x53\x79\x6d\x62\x6f\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x8e\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x26\x01\x00\x00\x3c\x8e\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x27\x01\x00\x00\xea\x8d\x00\x00\x03\x00\x00\x00\x01\x0c\x00\x00\x28\x01\x00\x00\xef\x8d\x00\x00\x03\x00\x01\x00\x01\x0c\x00\x00\x28\x01\x00\x00\xf6\x8d\x00\x00\x03\x00\x02\x00\x01\x0c\x00\x00\x28\x01\x00\x00\xd5\x8d\x00\x00\x01\x03\x00\x00\xfc\x8d\x00\x00\x00\x00\x00\x00\x47\x65\x6e\x65\x72\x61\x74\x6f\x72\x46\x75\x6e\x63\x74\x69\x6f\x6e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x8d\x00\x00\x01\x03\x00\x00\xa0\x8d\x00\x00\x00\x00\x00\x00\x65\x76\x61\x6c\x00\x5b\x53\x79\x6d\x62\x6f\x6c\x2e\x74\x6f\x53\x74\x72\x69\x6e\x67\x54\x61\x67\x5d\x00\x6e\x65\x78\x74\x00\x72\x65\x74\x75\x72\x6e\x00\x74\x68\x72\x6f\x77\x00\x47\x65\x6e\x65\x72\x61\x74\x6f\x72\x00\x6e\x6f\x74\x20\x61\x20\x67\x65\x6e\x65\x72\x61\x74\x6f\x72\x00\x63\x61\x6e\x6e\x6f\x74\x20\x69\x6e\x76\x6f\x6b\x65\x20\x61\x20\x72\x75\x6e\x6e\x69\x6e\x67\x20\x67\x65\x6e\x65\x72\x61\x74\x6f\x72\x00\x66\x6f\x72\x00\x6b\x65\x79\x46\x6f\x72\x00\x76\x61\x6c\x75\x65\x4f\x66\x00\x5b\x53\x79\x6d\x62\x6f\x6c\x2e\x74\x6f\x50\x72\x69\x6d\x69\x74\x69\x76\x65\x5d\x00\x64\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x00\x52\x65\x66\x6c\x65\x63\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x8f\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x29\x01\x00\x00\x66\x8f\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x2a\x01\x00\x00\x70\x8f\x00\x00\x03\x00\x01\x00\x03\x01\x00\x00\xc1\x00\x00\x00\x7f\x8f\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x2b\x01\x00\x00\x8e\x8f\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x2c\x01\x00\x00\x92\x8f\x00\x00\x03\x00\x01\x00\x02\x01\x00\x00\xc8\x00\x00\x00\xab\x8f\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\xbf\x00\x00\x00\xba\x8f\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x2d\x01\x00\x00\xbe\x8f\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\xc6\x00\x00\x00\xcb\x8f\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x2e\x01\x00\x00\xd3\x8f\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\xc7\x00\x00\x00\xe5\x8f\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x2f\x01\x00\x00\xe9\x8f\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x30\x01\x00\x00\xd5\x8d\x00\x00\x01\x03\x00\x00\x6c\x8e\x00\x00\x00\x00\x00\x00\x61\x70\x70\x6c\x79\x00\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x00\x64\x65\x66\x69\x6e\x65\x50\x72\x6f\x70\x65\x72\x74\x79\x00\x64\x65\x6c\x65\x74\x65\x50\x72\x6f\x70\x65\x72\x74\x79\x00\x67\x65\x74\x00\x67\x65\x74\x4f\x77\x6e\x50\x72\x6f\x70\x65\x72\x74\x79\x44\x65\x73\x63\x72\x69\x70\x74\x6f\x72\x00\x67\x65\x74\x50\x72\x6f\x74\x6f\x74\x79\x70\x65\x4f\x66\x00\x68\x61\x73\x00\x69\x73\x45\x78\x74\x65\x6e\x73\x69\x62\x6c\x65\x00\x6f\x77\x6e\x4b\x65\x79\x73\x00\x70\x72\x65\x76\x65\x6e\x74\x45\x78\x74\x65\x6e\x73\x69\x6f\x6e\x73\x00\x73\x65\x74\x00\x73\x65\x74\x50\x72\x6f\x74\x6f\x74\x79\x70\x65\x4f\x66\x00\x70\x72\x6f\x78\x79\x20\x70\x72\x65\x76\x65\x6e\x74\x45\x78\x74\x65\x6e\x73\x69\x6f\x6e\x73\x20\x68\x61\x6e\x64\x6c\x65\x72\x20\x72\x65\x74\x75\x72\x6e\x65\x64\x20\x66\x61\x6c\x73\x65\x00\x70\x72\x6f\x78\x79\x3a\x20\x69\x6e\x63\x6f\x6e\x73\x69\x73\x74\x65\x6e\x74\x20\x70\x72\x65\x76\x65\x6e\x74\x45\x78\x74\x65\x6e\x73\x69\x6f\x6e\x73\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x67\x65\x74\x74\x65\x72\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x73\x65\x74\x74\x65\x72\x00\x63\x61\x6e\x6e\x6f\x74\x20\x68\x61\x76\x65\x20\x73\x65\x74\x74\x65\x72\x2f\x67\x65\x74\x74\x65\x72\x20\x61\x6e\x64\x20\x76\x61\x6c\x75\x65\x20\x6f\x72\x20\x77\x72\x69\x74\x61\x62\x6c\x65\x00\x4d\x61\x74\x68\x00\x60\x93\x00\x00\x03\x00\x00\x00\x02\x01\x00\x00\x31\x01\x00\x00\x64\x93\x00\x00\x03\x00\x01\x00\x02\x01\x00\x00\x31\x01\x00\x00\x68\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x32\x01\x00\x00\x6c\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x33\x01\x00\x00\x72\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x34\x01\x00\x00\x77\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x35\x01\x00\x00\x7d\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x36\x01\x00\x00\x82\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x37\x01\x00\x00\x87\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x38\x01\x00\x00\x8c\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x39\x01\x00\x00\x91\x93\x00\x00\x03\x00\x00\x00\x02\x07\x00\x00\x3a\x01\x00\x00\x97\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x3b\x01\x00\x00\x9b\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x3c\x01\x00\x00\x9f\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x3d\x01\x00\x00\xa3\x93\x00\x00\x03\x00\x00\x00\x02\x07\x00\x00\x3e\x01\x00\x00\xa7\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x3f\x01\x00\x00\xab\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x40\x01\x00\x00\xaf\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x41\x01\x00\x00\xb5\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x42\x01\x00\x00\xba\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x43\x01\x00\x00\xbf\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x44\x01\x00\x00\xc4\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x45\x01\x00\x00\xc9\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x46\x01\x00\x00\xcf\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x47\x01\x00\x00\xd5\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x48\x01\x00\x00\xdb\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x49\x01\x00\x00\xe1\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x4a\x01\x00\x00\xe7\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x4b\x01\x00\x00\xec\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x4c\x01\x00\x00\xf2\x93\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x4d\x01\x00\x00\xf7\x93\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x4e\x01\x00\x00\xfd\x93\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x4f\x01\x00\x00\x04\x94\x00\x00\x03\x00\x00\x00\x01\x06\x00\x00\x50\x01\x00\x00\x0b\x94\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x51\x01\x00\x00\x10\x94\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x52\x01\x00\x00\xd5\x8d\x00\x00\x01\x03\x00\x00\x9b\x90\x00\x00\x00\x00\x00\x00\x16\x94\x00\x00\x00\x06\x00\x00\x69\x57\x14\x8b\x0a\xbf\x05\x40\x18\x94\x00\x00\x00\x06\x00\x00\x16\x55\xb5\xbb\xb1\x6b\x02\x40\x1d\x94\x00\x00\x00\x06\x00\x00\xef\x39\xfa\xfe\x42\x2e\xe6\x3f\x21\x94\x00\x00\x00\x06\x00\x00\xfe\x82\x2b\x65\x47\x15\xf7\x3f\x27\x94\x00\x00\x00\x06\x00\x00\x0e\xe5\x26\x15\x7b\xcb\xdb\x3f\x2e\x94\x00\x00\x00\x06\x00\x00\x18\x2d\x44\x54\xfb\x21\x09\x40\x31\x94\x00\x00\x00\x06\x00\x00\xcd\x3b\x7f\x66\x9e\xa0\xe6\x3f\x39\x94\x00\x00\x00\x06\x00\x00\xcd\x3b\x7f\x66\x9e\xa0\xf6\x3f\x6d\x69\x6e\x00\x6d\x61\x78\x00\x61\x62\x73\x00\x66\x6c\x6f\x6f\x72\x00\x63\x65\x69\x6c\x00\x72\x6f\x75\x6e\x64\x00\x73\x71\x72\x74\x00\x61\x63\x6f\x73\x00\x61\x73\x69\x6e\x00\x61\x74\x61\x6e\x00\x61\x74\x61\x6e\x32\x00\x63\x6f\x73\x00\x65\x78\x70\x00\x6c\x6f\x67\x00\x70\x6f\x77\x00\x73\x69\x6e\x00\x74\x61\x6e\x00\x74\x72\x75\x6e\x63\x00\x73\x69\x67\x6e\x00\x63\x6f\x73\x68\x00\x73\x69\x6e\x68\x00\x74\x61\x6e\x68\x00\x61\x63\x6f\x73\x68\x00\x61\x73\x69\x6e\x68\x00\x61\x74\x61\x6e\x68\x00\x65\x78\x70\x6d\x31\x00\x6c\x6f\x67\x31\x70\x00\x6c\x6f\x67\x32\x00\x6c\x6f\x67\x31\x30\x00\x63\x62\x72\x74\x00\x68\x79\x70\x6f\x74\x00\x72\x61\x6e\x64\x6f\x6d\x00\x66\x72\x6f\x75\x6e\x64\x00\x69\x6d\x75\x6c\x00\x63\x6c\x7a\x33\x32\x00\x45\x00\x4c\x4e\x31\x30\x00\x4c\x4e\x32\x00\x4c\x4f\x47\x32\x45\x00\x4c\x4f\x47\x31\x30\x45\x00\x50\x49\x00\x53\x51\x52\x54\x31\x5f\x32\x00\x53\x51\x52\x54\x32\x00\x53\x74\x72\x69\x6e\x67\x20\x49\x74\x65\x72\x61\x74\x6f\x72\x00\x6c\x65\x6e\x67\x74\x68\x00\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74\x00\x63\x68\x61\x72\x41\x74\x00\x63\x6f\x6e\x63\x61\x74\x00\x63\x6f\x64\x65\x50\x6f\x69\x6e\x74\x41\x74\x00\x69\x6e\x64\x65\x78\x4f\x66\x00\x6c\x61\x73\x74\x49\x6e\x64\x65\x78\x4f\x66\x00\x69\x6e\x63\x6c\x75\x64\x65\x73\x00\x65\x6e\x64\x73\x57\x69\x74\x68\x00\x73\x74\x61\x72\x74\x73\x57\x69\x74\x68\x00\x6d\x61\x74\x63\x68\x00\x6d\x61\x74\x63\x68\x41\x6c\x6c\x00\x73\x65\x61\x72\x63\x68\x00\x73\x70\x6c\x69\x74\x00\x73\x75\x62\x73\x74\x72\x69\x6e\x67\x00\x73\x75\x62\x73\x74\x72\x00\x73\x6c\x69\x63\x65\x00\x72\x65\x70\x65\x61\x74\x00\x72\x65\x70\x6c\x61\x63\x65\x00\x72\x65\x70\x6c\x61\x63\x65\x41\x6c\x6c\x00\x70\x61\x64\x45\x6e\x64\x00\x70\x61\x64\x53\x74\x61\x72\x74\x00\x74\x72\x69\x6d\x00\x74\x72\x69\x6d\x45\x6e\x64\x00\x74\x72\x69\x6d\x52\x69\x67\x68\x74\x00\x74\x72\x69\x6d\x53\x74\x61\x72\x74\x00\x74\x72\x69\x6d\x4c\x65\x66\x74\x00\x5f\x5f\x71\x75\x6f\x74\x65\x00\x6c\x6f\x63\x61\x6c\x65\x43\x6f\x6d\x70\x61\x72\x65\x00\x74\x6f\x4c\x6f\x77\x65\x72\x43\x61\x73\x65\x00\x74\x6f\x55\x70\x70\x65\x72\x43\x61\x73\x65\x00\x74\x6f\x4c\x6f\x63\x61\x6c\x65\x4c\x6f\x77\x65\x72\x43\x61\x73\x65\x00\x74\x6f\x4c\x6f\x63\x61\x6c\x65\x55\x70\x70\x65\x72\x43\x61\x73\x65\x00\x5b\x53\x79\x6d\x62\x6f\x6c\x2e\x69\x74\x65\x72\x61\x74\x6f\x72\x5d\x00\x61\x6e\x63\x68\x6f\x72\x00\x62\x69\x67\x00\x62\x6c\x69\x6e\x6b\x00\x62\x6f\x6c\x64\x00\x66\x69\x78\x65\x64\x00\x66\x6f\x6e\x74\x63\x6f\x6c\x6f\x72\x00\x66\x6f\x6e\x74\x73\x69\x7a\x65\x00\x69\x74\x61\x6c\x69\x63\x73\x00\x6c\x69\x6e\x6b\x00\x73\x6d\x61\x6c\x6c\x00\x73\x74\x72\x69\x6b\x65\x00\x73\x75\x62\x00\x73\x75\x70\x00\x00\x00\x00\x00\x00\x00\x00\x00\x65\x96\x00\x00\x79\x81\x00\x00\x9e\x95\x00\x00\x00\x00\x00\x00\xa2\x95\x00\x00\x00\x00\x00\x00\x67\x96\x00\x00\x00\x00\x00\x00\x69\x96\x00\x00\x00\x00\x00\x00\x6c\x96\x00\x00\x71\x96\x00\x00\x6c\x96\x00\x00\x77\x96\x00\x00\x7c\x96\x00\x00\x00\x00\x00\x00\x65\x96\x00\x00\x7e\x96\x00\x00\xd3\x95\x00\x00\x00\x00\x00\x00\xd9\x95\x00\x00\x00\x00\x00\x00\xe0\x95\x00\x00\x00\x00\x00\x00\xe4\x95\x00\x00\x00\x00\x00\x00\x3d\x22\x00\x26\x71\x75\x6f\x74\x3b\x00\x3c\x2f\x00\x61\x00\x62\x00\x74\x74\x00\x66\x6f\x6e\x74\x00\x63\x6f\x6c\x6f\x72\x00\x73\x69\x7a\x65\x00\x69\x00\x68\x72\x65\x66\x00\x5c\x75\x25\x30\x34\x78\x00\x6e\x6f\x74\x20\x61\x20\x73\x74\x72\x69\x6e\x67\x00\x25\x6c\x6c\x64\x00\x72\x65\x67\x65\x78\x70\x20\x6d\x75\x73\x74\x20\x68\x61\x76\x65\x20\x74\x68\x65\x20\x27\x67\x27\x20\x66\x6c\x61\x67\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x72\x65\x70\x65\x61\x74\x20\x63\x6f\x75\x6e\x74\x00\x67\x00\x72\x65\x67\x65\x78\x20\x6e\x6f\x74\x20\x73\x75\x70\x70\x6f\x72\x74\x65\x64\x00\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65\x00\x66\x72\x6f\x6d\x43\x6f\x64\x65\x50\x6f\x69\x6e\x74\x00\x72\x61\x77\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x63\x6f\x64\x65\x20\x70\x6f\x69\x6e\x74\x00\x53\x79\x6d\x62\x6f\x6c\x28\x00\x29\x00\x6e\x6f\x74\x20\x61\x20\x62\x6f\x6f\x6c\x65\x61\x6e\x00\x70\x61\x72\x73\x65\x49\x6e\x74\x00\x70\x61\x72\x73\x65\x46\x6c\x6f\x61\x74\x00\x69\x73\x4e\x61\x4e\x00\x69\x73\x46\x69\x6e\x69\x74\x65\x00\x69\x73\x49\x6e\x74\x65\x67\x65\x72\x00\x69\x73\x53\x61\x66\x65\x49\x6e\x74\x65\x67\x65\x72\x00\x4d\x41\x58\x5f\x56\x41\x4c\x55\x45\x00\x4d\x49\x4e\x5f\x56\x41\x4c\x55\x45\x00\x4e\x45\x47\x41\x54\x49\x56\x45\x5f\x49\x4e\x46\x49\x4e\x49\x54\x59\x00\x50\x4f\x53\x49\x54\x49\x56\x45\x5f\x49\x4e\x46\x49\x4e\x49\x54\x59\x00\x45\x50\x53\x49\x4c\x4f\x4e\x00\x4d\x41\x58\x5f\x53\x41\x46\x45\x5f\x49\x4e\x54\x45\x47\x45\x52\x00\x4d\x49\x4e\x5f\x53\x41\x46\x45\x5f\x49\x4e\x54\x45\x47\x45\x52\x00\x74\x6f\x45\x78\x70\x6f\x6e\x65\x6e\x74\x69\x61\x6c\x00\x74\x6f\x46\x69\x78\x65\x64\x00\x74\x6f\x50\x72\x65\x63\x69\x73\x69\x6f\x6e\x00\x74\x6f\x4c\x6f\x63\x61\x6c\x65\x53\x74\x72\x69\x6e\x67\x00\x6e\x6f\x74\x20\x61\x20\x6e\x75\x6d\x62\x65\x72\x00\x72\x61\x64\x69\x78\x20\x6d\x75\x73\x74\x20\x62\x65\x20\x62\x65\x74\x77\x65\x65\x6e\x20\x32\x20\x61\x6e\x64\x20\x33\x36\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20\x64\x69\x67\x69\x74\x73\x00\x64\x65\x63\x6f\x64\x65\x55\x52\x49\x00\x64\x65\x63\x6f\x64\x65\x55\x52\x49\x43\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\x00\x65\x6e\x63\x6f\x64\x65\x55\x52\x49\x00\x65\x6e\x63\x6f\x64\x65\x55\x52\x49\x43\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\x00\x65\x73\x63\x61\x70\x65\x00\x75\x6e\x65\x73\x63\x61\x70\x65\x00\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x00\x5f\x5f\x64\x61\x74\x65\x5f\x63\x6c\x6f\x63\x6b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x40\x2a\x5f\x2b\x2d\x2e\x2f\x00\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x41\x42\x43\x44\x45\x46\x00\x2d\x5f\x2e\x21\x7e\x2a\x27\x28\x29\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x00\x65\x78\x70\x65\x63\x74\x69\x6e\x67\x20\x73\x75\x72\x72\x6f\x67\x61\x74\x65\x20\x70\x61\x69\x72\x00\x3b\x2f\x3f\x3a\x40\x26\x3d\x2b\x24\x2c\x23\x00\x6d\x61\x6c\x66\x6f\x72\x6d\x65\x64\x20\x55\x54\x46\x2d\x38\x00\x65\x78\x70\x65\x63\x74\x69\x6e\x67\x20\x25\x25\x00\x65\x78\x70\x65\x63\x74\x69\x6e\x67\x20\x68\x65\x78\x20\x64\x69\x67\x69\x74\x00\x41\x72\x72\x61\x79\x20\x49\x74\x65\x72\x61\x74\x6f\x72\x00\x69\x73\x41\x72\x72\x61\x79\x00\x66\x72\x6f\x6d\x00\x6f\x66\x00\x5b\x53\x79\x6d\x62\x6f\x6c\x2e\x73\x70\x65\x63\x69\x65\x73\x5d\x00\x65\x76\x65\x72\x79\x00\x73\x6f\x6d\x65\x00\x66\x6f\x72\x45\x61\x63\x68\x00\x6d\x61\x70\x00\x66\x69\x6c\x74\x65\x72\x00\x72\x65\x64\x75\x63\x65\x00\x72\x65\x64\x75\x63\x65\x52\x69\x67\x68\x74\x00\x66\x69\x6c\x6c\x00\x66\x69\x6e\x64\x00\x66\x69\x6e\x64\x49\x6e\x64\x65\x78\x00\x6a\x6f\x69\x6e\x00\x70\x6f\x70\x00\x70\x75\x73\x68\x00\x73\x68\x69\x66\x74\x00\x75\x6e\x73\x68\x69\x66\x74\x00\x72\x65\x76\x65\x72\x73\x65\x00\x73\x6f\x72\x74\x00\x73\x70\x6c\x69\x63\x65\x00\x63\x6f\x70\x79\x57\x69\x74\x68\x69\x6e\x00\x66\x6c\x61\x74\x4d\x61\x70\x00\x66\x6c\x61\x74\x00\x76\x61\x6c\x75\x65\x73\x00\x6b\x65\x79\x73\x00\x65\x6e\x74\x72\x69\x65\x73\x00\x41\x72\x72\x61\x79\x20\x74\x6f\x6f\x20\x6c\x6f\x6e\x67\x00\x41\x72\x72\x61\x79\x20\x6c\x6f\x6f\x20\x6c\x6f\x6e\x67\x00\x4e\x75\x6c\x6c\x00\x55\x6e\x64\x65\x66\x69\x6e\x65\x64\x00\x5b\x6f\x62\x6a\x65\x63\x74\x20\x00\x65\x6d\x70\x74\x79\x20\x61\x72\x72\x61\x79\x00\x54\x79\x70\x65\x64\x41\x72\x72\x61\x79\x00\x44\x61\x74\x61\x56\x69\x65\x77\x00\x6e\x6f\x74\x20\x61\x20\x25\x73\x00\x54\x79\x70\x65\x64\x41\x72\x72\x61\x79\x20\x6c\x65\x6e\x67\x74\x68\x20\x69\x73\x20\x74\x6f\x6f\x20\x73\x6d\x61\x6c\x6c\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x6f\x66\x66\x73\x65\x74\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x6c\x65\x6e\x67\x74\x68\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x61\x72\x72\x61\x79\x20\x62\x75\x66\x66\x65\x72\x20\x6c\x65\x6e\x67\x74\x68\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x61\x72\x72\x61\x79\x20\x69\x6e\x64\x65\x78\x00\x61\x73\x79\x6e\x63\x20\x00\x66\x75\x6e\x63\x74\x69\x6f\x6e\x00\x20\x61\x6e\x6f\x6e\x79\x6d\x6f\x75\x73\x28\x00\x0a\x29\x20\x7b\x0a\x00\x0a\x7d\x29\x00\x63\x61\x6c\x6c\x00\x62\x69\x6e\x64\x00\x5b\x53\x79\x6d\x62\x6f\x6c\x2e\x68\x61\x73\x49\x6e\x73\x74\x61\x6e\x63\x65\x5d\x00\x66\x69\x6c\x65\x4e\x61\x6d\x65\x00\x6c\x69\x6e\x65\x4e\x75\x6d\x62\x65\x72\x00\x00\x9f\x9b\x00\x00\xaa\x9b\x00\x00\xba\x9b\x00\x00\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x00\x28\x29\x20\x7b\x0a\x20\x20\x20\x20\x5b\x6e\x61\x74\x69\x76\x65\x20\x63\x6f\x64\x65\x5d\x0a\x7d\x00\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x2a\x00\x61\x73\x79\x6e\x63\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x00\x61\x73\x79\x6e\x63\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x2a\x00\x62\x6f\x75\x6e\x64\x20\x00\x68\x61\x73\x4f\x77\x6e\x50\x72\x6f\x70\x65\x72\x74\x79\x00\x69\x73\x50\x72\x6f\x74\x6f\x74\x79\x70\x65\x4f\x66\x00\x70\x72\x6f\x70\x65\x72\x74\x79\x49\x73\x45\x6e\x75\x6d\x65\x72\x61\x62\x6c\x65\x00\x5f\x5f\x70\x72\x6f\x74\x6f\x5f\x5f\x00\x5f\x5f\x64\x65\x66\x69\x6e\x65\x47\x65\x74\x74\x65\x72\x5f\x5f\x00\x5f\x5f\x64\x65\x66\x69\x6e\x65\x53\x65\x74\x74\x65\x72\x5f\x5f\x00\x5f\x5f\x6c\x6f\x6f\x6b\x75\x70\x47\x65\x74\x74\x65\x72\x5f\x5f\x00\x5f\x5f\x6c\x6f\x6f\x6b\x75\x70\x53\x65\x74\x74\x65\x72\x5f\x5f\x00\x63\x72\x65\x61\x74\x65\x00\x64\x65\x66\x69\x6e\x65\x50\x72\x6f\x70\x65\x72\x74\x69\x65\x73\x00\x67\x65\x74\x4f\x77\x6e\x50\x72\x6f\x70\x65\x72\x74\x79\x4e\x61\x6d\x65\x73\x00\x67\x65\x74\x4f\x77\x6e\x50\x72\x6f\x70\x65\x72\x74\x79\x53\x79\x6d\x62\x6f\x6c\x73\x00\x67\x65\x74\x4f\x77\x6e\x50\x72\x6f\x70\x65\x72\x74\x79\x44\x65\x73\x63\x72\x69\x70\x74\x6f\x72\x73\x00\x69\x73\x00\x61\x73\x73\x69\x67\x6e\x00\x73\x65\x61\x6c\x00\x66\x72\x65\x65\x7a\x65\x00\x69\x73\x53\x65\x61\x6c\x65\x64\x00\x69\x73\x46\x72\x6f\x7a\x65\x6e\x00\x5f\x5f\x67\x65\x74\x43\x6c\x61\x73\x73\x00\x66\x72\x6f\x6d\x45\x6e\x74\x72\x69\x65\x73\x00\x6e\x6f\x74\x20\x61\x20\x70\x72\x6f\x74\x6f\x74\x79\x70\x65\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x61\x63\x63\x65\x73\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x8e\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x53\x01\x00\x00\x70\x81\x00\x00\x03\x00\x13\x00\x00\x01\x00\x00\x54\x01\x00\x00\x4b\x8e\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x55\x01\x00\x00\xbc\xa1\x00\x00\x03\x00\x03\x00\x00\x01\x00\x00\x54\x01\x00\x00\xc8\xa1\x00\x00\x03\x09\x00\x00\xbc\xa1\x00\x00\xff\xff\xff\xff\xd4\xa1\x00\x00\x03\x00\x23\x00\x00\x01\x00\x00\x54\x01\x00\x00\xe0\xa1\x00\x00\x03\x00\x11\x00\x00\x01\x00\x00\x54\x01\x00\x00\xed\xa1\x00\x00\x03\x00\x12\x00\x00\x01\x00\x00\x54\x01\x00\x00\xee\x97\x00\x00\x03\x00\x33\x00\x00\x01\x00\x00\x54\x01\x00\x00\xfa\xa1\x00\x00\x03\x00\x31\x00\x00\x01\x00\x00\x54\x01\x00\x00\x0d\xa2\x00\x00\x03\x00\x32\x00\x00\x01\x00\x00\x54\x01\x00\x00\x20\xa2\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x56\x01\x00\x00\x32\xa2\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x53\x01\x00\x00\x3a\xa2\x00\x00\x03\x00\x01\x01\x00\x01\x00\x00\x57\x01\x00\x00\x42\xa2\x00\x00\x03\x00\x01\x00\x00\x01\x00\x00\x57\x01\x00\x00\x4e\xa2\x00\x00\x03\x00\x00\x00\x00\x01\x00\x00\x57\x01\x00\x00\x5d\xa2\x00\x00\x03\x00\x11\x00\x00\x01\x00\x00\x57\x01\x00\x00\x66\xa2\x00\x00\x03\x00\x10\x00\x00\x01\x00\x00\x57\x01\x00\x00\x72\xa2\x00\x00\x03\x00\x21\x00\x00\x01\x00\x00\x57\x01\x00\x00\x7a\xa2\x00\x00\x03\x00\x20\x00\x00\x01\x00\x00\x57\x01\x00\x00\x85\xa2\x00\x00\x03\x00\x31\x00\x00\x01\x00\x00\x57\x01\x00\x00\x8e\xa2\x00\x00\x03\x00\x30\x00\x00\x01\x00\x00\x57\x01\x00\x00\x9a\xa2\x00\x00\x03\x00\x41\x00\x00\x01\x00\x00\x57\x01\x00\x00\xa5\xa2\x00\x00\x03\x00\x40\x00\x00\x01\x00\x00\x57\x01\x00\x00\xb3\xa2\x00\x00\x03\x00\x51\x00\x00\x01\x00\x00\x57\x01\x00\x00\xbe\xa2\x00\x00\x03\x00\x50\x00\x00\x01\x00\x00\x57\x01\x00\x00\xcc\xa2\x00\x00\x03\x00\x61\x00\x00\x01\x00\x00\x57\x01\x00\x00\xdc\xa2\x00\x00\x03\x00\x60\x00\x00\x01\x00\x00\x57\x01\x00\x00\xef\xa2\x00\x00\x03\x00\x71\x00\x00\x01\x00\x00\x57\x01\x00\x00\xf6\xa2\x00\x00\x03\x00\x70\x00\x00\x01\x00\x00\x57\x01\x00\x00\x00\xa3\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x58\x01\x00\x00\x08\xa3\x00\x00\x03\x00\x71\x06\x01\x01\x00\x00\x59\x01\x00\x00\x18\xa3\x00\x00\x03\x00\x70\x06\x01\x01\x00\x00\x59\x01\x00\x00\x2b\xa3\x00\x00\x03\x00\x71\x05\x02\x01\x00\x00\x59\x01\x00\x00\x36\xa3\x00\x00\x03\x00\x70\x05\x02\x01\x00\x00\x59\x01\x00\x00\x44\xa3\x00\x00\x03\x00\x71\x04\x03\x01\x00\x00\x59\x01\x00\x00\x4f\xa3\x00\x00\x03\x00\x70\x04\x03\x01\x00\x00\x59\x01\x00\x00\x5d\xa3\x00\x00\x03\x00\x71\x03\x04\x01\x00\x00\x59\x01\x00\x00\x66\xa3\x00\x00\x03\x00\x70\x03\x04\x01\x00\x00\x59\x01\x00\x00\x72\xa3\x00\x00\x03\x00\x31\x02\x01\x01\x00\x00\x59\x01\x00\x00\x7a\xa3\x00\x00\x03\x00\x30\x02\x01\x01\x00\x00\x59\x01\x00\x00\x85\xa3\x00\x00\x03\x00\x31\x01\x02\x01\x00\x00\x59\x01\x00\x00\x8e\xa3\x00\x00\x03\x00\x30\x01\x02\x01\x00\x00\x59\x01\x00\x00\x9a\xa3\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x5a\x01\x00\x00\xa2\xa3\x00\x00\x03\x00\x31\x00\x03\x01\x00\x00\x59\x01\x00\x00\xae\xa3\x00\x00\x03\x00\x30\x00\x03\x01\x00\x00\x59\x01\x00\x00\xbd\xa3\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x5b\x01\x00\x00\x44\x61\x74\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\xa0\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x5c\x01\x00\x00\x54\xa0\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x5d\x01\x00\x00\x5a\xa0\x00\x00\x03\x00\x00\x00\x07\x00\x00\x00\x5e\x01\x00\x00\x6e\x6f\x77\x00\x70\x61\x72\x73\x65\x00\x55\x54\x43\x00\x00\x00\x1f\x00\x00\x00\x1c\x00\x00\x00\x1f\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x1f\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x1e\x00\x00\x00\x1f\x00\x00\x00\x2d\x00\x00\x00\x2d\x00\x00\x00\x54\x00\x00\x00\x3a\x00\x00\x00\x3a\x00\x00\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x61\x6e\x46\x65\x62\x4d\x61\x72\x41\x70\x72\x4d\x61\x79\x4a\x75\x6e\x4a\x75\x6c\x41\x75\x67\x53\x65\x70\x4f\x63\x74\x4e\x6f\x76\x44\x65\x63\x00\x44\x61\x74\x65\x20\x76\x61\x6c\x75\x65\x20\x69\x73\x20\x4e\x61\x4e\x00\x49\x6e\x76\x61\x6c\x69\x64\x20\x44\x61\x74\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x53\x75\x6e\x4d\x6f\x6e\x54\x75\x65\x57\x65\x64\x54\x68\x75\x46\x72\x69\x53\x61\x74\x00\x25\x2e\x33\x73\x2c\x20\x25\x30\x32\x64\x20\x25\x2e\x33\x73\x20\x25\x30\x2a\x64\x20\x00\x25\x2e\x33\x73\x20\x25\x2e\x33\x73\x20\x25\x30\x32\x64\x20\x25\x30\x2a\x64\x00\x25\x30\x34\x64\x00\x25\x2b\x30\x37\x64\x00\x2d\x25\x30\x32\x64\x2d\x25\x30\x32\x64\x54\x00\x25\x30\x32\x64\x2f\x25\x30\x32\x64\x2f\x25\x30\x2a\x64\x00\x25\x30\x32\x64\x3a\x25\x30\x32\x64\x3a\x25\x30\x32\x64\x20\x47\x4d\x54\x00\x25\x30\x32\x64\x25\x30\x32\x64\x00\x25\x30\x32\x64\x3a\x25\x30\x32\x64\x3a\x25\x30\x32\x64\x2e\x25\x30\x33\x64\x5a\x00\x25\x30\x32\x64\x3a\x25\x30\x32\x64\x3a\x25\x30\x32\x64\x20\x25\x63\x4d\x00\x6e\x6f\x74\x20\x61\x20\x44\x61\x74\x65\x20\x6f\x62\x6a\x65\x63\x74\x00\x74\x6f\x55\x54\x43\x53\x74\x72\x69\x6e\x67\x00\x74\x6f\x47\x4d\x54\x53\x74\x72\x69\x6e\x67\x00\x74\x6f\x49\x53\x4f\x53\x74\x72\x69\x6e\x67\x00\x74\x6f\x44\x61\x74\x65\x53\x74\x72\x69\x6e\x67\x00\x74\x6f\x54\x69\x6d\x65\x53\x74\x72\x69\x6e\x67\x00\x74\x6f\x4c\x6f\x63\x61\x6c\x65\x44\x61\x74\x65\x53\x74\x72\x69\x6e\x67\x00\x74\x6f\x4c\x6f\x63\x61\x6c\x65\x54\x69\x6d\x65\x53\x74\x72\x69\x6e\x67\x00\x67\x65\x74\x54\x69\x6d\x65\x7a\x6f\x6e\x65\x4f\x66\x66\x73\x65\x74\x00\x67\x65\x74\x54\x69\x6d\x65\x00\x67\x65\x74\x59\x65\x61\x72\x00\x67\x65\x74\x46\x75\x6c\x6c\x59\x65\x61\x72\x00\x67\x65\x74\x55\x54\x43\x46\x75\x6c\x6c\x59\x65\x61\x72\x00\x67\x65\x74\x4d\x6f\x6e\x74\x68\x00\x67\x65\x74\x55\x54\x43\x4d\x6f\x6e\x74\x68\x00\x67\x65\x74\x44\x61\x74\x65\x00\x67\x65\x74\x55\x54\x43\x44\x61\x74\x65\x00\x67\x65\x74\x48\x6f\x75\x72\x73\x00\x67\x65\x74\x55\x54\x43\x48\x6f\x75\x72\x73\x00\x67\x65\x74\x4d\x69\x6e\x75\x74\x65\x73\x00\x67\x65\x74\x55\x54\x43\x4d\x69\x6e\x75\x74\x65\x73\x00\x67\x65\x74\x53\x65\x63\x6f\x6e\x64\x73\x00\x67\x65\x74\x55\x54\x43\x53\x65\x63\x6f\x6e\x64\x73\x00\x67\x65\x74\x4d\x69\x6c\x6c\x69\x73\x65\x63\x6f\x6e\x64\x73\x00\x67\x65\x74\x55\x54\x43\x4d\x69\x6c\x6c\x69\x73\x65\x63\x6f\x6e\x64\x73\x00\x67\x65\x74\x44\x61\x79\x00\x67\x65\x74\x55\x54\x43\x44\x61\x79\x00\x73\x65\x74\x54\x69\x6d\x65\x00\x73\x65\x74\x4d\x69\x6c\x6c\x69\x73\x65\x63\x6f\x6e\x64\x73\x00\x73\x65\x74\x55\x54\x43\x4d\x69\x6c\x6c\x69\x73\x65\x63\x6f\x6e\x64\x73\x00\x73\x65\x74\x53\x65\x63\x6f\x6e\x64\x73\x00\x73\x65\x74\x55\x54\x43\x53\x65\x63\x6f\x6e\x64\x73\x00\x73\x65\x74\x4d\x69\x6e\x75\x74\x65\x73\x00\x73\x65\x74\x55\x54\x43\x4d\x69\x6e\x75\x74\x65\x73\x00\x73\x65\x74\x48\x6f\x75\x72\x73\x00\x73\x65\x74\x55\x54\x43\x48\x6f\x75\x72\x73\x00\x73\x65\x74\x44\x61\x74\x65\x00\x73\x65\x74\x55\x54\x43\x44\x61\x74\x65\x00\x73\x65\x74\x4d\x6f\x6e\x74\x68\x00\x73\x65\x74\x55\x54\x43\x4d\x6f\x6e\x74\x68\x00\x73\x65\x74\x59\x65\x61\x72\x00\x73\x65\x74\x46\x75\x6c\x6c\x59\x65\x61\x72\x00\x73\x65\x74\x55\x54\x43\x46\x75\x6c\x6c\x59\x65\x61\x72\x00\x74\x6f\x4a\x53\x4f\x4e\x00\x6f\x62\x6a\x65\x63\x74\x20\x6e\x65\x65\x64\x73\x20\x74\x6f\x49\x53\x4f\x53\x74\x72\x69\x6e\x67\x20\x6d\x65\x74\x68\x6f\x64\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x68\x69\x6e\x74\x00\x73\x66\x20\x21\x3d\x20\x4e\x55\x4c\x4c\x00\x5f\x5f\x4a\x53\x5f\x45\x76\x61\x6c\x49\x6e\x74\x65\x72\x6e\x61\x6c\x00\x4a\x53\x5f\x56\x41\x4c\x55\x45\x5f\x47\x45\x54\x5f\x54\x41\x47\x28\x73\x66\x2d\x3e\x63\x75\x72\x5f\x66\x75\x6e\x63\x29\x20\x3d\x3d\x20\x4a\x53\x5f\x54\x41\x47\x5f\x4f\x42\x4a\x45\x43\x54\x00\x6a\x73\x5f\x63\x6c\x61\x73\x73\x5f\x68\x61\x73\x5f\x62\x79\x74\x65\x63\x6f\x64\x65\x28\x70\x2d\x3e\x63\x6c\x61\x73\x73\x5f\x69\x64\x29\x00\x73\x2d\x3e\x69\x73\x5f\x65\x76\x61\x6c\x20\x7c\x7c\x20\x73\x2d\x3e\x63\x6c\x6f\x73\x75\x72\x65\x5f\x76\x61\x72\x5f\x63\x6f\x75\x6e\x74\x20\x3d\x3d\x20\x30\x00\x61\x64\x64\x5f\x65\x76\x61\x6c\x5f\x76\x61\x72\x69\x61\x62\x6c\x65\x73\x00\x65\x78\x70\x6f\x72\x74\x65\x64\x20\x76\x61\x72\x69\x61\x62\x6c\x65\x20\x27\x25\x73\x27\x20\x64\x6f\x65\x73\x20\x6e\x6f\x74\x20\x65\x78\x69\x73\x74\x00\x63\x70\x6f\x6f\x6c\x5f\x69\x64\x78\x20\x3e\x3d\x20\x30\x00\x6a\x73\x5f\x63\x72\x65\x61\x74\x65\x5f\x66\x75\x6e\x63\x74\x69\x6f\x6e\x00\x76\x61\x72\x5f\x6b\x69\x6e\x64\x20\x21\x3d\x20\x4a\x53\x5f\x56\x41\x52\x5f\x4e\x4f\x52\x4d\x41\x4c\x00\x72\x65\x73\x6f\x6c\x76\x65\x5f\x73\x63\x6f\x70\x65\x5f\x70\x72\x69\x76\x61\x74\x65\x5f\x66\x69\x65\x6c\x64\x00\x76\x61\x72\x5f\x6b\x69\x6e\x64\x20\x3d\x3d\x20\x4a\x53\x5f\x56\x41\x52\x5f\x50\x52\x49\x56\x41\x54\x45\x5f\x53\x45\x54\x54\x45\x52\x00\x6c\x61\x62\x65\x6c\x20\x3e\x3d\x20\x30\x20\x26\x26\x20\x6c\x61\x62\x65\x6c\x20\x3c\x20\x73\x2d\x3e\x6c\x61\x62\x65\x6c\x5f\x63\x6f\x75\x6e\x74\x00\x72\x65\x73\x6f\x6c\x76\x65\x5f\x76\x61\x72\x69\x61\x62\x6c\x65\x73\x00\x6c\x61\x62\x31\x20\x3e\x3d\x20\x30\x20\x26\x26\x20\x6c\x61\x62\x31\x20\x3c\x20\x73\x2d\x3e\x6c\x61\x62\x65\x6c\x5f\x63\x6f\x75\x6e\x74\x00\x72\x65\x73\x6f\x6c\x76\x65\x5f\x6c\x61\x62\x65\x6c\x73\x00\x6c\x73\x2d\x3e\x61\x64\x64\x72\x20\x3d\x3d\x20\x2d\x31\x00\x64\x69\x66\x66\x20\x3d\x3d\x20\x28\x69\x6e\x74\x31\x36\x5f\x74\x29\x64\x69\x66\x66\x00\x64\x69\x66\x66\x20\x3d\x3d\x20\x28\x69\x6e\x74\x38\x5f\x74\x29\x64\x69\x66\x66\x00\x6c\x61\x62\x65\x6c\x5f\x73\x6c\x6f\x74\x73\x5b\x69\x5d\x2e\x66\x69\x72\x73\x74\x5f\x72\x65\x6c\x6f\x63\x20\x3d\x3d\x20\x4e\x55\x4c\x4c\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x6f\x70\x63\x6f\x64\x65\x20\x28\x6f\x70\x3d\x25\x64\x2c\x20\x70\x63\x3d\x25\x64\x29\x00\x62\x79\x74\x65\x63\x6f\x64\x65\x20\x62\x75\x66\x66\x65\x72\x20\x6f\x76\x65\x72\x66\x6c\x6f\x77\x20\x28\x6f\x70\x3d\x25\x64\x2c\x20\x70\x63\x3d\x25\x64\x29\x00\x73\x74\x61\x63\x6b\x20\x75\x6e\x64\x65\x72\x66\x6c\x6f\x77\x20\x28\x6f\x70\x3d\x25\x64\x2c\x20\x70\x63\x3d\x25\x64\x29\x00\x73\x74\x61\x63\x6b\x20\x6f\x76\x65\x72\x66\x6c\x6f\x77\x20\x28\x6f\x70\x3d\x25\x64\x2c\x20\x70\x63\x3d\x25\x64\x29\x00\x75\x6e\x63\x6f\x6e\x73\x69\x73\x74\x65\x6e\x74\x20\x73\x74\x61\x63\x6b\x20\x73\x69\x7a\x65\x3a\x20\x25\x64\x20\x25\x64\x20\x28\x70\x63\x3d\x25\x64\x29\x00\x66\x69\x6e\x64\x5f\x6a\x75\x6d\x70\x5f\x74\x61\x72\x67\x65\x74\x00\x75\x70\x64\x61\x74\x65\x5f\x6c\x61\x62\x65\x6c\x00\x6c\x73\x2d\x3e\x72\x65\x66\x5f\x63\x6f\x75\x6e\x74\x20\x3e\x3d\x20\x30\x00\x73\x2d\x3e\x6c\x61\x62\x65\x6c\x5f\x73\x6c\x6f\x74\x73\x5b\x6c\x61\x62\x65\x6c\x5d\x2e\x66\x69\x72\x73\x74\x5f\x72\x65\x6c\x6f\x63\x20\x3d\x3d\x20\x4e\x55\x4c\x4c\x00\x73\x6b\x69\x70\x5f\x64\x65\x61\x64\x5f\x63\x6f\x64\x65\x00\x3c\x73\x65\x74\x3e\x00\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x20\x70\x72\x69\x76\x61\x74\x65\x20\x66\x69\x65\x6c\x64\x20\x27\x25\x73\x27\x00\x62\x63\x5f\x62\x75\x66\x5b\x70\x6f\x73\x5d\x20\x3d\x3d\x20\x4f\x50\x5f\x6c\x61\x62\x65\x6c\x00\x6f\x70\x74\x69\x6d\x69\x7a\x65\x5f\x73\x63\x6f\x70\x65\x5f\x6d\x61\x6b\x65\x5f\x67\x6c\x6f\x62\x61\x6c\x5f\x72\x65\x66\x00\x6f\x70\x74\x69\x6d\x69\x7a\x65\x5f\x73\x63\x6f\x70\x65\x5f\x6d\x61\x6b\x65\x5f\x72\x65\x66\x00\x74\x6f\x6f\x20\x6d\x61\x6e\x79\x20\x63\x6c\x6f\x73\x75\x72\x65\x20\x76\x61\x72\x69\x61\x62\x6c\x65\x73\x00\x69\x64\x65\x6e\x74\x69\x66\x69\x65\x72\x20\x65\x78\x70\x65\x63\x74\x65\x64\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x65\x78\x70\x6f\x72\x74\x20\x73\x79\x6e\x74\x61\x78\x00\x65\x78\x70\x65\x63\x74\x69\x6e\x67\x20\x27\x61\x73\x27\x00\x64\x75\x70\x6c\x69\x63\x61\x74\x65\x20\x6c\x61\x62\x65\x6c\x20\x6e\x61\x6d\x65\x00\x72\x65\x74\x75\x72\x6e\x20\x6e\x6f\x74\x20\x69\x6e\x20\x61\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x00\x6c\x69\x6e\x65\x20\x74\x65\x72\x6d\x69\x6e\x61\x74\x6f\x72\x20\x6e\x6f\x74\x20\x61\x6c\x6c\x6f\x77\x65\x64\x20\x61\x66\x74\x65\x72\x20\x74\x68\x72\x6f\x77\x00\x6c\x65\x78\x69\x63\x61\x6c\x20\x64\x65\x63\x6c\x61\x72\x61\x74\x69\x6f\x6e\x73\x20\x63\x61\x6e\x27\x74\x20\x61\x70\x70\x65\x61\x72\x20\x69\x6e\x20\x73\x69\x6e\x67\x6c\x65\x2d\x73\x74\x61\x74\x65\x6d\x65\x6e\x74\x20\x63\x6f\x6e\x74\x65\x78\x74\x00\x66\x6f\x72\x20\x61\x77\x61\x69\x74\x20\x69\x73\x20\x6f\x6e\x6c\x79\x20\x76\x61\x6c\x69\x64\x20\x69\x6e\x20\x61\x73\x79\x6e\x63\x68\x72\x6f\x6e\x6f\x75\x73\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x73\x00\x76\x61\x72\x69\x61\x62\x6c\x65\x20\x6e\x61\x6d\x65\x20\x65\x78\x70\x65\x63\x74\x65\x64\x00\x27\x66\x6f\x72\x20\x61\x77\x61\x69\x74\x27\x20\x6c\x6f\x6f\x70\x20\x73\x68\x6f\x75\x6c\x64\x20\x62\x65\x20\x75\x73\x65\x64\x20\x77\x69\x74\x68\x20\x27\x6f\x66\x27\x00\x69\x6e\x00\x61\x20\x64\x65\x63\x6c\x61\x72\x61\x74\x69\x6f\x6e\x20\x69\x6e\x20\x74\x68\x65\x20\x68\x65\x61\x64\x20\x6f\x66\x20\x61\x20\x66\x6f\x72\x2d\x25\x73\x20\x6c\x6f\x6f\x70\x20\x63\x61\x6e\x27\x74\x20\x68\x61\x76\x65\x20\x61\x6e\x20\x69\x6e\x69\x74\x69\x61\x6c\x69\x7a\x65\x72\x00\x65\x78\x70\x65\x63\x74\x65\x64\x20\x27\x6f\x66\x27\x20\x6f\x72\x20\x27\x69\x6e\x27\x20\x69\x6e\x20\x66\x6f\x72\x20\x63\x6f\x6e\x74\x72\x6f\x6c\x20\x65\x78\x70\x72\x65\x73\x73\x69\x6f\x6e\x00\x63\x6f\x6e\x74\x69\x6e\x75\x65\x20\x6d\x75\x73\x74\x20\x62\x65\x20\x69\x6e\x73\x69\x64\x65\x20\x6c\x6f\x6f\x70\x00\x62\x72\x65\x61\x6b\x20\x6d\x75\x73\x74\x20\x62\x65\x20\x69\x6e\x73\x69\x64\x65\x20\x6c\x6f\x6f\x70\x20\x6f\x72\x20\x73\x77\x69\x74\x63\x68\x00\x62\x72\x65\x61\x6b\x2f\x63\x6f\x6e\x74\x69\x6e\x75\x65\x20\x6c\x61\x62\x65\x6c\x20\x6e\x6f\x74\x20\x66\x6f\x75\x6e\x64\x00\x64\x75\x70\x6c\x69\x63\x61\x74\x65\x20\x64\x65\x66\x61\x75\x6c\x74\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x73\x77\x69\x74\x63\x68\x20\x73\x74\x61\x74\x65\x6d\x65\x6e\x74\x00\x65\x78\x70\x65\x63\x74\x69\x6e\x67\x20\x63\x61\x74\x63\x68\x20\x6f\x72\x20\x66\x69\x6e\x61\x6c\x6c\x79\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x6b\x65\x79\x77\x6f\x72\x64\x3a\x20\x77\x69\x74\x68\x00\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x64\x65\x63\x6c\x61\x72\x61\x74\x69\x6f\x6e\x73\x20\x63\x61\x6e\x27\x74\x20\x61\x70\x70\x65\x61\x72\x20\x69\x6e\x20\x73\x69\x6e\x67\x6c\x65\x2d\x73\x74\x61\x74\x65\x6d\x65\x6e\x74\x20\x63\x6f\x6e\x74\x65\x78\x74\x00\x63\x6c\x61\x73\x73\x20\x64\x65\x63\x6c\x61\x72\x61\x74\x69\x6f\x6e\x73\x20\x63\x61\x6e\x27\x74\x20\x61\x70\x70\x65\x61\x72\x20\x69\x6e\x20\x73\x69\x6e\x67\x6c\x65\x2d\x73\x74\x61\x74\x65\x6d\x65\x6e\x74\x20\x63\x6f\x6e\x74\x65\x78\x74\x00\x75\x6e\x73\x75\x70\x70\x6f\x72\x74\x65\x64\x20\x6b\x65\x79\x77\x6f\x72\x64\x3a\x20\x25\x73\x00\x75\x6e\x65\x78\x70\x65\x63\x74\x65\x64\x20\x27\x79\x69\x65\x6c\x64\x27\x20\x6b\x65\x79\x77\x6f\x72\x64\x00\x79\x69\x65\x6c\x64\x20\x69\x6e\x20\x64\x65\x66\x61\x75\x6c\x74\x20\x65\x78\x70\x72\x65\x73\x73\x69\x6f\x6e\x00\x9a\x9b\x9c\x9d\x9e\xa0\xa1\xa2\xad\xae\xaf\x9f\x9f\x63\x61\x6e\x6e\x6f\x74\x20\x64\x65\x6c\x65\x74\x65\x20\x61\x20\x64\x69\x72\x65\x63\x74\x20\x72\x65\x66\x65\x72\x65\x6e\x63\x65\x20\x69\x6e\x20\x73\x74\x72\x69\x63\x74\x20\x6d\x6f\x64\x65\x00\x63\x61\x6e\x6e\x6f\x74\x20\x64\x65\x6c\x65\x74\x65\x20\x61\x20\x70\x72\x69\x76\x61\x74\x65\x20\x63\x6c\x61\x73\x73\x20\x66\x69\x65\x6c\x64\x00\x75\x6e\x65\x78\x70\x65\x63\x74\x65\x64\x20\x27\x61\x77\x61\x69\x74\x27\x20\x6b\x65\x79\x77\x6f\x72\x64\x00\x61\x77\x61\x69\x74\x20\x69\x6e\x20\x64\x65\x66\x61\x75\x6c\x74\x20\x65\x78\x70\x72\x65\x73\x73\x69\x6f\x6e\x00\x75\x6e\x70\x61\x72\x65\x6e\x74\x68\x65\x73\x69\x7a\x65\x64\x20\x75\x6e\x61\x72\x79\x20\x65\x78\x70\x72\x65\x73\x73\x69\x6f\x6e\x20\x63\x61\x6e\x27\x74\x20\x61\x70\x70\x65\x61\x72\x20\x6f\x6e\x20\x74\x68\x65\x20\x6c\x65\x66\x74\x2d\x68\x61\x6e\x64\x20\x73\x69\x64\x65\x20\x6f\x66\x20\x27\x2a\x2a\x27\x00\x52\x65\x67\x45\x78\x70\x20\x61\x72\x65\x20\x6e\x6f\x74\x20\x73\x75\x70\x70\x6f\x72\x74\x65\x64\x00\x27\x61\x72\x67\x75\x6d\x65\x6e\x74\x73\x27\x20\x69\x64\x65\x6e\x74\x69\x66\x69\x65\x72\x20\x69\x73\x20\x6e\x6f\x74\x20\x61\x6c\x6c\x6f\x77\x65\x64\x20\x69\x6e\x20\x63\x6c\x61\x73\x73\x20\x66\x69\x65\x6c\x64\x20\x69\x6e\x69\x74\x69\x61\x6c\x69\x7a\x65\x72\x00\x64\x75\x70\x6c\x69\x63\x61\x74\x65\x20\x5f\x5f\x70\x72\x6f\x74\x6f\x5f\x5f\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x00\x65\x78\x70\x65\x63\x74\x69\x6e\x67\x20\x74\x61\x72\x67\x65\x74\x00\x6e\x65\x77\x2e\x74\x61\x72\x67\x65\x74\x20\x6f\x6e\x6c\x79\x20\x61\x6c\x6c\x6f\x77\x65\x64\x20\x77\x69\x74\x68\x69\x6e\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x73\x00\x73\x75\x70\x65\x72\x28\x29\x20\x69\x73\x20\x6f\x6e\x6c\x79\x20\x76\x61\x6c\x69\x64\x20\x69\x6e\x20\x61\x20\x64\x65\x72\x69\x76\x65\x64\x20\x63\x6c\x61\x73\x73\x20\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\x00\x27\x73\x75\x70\x65\x72\x27\x20\x69\x73\x20\x6f\x6e\x6c\x79\x20\x76\x61\x6c\x69\x64\x20\x69\x6e\x20\x61\x20\x6d\x65\x74\x68\x6f\x64\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x75\x73\x65\x20\x6f\x66\x20\x27\x73\x75\x70\x65\x72\x27\x00\x6d\x65\x74\x61\x20\x65\x78\x70\x65\x63\x74\x65\x64\x00\x69\x6d\x70\x6f\x72\x74\x2e\x6d\x65\x74\x61\x20\x6f\x6e\x6c\x79\x20\x76\x61\x6c\x69\x64\x20\x69\x6e\x20\x6d\x6f\x64\x75\x6c\x65\x20\x63\x6f\x64\x65\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x75\x73\x65\x20\x6f\x66\x20\x27\x69\x6d\x70\x6f\x72\x74\x28\x29\x27\x00\x75\x6e\x65\x78\x70\x65\x63\x74\x65\x64\x20\x74\x6f\x6b\x65\x6e\x20\x69\x6e\x20\x65\x78\x70\x72\x65\x73\x73\x69\x6f\x6e\x3a\x20\x27\x25\x2e\x2a\x73\x27\x00\x74\x65\x6d\x70\x6c\x61\x74\x65\x20\x6c\x69\x74\x65\x72\x61\x6c\x20\x63\x61\x6e\x6e\x6f\x74\x20\x61\x70\x70\x65\x61\x72\x20\x69\x6e\x20\x61\x6e\x20\x6f\x70\x74\x69\x6f\x6e\x61\x6c\x20\x63\x68\x61\x69\x6e\x00\x54\x6f\x6f\x20\x6d\x61\x6e\x79\x20\x63\x61\x6c\x6c\x20\x61\x72\x67\x75\x6d\x65\x6e\x74\x73\x00\x70\x72\x69\x76\x61\x74\x65\x20\x63\x6c\x61\x73\x73\x20\x66\x69\x65\x6c\x64\x20\x66\x6f\x72\x62\x69\x64\x64\x65\x6e\x20\x61\x66\x74\x65\x72\x20\x73\x75\x70\x65\x72\x00\x65\x78\x70\x65\x63\x74\x69\x6e\x67\x20\x66\x69\x65\x6c\x64\x20\x6e\x61\x6d\x65\x00\x66\x64\x2d\x3e\x62\x79\x74\x65\x5f\x63\x6f\x64\x65\x2e\x62\x75\x66\x5b\x64\x65\x66\x69\x6e\x65\x5f\x63\x6c\x61\x73\x73\x5f\x70\x6f\x73\x5d\x20\x3d\x3d\x20\x4f\x50\x5f\x64\x65\x66\x69\x6e\x65\x5f\x63\x6c\x61\x73\x73\x00\x73\x65\x74\x5f\x6f\x62\x6a\x65\x63\x74\x5f\x6e\x61\x6d\x65\x5f\x63\x6f\x6d\x70\x75\x74\x65\x64\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x00\x75\x6e\x65\x78\x70\x65\x63\x74\x65\x64\x20\x65\x6e\x64\x20\x6f\x66\x20\x72\x65\x67\x65\x78\x70\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x55\x54\x46\x2d\x38\x20\x73\x65\x71\x75\x65\x6e\x63\x65\x00\x75\x6e\x65\x78\x70\x65\x63\x74\x65\x64\x20\x6c\x69\x6e\x65\x20\x74\x65\x72\x6d\x69\x6e\x61\x74\x6f\x72\x20\x69\x6e\x20\x72\x65\x67\x65\x78\x70\x00\x65\x78\x70\x65\x63\x74\x65\x64\x20\x27\x7d\x27\x20\x61\x66\x74\x65\x72\x20\x74\x65\x6d\x70\x6c\x61\x74\x65\x20\x65\x78\x70\x72\x65\x73\x73\x69\x6f\x6e\x00\x75\x6e\x65\x78\x70\x65\x63\x74\x65\x64\x20\x65\x6e\x64\x20\x6f\x66\x20\x73\x74\x72\x69\x6e\x67\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x20\x69\x6e\x20\x61\x20\x4a\x53\x4f\x4e\x20\x73\x74\x72\x69\x6e\x67\x00\x6f\x63\x74\x61\x6c\x20\x65\x73\x63\x61\x70\x65\x20\x73\x65\x71\x75\x65\x6e\x63\x65\x73\x20\x61\x72\x65\x20\x6e\x6f\x74\x20\x61\x6c\x6c\x6f\x77\x65\x64\x20\x69\x6e\x20\x73\x74\x72\x69\x63\x74\x20\x6d\x6f\x64\x65\x00\x6d\x61\x6c\x66\x6f\x72\x6d\x65\x64\x20\x65\x73\x63\x61\x70\x65\x20\x73\x65\x71\x75\x65\x6e\x63\x65\x20\x69\x6e\x20\x73\x74\x72\x69\x6e\x67\x20\x6c\x69\x74\x65\x72\x61\x6c\x00\x63\x61\x6e\x6e\x6f\x74\x20\x6d\x69\x78\x20\x3f\x3f\x20\x77\x69\x74\x68\x20\x26\x26\x20\x6f\x72\x20\x7c\x7c\x00\x73\x70\x65\x63\x69\x61\x6c\x20\x3d\x3d\x20\x50\x55\x54\x5f\x4c\x56\x41\x4c\x55\x45\x5f\x4e\x4f\x4b\x45\x45\x50\x20\x7c\x7c\x20\x73\x70\x65\x63\x69\x61\x6c\x20\x3d\x3d\x20\x50\x55\x54\x5f\x4c\x56\x41\x4c\x55\x45\x5f\x4e\x4f\x4b\x45\x45\x50\x5f\x44\x45\x50\x54\x48\x00\x70\x75\x74\x5f\x6c\x76\x61\x6c\x75\x65\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x6c\x76\x61\x6c\x75\x65\x20\x69\x6e\x20\x73\x74\x72\x69\x63\x74\x20\x6d\x6f\x64\x65\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x66\x6f\x72\x20\x69\x6e\x2f\x6f\x66\x20\x6c\x65\x66\x74\x20\x68\x61\x6e\x64\x2d\x73\x69\x64\x65\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x69\x6e\x63\x72\x65\x6d\x65\x6e\x74\x2f\x64\x65\x63\x72\x65\x6d\x65\x6e\x74\x20\x6f\x70\x65\x72\x61\x6e\x64\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x64\x65\x73\x74\x72\x75\x63\x74\x75\x72\x69\x6e\x67\x20\x74\x61\x72\x67\x65\x74\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x61\x73\x73\x69\x67\x6e\x6d\x65\x6e\x74\x20\x6c\x65\x66\x74\x2d\x68\x61\x6e\x64\x20\x73\x69\x64\x65\x00\x79\x69\x65\x6c\x64\x20\x69\x73\x20\x61\x20\x72\x65\x73\x65\x72\x76\x65\x64\x20\x69\x64\x65\x6e\x74\x69\x66\x69\x65\x72\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x76\x61\x72\x69\x61\x62\x6c\x65\x20\x6e\x61\x6d\x65\x20\x69\x6e\x20\x73\x74\x72\x69\x63\x74\x20\x6d\x6f\x64\x65\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x6c\x65\x78\x69\x63\x61\x6c\x20\x76\x61\x72\x69\x61\x62\x6c\x65\x20\x6e\x61\x6d\x65\x00\x75\x6e\x65\x78\x70\x65\x63\x74\x65\x64\x20\x65\x6c\x6c\x69\x70\x73\x69\x73\x20\x74\x6f\x6b\x65\x6e\x00\x61\x73\x73\x69\x67\x6e\x6d\x65\x6e\x74\x20\x72\x65\x73\x74\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6d\x75\x73\x74\x20\x62\x65\x20\x6c\x61\x73\x74\x00\x6d\x69\x73\x73\x69\x6e\x67\x20\x62\x69\x6e\x64\x69\x6e\x67\x20\x70\x61\x74\x74\x65\x72\x6e\x2e\x2e\x2e\x00\x72\x65\x73\x74\x20\x65\x6c\x65\x6d\x65\x6e\x74\x20\x63\x61\x6e\x6e\x6f\x74\x20\x68\x61\x76\x65\x20\x61\x20\x64\x65\x66\x61\x75\x6c\x74\x20\x76\x61\x6c\x75\x65\x00\x72\x65\x73\x74\x20\x65\x6c\x65\x6d\x65\x6e\x74\x20\x6d\x75\x73\x74\x20\x62\x65\x20\x74\x68\x65\x20\x6c\x61\x73\x74\x20\x6f\x6e\x65\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x61\x73\x73\x69\x67\x6e\x6d\x65\x6e\x74\x20\x73\x79\x6e\x74\x61\x78\x00\x74\x6f\x6f\x20\x63\x6f\x6d\x70\x6c\x69\x63\x61\x74\x65\x64\x20\x64\x65\x73\x74\x72\x75\x63\x74\x75\x72\x69\x6e\x67\x20\x65\x78\x70\x72\x65\x73\x73\x69\x6f\x6e\x00\x64\x75\x70\x6c\x69\x63\x61\x74\x65\x20\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x20\x6e\x61\x6d\x65\x73\x20\x6e\x6f\x74\x20\x61\x6c\x6c\x6f\x77\x65\x64\x20\x69\x6e\x20\x74\x68\x69\x73\x20\x63\x6f\x6e\x74\x65\x78\x74\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x69\x6d\x70\x6f\x72\x74\x20\x62\x69\x6e\x64\x69\x6e\x67\x00\x64\x75\x70\x6c\x69\x63\x61\x74\x65\x20\x69\x6d\x70\x6f\x72\x74\x20\x62\x69\x6e\x64\x69\x6e\x67\x00\x27\x25\x73\x27\x20\x69\x73\x20\x61\x20\x72\x65\x73\x65\x72\x76\x65\x64\x20\x69\x64\x65\x6e\x74\x69\x66\x69\x65\x72\x00\x27\x6c\x65\x74\x27\x20\x69\x73\x20\x6e\x6f\x74\x20\x61\x20\x76\x61\x6c\x69\x64\x20\x6c\x65\x78\x69\x63\x61\x6c\x20\x69\x64\x65\x6e\x74\x69\x66\x69\x65\x72\x00\x6d\x69\x73\x73\x69\x6e\x67\x20\x69\x6e\x69\x74\x69\x61\x6c\x69\x7a\x65\x72\x20\x66\x6f\x72\x20\x63\x6f\x6e\x73\x74\x20\x76\x61\x72\x69\x61\x62\x6c\x65\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x72\x65\x64\x65\x66\x69\x6e\x69\x74\x69\x6f\x6e\x20\x6f\x66\x20\x6c\x65\x78\x69\x63\x61\x6c\x20\x69\x64\x65\x6e\x74\x69\x66\x69\x65\x72\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x72\x65\x64\x65\x66\x69\x6e\x69\x74\x69\x6f\x6e\x20\x6f\x66\x20\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x20\x6e\x61\x6d\x65\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x72\x65\x64\x65\x66\x69\x6e\x69\x74\x69\x6f\x6e\x20\x6f\x66\x20\x61\x20\x76\x61\x72\x69\x61\x62\x6c\x65\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x72\x65\x64\x65\x66\x69\x6e\x69\x74\x69\x6f\x6e\x20\x6f\x66\x20\x67\x6c\x6f\x62\x61\x6c\x20\x69\x64\x65\x6e\x74\x69\x66\x69\x65\x72\x00\x73\x65\x74\x5f\x6f\x62\x6a\x65\x63\x74\x5f\x6e\x61\x6d\x65\x00\x66\x72\x6f\x6d\x20\x63\x6c\x61\x75\x73\x65\x20\x65\x78\x70\x65\x63\x74\x65\x64\x00\x64\x75\x70\x6c\x69\x63\x61\x74\x65\x20\x65\x78\x70\x6f\x72\x74\x65\x64\x20\x6e\x61\x6d\x65\x20\x27\x25\x73\x27\x00\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x6e\x61\x6d\x65\x20\x65\x78\x70\x65\x63\x74\x65\x64\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x72\x65\x64\x65\x66\x69\x6e\x69\x74\x69\x6f\x6e\x20\x6f\x66\x20\x67\x6c\x6f\x62\x61\x6c\x20\x69\x64\x65\x6e\x74\x69\x66\x69\x65\x72\x20\x69\x6e\x20\x6d\x6f\x64\x75\x6c\x65\x20\x63\x6f\x64\x65\x00\x6d\x69\x73\x73\x69\x6e\x67\x20\x66\x6f\x72\x6d\x61\x6c\x20\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20\x61\x72\x67\x75\x6d\x65\x6e\x74\x73\x20\x66\x6f\x72\x20\x67\x65\x74\x74\x65\x72\x20\x6f\x72\x20\x73\x65\x74\x74\x65\x72\x00\x22\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74\x22\x20\x6e\x6f\x74\x20\x61\x6c\x6c\x6f\x77\x65\x64\x20\x69\x6e\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x77\x69\x74\x68\x20\x64\x65\x66\x61\x75\x6c\x74\x20\x6f\x72\x20\x64\x65\x73\x74\x72\x75\x63\x74\x75\x72\x69\x6e\x67\x20\x70\x61\x72\x61\x6d\x65\x74\x65\x72\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x6e\x61\x6d\x65\x20\x69\x6e\x20\x73\x74\x72\x69\x63\x74\x20\x63\x6f\x64\x65\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x61\x72\x67\x75\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x20\x69\x6e\x20\x73\x74\x72\x69\x63\x74\x20\x63\x6f\x64\x65\x00\x64\x75\x70\x6c\x69\x63\x61\x74\x65\x20\x61\x72\x67\x75\x6d\x65\x6e\x74\x20\x6e\x61\x6d\x65\x73\x20\x6e\x6f\x74\x20\x61\x6c\x6c\x6f\x77\x65\x64\x20\x69\x6e\x20\x74\x68\x69\x73\x20\x63\x6f\x6e\x74\x65\x78\x74\x00\x63\x6c\x61\x73\x73\x20\x73\x74\x61\x74\x65\x6d\x65\x6e\x74\x20\x72\x65\x71\x75\x69\x72\x65\x73\x20\x61\x20\x6e\x61\x6d\x65\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x6d\x65\x74\x68\x6f\x64\x20\x6e\x61\x6d\x65\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x66\x69\x65\x6c\x64\x20\x6e\x61\x6d\x65\x00\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72\x20\x61\x70\x70\x65\x61\x72\x73\x20\x6d\x6f\x72\x65\x20\x74\x68\x61\x6e\x20\x6f\x6e\x63\x65\x00\x70\x72\x69\x76\x61\x74\x65\x20\x63\x6c\x61\x73\x73\x20\x66\x69\x65\x6c\x64\x20\x69\x73\x20\x61\x6c\x72\x65\x61\x64\x79\x20\x64\x65\x66\x69\x6e\x65\x64\x00\x28\x29\x7b\x7d\x00\x28\x29\x7b\x73\x75\x70\x65\x72\x28\x2e\x2e\x2e\x61\x72\x67\x75\x6d\x65\x6e\x74\x73\x29\x3b\x7d\x00\x74\x6f\x6f\x20\x6d\x61\x6e\x79\x20\x6c\x6f\x63\x61\x6c\x20\x76\x61\x72\x69\x61\x62\x6c\x65\x73\x00\x25\x2e\x2a\x73\x00\x75\x73\x65\x20\x73\x74\x72\x69\x63\x74\x00\x75\x73\x65\x20\x73\x74\x72\x69\x70\x00\x75\x73\x65\x20\x6d\x61\x74\x68\x00\x75\x6e\x65\x78\x70\x65\x63\x74\x65\x64\x20\x65\x6e\x64\x20\x6f\x66\x20\x63\x6f\x6d\x6d\x65\x6e\x74\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x66\x69\x72\x73\x74\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x20\x6f\x66\x20\x70\x72\x69\x76\x61\x74\x65\x20\x6e\x61\x6d\x65\x00\x6f\x63\x74\x61\x6c\x20\x6c\x69\x74\x65\x72\x61\x6c\x73\x20\x61\x72\x65\x20\x64\x65\x70\x72\x65\x63\x61\x74\x65\x64\x20\x69\x6e\x20\x73\x74\x72\x69\x63\x74\x20\x6d\x6f\x64\x65\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x6e\x75\x6d\x62\x65\x72\x20\x6c\x69\x74\x65\x72\x61\x6c\x00\x75\x6e\x65\x78\x70\x65\x63\x74\x65\x64\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x00\x00\x00\x00\x00\x00\x00\x00\x80\xb6\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x5f\x01\x00\x00\x6e\x6f\x72\x6d\x61\x6c\x69\x7a\x65\x00\x62\x61\x64\x20\x6e\x6f\x72\x6d\x61\x6c\x69\x7a\x61\x74\x69\x6f\x6e\x20\x66\x6f\x72\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x6a\xb8\x00\x00\x01\x01\x00\x00\x60\x01\x00\x00\x00\x00\x00\x00\x70\xb8\x00\x00\x01\x01\x00\x00\x61\x01\x00\x00\x00\x00\x00\x00\x77\xb8\x00\x00\x01\x02\x01\x00\x62\x01\x00\x00\x00\x00\x00\x00\x7e\xb8\x00\x00\x01\x02\x02\x00\x62\x01\x00\x00\x00\x00\x00\x00\x89\xb8\x00\x00\x01\x02\x04\x00\x62\x01\x00\x00\x00\x00\x00\x00\x93\xb8\x00\x00\x01\x02\x08\x00\x62\x01\x00\x00\x00\x00\x00\x00\x9a\xb8\x00\x00\x01\x02\x10\x00\x62\x01\x00\x00\x00\x00\x00\x00\xa2\xb8\x00\x00\x01\x02\x20\x00\x62\x01\x00\x00\x00\x00\x00\x00\xa9\xb8\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x78\x00\x00\x00\xae\xb8\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x63\x01\x00\x00\xb6\xb8\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x64\x01\x00\x00\x70\x81\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x65\x01\x00\x00\xbb\xb8\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x66\x01\x00\x00\xcc\xb8\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x67\x01\x00\x00\xdb\xb8\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x68\x01\x00\x00\xed\xb8\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x69\x01\x00\x00\xfd\xb8\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x6a\x01\x00\x00\x52\x65\x67\x45\x78\x70\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x99\x00\x00\x01\x01\x00\x00\xf6\x00\x00\x00\x00\x00\x00\x00\xea\x8d\x00\x00\x03\x00\x00\x00\x00\x0c\x00\x00\x6b\x01\x00\x00\xd5\x8d\x00\x00\x01\x03\x00\x00\x00\xb8\x00\x00\x00\x00\x00\x00\x52\x65\x67\x45\x78\x70\x20\x53\x74\x72\x69\x6e\x67\x20\x49\x74\x65\x72\x61\x74\x6f\x72\x00\x52\x65\x67\x45\x78\x70\x20\x65\x78\x65\x63\x20\x6d\x65\x74\x68\x6f\x64\x20\x6d\x75\x73\x74\x20\x72\x65\x74\x75\x72\x6e\x20\x61\x6e\x20\x6f\x62\x6a\x65\x63\x74\x20\x6f\x72\x20\x6e\x75\x6c\x6c\x00\x6f\x75\x74\x20\x6f\x66\x20\x6d\x65\x6d\x6f\x72\x79\x20\x69\x6e\x20\x72\x65\x67\x65\x78\x70\x20\x65\x78\x65\x63\x75\x74\x69\x6f\x6e\x00\x66\x6c\x61\x67\x73\x00\x73\x6f\x75\x72\x63\x65\x00\x67\x6c\x6f\x62\x61\x6c\x00\x69\x67\x6e\x6f\x72\x65\x43\x61\x73\x65\x00\x6d\x75\x6c\x74\x69\x6c\x69\x6e\x65\x00\x64\x6f\x74\x41\x6c\x6c\x00\x75\x6e\x69\x63\x6f\x64\x65\x00\x73\x74\x69\x63\x6b\x79\x00\x65\x78\x65\x63\x00\x63\x6f\x6d\x70\x69\x6c\x65\x00\x74\x65\x73\x74\x00\x5b\x53\x79\x6d\x62\x6f\x6c\x2e\x72\x65\x70\x6c\x61\x63\x65\x5d\x00\x5b\x53\x79\x6d\x62\x6f\x6c\x2e\x6d\x61\x74\x63\x68\x5d\x00\x5b\x53\x79\x6d\x62\x6f\x6c\x2e\x6d\x61\x74\x63\x68\x41\x6c\x6c\x5d\x00\x5b\x53\x79\x6d\x62\x6f\x6c\x2e\x73\x65\x61\x72\x63\x68\x5d\x00\x5b\x53\x79\x6d\x62\x6f\x6c\x2e\x73\x70\x6c\x69\x74\x5d\x00\x79\x00\x66\x6c\x61\x67\x73\x20\x6d\x75\x73\x74\x20\x62\x65\x20\x75\x6e\x64\x65\x66\x69\x6e\x65\x64\x00\x28\x3f\x3a\x29\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x04\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x08\x00\x00\x00\x10\x00\x00\x00\x01\x00\x00\x00\x20\x00\x00\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x72\x65\x67\x75\x6c\x61\x72\x20\x65\x78\x70\x72\x65\x73\x73\x69\x6f\x6e\x20\x66\x6c\x61\x67\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\xb9\x00\x00\x03\x08\x00\x00\xa0\xb9\x00\x00\x03\x00\x00\x00\x4a\x53\x4f\x4e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\xa0\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x6c\x01\x00\x00\xd0\xb9\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x6d\x01\x00\x00\xd5\x8d\x00\x00\x01\x03\x00\x00\x90\xb9\x00\x00\x00\x00\x00\x00\x73\x74\x72\x69\x6e\x67\x69\x66\x79\x00\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x00\x62\x69\x67\x69\x6e\x74\x20\x61\x72\x65\x20\x66\x6f\x72\x62\x69\x64\x64\x65\x6e\x20\x69\x6e\x20\x4a\x53\x4f\x4e\x2e\x73\x74\x72\x69\x6e\x67\x69\x66\x79\x00\x63\x69\x72\x63\x75\x6c\x61\x72\x20\x72\x65\x66\x65\x72\x65\x6e\x63\x65\x00\x0a\x00\x20\x00\x75\x6e\x65\x78\x70\x65\x63\x74\x65\x64\x20\x64\x61\x74\x61\x20\x61\x74\x20\x74\x68\x65\x20\x65\x6e\x64\x00\x65\x78\x70\x65\x63\x74\x69\x6e\x67\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x75\x6e\x65\x78\x70\x65\x63\x74\x65\x64\x20\x65\x6e\x64\x20\x6f\x66\x20\x69\x6e\x70\x75\x74\x00\x75\x6e\x65\x78\x70\x65\x63\x74\x65\x64\x20\x74\x6f\x6b\x65\x6e\x3a\x20\x27\x25\x2e\x2a\x73\x27\x00\x00\x00\x00\x92\x00\x00\x00\x6e\x01\x00\x00\x6f\x01\x00\x00\x70\x01\x00\x00\x71\x01\x00\x00\x72\x01\x00\x00\x73\x01\x00\x00\x74\x01\x00\x00\x75\x01\x00\x00\x76\x01\x00\x00\x50\x72\x6f\x78\x79\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\xba\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x77\x01\x00\x00\x72\x65\x76\x6f\x63\x61\x62\x6c\x65\x00\x70\x72\x6f\x78\x79\x3a\x20\x69\x6e\x63\x6f\x6e\x73\x69\x73\x74\x65\x6e\x74\x20\x73\x65\x74\x00\x70\x72\x6f\x78\x79\x3a\x20\x63\x61\x6e\x6e\x6f\x74\x20\x73\x65\x74\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x00\x70\x72\x6f\x78\x79\x3a\x20\x69\x6e\x63\x6f\x6e\x73\x69\x73\x74\x65\x6e\x74\x20\x67\x65\x74\x00\x70\x72\x6f\x78\x79\x3a\x20\x69\x6e\x63\x6f\x6e\x73\x69\x73\x74\x65\x6e\x74\x20\x68\x61\x73\x00\x70\x72\x6f\x78\x79\x3a\x20\x64\x65\x66\x69\x6e\x65\x50\x72\x6f\x70\x65\x72\x74\x79\x20\x65\x78\x63\x65\x70\x74\x69\x6f\x6e\x00\x70\x72\x6f\x78\x79\x3a\x20\x69\x6e\x63\x6f\x6e\x73\x69\x73\x74\x65\x6e\x74\x20\x64\x65\x66\x69\x6e\x65\x50\x72\x6f\x70\x65\x72\x74\x79\x00\x70\x72\x6f\x78\x79\x3a\x20\x69\x6e\x63\x6f\x6e\x73\x69\x73\x74\x65\x6e\x74\x20\x64\x65\x6c\x65\x74\x65\x50\x72\x6f\x70\x65\x72\x74\x79\x00\x70\x72\x6f\x78\x79\x3a\x20\x70\x72\x6f\x70\x65\x72\x74\x69\x65\x73\x20\x6d\x75\x73\x74\x20\x62\x65\x20\x73\x74\x72\x69\x6e\x67\x73\x20\x6f\x72\x20\x73\x79\x6d\x62\x6f\x6c\x73\x00\x70\x72\x6f\x78\x79\x3a\x20\x64\x75\x70\x6c\x69\x63\x61\x74\x65\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x00\x70\x72\x6f\x78\x79\x3a\x20\x74\x61\x72\x67\x65\x74\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6d\x75\x73\x74\x20\x62\x65\x20\x70\x72\x65\x73\x65\x6e\x74\x20\x69\x6e\x20\x70\x72\x6f\x78\x79\x20\x6f\x77\x6e\x4b\x65\x79\x73\x00\x70\x72\x6f\x78\x79\x3a\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x6f\x74\x20\x70\x72\x65\x73\x65\x6e\x74\x20\x69\x6e\x20\x74\x61\x72\x67\x65\x74\x20\x77\x65\x72\x65\x20\x72\x65\x74\x75\x72\x6e\x65\x64\x20\x62\x79\x20\x6e\x6f\x6e\x20\x65\x78\x74\x65\x6e\x73\x69\x62\x6c\x65\x20\x70\x72\x6f\x78\x79\x00\x70\x72\x6f\x78\x79\x3a\x20\x69\x6e\x63\x6f\x6e\x73\x69\x73\x74\x65\x6e\x74\x20\x67\x65\x74\x4f\x77\x6e\x50\x72\x6f\x70\x65\x72\x74\x79\x44\x65\x73\x63\x72\x69\x70\x74\x6f\x72\x00\x00\x00\x00\x00\x00\x10\xbd\x00\x00\xd0\xbd\x00\x00\x80\xbe\x00\x00\xd0\xbe\x00\x00\x10\xbf\x00\x00\x30\xbf\x00\x00\x0c\x0b\x05\x04\x02\x02\x00\x00\x98\x99\x00\x00\x01\x01\x00\x00\xf6\x00\x00\x00\x00\x00\x00\x00\x73\x65\x74\x2f\x61\x64\x64\x20\x69\x73\x20\x6e\x6f\x74\x20\x61\x20\x66\x75\x6e\x63\x74\x69\x6f\x6e\x00\x00\x00\x00\x00\x00\x00\xe5\x8f\x00\x00\x03\x00\x00\x00\x02\x01\x00\x00\x78\x01\x00\x00\x8e\x8f\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\x79\x01\x00\x00\xba\x8f\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\x7a\x01\x00\x00\x8d\xbf\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\x7b\x01\x00\x00\xa4\xbf\x00\x00\x03\x00\x00\x00\x00\x01\x00\x00\x7c\x01\x00\x00\x77\x96\x00\x00\x01\x02\x00\x00\x7d\x01\x00\x00\x00\x00\x00\x00\xb4\x99\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\x7e\x01\x00\x00\x36\x9a\x00\x00\x03\x00\x04\x00\x00\x01\x00\x00\x7f\x01\x00\x00\x3d\x9a\x00\x00\x03\x00\x00\x00\x00\x01\x00\x00\x7f\x01\x00\x00\x42\x9a\x00\x00\x03\x00\x08\x00\x00\x01\x00\x00\x7f\x01\x00\x00\x85\x95\x00\x00\x03\x09\x00\x00\x42\x9a\x00\x00\xff\xff\xff\xff\xd5\x8d\x00\x00\x01\x03\x00\x00\xae\xbf\x00\x00\x00\x00\x00\x00\x89\xbf\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\x78\x01\x00\x00\xba\x8f\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\x7a\x01\x00\x00\x8d\xbf\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\x7b\x01\x00\x00\xa4\xbf\x00\x00\x03\x00\x01\x00\x00\x01\x00\x00\x7c\x01\x00\x00\x77\x96\x00\x00\x01\x02\x01\x00\x7d\x01\x00\x00\x00\x00\x00\x00\xb4\x99\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\x7e\x01\x00\x00\x36\x9a\x00\x00\x03\x00\x01\x00\x00\x01\x00\x00\x7f\x01\x00\x00\x3d\x9a\x00\x00\x03\x09\x00\x00\x36\x9a\x00\x00\xff\xff\xff\xff\x85\x95\x00\x00\x03\x09\x00\x00\x36\x9a\x00\x00\xff\xff\xff\xff\x42\x9a\x00\x00\x03\x00\x09\x00\x00\x01\x00\x00\x7f\x01\x00\x00\xd5\x8d\x00\x00\x01\x03\x00\x00\xaa\xbf\x00\x00\x00\x00\x00\x00\xe5\x8f\x00\x00\x03\x00\x02\x00\x02\x01\x00\x00\x78\x01\x00\x00\x8e\x8f\x00\x00\x03\x00\x02\x00\x01\x01\x00\x00\x79\x01\x00\x00\xba\x8f\x00\x00\x03\x00\x02\x00\x01\x01\x00\x00\x7a\x01\x00\x00\x8d\xbf\x00\x00\x03\x00\x02\x00\x01\x01\x00\x00\x7b\x01\x00\x00\xd5\x8d\x00\x00\x01\x03\x00\x00\x9c\xbf\x00\x00\x00\x00\x00\x00\x89\xbf\x00\x00\x03\x00\x03\x00\x01\x01\x00\x00\x78\x01\x00\x00\xba\x8f\x00\x00\x03\x00\x03\x00\x01\x01\x00\x00\x7a\x01\x00\x00\x8d\xbf\x00\x00\x03\x00\x03\x00\x01\x01\x00\x00\x7b\x01\x00\x00\xd5\x8d\x00\x00\x01\x03\x00\x00\x94\xbf\x00\x00\x00\x00\x00\x00\xea\x8d\x00\x00\x03\x00\x00\x00\x00\x0c\x00\x00\x80\x01\x00\x00\xd5\x8d\x00\x00\x01\x03\x00\x00\x7c\xbf\x00\x00\x00\x00\x00\x00\xea\x8d\x00\x00\x03\x00\x01\x00\x00\x0c\x00\x00\x80\x01\x00\x00\xd5\x8d\x00\x00\x01\x03\x00\x00\x50\xbf\x00\x00\x00\x00\x00\x00\x53\x65\x74\x20\x49\x74\x65\x72\x61\x74\x6f\x72\x00\x73\x20\x21\x3d\x20\x4e\x55\x4c\x4c\x00\x6a\x73\x5f\x6d\x61\x70\x5f\x69\x74\x65\x72\x61\x74\x6f\x72\x5f\x6e\x65\x78\x74\x00\x4d\x61\x70\x20\x49\x74\x65\x72\x61\x74\x6f\x72\x00\x61\x64\x64\x00\x64\x65\x6c\x65\x74\x65\x00\x57\x65\x61\x6b\x53\x65\x74\x00\x57\x65\x61\x6b\x4d\x61\x70\x00\x63\x6c\x65\x61\x72\x00\x53\x65\x74\x00\x4d\x61\x70\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5d\xc4\x00\x00\x01\x02\x13\x00\x81\x01\x00\x00\x00\x00\x00\x00\xd9\x94\x00\x00\x03\x00\x13\x00\x02\x01\x00\x00\x82\x01\x00\x00\xd5\x8d\x00\x00\x01\x03\x00\x00\xf0\xbf\x00\x00\x00\x00\x00\x00\x41\x72\x72\x61\x79\x42\x75\x66\x66\x65\x72\x00\x00\x00\x00\x00\xfe\xc5\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x83\x01\x00\x00\x98\x99\x00\x00\x01\x01\x00\x00\xf6\x00\x00\x00\x00\x00\x00\x00\x5d\xc4\x00\x00\x01\x02\x14\x00\x81\x01\x00\x00\x00\x00\x00\x00\xd9\x94\x00\x00\x03\x00\x14\x00\x02\x01\x00\x00\x82\x01\x00\x00\xd5\x8d\x00\x00\x01\x03\x00\x00\x50\xc0\x00\x00\x00\x00\x00\x00\x53\x68\x61\x72\x65\x64\x41\x72\x72\x61\x79\x42\x75\x66\x66\x65\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x98\x99\x00\x00\x01\x01\x00\x00\xf6\x00\x00\x00\x00\x00\x00\x00\x4f\x94\x00\x00\x01\x01\x00\x00\x84\x01\x00\x00\x00\x00\x00\x00\x56\xc4\x00\x00\x01\x02\x00\x00\x85\x01\x00\x00\x00\x00\x00\x00\x5d\xc4\x00\x00\x01\x02\x00\x00\x86\x01\x00\x00\x00\x00\x00\x00\x68\xc4\x00\x00\x01\x02\x00\x00\x87\x01\x00\x00\x00\x00\x00\x00\xe5\x8f\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x88\x01\x00\x00\x36\x9a\x00\x00\x03\x00\x01\x00\x00\x01\x00\x00\x89\x01\x00\x00\x85\x95\x00\x00\x03\x09\x00\x00\x36\x9a\x00\x00\xff\xff\xff\xff\x3d\x9a\x00\x00\x03\x00\x00\x00\x00\x01\x00\x00\x89\x01\x00\x00\x42\x9a\x00\x00\x03\x00\x02\x00\x00\x01\x00\x00\x89\x01\x00\x00\xd5\x8d\x00\x00\x01\x01\x00\x00\x8a\x01\x00\x00\x00\x00\x00\x00\x1e\x9a\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x8b\x01\x00\x00\xa9\x99\x00\x00\x03\x00\x08\x00\x01\x01\x00\x00\xe3\x00\x00\x00\xaf\x99\x00\x00\x03\x00\x09\x00\x01\x01\x00\x00\xe3\x00\x00\x00\xb4\x99\x00\x00\x03\x00\x0a\x00\x01\x01\x00\x00\xe3\x00\x00\x00\xbc\x99\x00\x00\x03\x00\x0b\x00\x01\x01\x00\x00\xe3\x00\x00\x00\xc0\x99\x00\x00\x03\x00\x0c\x00\x01\x01\x00\x00\xe3\x00\x00\x00\xc7\x99\x00\x00\x03\x00\x08\x00\x01\x01\x00\x00\xe4\x00\x00\x00\xce\x99\x00\x00\x03\x00\x09\x00\x01\x01\x00\x00\xe4\x00\x00\x00\xda\x99\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x8c\x01\x00\x00\xdf\x99\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\x8d\x01\x00\x00\xe4\x99\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\x8d\x01\x00\x00\x0a\x9a\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x8e\x01\x00\x00\xd9\x94\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x8f\x01\x00\x00\x5d\xc5\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\x90\x01\x00\x00\x12\x9a\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x91\x01\x00\x00\xee\x99\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\x92\x01\x00\x00\xee\x97\x00\x00\x03\x00\x01\x00\x00\x01\x00\x00\x92\x01\x00\x00\x7b\x94\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\x93\x01\x00\x00\x83\x94\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\x93\x01\x00\x00\x8f\x94\x00\x00\x03\x00\xff\xff\x01\x01\x00\x00\x93\x01\x00\x00\x90\x99\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\x94\x01\x00\x00\x95\x99\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x95\x01\x00\x00\x98\x99\x00\x00\x01\x01\x00\x00\xf6\x00\x00\x00\x00\x00\x00\x00\x42\x59\x54\x45\x53\x5f\x50\x45\x52\x5f\x45\x4c\x45\x4d\x45\x4e\x54\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x56\xc4\x00\x00\x01\x02\x01\x00\x85\x01\x00\x00\x00\x00\x00\x00\x5d\xc4\x00\x00\x01\x02\x01\x00\x86\x01\x00\x00\x00\x00\x00\x00\x68\xc4\x00\x00\x01\x02\x01\x00\x87\x01\x00\x00\x00\x00\x00\x00\x73\xc4\x00\x00\x03\x00\x16\x00\x01\x01\x00\x00\x96\x01\x00\x00\x7b\xc4\x00\x00\x03\x00\x17\x00\x01\x01\x00\x00\x96\x01\x00\x00\x84\xc4\x00\x00\x03\x00\x18\x00\x01\x01\x00\x00\x96\x01\x00\x00\x8d\xc4\x00\x00\x03\x00\x19\x00\x01\x01\x00\x00\x96\x01\x00\x00\x97\xc4\x00\x00\x03\x00\x1a\x00\x01\x01\x00\x00\x96\x01\x00\x00\xa0\xc4\x00\x00\x03\x00\x1b\x00\x01\x01\x00\x00\x96\x01\x00\x00\xaa\xc4\x00\x00\x03\x00\x1c\x00\x01\x01\x00\x00\x96\x01\x00\x00\xb6\xc4\x00\x00\x03\x00\x1d\x00\x01\x01\x00\x00\x96\x01\x00\x00\xc3\xc4\x00\x00\x03\x00\x1e\x00\x01\x01\x00\x00\x96\x01\x00\x00\xce\xc4\x00\x00\x03\x00\x1f\x00\x01\x01\x00\x00\x96\x01\x00\x00\xd9\xc4\x00\x00\x03\x00\x16\x00\x02\x01\x00\x00\x97\x01\x00\x00\xe1\xc4\x00\x00\x03\x00\x17\x00\x02\x01\x00\x00\x97\x01\x00\x00\xea\xc4\x00\x00\x03\x00\x18\x00\x02\x01\x00\x00\x97\x01\x00\x00\xf3\xc4\x00\x00\x03\x00\x19\x00\x02\x01\x00\x00\x97\x01\x00\x00\xfd\xc4\x00\x00\x03\x00\x1a\x00\x02\x01\x00\x00\x97\x01\x00\x00\x06\xc5\x00\x00\x03\x00\x1b\x00\x02\x01\x00\x00\x97\x01\x00\x00\x10\xc5\x00\x00\x03\x00\x1c\x00\x02\x01\x00\x00\x97\x01\x00\x00\x1c\xc5\x00\x00\x03\x00\x1d\x00\x02\x01\x00\x00\x97\x01\x00\x00\x29\xc5\x00\x00\x03\x00\x1e\x00\x02\x01\x00\x00\x97\x01\x00\x00\x34\xc5\x00\x00\x03\x00\x1f\x00\x02\x01\x00\x00\x97\x01\x00\x00\xd5\x8d\x00\x00\x01\x03\x00\x00\x97\x9a\x00\x00\x00\x00\x00\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x62\x79\x74\x65\x4f\x66\x66\x73\x65\x74\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x62\x79\x74\x65\x4c\x65\x6e\x67\x74\x68\x00\x62\x75\x66\x66\x65\x72\x00\x62\x79\x74\x65\x4c\x65\x6e\x67\x74\x68\x00\x62\x79\x74\x65\x4f\x66\x66\x73\x65\x74\x00\x67\x65\x74\x49\x6e\x74\x38\x00\x67\x65\x74\x55\x69\x6e\x74\x38\x00\x67\x65\x74\x49\x6e\x74\x31\x36\x00\x67\x65\x74\x55\x69\x6e\x74\x31\x36\x00\x67\x65\x74\x49\x6e\x74\x33\x32\x00\x67\x65\x74\x55\x69\x6e\x74\x33\x32\x00\x67\x65\x74\x42\x69\x67\x49\x6e\x74\x36\x34\x00\x67\x65\x74\x42\x69\x67\x55\x69\x6e\x74\x36\x34\x00\x67\x65\x74\x46\x6c\x6f\x61\x74\x33\x32\x00\x67\x65\x74\x46\x6c\x6f\x61\x74\x36\x34\x00\x73\x65\x74\x49\x6e\x74\x38\x00\x73\x65\x74\x55\x69\x6e\x74\x38\x00\x73\x65\x74\x49\x6e\x74\x31\x36\x00\x73\x65\x74\x55\x69\x6e\x74\x31\x36\x00\x73\x65\x74\x49\x6e\x74\x33\x32\x00\x73\x65\x74\x55\x69\x6e\x74\x33\x32\x00\x73\x65\x74\x42\x69\x67\x49\x6e\x74\x36\x34\x00\x73\x65\x74\x42\x69\x67\x55\x69\x6e\x74\x36\x34\x00\x73\x65\x74\x46\x6c\x6f\x61\x74\x33\x32\x00\x73\x65\x74\x46\x6c\x6f\x61\x74\x36\x34\x00\x6f\x75\x74\x20\x6f\x66\x20\x62\x6f\x75\x6e\x64\x00\x63\x61\x6e\x6e\x6f\x74\x20\x62\x65\x20\x63\x61\x6c\x6c\x65\x64\x00\x73\x75\x62\x61\x72\x72\x61\x79\x00\x00\x00\x98\x01\x00\x00\x99\x01\x00\x00\x98\x01\x00\x00\x9a\x01\x00\x00\x9b\x01\x00\x00\x9c\x01\x00\x00\x9d\x01\x00\x00\x9e\x01\x00\x00\x9f\x01\x00\x00\xa0\x01\x00\x00\xa1\x01\x00\x00\xa2\x01\x00\x00\xa3\x01\x00\x00\xa2\x01\x00\x00\xa4\x01\x00\x00\xa5\x01\x00\x00\xa6\x01\x00\x00\xa7\x01\x00\x00\xa8\x01\x00\x00\xa9\x01\x00\x00\xaa\x01\x00\x00\xab\x01\x00\x00\x63\x61\x6e\x6e\x6f\x74\x20\x75\x73\x65\x20\x69\x64\x65\x6e\x74\x69\x63\x61\x6c\x20\x41\x72\x72\x61\x79\x42\x75\x66\x66\x65\x72\x00\x6e\x65\x77\x20\x41\x72\x72\x61\x79\x42\x75\x66\x66\x65\x72\x20\x69\x73\x20\x74\x6f\x6f\x20\x73\x6d\x61\x6c\x6c\x00\x69\x73\x56\x69\x65\x77\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\xac\x01\x00\x00\xad\x01\x00\x00\xc1\x00\x00\x00\xae\x01\x00\x00\xaf\x01\x00\x00\xc2\x00\x00\x00\xae\x01\x00\x00\xaf\x01\x00\x00\xc3\x00\x00\x00\x9c\x00\x00\x00\x9d\x00\x00\x00\xc4\x00\x00\x00\xb0\x01\x00\x00\xb1\x01\x00\x00\xc5\x00\x00\x00\xb0\x01\x00\x00\xb1\x01\x00\x00\x2f\x00\x00\x00\xb2\x01\x00\x00\xb3\x01\x00\x00\xc6\x00\x00\x00\x9c\x00\x00\x00\x9d\x00\x00\x00\xc7\x00\x00\x00\xb4\x01\x00\x00\xb5\x01\x00\x00\x00\x00\x00\x00\xbe\xc9\x00\x00\x03\x00\x00\x00\x02\x00\x00\x00\xb6\x01\x00\x00\xc3\xc9\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xb7\x01\x00\x00\xc9\xc9\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xb8\x01\x00\x00\xd5\x8d\x00\x00\x01\x03\x00\x00\xc0\xc6\x00\x00\x00\x00\x00\x00\x50\x72\x6f\x6d\x69\x73\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x84\xc9\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\xb9\x01\x00\x00\x8c\xc9\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\xb9\x01\x00\x00\x93\xc9\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\xba\x01\x00\x00\x97\xc9\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\xba\x01\x00\x00\xa2\xc9\x00\x00\x03\x00\x02\x00\x01\x01\x00\x00\xba\x01\x00\x00\xa6\xc9\x00\x00\x03\x00\x00\x00\x01\x00\x00\x00\xbb\x01\x00\x00\x98\x99\x00\x00\x01\x01\x00\x00\xf6\x00\x00\x00\x00\x00\x00\x00\x41\x73\x79\x6e\x63\x46\x75\x6e\x63\x74\x69\x6f\x6e\x00\x00\x00\xd5\x8d\x00\x00\x01\x03\x00\x00\x40\xc7\x00\x00\x00\x00\x00\x00\x6d\xc9\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xe1\x00\x00\x00\xea\x8d\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\xbc\x01\x00\x00\xef\x8d\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\xbc\x01\x00\x00\xf6\x8d\x00\x00\x03\x00\x02\x00\x01\x01\x00\x00\xbc\x01\x00\x00\xea\x8d\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\xbd\x01\x00\x00\xef\x8d\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\xbd\x01\x00\x00\xf6\x8d\x00\x00\x03\x00\x02\x00\x01\x01\x00\x00\xbd\x01\x00\x00\xd5\x8d\x00\x00\x01\x03\x00\x00\x10\xc8\x00\x00\x00\x00\x00\x00\x41\x73\x79\x6e\x63\x47\x65\x6e\x65\x72\x61\x74\x6f\x72\x46\x75\x6e\x63\x74\x69\x6f\x6e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd5\x8d\x00\x00\x01\x03\x00\x00\xe0\xc7\x00\x00\x00\x00\x00\x00\x41\x73\x79\x6e\x63\x47\x65\x6e\x65\x72\x61\x74\x6f\x72\x00\x6e\x6f\x74\x20\x61\x6e\x20\x41\x73\x79\x6e\x63\x47\x65\x6e\x65\x72\x61\x74\x6f\x72\x20\x6f\x62\x6a\x65\x63\x74\x00\x4a\x53\x5f\x49\x73\x55\x6e\x64\x65\x66\x69\x6e\x65\x64\x28\x66\x75\x6e\x63\x5f\x72\x65\x74\x29\x00\x6a\x73\x5f\x61\x73\x79\x6e\x63\x5f\x67\x65\x6e\x65\x72\x61\x74\x6f\x72\x5f\x72\x65\x73\x75\x6d\x65\x5f\x6e\x65\x78\x74\x00\x61\x72\x67\x63\x20\x3d\x3d\x20\x35\x00\x70\x72\x6f\x6d\x69\x73\x65\x5f\x72\x65\x61\x63\x74\x69\x6f\x6e\x5f\x6a\x6f\x62\x00\x73\x2d\x3e\x73\x74\x61\x74\x65\x20\x3d\x3d\x20\x4a\x53\x5f\x41\x53\x59\x4e\x43\x5f\x47\x45\x4e\x45\x52\x41\x54\x4f\x52\x5f\x53\x54\x41\x54\x45\x5f\x41\x57\x41\x49\x54\x49\x4e\x47\x5f\x52\x45\x54\x55\x52\x4e\x20\x7c\x7c\x20\x73\x2d\x3e\x73\x74\x61\x74\x65\x20\x3d\x3d\x20\x4a\x53\x5f\x41\x53\x59\x4e\x43\x5f\x47\x45\x4e\x45\x52\x41\x54\x4f\x52\x5f\x53\x54\x41\x54\x45\x5f\x43\x4f\x4d\x50\x4c\x45\x54\x45\x44\x00\x6a\x73\x5f\x61\x73\x79\x6e\x63\x5f\x67\x65\x6e\x65\x72\x61\x74\x6f\x72\x5f\x72\x65\x73\x6f\x6c\x76\x65\x5f\x66\x75\x6e\x63\x74\x69\x6f\x6e\x00\x73\x2d\x3e\x73\x74\x61\x74\x65\x20\x3d\x3d\x20\x4a\x53\x5f\x41\x53\x59\x4e\x43\x5f\x47\x45\x4e\x45\x52\x41\x54\x4f\x52\x5f\x53\x54\x41\x54\x45\x5f\x45\x58\x45\x43\x55\x54\x49\x4e\x47\x00\x6e\x6f\x74\x20\x61\x6e\x20\x41\x73\x79\x6e\x63\x2d\x66\x72\x6f\x6d\x2d\x53\x79\x6e\x63\x20\x49\x74\x65\x72\x61\x74\x6f\x72\x00\x5b\x53\x79\x6d\x62\x6f\x6c\x2e\x61\x73\x79\x6e\x63\x49\x74\x65\x72\x61\x74\x6f\x72\x5d\x00\x72\x65\x73\x6f\x6c\x76\x65\x00\x72\x65\x6a\x65\x63\x74\x00\x61\x6c\x6c\x00\x61\x6c\x6c\x53\x65\x74\x74\x6c\x65\x64\x00\x61\x6e\x79\x00\x72\x61\x63\x65\x00\x72\x65\x6a\x65\x63\x74\x65\x64\x00\x66\x75\x6c\x66\x69\x6c\x6c\x65\x64\x00\x74\x68\x65\x6e\x00\x63\x61\x74\x63\x68\x00\x66\x69\x6e\x61\x6c\x6c\x79\x00\x70\x72\x6f\x6d\x69\x73\x65\x20\x73\x65\x6c\x66\x20\x72\x65\x73\x6f\x6c\x75\x74\x69\x6f\x6e\x00\x61\x72\x67\x63\x20\x3d\x3d\x20\x33\x00\x6a\x73\x5f\x70\x72\x6f\x6d\x69\x73\x65\x5f\x72\x65\x73\x6f\x6c\x76\x65\x5f\x74\x68\x65\x6e\x61\x62\x6c\x65\x5f\x6a\x6f\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x81\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xbe\x01\x00\x00\x43\x8e\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\xbf\x01\x00\x00\xd5\x8d\x00\x00\x01\x03\x00\x00\x50\xca\x00\x00\x00\x00\x00\x00\x42\x69\x67\x49\x6e\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xcb\x00\x00\x03\x00\x00\x00\x02\x01\x00\x00\xc0\x01\x00\x00\x48\xcb\x00\x00\x03\x00\x01\x00\x02\x01\x00\x00\xc0\x01\x00\x00\x4f\xcb\x00\x00\x03\x00\x01\x00\x02\x01\x00\x00\xc1\x01\x00\x00\x54\xcb\x00\x00\x03\x00\x02\x00\x02\x01\x00\x00\xc1\x01\x00\x00\x59\xcb\x00\x00\x03\x00\x03\x00\x02\x01\x00\x00\xc1\x01\x00\x00\x5e\xcb\x00\x00\x03\x00\x06\x00\x02\x01\x00\x00\xc1\x01\x00\x00\x63\xcb\x00\x00\x03\x00\x11\x00\x02\x01\x00\x00\xc1\x01\x00\x00\x6b\xcb\x00\x00\x03\x00\x12\x00\x02\x01\x00\x00\xc1\x01\x00\x00\x73\xcb\x00\x00\x03\x00\x13\x00\x02\x01\x00\x00\xc1\x01\x00\x00\x7b\xcb\x00\x00\x03\x00\x16\x00\x02\x01\x00\x00\xc1\x01\x00\x00\x7d\x93\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\xc2\x01\x00\x00\x83\xcb\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\xc2\x01\x00\x00\x8b\xcb\x00\x00\x03\x00\x00\x00\x01\x01\x00\x00\xc3\x01\x00\x00\x95\xcb\x00\x00\x03\x00\x01\x00\x01\x01\x00\x00\xc3\x01\x00\x00\x61\x73\x55\x69\x6e\x74\x4e\x00\x61\x73\x49\x6e\x74\x4e\x00\x74\x64\x69\x76\x00\x66\x64\x69\x76\x00\x63\x64\x69\x76\x00\x65\x64\x69\x76\x00\x74\x64\x69\x76\x72\x65\x6d\x00\x66\x64\x69\x76\x72\x65\x6d\x00\x63\x64\x69\x76\x72\x65\x6d\x00\x65\x64\x69\x76\x72\x65\x6d\x00\x73\x71\x72\x74\x72\x65\x6d\x00\x66\x6c\x6f\x6f\x72\x4c\x6f\x67\x32\x00\x63\x74\x7a\x00\x70\x2d\x3e\x68\x65\x61\x64\x65\x72\x2e\x72\x65\x66\x5f\x63\x6f\x75\x6e\x74\x20\x3d\x3d\x20\x31\x00\x4a\x53\x5f\x43\x6f\x6d\x70\x61\x63\x74\x42\x69\x67\x49\x6e\x74\x31\x00\x63\x61\x6e\x6e\x6f\x74\x20\x63\x6f\x6e\x76\x65\x72\x74\x20\x4e\x61\x4e\x20\x6f\x72\x20\x49\x6e\x66\x69\x6e\x69\x74\x79\x20\x74\x6f\x20\x62\x69\x67\x69\x6e\x74\x00\x63\x61\x6e\x6e\x6f\x74\x20\x63\x6f\x6e\x76\x65\x72\x74\x20\x74\x6f\x20\x62\x69\x67\x69\x6e\x74\x3a\x20\x6e\x6f\x74\x20\x61\x6e\x20\x69\x6e\x74\x65\x67\x65\x72\x00\x6e\x6f\x74\x20\x61\x20\x62\x69\x67\x69\x6e\x74\x00\x62\x69\x67\x69\x6e\x74\x20\x61\x72\x67\x75\x6d\x65\x6e\x74\x20\x77\x69\x74\x68\x20\x75\x6e\x61\x72\x79\x20\x2b\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x76\x65\x72\x73\x69\x6f\x6e\x20\x28\x25\x64\x20\x65\x78\x70\x65\x63\x74\x65\x64\x3d\x25\x64\x29\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x74\x79\x70\x65\x64\x20\x61\x72\x72\x61\x79\x00\x4e\x75\x6d\x62\x65\x72\x20\x74\x61\x67\x20\x65\x78\x70\x65\x63\x74\x65\x64\x20\x66\x6f\x72\x20\x64\x61\x74\x65\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\xff\xff\xff\x00\x00\x00\x00\xf7\xff\xff\xff\x00\x00\x00\x00\xf5\xff\xff\xff\x69\x6e\x76\x61\x6c\x69\x64\x20\x62\x69\x67\x6e\x75\x6d\x20\x6c\x65\x6e\x67\x74\x68\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x64\x69\x67\x69\x74\x00\x6f\x62\x6a\x65\x63\x74\x20\x72\x65\x66\x65\x72\x65\x6e\x63\x65\x73\x20\x61\x72\x65\x20\x6e\x6f\x74\x20\x61\x6c\x6c\x6f\x77\x65\x64\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x6f\x62\x6a\x65\x63\x74\x20\x72\x65\x66\x65\x72\x65\x6e\x63\x65\x20\x28\x25\x75\x20\x3e\x3d\x20\x25\x75\x29\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x74\x61\x67\x20\x28\x74\x61\x67\x3d\x25\x64\x20\x70\x6f\x73\x3d\x25\x75\x29\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x61\x74\x6f\x6d\x20\x69\x6e\x64\x65\x78\x20\x28\x70\x6f\x73\x3d\x25\x75\x29\x00\x72\x65\x61\x64\x20\x61\x66\x74\x65\x72\x20\x74\x68\x65\x20\x65\x6e\x64\x20\x6f\x66\x20\x74\x68\x65\x20\x62\x75\x66\x66\x65\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x09\x00\x0e\x00\x20\x00\x21\x00\xa0\x00\xa1\x00\x80\x16\x81\x16\x00\x20\x0b\x20\x28\x20\x2a\x20\x2f\x20\x30\x20\x5f\x20\x60\x20\x00\x30\x01\x30\xff\xfe\x00\xff\x65\x78\x74\x72\x61\x6e\x65\x6f\x75\x73\x20\x63\x68\x61\x72\x61\x63\x74\x65\x72\x73\x20\x61\x74\x20\x74\x68\x65\x20\x65\x6e\x64\x00\x00\x00\x00\x00\x00\x01\x03\x05\x01\x01\x01\x01\x05\x05\x05\x01\x02\x02\x03\x05\x05\x01\x01\x01\x02\x02\x03\x03\x05\x05\x01\x05\x01\x11\x6f\x70\x63\x6f\x64\x65\x20\x3c\x20\x52\x45\x4f\x50\x5f\x43\x4f\x55\x4e\x54\x00\x6e\x6f\x64\x65\x5f\x6d\x6f\x64\x75\x6c\x65\x73\x2f\x6e\x65\x61\x72\x2d\x73\x64\x6b\x2d\x6a\x73\x2f\x71\x75\x69\x63\x6b\x6a\x73\x2f\x6c\x69\x62\x72\x65\x67\x65\x78\x70\x2e\x63\x00\x63\x6f\x6d\x70\x75\x74\x65\x5f\x73\x74\x61\x63\x6b\x5f\x73\x69\x7a\x65\x00\x28\x70\x6f\x73\x20\x2b\x20\x6c\x65\x6e\x29\x20\x3c\x3d\x20\x62\x63\x5f\x62\x75\x66\x5f\x6c\x65\x6e\x00\x73\x74\x61\x63\x6b\x5f\x73\x69\x7a\x65\x20\x3e\x20\x30\x00\x74\x6f\x6f\x20\x6d\x61\x6e\x79\x20\x69\x6d\x62\x72\x69\x63\x61\x74\x65\x64\x20\x71\x75\x61\x6e\x74\x69\x66\x69\x65\x72\x73\x00\x6f\x75\x74\x20\x6f\x66\x20\x6d\x65\x6d\x6f\x72\x79\x00\x73\x74\x61\x63\x6b\x20\x6f\x76\x65\x72\x66\x6c\x6f\x77\x00\x73\x79\x6e\x74\x61\x78\x20\x65\x72\x72\x6f\x72\x00\x6e\x6f\x74\x68\x69\x6e\x67\x20\x74\x6f\x20\x72\x65\x70\x65\x61\x74\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x67\x72\x6f\x75\x70\x20\x6e\x61\x6d\x65\x00\x64\x75\x70\x6c\x69\x63\x61\x74\x65\x20\x67\x72\x6f\x75\x70\x20\x6e\x61\x6d\x65\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x67\x72\x6f\x75\x70\x00\x74\x6f\x6f\x20\x6d\x61\x6e\x79\x20\x63\x61\x70\x74\x75\x72\x65\x73\x00\x65\x78\x70\x65\x63\x74\x69\x6e\x67\x20\x67\x72\x6f\x75\x70\x20\x6e\x61\x6d\x65\x00\x67\x72\x6f\x75\x70\x20\x6e\x61\x6d\x65\x20\x6e\x6f\x74\x20\x64\x65\x66\x69\x6e\x65\x64\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x64\x65\x63\x69\x6d\x61\x6c\x20\x65\x73\x63\x61\x70\x65\x20\x69\x6e\x20\x72\x65\x67\x75\x6c\x61\x72\x20\x65\x78\x70\x72\x65\x73\x73\x69\x6f\x6e\x00\x62\x61\x63\x6b\x20\x72\x65\x66\x65\x72\x65\x6e\x63\x65\x20\x6f\x75\x74\x20\x6f\x66\x20\x72\x61\x6e\x67\x65\x20\x69\x6e\x20\x72\x65\x67\x75\x6c\x61\x72\x20\x65\x78\x70\x72\x65\x73\x73\x69\x6f\x6e\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x63\x6c\x61\x73\x73\x20\x72\x61\x6e\x67\x65\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x72\x65\x70\x65\x74\x69\x74\x69\x6f\x6e\x20\x63\x6f\x75\x6e\x74\x00\x74\x6f\x6f\x20\x6d\x61\x6e\x79\x20\x72\x61\x6e\x67\x65\x73\x00\x00\x00\x12\xd1\x00\x00\x80\xcd\x00\x00\x20\xd1\x00\x00\x65\x78\x70\x65\x63\x74\x69\x6e\x67\x20\x27\x7b\x27\x20\x61\x66\x74\x65\x72\x20\x5c\x70\x00\x75\x6e\x6b\x6e\x6f\x77\x6e\x20\x75\x6e\x69\x63\x6f\x64\x65\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x76\x61\x6c\x75\x65\x00\x65\x78\x70\x65\x63\x74\x69\x6e\x67\x20\x27\x7d\x27\x00\x53\x63\x72\x69\x70\x74\x00\x73\x63\x00\x53\x63\x72\x69\x70\x74\x5f\x45\x78\x74\x65\x6e\x73\x69\x6f\x6e\x73\x00\x75\x6e\x6b\x6e\x6f\x77\x6e\x20\x75\x6e\x69\x63\x6f\x64\x65\x20\x73\x63\x72\x69\x70\x74\x00\x47\x65\x6e\x65\x72\x61\x6c\x5f\x43\x61\x74\x65\x67\x6f\x72\x79\x00\x67\x63\x00\x75\x6e\x6b\x6e\x6f\x77\x6e\x20\x75\x6e\x69\x63\x6f\x64\x65\x20\x67\x65\x6e\x65\x72\x61\x6c\x20\x63\x61\x74\x65\x67\x6f\x72\x79\x00\x75\x6e\x6b\x6e\x6f\x77\x6e\x20\x75\x6e\x69\x63\x6f\x64\x65\x20\x70\x72\x6f\x70\x65\x72\x74\x79\x20\x6e\x61\x6d\x65\x00\x5e\x24\x5c\x2e\x2a\x2b\x3f\x28\x29\x5b\x5d\x7b\x7d\x7c\x2f\x00\x69\x6e\x76\x61\x6c\x69\x64\x20\x65\x73\x63\x61\x70\x65\x20\x73\x65\x71\x75\x65\x6e\x63\x65\x20\x69\x6e\x20\x72\x65\x67\x75\x6c\x61\x72\x20\x65\x78\x70\x72\x65\x73\x73\x69\x6f\x6e\x00\x75\x6e\x65\x78\x70\x65\x63\x74\x65\x64\x20\x65\x6e\x64\x00\x6d\x61\x6c\x66\x6f\x72\x6d\x65\x64\x20\x75\x6e\x69\x63\x6f\x64\x65\x20\x63\x68\x61\x72\x00\x01\x00\x30\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x30\x00\x3a\x00\x41\x00\x5b\x00\x5f\x00\x60\x00\x61\x00\x7b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\xfe\xff\xff\x87\xfe\xff\xff\x07\x00\x00\x00\x00\x10\x00\xff\x03\xfe\xff\xff\x87\xfe\xff\xff\x07\x65\x78\x70\x65\x63\x74\x69\x6e\x67\x20\x27\x25\x63\x27\x00\x76\x61\x6c\x20\x3c\x20\x73\x2d\x3e\x63\x61\x70\x74\x75\x72\x65\x5f\x63\x6f\x75\x6e\x74\x00\x6c\x72\x65\x5f\x65\x78\x65\x63\x5f\x62\x61\x63\x6b\x74\x72\x61\x63\x6b\x00\x76\x61\x6c\x32\x20\x3c\x20\x73\x2d\x3e\x63\x61\x70\x74\x75\x72\x65\x5f\x63\x6f\x75\x6e\x74\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x9a\x20\x00\x00\x9a\x30\x00\x73\x81\x5a\x00\x30\x17\x60\x00\x30\x07\x6c\x00\xb3\x81\x6f\x00\x00\x17\x70\x00\x00\x07\x7c\x00\x00\x81\x7f\x00\x40\x30\x80\x00\xc3\x01\x98\x00\x90\x81\x98\x00\x40\x06\x99\x00\x40\x90\x9c\x00\xb4\x81\xa4\x00\x40\x2e\xa5\x00\x30\x01\xbc\x00\x40\x86\xbc\x00\x70\x81\xbf\x00\x00\x01\xc0\x00\x30\x81\xc0\x00\x40\x04\xc1\x00\x30\x01\xc3\x00\x40\x82\xc3\x00\x30\x82\xc4\x00\x40\x82\xc5\x00\x30\x01\xc7\x00\x30\x81\xc7\x00\x30\x01\xc8\x00\x40\x82\xc8\x00\x30\x81\xc9\x00\x30\x01\xca\x00\x00\x81\xca\x00\x30\x01\xcb\x00\x30\x81\xcb\x00\x40\x02\xcc\x00\x00\x01\xcd\x00\x30\x01\xce\x00\x30\x81\xce\x00\x00\x01\xcf\x00\x30\x81\xcf\x00\x40\x06\xd0\x00\x30\x01\xd3\x00\x40\x82\xd3\x00\x30\x81\xd4\x00\x40\x02\xd6\x00\x30\x01\xd7\x00\x40\x82\xd7\x00\x30\x82\xd8\x00\x40\x84\xd9\x00\x30\x81\xdb\x00\x40\x02\xdc\x00\x40\x02\xde\x00\x00\x81\xdf\x00\x50\x03\xe2\x00\x50\x83\xe3\x00\x50\x03\xe5\x00\x40\x90\xe6\x00\x00\x81\xee\x00\x40\x12\xef\x00\xb4\x01\xf8\x00\x50\x83\xf8\x00\x40\x02\xfa\x00\x30\x01\xfb\x00\x30\x81\xfb\x00\x40\x28\xfc\x00\x30\x01\x10\x01\x40\x12\x11\x01\x31\x01\x1d\x01\x40\x82\x1d\x01\x30\x81\x1e\x01\x31\x01\x1f\x01\x01\x82\x1f\x01\x40\x82\x20\x01\x30\x81\x21\x01\x30\x01\x22\x01\x30\x81\x22\x01\x40\x0a\x23\x01\x01\x01\x28\x01\x01\x81\x28\x01\x01\x01\x29\x01\x00\x81\x29\x01\x00\x01\x2a\x01\x00\x02\x2b\x01\x00\x81\x2c\x01\x00\x81\x2d\x01\x01\x01\x2e\x01\x00\x01\x30\x01\x01\x81\x30\x01\x00\x81\x31\x01\x01\x81\x32\x01\x01\x01\x33\x01\x00\x01\x34\x01\x00\x81\x34\x01\x01\x01\x35\x01\x01\x81\x35\x01\x01\x01\x36\x01\x00\x81\x37\x01\x01\x81\x38\x01\x00\x01\x39\x01\x00\x81\x3a\x01\x01\x81\x3e\x01\x00\x01\x40\x01\x01\x01\x41\x01\x00\x81\x41\x01\x01\x81\x43\x01\x00\x01\x44\x01\x00\x81\x44\x01\x00\x02\x45\x01\x00\x01\x46\x01\x00\x01\x49\x01\x01\x81\x4e\x01\x01\x01\x4f\x01\x73\x81\xa2\x01\x40\x04\xb8\x01\x40\x02\xbb\x01\x00\x83\xbd\x01\x30\x81\xbf\x01\x30\x01\xc3\x01\x30\x03\xc4\x01\x30\x01\xc6\x01\x30\x02\xc7\x01\xd0\x01\xc8\x01\x30\x91\xc8\x01\x30\x89\xd1\x01\x00\x01\xd6\x01\x00\x83\xd6\x01\xd3\x01\xd8\x01\x00\x91\xd8\x01\x73\x01\xe1\x01\x00\x89\xe1\x01\x00\x01\xe6\x01\x00\x82\xe6\x01\x30\x81\xe7\x01\x73\x01\xe8\x01\x73\x81\xe8\x01\x73\x81\xea\x01\x73\x01\xeb\x01\x00\x81\xeb\x01\x40\x18\xec\x01\x73\x01\xf8\x01\x73\x81\xf8\x01\x00\x01\xf9\x01\x00\x81\xf9\x01\xa0\x01\xfa\x01\x73\x81\xfa\x01\x40\x82\xfb\x01\x30\x81\xfc\x01\x40\x02\xfd\x01\x30\x83\xfe\x01\x30\x10\x00\x02\x30\x20\x08\x02\x00\x20\x18\x02\x00\x10\x28\x02\x40\x22\x30\x02\x40\x36\x45\x02\x30\x01\x60\x02\x40\x8e\x60\x02\x00\x81\x67\x02\x40\x60\x68\x02\x30\xa6\x98\x02\x00\xa6\xb0\x02\xb5\x81\xc3\x02\x31\x26\x50\x08\x31\x81\x63\x08\x31\x81\x66\x08\x00\x2b\x68\x08\x00\x83\x7e\x08\x11\x50\xd0\x09\x10\x06\xf8\x09\x20\x06\xfc\x09\x74\x01\x40\x0e\x74\x81\x40\x0e\x74\x01\x41\x0e\x74\x81\x41\x0e\x74\x01\x42\x0e\x74\x81\x42\x0e\x74\x01\x43\x0e\x80\x81\x43\x0e\x80\x01\x44\x0e\x30\x2b\x48\x0e\x30\x83\x5e\x0e\x01\x81\xbc\x0e\x01\x81\xbe\x0e\x01\x01\xc7\x0e\x40\x7e\x00\x0f\x40\x18\x3f\x0f\xb5\x01\x4b\x0f\xb6\x81\x4b\x0f\xb6\x01\x4c\x0f\xb6\x81\x4c\x0f\xb7\x01\x4d\x0f\x80\x81\x4d\x0f\x30\x01\x4f\x0f\x40\x60\x50\x0f\x00\x08\x80\x0f\x30\x08\x84\x0f\x00\x06\x88\x0f\x30\x06\x8c\x0f\x00\x08\x90\x0f\x30\x08\x94\x0f\x00\x08\x98\x0f\x30\x08\x9c\x0f\x00\x06\xa0\x0f\x30\x06\xa4\x0f\xb0\x01\xa8\x0f\x00\x81\xa8\x0f\xd3\x01\xa9\x0f\x00\x81\xa9\x0f\xd3\x01\xaa\x0f\x00\x81\xaa\x0f\xd3\x01\xab\x0f\x00\x81\xab\x0f\x30\x81\xac\x0f\x30\x81\xad\x0f\x30\x81\xae\x0f\x30\x81\xaf\x0f\x00\x08\xb0\x0f\x30\x08\xb4\x0f\x00\x02\xb8\x0f\x00\x04\xb9\x0f\x00\x02\xbb\x0f\x01\x02\xbc\x0f\x01\x02\xbd\x0f\x01\x02\xbe\x0f\xb7\x08\xc0\x0f\x67\x08\xc4\x0f\xb8\x08\xc8\x0f\x68\x08\xcc\x0f\xb8\x08\xd0\x0f\x68\x08\xd4\x0f\x00\x02\xd8\x0f\xb9\x01\xd9\x0f\xb1\x81\xd9\x0f\xb9\x01\xda\x0f\xb1\x01\xdb\x0f\xd7\x81\xdb\x0f\x30\x02\xdc\x0f\x30\x02\xdd\x0f\x61\x01\xde\x0f\x73\x01\xdf\x0f\xb9\x01\xe1\x0f\xb2\x81\xe1\x0f\xba\x01\xe2\x0f\xb2\x01\xe3\x0f\xd8\x81\xe3\x0f\x30\x04\xe4\x0f\x62\x01\xe6\x0f\x00\x02\xe8\x0f\xd0\x01\xe9\x0f\xd0\x81\xe9\x0f\xb0\x01\xeb\x0f\xd0\x81\xeb\x0f\x30\x02\xec\x0f\x30\x02\xed\x0f\x01\x02\xf0\x0f\xd3\x01\xf1\x0f\xd3\x81\xf1\x0f\xba\x01\xf2\x0f\x01\x81\xf2\x0f\xb0\x01\xf3\x0f\xd3\x81\xf3\x0f\x30\x02\xf4\x0f\x30\x02\xf5\x0f\x31\x01\xf6\x0f\xba\x01\xf9\x0f\xb2\x81\xf9\x0f\xbb\x01\xfa\x0f\xb2\x01\xfb\x0f\xd9\x81\xfb\x0f\x30\x02\xfc\x0f\x30\x02\xfd\x0f\x62\x01\xfe\x0f\xa0\x01\x93\x10\xa0\x01\x95\x10\xa0\x81\x95\x10\x31\x01\x99\x10\x01\x01\xa7\x10\x31\x10\xb0\x10\x01\x10\xb8\x10\x40\x82\xc1\x10\x31\x1a\x5b\x12\x01\x1a\x68\x12\x31\x2f\x00\x16\x01\x2f\x18\x16\x40\x02\x30\x16\x30\x01\x31\x16\x30\x81\x31\x16\x30\x01\x32\x16\x00\x81\x32\x16\x00\x01\x33\x16\x40\x86\x33\x16\x30\x81\x36\x16\x30\x01\x37\x16\x30\x81\x37\x16\x30\x01\x38\x16\x40\x02\x39\x16\x40\x82\x3a\x16\x30\x02\x3f\x16\x40\x64\x40\x16\x40\x84\x75\x16\x40\x02\x79\x16\x00\x26\x80\x16\x00\x81\x93\x16\x00\x81\x96\x16\x40\x2e\x20\x53\x40\x1c\x40\x53\x40\x0e\x91\x53\x40\x3e\x99\x53\x40\x84\xbc\x53\x30\x81\xbe\x53\x40\x0a\xbf\x53\x40\x82\xc5\x53\x30\x81\xc6\x53\x40\x04\xc8\x53\x01\x01\xca\x53\x40\x14\xcb\x53\x30\x01\xd5\x53\x30\x81\xd5\x53\x30\x01\xd6\x53\x30\x81\xd6\x53\x30\x01\xd7\x53\x30\x01\xd8\x53\x30\x81\xd8\x53\x30\x01\xd9\x53\x31\x81\xd9\x53\x40\x0c\xda\x53\x40\x02\xe1\x53\x31\x01\xe2\x53\x30\x81\xe2\x53\x30\x01\xe3\x53\x40\x84\xe3\x53\x40\x82\xfa\x53\x01\x81\xa9\x55\x20\x50\xb8\x55\xb2\x01\x80\x7d\xb2\x81\x80\x7d\xb2\x01\x81\x7d\xda\x81\x81\x7d\xda\x01\x82\x7d\xb3\x81\x82\x7d\xb3\x01\x83\x7d\xbb\x81\x89\x7d\xbb\x01\x8a\x7d\xbb\x81\x8a\x7d\xbc\x01\x8b\x7d\xbb\x81\x8b\x7d\x31\x9a\x90\x7f\x01\x9a\xa0\x7f\x31\x28\x00\x82\x01\x28\x14\x82\x31\x24\x58\x82\x01\x24\x6c\x82\x31\x33\x40\x86\x01\x33\x60\x86\x31\x20\x50\x8c\x01\x20\x60\x8c\x31\x20\x20\xb7\x01\x20\x30\xb7\x31\x22\x80\xf4\x01\x22\x91\xf4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x9c\x06\x07\x4d\x03\x04\x10\x00\x8f\x0b\x00\x00\x11\x00\x08\x00\x53\x4a\x51\x00\x52\x00\x53\x00\x3a\x54\x55\x00\x57\x59\x3f\x5d\x5c\x00\x46\x61\x63\x42\x64\x00\x66\x00\x68\x00\x6a\x00\x6c\x00\x6e\x00\x00\x40\x00\x00\x00\x00\x1a\x00\x93\x00\x00\x20\x35\x00\x27\x00\x21\x00\x24\x22\x2a\x00\x13\x6b\x6d\x00\x26\x24\x27\x14\x16\x18\x1b\x1c\x3e\x1e\x3f\x1f\x39\x3d\x22\x21\x41\x1e\x40\x25\x25\x26\x28\x20\x2a\x49\x2c\x43\x2e\x4b\x30\x4c\x32\x44\x42\x99\x00\x00\x95\x8f\x7d\x7e\x83\x84\x12\x80\x82\x76\x77\x12\x7b\xa3\x7c\x78\x79\x8a\x92\x98\xa6\xa0\x85\x00\x9a\xa1\x93\x75\x33\x95\x00\x8e\x00\x74\x99\x98\x97\x96\x00\x00\x9e\x00\x9c\x00\xa1\xa0\x15\x2e\x2f\x30\xb4\xb5\x4e\xaa\xa9\x12\x14\x1e\x21\x22\x22\x2a\x34\x35\xa6\xa7\x36\x1f\x4a\x00\x00\x97\x01\x5a\xda\x1d\x36\x05\x00\xc4\xc3\xc6\xc5\xc8\xc7\xca\xc9\xcc\xcb\xc4\xd5\x45\xd6\x42\xd7\x46\xd8\xce\xd0\xd2\xd4\xda\xd9\xee\xf6\xfe\x0e\x07\x0f\x80\x9f\x00\x21\x80\xa3\xed\x00\xc0\x40\xc6\x60\xe7\xdb\xe6\x99\xc0\x00\x00\x06\x60\xdc\x29\xfd\x15\x12\x06\x16\xf8\xdd\x06\x15\x12\x84\x08\xc6\x16\xff\xdf\x03\xc0\x40\x00\x46\x60\xde\xe0\x6d\x37\x38\x39\x15\x14\x17\x16\x00\x1a\x19\x1c\x1b\x00\x5f\xb7\x65\x44\x47\x00\x4f\x62\x4e\x50\x00\x00\x48\x00\x00\x00\xa3\xa4\xa5\x00\x00\x00\x00\x00\xb6\x00\x00\x5a\x00\x48\x00\x5b\x56\x58\x60\x5e\x70\x69\x6f\x4d\x00\x00\x3b\x67\xb8\x00\x00\x45\xa8\x8a\x8b\x8c\xab\xac\x58\x58\xaf\x94\xb0\x6f\xb2\x5c\x5b\x5e\x5d\x60\x5f\x62\x61\x64\x63\x66\x65\x68\x67\x00\x00\x00\x00\x00\x00\x00\x99\x03\x08\x03\x01\x03\xa5\x03\x13\x03\x00\x03\x42\x03\x91\x03\x97\x03\xa9\x03\x46\x00\x49\x00\x4c\x00\x53\x00\x69\x00\x07\x03\xbc\x02\x4e\x00\x4a\x00\x0c\x03\x35\x05\x52\x05\x48\x00\x31\x03\x54\x00\x57\x00\x0a\x03\x59\x00\x41\x00\xbe\x02\x08\x1f\x80\x1f\x28\x1f\x90\x1f\x68\x1f\xa0\x1f\xba\x1f\x86\x03\xb3\x1f\xca\x1f\x89\x03\xc3\x1f\xa1\x03\xfa\x1f\x8f\x03\xf3\x1f\x44\x05\x46\x05\x3b\x05\x4e\x05\x3d\x05\xb8\x03\x62\x04\x4a\xa6\x60\x1e\xc9\x03\x6b\x00\xe5\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xa9\x80\x8e\x80\xfc\x80\xd3\x80\x8c\x80\x8d\x81\x8d\x02\x80\xe1\x80\x91\x85\x9a\x01\x00\x01\x11\x00\x01\x04\x08\x01\x08\x30\x08\x01\x15\x20\x00\x39\x99\x31\x9d\x84\x40\x94\x80\xd6\x82\xa6\x80\x41\x62\x80\xa6\x80\x57\x76\xf8\x02\x80\x8f\x80\xb0\x40\xdb\x08\x80\x41\xd0\x80\x8c\x80\x8f\x8c\xe4\x03\x01\x89\x00\x14\x28\x10\x11\x02\x01\x18\x0b\x24\x4b\x26\x01\x01\x86\xe5\x80\x60\x79\xb6\x81\x40\x91\x81\xbd\x88\x94\x05\x80\x98\x80\xc7\x82\x43\x34\xa2\x06\x80\x8c\x61\x28\x96\xd4\x80\xc6\x01\x08\x09\x0b\x80\x8b\x00\x06\x80\xc0\x03\x0f\x06\x80\x9b\x03\x04\x00\x16\x80\x41\x53\x81\x98\x80\x98\x80\x9e\x80\x98\x80\x9e\x80\x98\x80\x9e\x80\x98\x80\x9e\x80\x98\x07\x59\x63\x99\x85\x99\x85\x99\x00\x00\x00\x00\xb9\x02\xe0\xa0\x1e\x40\x9e\xa6\x40\xba\xd4\x01\x89\xd7\x01\x8a\xf1\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa6\x05\x80\x8a\x80\xa2\x00\x80\xc6\x03\x00\x03\x01\x81\x41\xf6\x40\xbf\x19\x18\x88\x08\x80\x40\xfa\x86\x40\xce\x04\x80\xb0\xac\x00\x01\x01\x00\xab\x80\x8a\x85\x89\x8a\x00\xa2\x80\x89\x94\x8f\x80\xe4\x38\x89\x03\xa0\x00\x80\x9d\x9a\xda\x8a\xb9\x8a\x18\x08\x97\x97\xaa\x82\xf6\xaf\xb6\x00\x03\x3b\x02\x86\x89\x81\x8c\x80\x8e\x80\xb9\x03\x1f\x80\x93\x81\x99\x01\x81\xb8\x03\x0b\x09\x12\x80\x9d\x0a\x80\x8a\x81\xb8\x03\x20\x0b\x80\x93\x81\x95\x28\x80\xb9\x01\x00\x1f\x06\x81\x8a\x81\x9d\x80\xbc\x80\x8b\x80\xb1\x02\x80\xb8\x14\x10\x1e\x81\x8a\x81\x9c\x80\xb9\x01\x05\x04\x81\x93\x81\x9b\x81\xb8\x0b\x1f\x80\x93\x81\x9c\x80\xc7\x06\x10\x80\xd9\x01\x86\x8a\x88\xe1\x01\x88\x88\x00\x85\xc9\x81\x9a\x00\x00\x80\xb6\x8d\x04\x01\x84\x8a\x80\xa3\x88\x80\xe5\x18\x28\x09\x81\x98\x0b\x82\x8f\x83\x8c\x01\x0d\x80\x8e\x80\xdd\x80\x42\x5f\x82\x43\xb1\x82\x9c\x82\x9c\x81\x9d\x81\xbf\x08\x37\x01\x8a\x10\x20\xac\x83\xb3\x80\xc0\x81\xa1\x80\xf5\x13\x81\x88\x05\x82\x40\xda\x09\x80\xb9\x00\x30\x00\x01\x3d\x89\x08\xa6\x07\x90\xbe\x83\xaf\x00\x20\x04\x80\xa7\x88\x8b\x81\x9f\x19\x08\x82\xb7\x00\x0a\x00\x82\xb9\x39\x81\xbf\x85\xd1\x10\x8c\x06\x18\x28\x11\xb1\xbe\x8c\x80\xa1\xde\x04\x41\xbc\x00\x82\x8a\x82\x8c\x82\x8c\x82\x8c\x81\x8b\x27\x81\x89\x01\x01\x84\xb0\x20\x89\x00\x8c\x80\x8f\x8c\xb2\xa0\x4b\x8a\x81\xf0\x82\xfc\x80\x8e\x80\xdf\x9f\xae\x80\x41\xd4\x80\xa3\x1a\x24\x80\xdc\x85\xdc\x82\x60\x6f\x15\x80\x44\xe1\x85\x41\x0d\x80\xe1\x18\x89\x00\x9b\x83\xcf\x81\x8d\xa1\xcd\x80\x96\x82\xec\x0f\x02\x03\x80\x98\x0c\x80\x40\x96\x81\x99\x91\x8c\x80\xa5\x87\x98\x8a\xad\x82\xaf\x01\x19\x81\x90\x80\x94\x81\xc1\x29\x09\x81\x8b\x07\x80\xa2\x80\x8a\x80\xb2\x00\x11\x0c\x08\x80\x9a\x80\x8d\x0c\x08\x80\xe3\x84\x88\x82\xf8\x01\x03\x80\x60\x4f\x2f\x80\x40\x92\x8f\x42\x3d\x8f\x10\x8b\x8f\xa1\x01\x80\x40\xa8\x06\x05\x80\x8a\x80\xa2\x00\x80\xae\x80\xac\x81\xc2\x80\x94\x82\x42\x00\x80\x40\xe1\x80\x40\x94\x84\x46\x85\x10\x0c\x83\xa7\x13\x80\x40\xa4\x81\x42\x3c\x83\x41\x82\x81\x40\x98\x8a\x40\xaf\x80\xb5\x8e\xb7\x82\xb0\x19\x09\x80\x8e\x80\xb1\x82\xa3\x20\x87\xbd\x80\x8b\x81\xb3\x88\x89\x19\x80\xde\x11\x00\x0d\x80\x40\x9f\x02\x87\x94\x81\xb8\x0a\x80\xa4\x32\x84\x40\xc2\x39\x10\x80\x96\x80\xd3\x28\x03\x08\x81\x40\xed\x1d\x08\x81\x9a\x81\xd4\x39\x00\x81\xe9\x00\x01\x28\x80\xe4\x11\x18\x84\x41\x02\x88\x01\x40\xff\x08\x03\x80\x40\x8f\x19\x0b\x80\x9f\x89\xa7\x29\x1f\x80\x88\x29\x82\xad\x8c\x01\x41\x95\x30\x28\x80\xd1\x95\x0e\x01\x01\xf9\x2a\x00\x08\x30\x80\xc7\x0a\x00\x80\x41\x5a\x81\x55\x3a\x88\x60\x36\xb6\x84\xba\x86\x88\x83\x44\x0a\x80\xbe\x90\xbf\x08\x81\x60\x4c\xb7\x08\x83\x54\xc2\x82\x88\x8f\x0e\x9d\x83\x40\x93\x82\x47\xba\xb6\x83\xb1\x38\x8d\x80\x95\x20\x8e\x45\x4f\x30\x90\x0e\x01\x04\x41\x04\x8d\x41\xad\x83\x45\xdf\x86\xec\x87\x4a\xae\x84\x6c\x0c\x00\x80\x9d\xdf\xff\x40\xef\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xbe\x05\x00\xfe\x07\x00\x52\x0a\x20\x05\x0c\x20\x3b\x0e\x40\x61\x10\x40\x0f\x18\x20\x43\x1b\x60\x79\x1d\x00\xf1\x20\x00\x0d\xa6\x40\x2e\xa9\x20\xde\xaa\x00\x0f\xff\x20\xe7\x0a\x41\x82\x11\x21\xc4\x14\x61\x44\x19\x01\x48\x1d\x21\xa4\xbc\x01\x3e\xe1\x01\xf0\x01\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x99\x85\x99\xae\x80\x89\x03\x04\x96\x80\x9e\x80\x41\xc9\x83\x8b\x8d\x26\x00\x80\x40\x80\x20\x09\x18\x05\x00\x10\x00\x93\x80\xd2\x80\x40\x8a\x87\x40\xa5\x80\xa5\x08\x85\xa8\xc6\x9a\x1b\xac\xaa\xa2\x08\xe2\x00\x8e\x0e\x81\x89\x11\x80\x8f\x00\x9d\x9c\xd8\x8a\x80\x97\xa0\x88\x0b\x04\x95\x18\x88\x02\x80\x96\x98\x86\x8a\xb4\x94\x80\x91\xbb\xb5\x10\x91\x06\x89\x8e\x8f\x1f\x09\x81\x95\x06\x00\x13\x10\x8f\x80\x8c\x08\x82\x8d\x81\x89\x07\x2b\x09\x95\x06\x01\x01\x01\x9e\x18\x80\x92\x82\x8f\x88\x02\x80\x95\x06\x01\x04\x10\x91\x80\x8e\x81\x96\x80\x8a\x39\x09\x95\x06\x01\x04\x10\x9d\x08\x82\x8e\x80\x90\x00\x2a\x10\x1a\x08\x00\x0a\x0a\x12\x8b\x95\x80\xb3\x38\x10\x96\x80\x8f\x10\x99\x14\x81\x9d\x03\x38\x10\x96\x80\x89\x04\x10\x9f\x00\x81\x8e\x81\x90\x88\x02\x80\xa8\x08\x8f\x04\x17\x82\x97\x2c\x91\x82\x97\x80\x88\x00\x0e\xb9\xaf\x01\x8b\x86\xb9\x08\x00\x20\x97\x00\x80\x89\x01\x88\x01\x20\x80\x94\x83\x9f\x80\xbe\x38\xa3\x9a\x84\xf2\xaa\x93\x80\x8f\x2b\x1a\x02\x0e\x13\x8c\x8b\x80\x90\xa5\x00\x20\x81\xaa\x80\x41\x4c\x03\x0e\x00\x03\x81\xa8\x03\x81\xa0\x03\x0e\x00\x03\x81\x8e\x80\xb8\x03\x81\xc2\xa4\x8f\x8f\xd5\x0d\x82\x42\x6b\x81\x90\x80\x99\x84\xca\x82\x8a\x86\x8c\x03\x8d\x91\x8d\x91\x8d\x8c\x02\x8e\xb3\xa2\x03\x80\xc2\xd8\x86\xa8\x00\x84\xc5\x89\x9e\xb0\x9d\x0c\x8a\xab\x83\x99\xb5\x96\x88\xb4\xd1\x80\xdc\xae\x90\x86\xb6\x9d\x8c\x81\x89\xab\x99\xa3\xa8\x82\x89\xa3\x81\x88\x86\xaa\x0a\xa8\x18\x28\x0a\x04\x40\xbf\xbf\x41\x15\x0d\x81\xa5\x0d\x0f\x00\x00\x00\x80\x9e\x81\xb4\x06\x00\x12\x06\x13\x0d\x83\x8c\x22\x06\xf3\x80\x8c\x80\x8f\x8c\xe4\x03\x01\x89\x00\x0d\x28\x00\x00\x80\x8f\x0b\x24\x18\x90\xa8\x4a\x76\xae\x80\xae\x80\x40\x84\x2b\x11\x8b\xa5\x00\x20\x81\xb7\x30\x8f\x96\x88\x30\x30\x30\x30\x30\x30\x30\x86\x42\x25\x82\x98\x88\x34\x0c\x83\xd5\x1c\x80\xd9\x03\x84\xaa\x80\xdd\x90\x9f\xaf\x8f\x41\xff\x59\xbf\xbf\x60\x51\xfc\x82\x44\x8c\xc2\xad\x81\x41\x0c\x82\x8f\x89\x81\x93\xae\x8f\x9e\x81\xcf\xa6\x88\x81\xe6\x81\xb4\x81\x88\xa9\x8c\x02\x03\x80\x96\x9c\xb3\x8d\xb1\xbd\x2a\x00\x81\x8a\x9b\x89\x96\x98\x9c\x86\xae\x9b\x80\x8f\x20\x89\x89\x20\xa8\x96\x10\x87\x93\x96\x10\x82\xb1\x00\x11\x0c\x08\x00\x97\x11\x8a\x32\x8b\x29\x29\x85\x88\x30\x30\xaa\x80\x8d\x85\xf2\x9c\x60\x2b\xa3\x8b\x96\x83\xb0\x60\x21\x03\x41\x6d\x81\xe9\xa5\x86\x8b\x24\x00\x89\x80\x8c\x04\x00\x01\x01\x80\xeb\xa0\x41\x6a\x91\xbf\x81\xb5\xa7\x8b\xf3\x20\x40\x86\xa3\x99\x85\x99\x8a\xd8\x15\x0d\x0d\x0a\xa2\x8b\x80\x99\x80\x92\x01\x80\x8e\x81\x8d\xa1\xfa\xc4\xb4\x41\x0a\x9c\x82\xb0\xae\x9f\x8c\x9d\x84\xa5\x89\x9d\x81\xa3\x1f\x04\xa9\x40\x9d\x91\xa3\x83\xa3\x83\xa7\x87\xb3\x40\x9b\x41\x36\x88\x95\x89\x87\x40\x97\x29\x00\xab\x01\x10\x81\x96\x89\x96\x88\x9e\xc0\x92\x01\x89\x95\x89\x99\xc5\xb7\x29\xbf\x80\x8e\x18\x10\x9c\xa9\x9c\x82\x9c\xa2\x38\x9b\x9a\xb5\x89\x95\x89\x92\x8c\x91\xed\xc8\xb6\xb2\x8c\xb2\x8c\xa3\x41\x5b\xa9\x29\xcd\x9c\x89\x07\x95\xe9\x94\x9a\x96\x8b\xb4\xca\xac\x9f\x98\x99\xa3\x9c\x01\x07\xa2\x10\x8b\xaf\x8d\x83\x94\x00\x80\xa2\x91\x80\x98\xd3\x30\x00\x18\x8e\x80\x89\x86\xae\xa5\x39\x09\x95\x06\x01\x04\x10\x91\x80\x8b\x84\x40\x9d\xb4\x91\x83\x93\x82\x9d\xaf\x93\x08\x80\x40\xb7\xae\xa8\x83\xa3\xaf\x93\x80\xba\xaa\x8c\x80\xc6\x9a\x40\xe4\xab\xf3\xbf\x9e\x39\x01\x38\x08\x97\x8e\x00\x80\xdd\x39\xa6\x8f\x00\x80\x9b\x80\x89\xa7\x30\x94\x80\x8a\xad\x92\x80\xa1\xb8\x41\x06\x88\x80\xa4\x90\x80\xb0\x9d\xef\x30\x08\xa5\x94\x80\x98\x28\x08\x9f\x8d\x80\x41\x46\x92\x40\xbc\x80\xce\x43\x99\xe5\xee\x90\x40\xc3\x4a\xbb\x44\x2e\x4f\xd0\x42\x46\x60\x21\xb8\x42\x38\x86\x9e\xf0\x9d\x91\xaf\x8f\x83\x9e\x94\x84\x92\x42\xaf\xbf\xff\xca\x20\xc1\x8c\xbf\x08\x80\x9b\x57\xf7\x87\x44\xd5\xa9\x88\x60\x22\xf6\x41\x1e\xb0\x82\x90\x1f\x41\x8b\x49\x03\xea\x84\x8c\x82\x88\x86\x89\x57\x65\xd4\x80\xc6\x01\x08\x09\x0b\x80\x8b\x00\x06\x80\xc0\x03\x0f\x06\x80\x9b\x03\x04\x00\x16\x80\x41\x53\x81\x98\x80\x98\x80\x9e\x80\x98\x80\x9e\x80\x98\x80\x9e\x80\x98\x80\x9e\x80\x98\x07\x49\x33\xac\x89\x86\x8f\x80\x41\x70\xab\x45\x13\x40\xc4\xba\xc3\x30\x44\xb3\x18\x9a\x01\x00\x08\x80\x89\x03\x00\x00\x28\x18\x00\x00\x02\x01\x00\x08\x00\x00\x00\x00\x01\x00\x0b\x06\x03\x03\x00\x80\x89\x80\x90\x22\x04\x80\x90\x51\x43\x60\xa6\xdd\xa1\x50\x34\x8a\x40\xdd\x81\x56\x81\x8d\x5d\x30\x4c\x1e\x42\x1d\x45\xe1\x53\x4a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf6\x03\x20\xa6\x07\x00\xa9\x09\x00\xb4\x0a\x00\xba\x0b\x00\x3e\x0d\x00\xe0\x0e\x20\x57\x12\x00\xeb\x16\x00\xca\x19\x20\xc0\x1d\x60\x80\x20\x00\x2e\x2d\x00\xc0\x31\x20\x89\xa7\x20\xf0\xa9\x00\xe3\xab\x00\x3e\xfd\x00\xfb\x00\x21\x37\x07\x61\x01\x0a\x01\x1d\x0f\x21\x2c\x12\x01\xc8\x14\x21\xd1\x19\x21\x47\x1d\x01\x39\x6a\x21\x09\x8d\x01\xbc\xd4\x01\xa9\xd7\x21\x3a\xee\x01\xde\xa6\x22\x4b\x13\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xaf\x89\xa4\x80\xd6\x80\x42\x47\xef\x96\x80\x40\xfa\x84\x41\x08\xac\x00\x01\x01\x00\xc7\x8a\xaf\x9e\x28\xe4\x31\x29\x08\x19\x89\x96\x80\x9d\x9a\xda\x8a\x8e\x89\xa0\x88\x88\x80\x97\x18\x88\x02\x04\xaa\x82\xf6\x8e\x80\xa0\xb5\x10\x91\x06\x89\x09\x89\x90\x82\xb7\x00\x31\x09\x82\x88\x80\x89\x09\x89\x8d\x01\x82\xb7\x00\x23\x09\x12\x80\x93\x8b\x10\x8a\x82\xb7\x00\x38\x10\x82\x93\x09\x89\x89\x28\x82\xb7\x00\x31\x09\x16\x82\x89\x09\x89\x91\x80\xba\x22\x10\x83\x88\x80\x8d\x89\x8f\x84\xb8\x30\x10\x1e\x81\x8a\x09\x89\x90\x82\xb7\x00\x30\x10\x1e\x81\x8a\x09\x89\x8f\x83\xb6\x08\x30\x10\x83\x88\x80\x89\x09\x89\x90\x82\xc5\x03\x28\x00\x3d\x89\x09\xbc\x01\x86\x8b\x38\x89\xd6\x01\x88\x8a\x29\x89\xbd\x0d\x89\x8a\x00\x00\x03\x81\xb0\x93\x01\x84\x8a\x80\xa3\x88\x80\xe3\x93\x80\x89\x8b\x1b\x10\x11\x32\x83\x8c\x8b\x80\x8e\x42\xbe\x82\x88\x88\x43\x9f\x82\x9c\x82\x9c\x81\x9d\x81\xbf\x9f\x88\x01\x89\xa0\x11\x89\x40\x8e\x80\xf5\x8b\x83\x8b\x89\x89\xff\x8a\xbb\x84\xb8\x89\x80\x9c\x81\x8a\x85\x89\x95\x8d\x01\xbe\x84\xae\x90\x8a\x89\x90\x88\x8b\x82\x9d\x8c\x81\x89\xab\x8d\xaf\x93\x87\x89\x85\x89\xf5\x10\x94\x18\x28\x0a\x40\xc5\xb9\x04\x42\x3e\x81\x92\x80\xfa\x8c\x18\x82\x8b\x4b\xfd\x82\x40\x8c\x80\xdf\x9f\x42\x29\x85\xe8\x81\x60\x75\x84\x89\xc4\x03\x89\x9f\x81\xcf\x81\x41\x0f\x02\x03\x80\x96\x23\x80\xd2\x81\xb1\x91\x89\x89\x85\x91\x8c\x8a\x9b\x87\x98\x8c\xab\x83\xae\x8d\x8e\x89\x8a\x80\x89\x89\xae\x8d\x8b\x07\x09\x89\xa0\x82\xb1\x00\x11\x0c\x08\x80\xa8\x24\x81\x40\xeb\x38\x09\x89\x60\x4f\x23\x80\x42\xe0\x8f\x8f\x8f\x11\x97\x82\x40\xbf\x89\xa4\x80\x42\xbc\x80\x40\xe1\x80\x40\x94\x84\x41\x24\x89\x45\x56\x10\x0c\x83\xa7\x13\x80\x40\xa4\x81\x42\x3c\x1f\x89\x41\x70\x81\x40\x98\x8a\x40\xae\x82\xb4\x8e\x9e\x89\x8e\x83\xac\x8a\xb4\x89\x2a\xa3\x8d\x80\x89\x21\xab\x80\x8b\x82\xaf\x8d\x3b\x80\x8b\xd1\x8b\x28\x40\x9f\x8b\x84\x89\x2b\xb6\x08\x31\x09\x82\x88\x80\x89\x09\x32\x84\x40\xbf\x91\x88\x89\x18\xd0\x93\x8b\x89\x40\xd4\x31\x88\x9a\x81\xd1\x90\x8e\x89\xd0\x8c\x87\x89\xd2\x8e\x83\x89\x40\xf1\x8e\x40\xa4\x89\xc5\x28\x09\x18\x00\x81\x8b\x89\xf6\x31\x32\x80\x9b\x89\xa7\x30\x1f\x80\x88\x8a\xad\x8f\x41\x94\x38\x87\x8f\x89\xb7\x95\x80\x8d\xf9\x2a\x00\x08\x30\x07\x89\xaf\x20\x08\x27\x89\x41\x48\x83\x60\x4b\x68\x89\x40\x85\x84\xba\x86\x98\x89\x43\xf4\x00\xb6\x33\xd0\x80\x8a\x81\x60\x4c\xaa\x81\x54\xc5\x22\x2f\x39\x86\x9d\x83\x40\x93\x82\x45\x88\xb1\x41\xff\xb6\x83\xb1\x38\x8d\x80\x95\x20\x8e\x45\x4f\x30\x90\x0e\x01\x04\x41\x04\x86\x88\x89\x41\xa1\x8d\x45\xd5\x86\xec\x34\x89\x52\x95\x89\x6c\x05\x05\x40\xef\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xfa\x06\x00\x84\x09\x00\xf0\x0a\x00\x70\x0c\x00\xf4\x0d\x00\x4a\x10\x20\x1a\x18\x20\x74\x1b\x20\xdd\x20\x00\x0c\xa8\x00\x5a\xaa\x20\x1a\xff\x00\xad\x0e\x01\x38\x12\x21\xc1\x15\x21\xe5\x19\x21\xaa\x1d\x21\x8c\xd1\x41\x4a\xe1\x21\xf0\x01\x0e\x00\x00\x00\x00\x01\x4a\xc0\x49\x02\x4a\x80\x02\x81\x02\x82\x02\x83\x02\xc0\x02\xc2\x02\x00\x0a\x84\x02\x42\x24\x85\x02\xc0\x07\x80\x09\x82\x09\x40\x24\x80\x22\xc4\x02\x82\x22\x84\x22\x86\x22\xc6\x02\xc8\x02\xca\x02\xcc\x02\x87\x02\x8a\x22\xce\x02\x8c\x22\x90\x22\x92\x22\x8e\x22\x88\x02\x89\x02\x8a\x02\x82\x24\x00\x03\x02\x03\x04\x03\x8b\x02\x80\x24\x08\x03\x84\x09\x86\x09\x58\x24\x02\x0a\x06\x03\x98\x22\x9a\x22\x9e\x22\x00\x09\x0a\x03\xa0\x22\x0c\x03\x0e\x03\x40\x08\x10\x03\x12\x03\xa2\x22\xa6\x22\xc0\x09\xa4\x22\xa8\x22\xaa\x22\x8c\x02\x8d\x02\x8e\x02\x40\x03\x42\x03\x44\x03\x80\x03\x8f\x02\x8e\x24\xc2\x07\x88\x09\x8a\x09\x90\x24\x46\x03\xac\x22\x00\x04\xb0\x22\x42\x08\xb2\x22\x02\x04\xb4\x22\x40\x04\x44\x04\xb6\x22\x42\x04\xc2\x22\xc0\x22\xc4\x22\xc6\x22\xc8\x22\x40\x09\xc0\x04\x91\x02\xca\x22\xc4\x04\xcc\x22\xc2\x04\xd0\x22\xce\x22\x92\x02\x93\x02\x94\x02\x95\x02\x40\x05\x42\x05\x08\x0a\x96\x02\x94\x24\x44\x05\xc4\x07\x8c\x09\x8e\x09\xc0\x06\x92\x24\x44\x08\x08\x23\x0a\x23\x80\x05\x0c\x23\x84\x05\x90\x09\x92\x09\x0e\x23\x82\x05\x12\x23\x86\x05\x88\x05\x14\x23\x8c\x05\x16\x23\x98\x09\x8a\x05\x1e\x23\x90\x05\x20\x23\x9a\x09\x8e\x05\x24\x23\x22\x23\x99\x02\x9a\x02\x9b\x02\xc0\x05\xc2\x05\xc4\x05\x9c\x02\xac\x24\xc6\x05\xc8\x05\xc6\x07\x94\x09\x96\x09\x00\x07\xaa\x24\x26\x23\xca\x05\x2a\x23\x28\x23\x40\x23\x42\x23\x44\x23\x46\x23\xcc\x05\x4a\x23\x48\x23\x4c\x23\x4e\x23\x50\x23\xb8\x24\x9d\x02\xce\x05\xbe\x24\x0c\x0a\x52\x23\x00\x06\xbc\x24\xba\x24\x40\x06\x54\x23\x42\x06\x44\x06\x56\x23\x58\x23\xa0\x02\xa1\x02\xa2\x02\xa3\x02\xc1\x02\xc3\x02\x01\x0a\xa4\x02\x43\x24\xa5\x02\xc1\x07\x81\x09\x83\x09\x41\x24\x81\x22\xc5\x02\x83\x22\x85\x22\x87\x22\xc7\x02\xc9\x02\xcb\x02\xcd\x02\xa7\x02\x8b\x22\xcf\x02\x8d\x22\x91\x22\x93\x22\x8f\x22\xa8\x02\xa9\x02\xaa\x02\x83\x24\x01\x03\x03\x03\x05\x03\xab\x02\x81\x24\x09\x03\x85\x09\x87\x09\x59\x24\x03\x0a\x07\x03\x99\x22\x9b\x22\x9f\x22\x01\x09\x0b\x03\xa1\x22\x0d\x03\x0f\x03\x41\x08\x11\x03\x13\x03\xa3\x22\xa7\x22\xc1\x09\xa5\x22\xa9\x22\xab\x22\x80\x23\xac\x02\xad\x02\xae\x02\x41\x03\x43\x03\x45\x03\xaf\x02\x8f\x24\xc3\x07\x89\x09\x8b\x09\x91\x24\x47\x03\xad\x22\x01\x04\x84\x08\xb1\x22\x43\x08\xb3\x22\x03\x04\xb5\x22\x41\x04\x45\x04\xb7\x22\x43\x04\xc3\x22\xc1\x22\xc5\x22\xc7\x22\xc9\x22\x41\x09\xc1\x04\xb1\x02\xcb\x22\xc5\x04\xcd\x22\xc3\x04\xd1\x22\xcf\x22\xb2\x02\xb3\x02\xb4\x02\xb5\x02\x41\x05\x43\x05\x09\x0a\xb6\x02\x95\x24\x45\x05\xc5\x07\x8d\x09\x8f\x09\xc1\x06\x93\x24\x45\x08\x09\x23\x0b\x23\x81\x05\x0d\x23\x85\x05\x91\x09\x93\x09\x0f\x23\x83\x05\x13\x23\x87\x05\x89\x05\x15\x23\x8d\x05\x17\x23\x99\x09\x8b\x05\x1f\x23\x81\x23\x91\x05\x21\x23\x9b\x09\x8f\x05\x25\x23\x23\x23\xb9\x02\xba\x02\xbb\x02\xc1\x05\xc3\x05\xc5\x05\xbc\x02\xad\x24\xc7\x05\xc9\x05\xc7\x07\x95\x09\x97\x09\x01\x07\xab\x24\x27\x23\xcb\x05\x2b\x23\x29\x23\x41\x23\x43\x23\x45\x23\x47\x23\xcd\x05\x4b\x23\x49\x23\x82\x23\x4d\x23\x4f\x23\x51\x23\xb9\x24\xbd\x02\xcf\x05\xbf\x24\x0d\x0a\x53\x23\xbf\x02\xbd\x24\x83\x23\xbb\x24\x41\x06\x55\x23\x43\x06\x45\x06\x57\x23\x59\x23\x01\x31\x80\x0c\x00\x2e\x46\x24\x44\x24\x4a\x24\x48\x24\x00\x08\x42\x09\x44\x09\x04\x08\x88\x22\x86\x24\x84\x24\x8a\x24\x88\x24\xae\x22\x98\x24\x96\x24\x9c\x24\x9a\x24\x00\x23\x06\x0a\x02\x23\x04\x0a\x46\x09\xce\x07\xca\x07\xc8\x07\xcc\x07\x47\x24\x45\x24\x4b\x24\x49\x24\x01\x08\x43\x09\x45\x09\x05\x08\x89\x22\x87\x24\x85\x24\x8b\x24\x89\x24\xaf\x22\x99\x24\x97\x24\x9d\x24\x9b\x24\x01\x23\x07\x0a\x03\x23\x05\x0a\x47\x09\xcf\x07\xcb\x07\xc9\x07\xcd\x07\x50\x24\x4e\x24\x54\x24\x52\x24\x51\x24\x4f\x24\x55\x24\x53\x24\x94\x22\x96\x22\x95\x22\x97\x22\x04\x23\x06\x23\x05\x23\x07\x23\x18\x23\x19\x23\x1a\x23\x1b\x23\x2c\x23\x2d\x23\x2e\x23\x2f\x23\x00\x24\xa2\x24\xa0\x24\xa6\x24\xa4\x24\xa8\x24\xa3\x24\xa1\x24\xa7\x24\xa5\x24\xa9\x24\xb0\x24\xae\x24\xb4\x24\xb2\x24\xb6\x24\xb1\x24\xaf\x24\xb5\x24\xb3\x24\xb7\x24\x82\x08\x80\x08\x81\x08\x02\x08\x03\x08\x9c\x22\x9d\x22\x0a\x0a\x0b\x0a\x83\x08\x40\x0b\x8a\x2c\x81\x0c\x89\x2c\x88\x2c\x40\x25\x41\x25\x00\x2d\x07\x2e\x00\x0d\x40\x26\x41\x26\x80\x2e\x01\x0d\xc8\x26\xc9\x26\x00\x2f\x84\x2f\x02\x0d\x83\x2f\x82\x2f\x40\x0d\xd8\x26\xd9\x26\x86\x31\x04\x0d\x40\x27\x41\x27\x00\x31\x86\x30\x06\x0d\x85\x30\x84\x30\x41\x0d\x40\x28\x00\x32\x07\x0d\x4f\x28\x50\x28\x80\x32\x84\x2c\x03\x2e\x57\x28\x42\x0d\x81\x2c\x80\x2c\xc0\x24\xc1\x24\x86\x2c\x83\x2c\xc0\x28\x43\x0d\xc0\x25\xc1\x25\x40\x29\x44\x0d\xc0\x26\xc1\x26\x05\x2e\x02\x2e\xc0\x29\x45\x0d\x05\x2f\x04\x2f\x80\x0d\xd0\x26\xd1\x26\x80\x2f\x40\x2a\x82\x0d\xe0\x26\xe1\x26\x80\x30\x81\x30\xc0\x2a\x83\x0d\x04\x30\x03\x30\x81\x0d\xc0\x27\xc1\x27\x82\x30\x40\x2b\x84\x0d\x47\x28\x48\x28\x84\x31\x81\x31\x06\x2f\x08\x0d\x81\x2f\x05\x30\x46\x0d\x83\x30\x82\x31\x00\x0e\x01\x0e\x40\x0f\x80\x11\x82\x11\x03\x0f\x00\x0f\xc0\x11\x01\x0f\x40\x11\x02\x12\x04\x12\x81\x0f\x40\x12\xc0\x0f\x42\x12\x80\x0f\x44\x12\x84\x12\x82\x0f\x86\x12\x88\x12\x8a\x12\xc0\x12\x82\x12\x81\x11\x83\x11\x43\x10\x40\x10\xc1\x11\x41\x10\x41\x11\x03\x12\x05\x12\xc1\x10\x41\x12\x00\x10\x43\x12\xc0\x10\x45\x12\x85\x12\xc2\x10\x87\x12\x89\x12\x8b\x12\xc1\x12\x83\x12\x80\x10\x00\x11\x01\x11\x00\x12\x01\x12\x80\x12\x81\x12\x40\x13\x41\x13\x43\x13\x42\x13\x44\x13\xc2\x13\x00\x14\xc0\x13\x40\x14\x80\x14\xc0\x14\x40\x15\x41\x15\x40\x17\x00\x17\x41\x17\xc0\x17\x00\x18\x02\x18\x01\x18\x40\x18\x80\x18\x00\x19\xc0\x18\xc1\x18\x01\x19\x40\x19\x42\x19\x41\x19\x80\x19\xc0\x19\xc2\x19\xc1\x19\x80\x1c\xc0\x1c\xc0\x1d\x80\x1f\x00\x20\x02\x20\x04\x20\x06\x20\x08\x20\x40\x20\x80\x20\x82\x20\xc0\x20\xc1\x20\x00\x21\xb8\x22\xb9\x22\x10\x23\x11\x23\x1c\x23\x1d\x23\x4c\x24\x56\x24\x4d\x24\x57\x24\x8c\x24\x8d\x24\x9e\x24\x9f\x24\x00\x25\x02\x25\x04\x25\xc0\x2b\x01\x25\x03\x25\x05\x25\xc1\x2b\xc2\x2b\xc3\x2b\xc4\x2b\xc5\x2b\xc6\x2b\xc7\x2b\x80\x25\x82\x25\x84\x25\xc8\x2b\x81\x25\x83\x25\x85\x25\xc9\x2b\xca\x2b\xcb\x2b\xcc\x2b\xcd\x2b\xce\x2b\xcf\x2b\x00\x26\x02\x26\x01\x26\x03\x26\x80\x26\x82\x26\x81\x26\x83\x26\xc2\x26\xc4\x26\xc6\x26\x00\x2c\xc3\x26\xc5\x26\xc7\x26\x01\x2c\x02\x2c\x03\x2c\x04\x2c\x05\x2c\x06\x2c\x07\x2c\xca\x26\xcc\x26\xce\x26\x08\x2c\xcb\x26\xcd\x26\xcf\x26\x09\x2c\x0a\x2c\x0b\x2c\x0c\x2c\x0d\x2c\x0e\x2c\x0f\x2c\xd2\x26\xd4\x26\xd6\x26\xd3\x26\xd5\x26\xd7\x26\xda\x26\xdc\x26\xde\x26\xdb\x26\xdd\x26\xdf\x26\x00\x27\x02\x27\x01\x27\x03\x27\x80\x27\x82\x27\x81\x27\x83\x27\x00\x28\x02\x28\x04\x28\x01\x28\x03\x28\x05\x28\x42\x28\x44\x28\x46\x28\x49\x28\x4b\x28\x4d\x28\x40\x2c\x4a\x28\x4c\x28\x4e\x28\x41\x2c\x42\x2c\x43\x2c\x44\x2c\x45\x2c\x46\x2c\x47\x2c\x51\x28\x53\x28\x55\x28\x48\x2c\x52\x28\x54\x28\x56\x28\x49\x2c\x4a\x2c\x4b\x2c\x4c\x2c\x4d\x2c\x4e\x2c\x4f\x2c\x82\x2c\x01\x2e\x80\x31\x87\x2c\x01\x2f\x02\x2f\x03\x2f\x06\x2e\x85\x31\x00\x30\x01\x30\x02\x30\x40\x46\x41\x46\x80\x46\xc0\x46\xc2\x46\xc1\x46\x00\x47\x40\x47\x80\x47\xc0\x47\xc2\x47\x00\x49\x40\x49\x80\x49\x82\x49\x00\x4a\xc2\x49\x03\x4a\x04\x4a\x40\x4a\x41\x4a\x80\x4a\x81\x4a\xc0\x4a\xc1\x4a\xc0\x4b\xc1\x4b\x00\x4b\x01\x4b\x40\x4b\x41\x4b\xc2\x4b\xc3\x4b\x80\x4b\x81\x4b\x82\x4b\x83\x4b\x00\x4c\x01\x4c\x02\x4c\x03\x4c\x00\x56\x40\x54\x42\x54\x44\x54\x46\x54\x48\x54\x4a\x54\x4c\x54\x4e\x54\x50\x54\x52\x54\x54\x54\x56\x54\x80\x54\x82\x54\x84\x54\xc0\x54\xc1\x54\x00\x55\x01\x55\x40\x55\x41\x55\x80\x55\x81\x55\xc0\x55\xc1\x55\x80\x56\xc0\x58\x00\x57\x02\x57\x04\x57\x06\x57\x08\x57\x0a\x57\x0c\x57\x0e\x57\x10\x57\x12\x57\x14\x57\x16\x57\x40\x57\x42\x57\x44\x57\x80\x57\x81\x57\xc0\x57\xc1\x57\x00\x58\x01\x58\x40\x58\x41\x58\x80\x58\x81\x58\x00\x59\x01\x59\x02\x59\x03\x59\x40\x59\x80\x8e\x82\x8e\xc0\x8e\x00\x8f\x01\x8f\x40\x8f\x41\x8f\x81\x8f\x80\x8f\x83\x8f\xc0\x8f\xc1\x8f\x00\x90\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x28\x00\x97\x00\x2a\x00\x81\x80\x2a\x00\x97\xc0\x2b\x00\x15\x81\x2c\x00\x97\x00\x2d\x00\x81\x40\x2d\x00\x97\x00\x2e\x00\x15\x41\x2e\x00\x99\x01\x2f\x00\x16\x20\x30\x00\x42\x08\x40\x00\x42\x8a\x44\x00\x42\x04\x4a\x00\x96\x00\x4c\x00\x17\x81\x4c\x00\x42\x02\x4d\x00\x42\x43\x4e\x00\x2f\xc1\x4f\x00\x42\xc3\x50\x00\xbf\x40\x52\x00\x42\x03\x53\x00\x42\x09\x55\x00\x42\x08\x5a\x00\x96\x00\x5e\x00\x42\x43\x5e\x00\x81\xc0\x5f\x00\x42\x01\x68\x00\x42\xc1\x6b\x00\x85\x01\x71\x00\x17\xc3\x71\x00\x44\x48\x73\x00\x44\x83\x77\x00\x42\x83\x79\x00\xbe\x02\x7b\x00\x97\x41\x7c\x00\x42\x01\x7d\x00\x44\x04\x7e\x00\x42\x0e\x80\x00\x42\x81\x87\x00\x44\x87\x89\x00\x83\x04\xac\x00\x17\x03\xb6\x00\x83\x02\xb8\x00\x14\x02\xd0\x00\x96\x00\xd1\x00\x80\x00\xdd\x00\x97\x80\xde\x00\x80\x80\xdf\x00\x97\x00\xe1\x00\x3e\x41\xe1\x00\x80\xc0\xe1\x00\xbe\x04\xe2\x00\xae\x83\xea\x00\xae\x82\xf2\x00\xad\x01\xf4\x00\x2e\xc1\xf4\x00\x03\x41\xf5\x00\x03\x03\xfc\x00\x81\x40\xfe\x00\x3e\x02\x00\x01\xbe\xc0\x01\x01\xbe\x01\x03\x01\xbe\x40\x06\x01\xbe\x40\x0e\x01\x3e\x02\x14\x01\xbe\xc0\x15\x01\xbe\x01\x17\x01\x44\x81\x1d\x01\x44\x41\x30\x01\x44\x02\x34\x01\x44\x81\x35\x01\x44\x83\x36\x01\x44\x83\x38\x01\x44\x86\x3a\x01\x44\x01\x3e\x01\x85\xc0\x61\x01\xae\x82\x88\x01\x2f\x42\x9d\x01\x84\x01\xb0\x01\x84\xc0\xb4\x01\x84\x40\x4a\x02\x84\x40\x4c\x02\x84\x00\x4d\x02\x2e\x04\x56\x02\x2e\xc1\x72\x02\x20\x01\x77\x02\x84\xc0\x77\x02\x84\xc0\x8c\x02\x84\x80\x8d\x02\xae\x41\x96\x02\x84\x80\x97\x02\x84\x00\xd2\x02\x2e\xc1\xd2\x02\x20\x01\xd7\x02\x84\x00\xe5\x02\xae\x81\xf2\x02\x84\x00\x12\x03\x84\x00\x30\x03\x22\xc1\x31\x03\x2e\x81\x32\x03\xae\x81\x52\x03\x84\x80\x76\x03\xae\x01\x77\x03\x85\xc0\x8c\x03\x85\xc0\xac\x03\x2f\x01\xb7\x03\x81\x00\xc3\x03\x84\xc0\xd0\x03\x84\x40\xd3\x03\x84\x80\xd4\x03\x84\xc0\xd5\x03\x84\x00\xd7\x03\x84\x40\xda\x03\x84\xc0\xdc\x03\x2e\x41\xdd\x03\x85\xc0\xdd\x03\x84\x00\xde\x03\x85\x40\xde\x03\x84\x40\xe0\x03\x84\xc0\xe4\x03\x84\x40\xe7\x03\x84\x80\xe8\x03\x84\xc0\xe9\x03\x84\x00\xeb\x03\x84\x40\xee\x03\x84\x80\x09\x04\x81\x00\x3f\x04\x84\x84\xc1\x06\x84\x80\xc4\x06\x84\xc1\xce\x06\x20\x01\xd0\x06\x84\xc0\xd0\x06\x83\x03\x4b\x07\x1f\xc4\x4c\x07\x83\x17\x4f\x07\x81\x00\x5e\x07\x83\xd2\x66\x07\x44\x1d\x80\x07\x42\x89\x8e\x07\x44\x18\x93\x07\x42\x0d\x9f\x07\x16\x82\xa5\x07\x85\x80\xa6\x07\xbe\xc0\xa6\x07\x44\x0d\xa8\x07\x44\xa0\xae\x07\x22\x01\xc0\x07\x44\x83\xc0\x07\x22\x01\xc2\x07\x44\x83\xc2\x07\x22\x01\xc4\x07\x44\x82\xc4\x07\x22\x01\xc6\x07\x44\x82\xc6\x07\x3e\x11\xc8\x07\x44\x82\xd0\x07\x22\x01\xd2\x07\x44\x82\xd2\x07\x22\x01\xd4\x07\x44\x83\xd4\x07\x3e\x4c\xd6\x07\x80\x40\xdc\x07\xbe\x80\xdc\x07\x80\xc0\xdc\x07\xbe\x00\xdd\x07\x80\x40\xdd\x07\xbe\x80\xdd\x07\x80\xc0\xdd\x07\xbe\x00\xde\x07\x80\x40\xde\x07\xbe\x80\xde\x07\x80\xc0\xde\x07\xbe\x00\xdf\x07\x80\x40\xdf\x07\x20\x08\xe0\x07\x20\x08\xe4\x07\x20\x08\xe8\x07\xbe\x05\xec\x07\x80\xc0\xee\x07\xbe\x00\xef\x07\x97\x40\xef\x07\x80\x80\xef\x07\x17\xc1\xef\x07\x3e\x44\xf0\x07\x80\x40\xf2\x07\xbe\x80\xf2\x07\x80\xc0\xf2\x07\xbe\x03\xf3\x07\x80\xc0\xf4\x07\xae\x82\xf5\x07\x80\xc0\xf6\x07\x3e\x43\xf7\x07\x80\xc0\xf8\x07\xae\x03\xf9\x07\x80\xc0\xfa\x07\x3e\x01\xfb\x07\x02\x81\xfb\x07\xbe\x83\xfc\x07\x80\x40\xfe\x07\xbe\x80\xfe\x07\x80\xc0\xfe\x07\xbe\x00\xff\x07\x80\x40\xff\x07\x97\x80\xff\x07\x1e\x01\x00\x08\x95\x84\x00\x08\x81\x40\x04\x08\x97\xc0\x05\x08\x81\x00\x09\x08\x97\x40\x09\x08\x99\x80\x09\x08\x81\xc0\x0b\x08\x85\xc0\x0c\x08\xb1\x00\x0d\x08\x85\x80\x0d\x08\xb1\xc0\x0d\x08\x97\x01\x0f\x08\x97\xc1\x11\x08\xb3\xc0\x15\x08\x81\xc0\x17\x08\x95\x05\x1c\x08\x81\xc0\x1e\x08\x15\x02\x1f\x08\x1f\x05\x20\x08\x83\x85\x22\x08\x15\x44\x25\x08\x97\x00\x2a\x08\x19\x01\x40\x08\x81\x80\x40\x08\xbf\xc0\x40\x08\x19\x41\x41\x08\x81\xc0\x41\x08\xbf\x40\x42\x08\x2d\x85\x42\x08\x81\x40\x45\x08\x97\x80\x45\x08\x95\x42\x46\x08\x97\x00\x48\x08\x99\x40\x48\x08\x97\x80\x48\x08\x81\x00\x49\x08\x80\x80\x49\x08\x81\x00\x4a\x08\x02\x81\x4a\x08\x95\x04\x4b\x08\x1f\x42\x4d\x08\x81\x40\x4e\x08\x99\xc0\x4e\x08\x83\x02\x4f\x08\x95\x42\x51\x08\x19\x01\x54\x08\x9b\x80\x54\x08\x19\xc6\x54\x08\x97\xc0\x57\x08\x81\x00\x58\x08\x97\x40\x58\x08\x99\x80\x58\x08\x97\xc0\x58\x08\x81\x00\x59\x08\x97\x40\x59\x08\x99\x80\x59\x08\x9b\xc0\x59\x08\x97\x00\x5a\x08\x81\x40\x5a\x08\x97\x80\x5a\x08\x99\xc0\x5a\x08\x95\x02\x5b\x08\x97\x40\x5c\x08\x99\x80\x5c\x08\x97\xc0\x5c\x08\x81\x00\x5d\x08\x97\x40\x5d\x08\x99\x80\x5d\x08\x9b\xc0\x5d\x08\x97\x00\x5e\x08\x81\x40\x5e\x08\x97\x80\x5e\x08\x99\xc0\x5e\x08\x15\x02\x5f\x08\x99\x40\x62\x08\x3e\x81\x66\x08\xbe\x80\x6b\x08\xbe\x41\x73\x08\xbe\x00\x81\x08\xbe\x40\x82\x08\xbe\x00\x83\x08\xbe\x01\x89\x08\x85\x00\x8b\x08\xb1\x40\x8b\x08\x85\xc0\x8b\x08\xb1\x00\x8c\x08\xbe\x40\x90\x08\xbe\x00\x91\x08\xbe\xc1\x91\x08\xbe\x01\x98\x08\xbe\x42\x9b\x08\x44\x01\x9d\x08\x44\x01\x9e\x08\x44\x01\xa0\x08\x44\x01\xa1\x08\x44\x01\xa2\x08\x3e\x02\xab\x08\x44\x02\xb8\x08\x20\x82\xba\x08\x1e\x41\xca\x08\x9f\x04\x18\x09\x23\x45\x1a\x09\x97\xc0\x1c\x09\xa5\x04\x1d\x09\x2b\x45\x1f\x09\x9b\xc0\x21\x09\xa1\x04\x22\x09\x25\x45\x24\x09\x99\xc0\x26\x09\x25\x0d\x27\x09\x1f\x8d\x2d\x09\x1f\x0d\x34\x09\x81\x80\x3a\x09\xb3\x00\x83\x0a\x99\x00\x9d\x0a\x97\x40\x9d\x0a\x99\x80\x9d\x0a\xbe\x00\xb7\x0a\x15\x01\x1f\x0b\x81\xc0\x5b\x0b\x81\xc0\xa7\x0b\x81\xc0\xbc\x0b\xad\x04\xc0\x0b\xad\x44\xc2\x0b\xad\x84\xc4\x0b\x83\xf3\xc6\x0b\x2d\x85\xe0\x0b\x03\x1d\xe3\x0b\x2d\x88\xf1\x0b\x81\x00\x00\x0c\x83\x82\x0d\x0c\x84\x0b\x13\x0c\x84\x42\x19\x0c\x22\x01\x1c\x0c\x22\xc1\x1c\x0c\x22\x81\x1d\x0c\x22\x41\x1e\x0c\x22\x01\x1f\x0c\x84\x00\x25\x0c\x23\xc1\x26\x0c\x84\x80\x27\x0c\x85\xc0\x27\x0c\x84\x0b\x2b\x0c\x84\x42\x31\x0c\x22\x01\x34\x0c\x22\xc1\x34\x0c\x22\x81\x35\x0c\x22\x41\x36\x0c\x22\x01\x37\x0c\x84\x00\x3d\x0c\x20\xc2\x3d\x0c\x84\x80\x3f\x0c\x85\xc0\x3f\x0c\x2d\x4a\x4c\x0c\x1f\x45\x51\x0c\x9f\xca\x53\x0c\xad\x15\x59\x0c\x03\x87\x64\x0c\x41\x07\x80\x0c\x89\x80\x83\x0c\x29\xc1\x83\x0c\xa9\x41\x84\x0c\x89\x00\x85\x0c\x29\x41\x85\x0c\xa9\xc2\x85\x0c\x89\x00\x87\x0c\x8f\x40\x87\x0c\x8d\x80\x87\x0c\x41\x12\x88\x0c\x03\x02\x91\x0c\x99\x00\x94\x0c\xa3\x44\x94\x0c\x23\x83\x96\x0c\x2d\x07\x98\x0c\xaf\x84\x9b\x0c\xa1\xc2\x9d\x0c\xb5\x00\x9f\x0c\xb3\x40\x9f\x0c\x85\x80\x9f\x0c\x83\x18\xa0\x0c\x23\x42\xac\x0c\x23\x45\xad\x0c\x97\xc0\xaf\x0c\xa1\x04\xb0\x0c\xa5\x41\xb2\x0c\x97\x00\xb3\x0c\x99\x40\xb3\x0c\x97\x80\xb3\x0c\x99\xc0\xb3\x0c\xad\x17\xb4\x0c\x85\xc0\xbf\x0c\xb3\x01\xc0\x0c\xb1\xc0\xc0\x0c\xb3\x00\xc1\x0c\x31\x41\xc1\x0c\xb5\xc0\xc1\x0c\xb3\x00\xc2\x0c\xb1\x41\xc2\x0c\x33\x01\xc3\x0c\x31\x81\xc3\x0c\x85\x00\xc4\x0c\xb1\x40\xc4\x0c\x33\x81\xc4\x0c\x85\x00\xc5\x0c\xb5\x40\xc5\x0c\xb7\x80\xc5\x0c\xb5\xc0\xc5\x0c\xb1\x00\xc6\x0c\x35\x41\xc6\x0c\xb3\xc0\xc6\x0c\xb1\x01\xc7\x0c\xb3\xc0\xc7\x0c\xb5\x00\xc8\x0c\xb3\x40\xc8\x0c\xb1\x81\xc8\x0c\x2f\x42\xc9\x0c\x31\x41\xca\x0c\xb5\xc0\xca\x0c\xb1\x00\xcb\x0c\xb3\x40\xcb\x0c\xb5\x80\xcb\x0c\xb1\xc0\xcb\x0c\x2f\x01\xcc\x0c\xb5\x80\xcc\x0c\xb3\xc0\xcc\x0c\xb5\x00\xcd\x0c\xb1\x40\xcd\x0c\xb5\x80\xcd\x0c\x85\xc0\xcd\x0c\xb1\x02\xce\x0c\xb3\x40\xcf\x0c\xb1\x80\xcf\x0c\x85\xc0\xcf\x0c\xb1\x01\xd0\x0c\xb3\xc0\xd0\x0c\xb1\x01\xd1\x0c\xb5\xc0\xd1\x0c\xb3\x00\xd2\x0c\x85\x40\xd2\x0c\xb5\x80\xd2\x0c\x85\xc0\xd2\x0c\x33\x01\xd3\x0c\xb1\x81\xd3\x0c\xb3\x40\xd4\x0c\x85\x80\xd4\x0c\xb1\xc0\xd4\x0c\xb3\x00\xd5\x0c\x85\x40\xd5\x0c\xb5\x80\xd5\x0c\xb1\xc0\xd5\x0c\x21\x05\xd6\x0c\x25\x85\xd8\x0c\xa5\x02\xdb\x0c\x99\x40\xdc\x0c\x17\x81\xdc\x0c\x99\x00\xdd\x0c\x97\x41\xdd\x0c\x27\x01\xde\x0c\x85\x82\xde\x0c\x89\xc0\xdf\x0c\x3f\x04\xe0\x0c\x99\x00\xe2\x0c\x9b\x40\xe2\x0c\xbf\x83\xe2\x0c\x19\x42\xe4\x0c\x05\x42\xe5\x0c\x3f\x43\xe6\x0c\x31\xc1\xe7\x0c\x85\x40\xe8\x0c\xb1\x81\xe8\x0c\x85\x40\xe9\x0c\x07\x81\xe9\x0c\x89\x00\xea\x0c\x97\x40\xea\x0c\x19\x82\xea\x0c\x9d\x80\xeb\x0c\x8d\xc0\xeb\x0c\x3f\x08\xec\x0c\x05\x01\xf0\x0c\x9b\x80\xf0\x0c\x97\xc1\xf0\x0c\x9b\x80\xf1\x0c\x99\xc0\xf1\x0c\x17\x05\xf2\x0c\x99\x80\xf4\x0c\x17\xc1\xf4\x0c\x19\x41\xf5\x0c\x97\xc0\xf5\x0c\x9b\x00\xf6\x0c\x99\x40\xf6\x0c\x17\x82\xf6\x0c\x19\x81\xf7\x0c\xa1\x04\xf8\x0c\x25\x45\xfa\x0c\x25\xc5\xfc\x0c\x25\x41\xff\x0c\x99\xc0\xff\x0c\x03\x01\xa7\x29\x81\x00\xdc\x29\x03\x01\xfe\x29\x03\x02\xd7\x2a\x81\x40\xda\x2a\x82\x14\x40\x3e\x82\x7f\x4a\x3e\x82\x3f\x6a\x3e\x02\xa1\x8a\x3e\x10\x01\x9b\x3e\x82\x2f\x9c\x3e\x90\xc5\xb3\x3e\x97\x01\xc0\x3e\x19\xc1\xc0\x3e\x3f\x41\xc1\x3e\xaf\xc2\xc4\x3e\x84\x41\xc7\x3e\xad\x04\xc8\x3e\x81\x40\xca\x3e\x04\x83\xca\x3e\xa0\x03\xcc\x3e\xa0\x02\xce\x3e\x84\x80\xcf\x3e\x20\x01\xd0\x3e\x20\xc1\xd0\x3e\xae\x84\xd1\x3e\x85\xc0\xd3\x3e\x2d\x31\xd4\x3e\xad\xcb\xf4\x3e\x2f\x89\xfa\x3e\x2d\x02\xff\x3e\x2f\x2f\x00\x3f\xa5\x82\x17\x3f\xb1\xc0\x18\x3f\xaf\x07\x19\x3f\xaf\xff\x1c\x3f\xa5\x81\x3c\x3f\xaf\x64\x3d\x3f\x31\x20\x54\x3f\x31\x9b\x64\x3f\x31\x01\x7c\x3f\xb3\x83\x7c\x3f\xb1\x40\x7e\x3f\xbd\x80\x7e\x3f\xbb\xc0\x7e\x3f\xb3\x00\x7f\x3f\x03\x05\x84\x3f\xad\x01\x8c\x3f\x15\xc3\x8c\x3f\x2d\x46\x8e\x3f\x03\xcc\x91\x3f\x95\xc6\x97\x3f\xaf\x01\x9c\x3f\x85\x00\x9d\x3f\x2f\x85\x9d\x3f\xad\x3a\xa0\x3f\x2f\x44\xbd\x3f\x1f\x6f\xc0\x3f\x1f\xc1\xd7\x3f\xad\x5f\xd8\x3f\x81\x00\xe8\x3f\x1f\x4f\xe8\x3f\x1f\x83\xf0\x3f\x1f\x83\xf2\x3f\x1f\x83\xf4\x3f\x9f\x81\xf6\x3f\x83\x07\xf8\x3f\x92\x81\x26\x44\x92\xc0\x2a\x44\x12\x81\x4b\x44\x12\xc1\xd2\x44\x12\xc2\x2e\x45\x12\x81\x6e\x45\x92\x00\x4e\x46\x92\x83\x57\x74\x12\xc3\x6e\x74\x1f\x0d\x00\x75\x1f\x8d\x06\x75\x1f\x0d\x0d\x75\x9f\x83\x13\x75\x1f\x89\x15\x75\x1f\x0d\x1a\x75\x1f\x8d\x20\x75\x15\x10\x27\x75\x9f\x43\x2f\x75\x9f\x45\x31\x75\x1f\x0d\x34\x75\x1f\x8d\x3a\x75\x95\x03\x41\x75\x1f\x44\x43\x75\x9f\x83\x45\x75\x1f\x8d\x47\x75\x95\x07\x4e\x75\x9f\x83\x52\x75\x1f\x8d\x54\x75\x1f\x0d\x5b\x75\x1f\x8d\x61\x75\x1f\x0d\x68\x75\x1f\x8d\x6e\x75\x1f\x0d\x75\x75\x1f\x8d\x7b\x75\x1f\x0d\x82\x75\x1f\x8d\x88\x75\x1f\x0d\x8f\x75\x1f\x8d\x95\x75\x1f\x0d\x9c\x75\x1f\x8d\xa2\x75\x03\x01\xa9\x75\x9f\x08\xaa\x75\x81\x40\xae\x75\x9f\x83\xae\x75\x81\x40\xb0\x75\x9f\x8c\xb0\x75\x81\xc0\xb6\x75\x2d\x03\xb7\x75\x9f\x88\xb8\x75\x81\xc0\xbc\x75\x9f\x03\xbd\x75\x81\xc0\xbe\x75\x9f\x0c\xbf\x75\x81\x40\xc5\x75\x2d\x83\xc5\x75\x9f\x08\xc7\x75\x81\x40\xcb\x75\x9f\x83\xcb\x75\x81\x40\xcd\x75\x9f\x8c\xcd\x75\x81\xc0\xd3\x75\x2d\x03\xd4\x75\x9f\x88\xd5\x75\x81\xc0\xd9\x75\x9f\x03\xda\x75\x81\xc0\xdb\x75\x9f\x0c\xdc\x75\x81\x40\xe2\x75\x2d\x83\xe2\x75\x9f\x08\xe4\x75\x81\x40\xe8\x75\x9f\x83\xe8\x75\x81\x40\xea\x75\x9f\x8c\xea\x75\x81\xc0\xf0\x75\x2d\x04\xf1\x75\x1f\x85\xf3\x75\x1f\x05\xf6\x75\x1f\x85\xf8\x75\x1f\x05\xfb\x75\x1f\x85\xfd\x75\x2d\x02\x80\x7b\xad\x4d\x81\x7b\x03\x42\x88\x7b\x81\xc0\x89\x7b\x2d\x45\x8a\x7b\x03\x04\x8d\x7b\x81\x80\x90\x7b\x03\xdc\x91\x7b\x2d\x05\xa0\x7b\xad\xc8\xa2\x7b\x83\x44\xa8\x7b\xad\xc8\xaa\x7b\x97\x00\x40\x7c\x21\x45\x40\x7c\x25\x0d\x44\x7c\x87\x80\x4a\x7c\x15\xc1\x4a\x7c\x17\x41\x4b\x7c\x1f\x0d\x4c\x7c\x17\x82\x52\x7c\x99\x80\x53\x7c\x97\xc0\x53\x7c\x97\x81\x5a\x7c\x97\x00\x64\x7c\x2f\x01\x80\x7c\x81\x80\x80\x7c\x03\x16\x84\x7c\xc1\x04\x90\x7c\x03\x01\x94\x7c\x1f\x05\xfc\x7e\xac\x01\x00\xbe\x10\xd1\x00\xbe\xac\x47\x09\xbe\x10\x39\x0d\xbe\x2c\x87\x29\xbe\x2c\x02\x2d\xbe\x90\x37\x2e\xbe\x90\xff\x49\xbe\x10\xbc\x69\xbe\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x61\x00\x02\x00\x04\x00\x06\x00\xbc\x03\x08\x00\x0a\x00\x0c\x00\x15\x00\x95\x00\xa5\x00\xb9\x00\xc1\x00\xc3\x00\xc7\x00\xcb\x00\xd1\x00\xd7\x00\xdd\x00\xe0\x00\xe6\x00\xf8\x00\x08\x01\x0a\x01\x73\x00\x10\x01\x12\x01\x14\x01\x20\x01\x2c\x01\x44\x01\x4d\x01\x53\x01\x62\x01\x68\x01\x6a\x01\x76\x01\x92\x01\x94\x01\xa9\x01\xbb\x01\xc7\x01\xd1\x01\xd5\x01\xb9\x02\xd7\x01\x3b\x00\xd9\x01\xdb\x01\xb7\x00\xe1\x01\xfc\x01\x0c\x02\x18\x02\x1d\x02\x23\x02\x27\x02\xa3\x03\x33\x02\x3f\x02\x42\x02\x4b\x02\x4e\x02\x51\x02\x5d\x02\x60\x02\x69\x02\x6c\x02\x6f\x02\x75\x02\x78\x02\x81\x02\x8a\x02\x9c\x02\x9f\x02\xa3\x02\xaf\x02\xb9\x02\xc5\x02\xc9\x02\xcd\x02\xd1\x02\xd5\x02\xe7\x02\xed\x02\xf1\x02\xf5\x02\xf9\x02\xfd\x02\x05\x03\x09\x03\x0d\x03\x13\x03\x17\x03\x1b\x03\x23\x03\x27\x03\x2b\x03\x2f\x03\x35\x03\x3d\x03\x41\x03\x49\x03\x4d\x03\x51\x03\x0b\x0f\x57\x03\x5b\x03\x5f\x03\x63\x03\x67\x03\x6b\x03\x6f\x03\x73\x03\x79\x03\x7d\x03\x81\x03\x85\x03\x89\x03\x8d\x03\x91\x03\x95\x03\x99\x03\x9d\x03\xa1\x03\xdc\x10\xa5\x03\xc9\x03\xcd\x03\xd9\x03\xdd\x03\xe1\x03\xef\x03\xf1\x03\x3d\x04\x4f\x04\x99\x04\xf0\x04\x02\x05\x4a\x05\x64\x05\x6c\x05\x70\x05\x73\x05\x9a\x05\xfa\x05\xfe\x05\x07\x06\x0b\x06\x14\x06\x18\x06\x1e\x06\x22\x06\x28\x06\x8e\x06\x94\x06\x98\x06\x9e\x06\xa2\x06\xab\x06\xac\x03\xf3\x06\xad\x03\xf6\x06\xae\x03\xf9\x06\xaf\x03\xfc\x06\xcc\x03\xff\x06\xcd\x03\x02\x07\xce\x03\x05\x07\x09\x07\x0d\x07\x11\x07\x86\x03\x32\x07\x35\x07\xb9\x03\x37\x07\x3b\x07\x88\x03\x53\x07\x89\x03\x56\x07\x90\x03\x6b\x07\x8a\x03\x77\x07\xb0\x03\x89\x07\x8e\x03\x99\x07\x9f\x07\xa3\x07\x8c\x03\xb8\x07\x8f\x03\xbb\x07\xb4\x00\xbe\x07\xc0\x07\xc2\x07\x10\x20\xcb\x07\x2e\x00\xcd\x07\xcf\x07\x20\x00\xd2\x07\xd6\x07\xdb\x07\xdf\x07\xe4\x07\xea\x07\xf0\x07\x20\x00\xf6\x07\x12\x22\x01\x08\x05\x08\x07\x08\x1d\x08\x25\x08\x27\x08\x43\x00\x2d\x08\x30\x08\x90\x01\x36\x08\x39\x08\x4e\x00\x45\x08\x47\x08\x4c\x08\x4e\x08\x51\x08\x5a\x00\xa9\x03\x5a\x00\x53\x08\x57\x08\x60\x08\x69\x00\x62\x08\x65\x08\x6f\x08\x74\x08\x7a\x08\x7e\x08\xa2\x08\x49\x00\xa4\x08\xa6\x08\xa9\x08\x56\x00\xab\x08\xad\x08\xb0\x08\xb4\x08\x58\x00\xb6\x08\xb8\x08\xbb\x08\xc0\x08\xc2\x08\xc5\x08\x76\x00\xc7\x08\xc9\x08\xcc\x08\xd0\x08\x78\x00\xd2\x08\xd4\x08\xd7\x08\xdb\x08\xde\x08\xe4\x08\xe7\x08\xf0\x08\xf3\x08\xf6\x08\xf9\x08\x02\x09\x06\x09\x0b\x09\x0f\x09\x14\x09\x17\x09\x1a\x09\x23\x09\x2c\x09\x3b\x09\x3e\x09\x41\x09\x44\x09\x47\x09\x4a\x09\x56\x09\x5c\x09\x60\x09\x62\x09\x64\x09\x68\x09\x6a\x09\x70\x09\x78\x09\x7c\x09\x80\x09\x86\x09\x89\x09\x8f\x09\x91\x09\x30\x00\x93\x09\x99\x09\x9c\x09\x9e\x09\xa1\x09\xa4\x09\x61\x2d\xcd\x6b\x9f\x9f\xa6\x09\xb1\x09\xbc\x09\xc7\x09\x95\x0a\xa1\x0a\x15\x0b\x20\x00\x27\x0b\x31\x0b\x8d\x0b\xa1\x0b\xa5\x0b\xa9\x0b\xad\x0b\xb1\x0b\xb5\x0b\xb9\x0b\xbd\x0b\xc1\x0b\xc5\x0b\x21\x0c\x35\x0c\x39\x0c\x3d\x0c\x41\x0c\x45\x0c\x49\x0c\x4d\x0c\x51\x0c\x55\x0c\x59\x0c\x6f\x0c\x71\x0c\x73\x0c\xa0\x0c\xbc\x0c\xdc\x0c\xe4\x0c\xec\x0c\xf4\x0c\xfc\x0c\x04\x0d\x0c\x0d\x14\x0d\x22\x0d\x2e\x0d\x7a\x0d\x82\x0d\x85\x0d\x89\x0d\x8d\x0d\x9d\x0d\xb1\x0d\xb5\x0d\xbc\x0d\xc2\x0d\xc6\x0d\x28\x0e\x2c\x0e\x30\x0e\x32\x0e\x36\x0e\x3c\x0e\x3e\x0e\x41\x0e\x43\x0e\x46\x0e\x77\x0e\x7b\x0e\x89\x0e\x8e\x0e\x94\x0e\x9c\x0e\xa3\x0e\xa9\x0e\xb4\x0e\xbe\x0e\xc6\x0e\xca\x0e\xcf\x0e\xd9\x0e\xdd\x0e\xe4\x0e\xec\x0e\xf3\x0e\xf8\x0e\x04\x0f\x0a\x0f\x15\x0f\x1b\x0f\x22\x0f\x28\x0f\x33\x0f\x3d\x0f\x45\x0f\x4c\x0f\x51\x0f\x57\x0f\x5e\x0f\x63\x0f\x69\x0f\x70\x0f\x76\x0f\x7d\x0f\x82\x0f\x89\x0f\x8d\x0f\x9e\x0f\xa4\x0f\xa9\x0f\xad\x0f\xb8\x0f\xbe\x0f\xc9\x0f\xd0\x0f\xd6\x0f\xda\x0f\xe1\x0f\xe5\x0f\xef\x0f\xfa\x0f\x00\x10\x04\x10\x09\x10\x0f\x10\x13\x10\x1a\x10\x1f\x10\x23\x10\x29\x10\x2f\x10\x32\x10\x36\x10\x39\x10\x3f\x10\x45\x10\x59\x10\x61\x10\x79\x10\x7c\x10\x80\x10\x95\x10\xa1\x10\xb1\x10\xc3\x10\xcb\x10\xcf\x10\xda\x10\xde\x10\xea\x10\xf2\x10\xf4\x10\x00\x11\x05\x11\x11\x11\x41\x11\x49\x11\x4d\x11\x53\x11\x57\x11\x5a\x11\x6e\x11\x71\x11\x75\x11\x7b\x11\x7d\x11\x81\x11\x84\x11\x8c\x11\x92\x11\x96\x11\x9c\x11\xa2\x11\xa8\x11\xab\x11\x6f\xa7\xaf\x11\xb3\x11\x8d\x02\xbb\x11\x0d\x12\x0b\x13\x09\x14\x8d\x14\x92\x14\x50\x15\x69\x15\x6f\x15\x75\x15\x7b\x15\x87\x15\x93\x15\x2b\x00\x9e\x15\xb6\x15\xba\x15\xbe\x15\xc2\x15\xc6\x15\xca\x15\xde\x15\xe2\x15\x46\x16\x5f\x16\x85\x16\x8b\x16\x49\x17\x4f\x17\x54\x17\x74\x17\x74\x18\x7a\x18\x0e\x19\xd0\x19\x74\x1a\x7c\x1a\x9a\x1a\x9f\x1a\xb3\x1a\xbd\x1a\xc3\x1a\xd7\x1a\xdc\x1a\xe2\x1a\xf0\x1a\x20\x1b\x2d\x1b\x35\x1b\x39\x1b\x4f\x1b\xc6\x1b\xd8\x1b\xda\x1b\xdc\x1b\x64\x31\x1d\x1c\x1f\x1c\x21\x1c\x23\x1c\x25\x1c\x27\x1c\x45\x1c\x53\x1c\x58\x1c\x61\x1c\x6a\x1c\x7c\x1c\x85\x1c\x8a\x1c\xaa\x1c\xc5\x1c\xc7\x1c\xc9\x1c\xcb\x1c\xcd\x1c\xcf\x1c\xd1\x1c\xd3\x1c\xf3\x1c\xf5\x1c\xf7\x1c\xf9\x1c\xfb\x1c\x02\x1d\x04\x1d\x06\x1d\x08\x1d\x17\x1d\x19\x1d\x1b\x1d\x1d\x1d\x1f\x1d\x21\x1d\x23\x1d\x25\x1d\x27\x1d\x29\x1d\x2b\x1d\x2d\x1d\x2f\x1d\x31\x1d\x33\x1d\x37\x1d\xf4\x03\x39\x1d\x07\x22\x3b\x1d\x02\x22\x3d\x1d\x45\x1d\xf4\x03\x47\x1d\x07\x22\x49\x1d\x02\x22\x4b\x1d\x53\x1d\xf4\x03\x55\x1d\x07\x22\x57\x1d\x02\x22\x59\x1d\x61\x1d\xf4\x03\x63\x1d\x07\x22\x65\x1d\x02\x22\x67\x1d\x6f\x1d\xf4\x03\x71\x1d\x07\x22\x73\x1d\x02\x22\x75\x1d\x7f\x1d\x81\x1d\x83\x1d\x85\x1d\x87\x1d\x89\x1d\x8f\x1d\xac\x1d\x2d\x06\xb4\x1d\xc0\x1d\x2c\x06\xd0\x1d\x40\x1e\x4c\x1e\x5f\x1e\x71\x1e\x84\x1e\x86\x1e\x8a\x1e\x90\x1e\x96\x1e\x98\x1e\x9c\x1e\x9e\x1e\xa6\x1e\xa9\x1e\xab\x1e\xb1\x1e\xb3\x1e\xb5\x30\xb9\x1e\x11\x1f\x27\x1f\x2b\x1f\x2d\x1f\x32\x1f\x7f\x1f\x90\x1f\x91\x20\xa1\x20\xa7\x20\xa1\x21\xbf\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x88\x20\x84\x32\x33\x20\x81\x20\xa7\x31\x6f\x31\xd0\x34\x31\xd0\x32\x33\xd0\x34\x41\x80\x41\x81\x41\x82\x41\x83\x41\x88\x41\x8a\x00\x00\x43\xa7\x45\x80\x45\x81\x45\x82\x45\x88\x49\x80\x49\x81\x49\x82\x49\x88\x00\x00\x4e\x83\x4f\x80\x4f\x81\x4f\x82\x4f\x83\x4f\x88\x00\x00\x00\x00\x55\x80\x55\x81\x55\x82\x55\x88\x59\x81\x00\x00\x00\x00\x61\x80\x61\x81\x61\x82\x61\x83\x61\x88\x61\x8a\x00\x00\x63\xa7\x65\x80\x65\x81\x65\x82\x65\x88\x69\x80\x69\x81\x69\x82\x69\x88\x00\x00\x6e\x83\x6f\x80\x6f\x81\x6f\x82\x6f\x83\x6f\x88\x00\x00\x00\x00\x75\x80\x75\x81\x75\x82\x75\x88\x79\x81\x00\x00\x79\x88\x41\x84\x41\x86\x41\xa8\x43\x81\x43\x82\x43\x87\x43\x8c\x44\x8c\x45\x84\x45\x86\x45\x87\x45\xa8\x45\x8c\x47\x82\x47\x86\x47\x87\x47\xa7\x48\x82\x49\x83\x49\x84\x49\x86\x49\xa8\x49\x87\x49\x4a\x69\x6a\x4a\x82\x4b\xa7\x4c\x81\x4c\xa7\x4c\x8c\x4c\x00\x00\x6b\x20\x6b\x4e\x81\x4e\xa7\x4e\x8c\xbc\x02\x6e\x4f\x84\x4f\x86\x4f\x8b\x52\x81\x52\xa7\x52\x8c\x53\x81\x53\x82\x53\xa7\x53\x8c\x54\xa7\x54\x8c\x55\x83\x55\x84\x55\x86\x55\x8a\x55\x8b\x55\xa8\x57\x82\x59\x82\x59\x88\x5a\x81\x5a\x87\x5a\x8c\x4f\x9b\x55\x9b\x44\x00\x7d\x01\x44\x00\x7e\x01\x64\x00\x7e\x01\x4c\x4a\x4c\x6a\x6c\x6a\x4e\x4a\x4e\x6a\x6e\x6a\x41\x00\x8c\x49\x00\x8c\x4f\x00\x8c\x55\x00\x8c\xdc\x00\x84\xdc\x00\x81\xdc\x00\x8c\xdc\x00\x80\xc4\x00\x84\x26\x02\x84\xc6\x00\x84\x47\x8c\x4b\x8c\x4f\xa8\xea\x01\x84\xeb\x01\x84\xb7\x01\x8c\x92\x02\x8c\x6a\x00\x8c\x44\x5a\x44\x7a\x64\x7a\x47\x81\x4e\x00\x80\xc5\x00\x81\xc6\x00\x81\xd8\x00\x81\x41\x8f\x41\x91\x45\x8f\x45\x91\x49\x8f\x49\x91\x4f\x8f\x4f\x91\x52\x8f\x52\x91\x55\x8f\x55\x91\x53\xa6\x54\xa6\x48\x8c\x41\x00\x87\x45\x00\xa7\xd6\x00\x84\xd5\x00\x84\x4f\x00\x87\x2e\x02\x84\x59\x00\x84\x68\x00\x66\x02\x6a\x00\x72\x00\x79\x02\x7b\x02\x81\x02\x77\x00\x79\x00\x20\x86\x20\x87\x20\x8a\x20\xa8\x20\x83\x20\x8b\x63\x02\x6c\x00\x73\x00\x78\x00\x95\x02\x80\x81\x00\x93\x88\x81\x20\xc5\x20\x81\xa8\x00\x81\x91\x03\x81\x95\x03\x81\x97\x03\x81\x99\x03\x81\x00\x00\x00\x9f\x03\x81\x00\x00\x00\xa5\x03\x81\xa9\x03\x81\xca\x03\x81\x01\x03\x98\x07\xa4\x07\xb0\x00\xb4\x00\xb6\x00\xb8\x00\xca\x00\x01\x03\xb8\x07\xc4\x07\xbe\x00\xc4\x00\xc8\x00\xa5\x03\x0d\x13\x00\x01\x03\xd1\x00\xd1\x07\xc6\x03\xc0\x03\xba\x03\xc1\x03\xc2\x03\x00\x00\x98\x03\xb5\x03\x15\x04\x80\x15\x04\x88\x00\x00\x00\x13\x04\x81\x06\x04\x88\x1a\x04\x81\x18\x04\x80\x23\x04\x86\x18\x04\x86\x38\x04\x86\x35\x04\x80\x35\x04\x88\x00\x00\x00\x33\x04\x81\x56\x04\x88\x3a\x04\x81\x38\x04\x80\x43\x04\x86\x74\x04\x8f\x16\x04\x86\x10\x04\x86\x10\x04\x88\x15\x04\x86\xd8\x04\x88\x16\x04\x88\x17\x04\x88\x18\x04\x84\x18\x04\x88\x1e\x04\x88\xe8\x04\x88\x2d\x04\x88\x23\x04\x84\x23\x04\x88\x23\x04\x8b\x27\x04\x88\x2b\x04\x88\x65\x05\x82\x05\x27\x06\x00\x2c\x00\x2d\x21\x2d\x00\x2e\x23\x2d\x27\x06\x00\x4d\x21\x4d\xa0\x4d\x23\x4d\xd5\x06\x54\x06\x00\x00\x00\x00\xc1\x06\x54\x06\xd2\x06\x54\x06\x28\x09\x3c\x09\x30\x09\x3c\x09\x33\x09\x3c\x09\x15\x09\x00\x27\x01\x27\x02\x27\x07\x27\x0c\x27\x0d\x27\x16\x27\x1a\x27\xbe\x09\x09\x00\x09\x19\xa1\x09\xbc\x09\xaf\x09\xbc\x09\x32\x0a\x3c\x0a\x38\x0a\x3c\x0a\x16\x0a\x00\x26\x01\x26\x06\x26\x2b\x0a\x3c\x0a\x47\x0b\x56\x0b\x3e\x0b\x09\x00\x09\x19\x21\x0b\x3c\x0b\x92\x0b\xd7\x0b\xbe\x0b\x08\x00\x09\x00\x08\x19\x46\x0c\x56\x0c\xbf\x0c\xd5\x0c\xc6\x0c\xd5\x0c\xc2\x0c\x04\x00\x08\x13\x3e\x0d\x08\x00\x09\x00\x08\x19\xd9\x0d\xca\x0d\xca\x0d\x0f\x05\x12\x00\x0f\x15\x4d\x0e\x32\x0e\xcd\x0e\xb2\x0e\x99\x0e\x12\x00\x12\x08\x42\x0f\xb7\x0f\x4c\x0f\xb7\x0f\x51\x0f\xb7\x0f\x56\x0f\xb7\x0f\x5b\x0f\xb7\x0f\x40\x0f\xb5\x0f\x71\x0f\x72\x0f\x71\x0f\x00\x03\x41\x0f\xb2\x0f\x81\x0f\xb3\x0f\x80\x0f\xb3\x0f\x81\x0f\x71\x0f\x80\x0f\x92\x0f\xb7\x0f\x9c\x0f\xb7\x0f\xa1\x0f\xb7\x0f\xa6\x0f\xb7\x0f\xab\x0f\xb7\x0f\x90\x0f\xb5\x0f\x25\x10\x2e\x10\x05\x1b\x35\x1b\x00\x00\x00\x00\x07\x1b\x35\x1b\x00\x00\x00\x00\x09\x1b\x35\x1b\x00\x00\x00\x00\x0b\x1b\x35\x1b\x00\x00\x00\x00\x0d\x1b\x35\x1b\x11\x1b\x35\x1b\x3a\x1b\x35\x1b\x00\x00\x00\x00\x3c\x1b\x35\x1b\x3e\x1b\x35\x1b\x42\x1b\x35\x1b\x41\x00\xc6\x00\x42\x00\x00\x00\x44\x00\x45\x00\x8e\x01\x47\x00\x4f\x00\x22\x02\x50\x00\x52\x00\x54\x00\x55\x00\x57\x00\x61\x00\x50\x02\x51\x02\x02\x1d\x62\x00\x64\x00\x65\x00\x59\x02\x5b\x02\x5c\x02\x67\x00\x00\x00\x6b\x00\x6d\x00\x4b\x01\x6f\x00\x54\x02\x16\x1d\x17\x1d\x70\x00\x74\x00\x75\x00\x1d\x1d\x6f\x02\x76\x00\x25\x1d\xb2\x03\xb3\x03\xb4\x03\xc6\x03\xc7\x03\x69\x00\x72\x00\x75\x00\x76\x00\xb2\x03\xb3\x03\xc1\x03\xc6\x03\xc7\x03\x52\x02\x63\x00\x55\x02\xf0\x00\x5c\x02\x66\x00\x5f\x02\x61\x02\x65\x02\x68\x02\x69\x02\x6a\x02\x7b\x1d\x9d\x02\x6d\x02\x85\x1d\x9f\x02\x71\x02\x70\x02\x72\x02\x73\x02\x74\x02\x75\x02\x78\x02\x82\x02\x83\x02\xab\x01\x89\x02\x8a\x02\x1c\x1d\x8b\x02\x8c\x02\x7a\x00\x90\x02\x91\x02\x92\x02\xb8\x03\x41\x00\xa5\x42\x00\x87\x42\x00\xa3\x42\x00\xb1\xc7\x00\x81\x44\x00\x87\x44\x00\xa3\x44\x00\xb1\x44\x00\xa7\x44\x00\xad\x12\x01\x80\x12\x01\x81\x45\x00\xad\x45\x00\xb0\x28\x02\x86\x46\x00\x87\x47\x00\x84\x48\x00\x87\x48\x00\xa3\x48\x00\x88\x48\x00\xa7\x48\x00\xae\x49\x00\xb0\xcf\x00\x81\x4b\x00\x81\x4b\x00\xa3\x4b\x00\xb1\x4c\x00\xa3\x36\x1e\x84\x4c\xb1\x4c\xad\x4d\x81\x4d\x87\x4d\xa3\x4e\x87\x4e\xa3\x4e\xb1\x4e\xad\xd5\x00\x81\xd5\x00\x88\x4c\x01\x80\x4c\x01\x81\x50\x00\x81\x50\x00\x87\x52\x00\x87\x52\x00\xa3\x5a\x1e\x84\x52\x00\xb1\x53\x00\x87\x53\x00\xa3\x5a\x01\x87\x60\x01\x87\x62\x1e\x87\x54\x00\x87\x54\x00\xa3\x54\x00\xb1\x54\x00\xad\x55\x00\xa4\x55\x00\xb0\x55\x00\xad\x68\x01\x81\x6a\x01\x88\x56\x83\x56\xa3\x57\x80\x57\x81\x57\x88\x57\x87\x57\xa3\x58\x87\x58\x88\x59\x87\x5a\x82\x5a\xa3\x5a\xb1\x68\xb1\x74\x88\x77\x8a\x79\x8a\x61\x00\xbe\x02\x7f\x01\x87\x41\x00\xa3\x41\x00\x89\xc2\x00\x81\xc2\x00\x80\xc2\x00\x89\xc2\x00\x83\xa0\x1e\x82\x02\x01\x81\x02\x01\x80\x02\x01\x89\x02\x01\x83\xa0\x1e\x86\x45\x00\xa3\x45\x00\x89\x45\x00\x83\xca\x00\x81\xca\x00\x80\xca\x00\x89\xca\x00\x83\xb8\x1e\x82\x49\x00\x89\x49\x00\xa3\x4f\x00\xa3\x4f\x00\x89\xd4\x00\x81\xd4\x00\x80\xd4\x00\x89\xd4\x00\x83\xcc\x1e\x82\xa0\x01\x81\xa0\x01\x80\xa0\x01\x89\xa0\x01\x83\xa0\x01\xa3\x55\x00\xa3\x55\x00\x89\xaf\x01\x81\xaf\x01\x80\xaf\x01\x89\xaf\x01\x83\xaf\x01\xa3\x59\x00\x80\x59\x00\xa3\x59\x00\x89\x59\x00\x83\xb1\x03\x13\x03\x00\x1f\x80\x00\x1f\x81\x00\x1f\xc2\x91\x03\x13\x03\x08\x1f\x80\x08\x1f\x81\x08\x1f\xc2\xb5\x03\x13\x03\x10\x1f\x80\x10\x1f\x81\x95\x03\x13\x03\x18\x1f\x80\x18\x1f\x81\xb7\x03\x93\xb7\x03\x94\x20\x1f\x80\x21\x1f\x80\x20\x1f\x81\x21\x1f\x81\x20\x1f\xc2\x21\x1f\xc2\x97\x03\x93\x97\x03\x94\x28\x1f\x80\x29\x1f\x80\x28\x1f\x81\x29\x1f\x81\x28\x1f\xc2\x29\x1f\xc2\xb9\x03\x93\xb9\x03\x94\x30\x1f\x80\x31\x1f\x80\x30\x1f\x81\x31\x1f\x81\x30\x1f\xc2\x31\x1f\xc2\x99\x03\x93\x99\x03\x94\x38\x1f\x80\x39\x1f\x80\x38\x1f\x81\x39\x1f\x81\x38\x1f\xc2\x39\x1f\xc2\xbf\x03\x93\xbf\x03\x94\x40\x1f\x80\x40\x1f\x81\x9f\x03\x13\x03\x48\x1f\x80\x48\x1f\x81\xc5\x03\x13\x03\x50\x1f\x80\x50\x1f\x81\x50\x1f\xc2\xa5\x03\x94\x00\x00\x00\x59\x1f\x80\x00\x00\x00\x59\x1f\x81\x00\x00\x00\x59\x1f\xc2\xc9\x03\x93\xc9\x03\x94\x60\x1f\x80\x61\x1f\x80\x60\x1f\x81\x61\x1f\x81\x60\x1f\xc2\x61\x1f\xc2\xa9\x03\x93\xa9\x03\x94\x68\x1f\x80\x69\x1f\x80\x68\x1f\x81\x69\x1f\x81\x68\x1f\xc2\x69\x1f\xc2\xb1\x03\x80\xb5\x03\x80\xb7\x03\x80\xb9\x03\x80\xbf\x03\x80\xc5\x03\x80\xc9\x03\x80\x00\x1f\x45\x03\x20\x1f\x45\x03\x60\x1f\x45\x03\xb1\x03\x86\xb1\x03\x84\x70\x1f\xc5\xb1\x03\xc5\xac\x03\xc5\x00\x00\x00\xb1\x03\xc2\xb6\x1f\xc5\x91\x03\x86\x91\x03\x84\x91\x03\x80\x91\x03\xc5\x20\x93\x20\x93\x20\xc2\xa8\x00\xc2\x74\x1f\xc5\xb7\x03\xc5\xae\x03\xc5\x00\x00\x00\xb7\x03\xc2\xc6\x1f\xc5\x95\x03\x80\x97\x03\x80\x97\x03\xc5\xbf\x1f\x80\xbf\x1f\x81\xbf\x1f\xc2\xb9\x03\x86\xb9\x03\x84\xca\x03\x80\x00\x03\xb9\x42\xca\x42\x99\x06\x99\x04\x99\x00\xfe\x1f\x80\xfe\x1f\x81\xfe\x1f\xc2\xc5\x03\x86\xc5\x03\x84\xcb\x03\x80\x00\x03\xc1\x13\xc1\x14\xc5\x42\xcb\x42\xa5\x06\xa5\x04\xa5\x00\xa1\x03\x94\xa8\x00\x80\x85\x03\x60\x00\x7c\x1f\xc5\xc9\x03\xc5\xce\x03\xc5\x00\x00\x00\xc9\x03\xc2\xf6\x1f\xc5\x9f\x03\x80\xa9\x03\x80\xa9\x03\xc5\x20\x94\x02\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\xb3\x2e\x2e\x2e\x2e\x2e\x32\x20\x32\x20\x32\x20\x00\x00\x00\x35\x20\x35\x20\x35\x20\x00\x00\x00\x21\x21\x00\x00\x20\x85\x3f\x3f\x3f\x21\x21\x3f\x32\x20\x00\x00\x00\x00\x30\x69\x00\x00\x34\x35\x36\x37\x38\x39\x2b\x3d\x28\x29\x6e\x30\x00\x2b\x00\x12\x22\x3d\x00\x28\x00\x29\x00\x00\x00\x61\x00\x65\x00\x6f\x00\x78\x00\x59\x02\x68\x6b\x6c\x6d\x6e\x70\x73\x74\x52\x73\x61\x2f\x63\x61\x2f\x73\xb0\x00\x43\x63\x2f\x6f\x63\x2f\x75\xb0\x00\x46\x48\x00\x1f\x00\x00\x00\x20\xdf\x01\x01\x04\x24\x4e\x6f\x50\x51\x52\x52\x52\x53\x4d\x54\x45\x4c\x54\x4d\x4b\x00\xc5\x00\x42\x43\x00\x65\x45\x46\x00\x4d\x6f\xd0\x05\x46\x41\x58\xc0\x03\xb3\x03\x93\x03\xa0\x03\x11\x22\x44\x64\x65\x69\x6a\x31\xd0\x37\x31\xd0\x39\x31\xd0\x31\x30\x31\xd0\x33\x32\xd0\x33\x31\xd0\x35\x32\xd0\x35\x33\xd0\x35\x34\xd0\x35\x31\xd0\x36\x35\xd0\x36\x31\xd0\x38\x33\xd0\x38\x35\xd0\x38\x37\xd0\x38\x31\xd0\x49\x49\x49\x49\x49\x49\x56\x56\x49\x56\x49\x49\x56\x49\x49\x49\x49\x58\x58\x49\x58\x49\x49\x4c\x43\x44\x4d\x69\x69\x69\x69\x69\x69\x69\x76\x76\x69\x76\x69\x69\x76\x69\x69\x69\x69\x78\x78\x69\x78\x69\x69\x6c\x63\x64\x6d\x30\xd0\x33\x90\x21\xb8\x92\x21\xb8\x94\x21\xb8\xd0\x21\xb8\xd4\x21\xb8\xd2\x21\xb8\x03\x22\xb8\x08\x22\xb8\x0b\x22\xb8\x23\x22\xb8\x00\x00\x00\x25\x22\xb8\x2b\x22\x2b\x22\x2b\x22\x00\x00\x00\x2e\x22\x2e\x22\x2e\x22\x00\x00\x00\x3c\x22\xb8\x43\x22\xb8\x45\x22\xb8\x00\x00\x00\x48\x22\xb8\x3d\x00\xb8\x00\x00\x00\x61\x22\xb8\x4d\x22\xb8\x3c\x00\xb8\x3e\x00\xb8\x64\x22\xb8\x65\x22\xb8\x72\x22\xb8\x76\x22\xb8\x7a\x22\xb8\x82\x22\xb8\x86\x22\xb8\xa2\x22\xb8\xa8\x22\xb8\xa9\x22\xb8\xab\x22\xb8\x7c\x22\xb8\x91\x22\xb8\xb2\x22\x38\x03\x08\x30\x31\x00\x31\x00\x30\x00\x32\x30\x28\x00\x31\x00\x29\x00\x28\x00\x31\x00\x30\x00\x29\x00\x28\x32\x30\x29\x31\x00\x2e\x00\x31\x00\x30\x00\x2e\x00\x32\x30\x2e\x28\x00\x61\x00\x29\x00\x41\x00\x61\x00\x2b\x22\x00\x00\x00\x00\x3a\x3a\x3d\x3d\x3d\x3d\x3d\x3d\xdd\x2a\xb8\x6a\x56\x00\x4e\x00\x28\x36\x3f\x59\x85\x8c\xa0\xba\x3f\x51\x00\x26\x2c\x43\x57\x6c\xa1\xb6\xc1\x9b\x52\x00\x5e\x7a\x7f\x9d\xa6\xc1\xce\xe7\xb6\x53\xc8\x53\xe3\x53\xd7\x56\x1f\x57\xeb\x58\x02\x59\x0a\x59\x15\x59\x27\x59\x73\x59\x50\x5b\x80\x5b\xf8\x5b\x0f\x5c\x22\x5c\x38\x5c\x6e\x5c\x71\x5c\xdb\x5d\xe5\x5d\xf1\x5d\xfe\x5d\x72\x5e\x7a\x5e\x7f\x5e\xf4\x5e\xfe\x5e\x0b\x5f\x13\x5f\x50\x5f\x61\x5f\x73\x5f\xc3\x5f\x08\x62\x36\x62\x4b\x62\x2f\x65\x34\x65\x87\x65\x97\x65\xa4\x65\xb9\x65\xe0\x65\xe5\x65\xf0\x66\x08\x67\x28\x67\x20\x6b\x62\x6b\x79\x6b\xb3\x6b\xcb\x6b\xd4\x6b\xdb\x6b\x0f\x6c\x14\x6c\x34\x6c\x6b\x70\x2a\x72\x36\x72\x3b\x72\x3f\x72\x47\x72\x59\x72\x5b\x72\xac\x72\x84\x73\x89\x73\xdc\x74\xe6\x74\x18\x75\x1f\x75\x28\x75\x30\x75\x8b\x75\x92\x75\x76\x76\x7d\x76\xae\x76\xbf\x76\xee\x76\xdb\x77\xe2\x77\xf3\x77\x3a\x79\xb8\x79\xbe\x79\x74\x7a\xcb\x7a\xf9\x7a\x73\x7c\xf8\x7c\x36\x7f\x51\x7f\x8a\x7f\xbd\x7f\x01\x80\x0c\x80\x12\x80\x33\x80\x7f\x80\x89\x80\xe3\x81\x00\x07\x10\x19\x29\x38\x3c\x8b\x8f\x95\x4d\x86\x6b\x86\x40\x88\x4c\x88\x63\x88\x7e\x89\x8b\x89\xd2\x89\x00\x8a\x37\x8c\x46\x8c\x55\x8c\x78\x8c\x9d\x8c\x64\x8d\x70\x8d\xb3\x8d\xab\x8e\xca\x8e\x9b\x8f\xb0\x8f\xb5\x8f\x91\x90\x49\x91\xc6\x91\xcc\x91\xd1\x91\x77\x95\x80\x95\x1c\x96\xb6\x96\xb9\x96\xe8\x96\x51\x97\x5e\x97\x62\x97\x69\x97\xcb\x97\xed\x97\xf3\x97\x01\x98\xa8\x98\xdb\x98\xdf\x98\x96\x99\x99\x99\xac\x99\xa8\x9a\xd8\x9a\xdf\x9a\x25\x9b\x2f\x9b\x32\x9b\x3c\x9b\x5a\x9b\xe5\x9c\x75\x9e\x7f\x9e\xa5\x9e\x00\x16\x1e\x28\x2c\x54\x58\x69\x6e\x7b\x96\xa5\xad\xe8\xf7\xfb\x12\x30\x00\x00\x41\x53\x44\x53\x45\x53\x4b\x30\x99\x30\x00\x00\x00\x00\x4d\x30\x99\x30\x00\x00\x00\x00\x4f\x30\x99\x30\x00\x00\x00\x00\x51\x30\x99\x30\x00\x00\x00\x00\x53\x30\x99\x30\x00\x00\x00\x00\x55\x30\x99\x30\x00\x00\x00\x00\x57\x30\x99\x30\x00\x00\x00\x00\x59\x30\x99\x30\x00\x00\x00\x00\x5b\x30\x99\x30\x00\x00\x00\x00\x5d\x30\x99\x30\x00\x00\x00\x00\x5f\x30\x99\x30\x00\x00\x00\x00\x61\x30\x99\x30\x64\x30\x99\x30\x00\x00\x00\x00\x66\x30\x99\x30\x00\x00\x00\x00\x68\x30\x99\x30\x6f\x30\x99\x30\x72\x30\x99\x30\x75\x30\x99\x30\x78\x30\x99\x30\x7b\x30\x99\x30\x46\x30\x99\x30\x20\x00\x99\x30\x9d\x30\x99\x30\x88\x30\x8a\x30\xab\x30\x99\x30\x00\x00\x00\x00\xad\x30\x99\x30\x00\x00\x00\x00\xaf\x30\x99\x30\x00\x00\x00\x00\xb1\x30\x99\x30\x00\x00\x00\x00\xb3\x30\x99\x30\x00\x00\x00\x00\xb5\x30\x99\x30\x00\x00\x00\x00\xb7\x30\x99\x30\x00\x00\x00\x00\xb9\x30\x99\x30\x00\x00\x00\x00\xbb\x30\x99\x30\x00\x00\x00\x00\xbd\x30\x99\x30\x00\x00\x00\x00\xbf\x30\x99\x30\x00\x00\x00\x00\xc1\x30\x99\x30\xc4\x30\x99\x30\x00\x00\x00\x00\xc6\x30\x99\x30\x00\x00\x00\x00\xc8\x30\x99\x30\xcf\x30\x99\x30\xd2\x30\x99\x30\xd5\x30\x99\x30\xd8\x30\x99\x30\xdb\x30\x99\x30\xa6\x30\x99\x30\xef\x30\x99\x30\xfd\x30\x99\x30\xb3\x30\xc8\x30\x00\x11\x00\x01\xaa\x02\xac\xad\x03\x04\x05\xb0\xb1\xb2\xb3\xb4\xb5\x1a\x06\x07\x08\x21\x09\x11\x61\x11\x14\x11\x4c\x00\x01\xb3\xb4\xb8\xba\xbf\xc3\xc5\x08\xc9\xcb\x09\x0a\x0c\x0e\x0f\x13\x15\x17\x18\x19\x1a\x1b\x1e\x22\x2c\x33\x38\xdd\xde\x43\x44\x45\x70\x71\x74\x7d\x7e\x80\x8a\x8d\x00\x4e\x8c\x4e\x09\x4e\xdb\x56\x0a\x4e\x2d\x4e\x0b\x4e\x32\x75\x59\x4e\x19\x4e\x01\x4e\x29\x59\x30\x57\xba\x4e\x28\x00\x29\x00\x00\x11\x02\x11\x03\x11\x05\x11\x06\x11\x07\x11\x09\x11\x0b\x11\x0c\x11\x0e\x11\x0f\x11\x10\x11\x11\x11\x12\x11\x28\x00\x00\x11\x61\x11\x29\x00\x28\x00\x02\x11\x61\x11\x29\x00\x28\x00\x05\x11\x61\x11\x29\x00\x28\x00\x09\x11\x61\x11\x29\x00\x28\x00\x0b\x11\x61\x11\x29\x00\x28\x00\x0e\x11\x61\x11\x29\x00\x28\x00\x0c\x11\x6e\x11\x29\x00\x28\x00\x0b\x11\x69\x11\x0c\x11\x65\x11\xab\x11\x29\x00\x28\x00\x0b\x11\x69\x11\x12\x11\x6e\x11\x29\x00\x28\x00\x29\x00\x00\x4e\x8c\x4e\x09\x4e\xdb\x56\x94\x4e\x6d\x51\x03\x4e\x6b\x51\x5d\x4e\x41\x53\x08\x67\x6b\x70\x34\x6c\x28\x67\xd1\x91\x1f\x57\xe5\x65\x2a\x68\x09\x67\x3e\x79\x0d\x54\x79\x72\xa1\x8c\x5d\x79\xb4\x52\xe3\x4e\x7c\x54\x66\x5b\xe3\x76\x01\x4f\xc7\x8c\x54\x53\x6d\x79\x11\x4f\xea\x81\xf3\x81\x4f\x55\x7c\x5e\x87\x65\x8f\x7b\x50\x54\x45\x32\x00\x31\x00\x33\x00\x30\x00\x00\x11\x00\x02\x03\x05\x06\x07\x09\x0b\x0c\x0e\x0f\x10\x11\x12\x00\x11\x00\x61\x02\x61\x03\x61\x05\x61\x06\x61\x07\x61\x09\x61\x0b\x61\x0c\x61\x0e\x11\x61\x11\x00\x11\x0e\x61\xb7\x00\x69\x0b\x11\x01\x63\x00\x69\x0b\x11\x6e\x11\x00\x4e\x8c\x4e\x09\x4e\xdb\x56\x94\x4e\x6d\x51\x03\x4e\x6b\x51\x5d\x4e\x41\x53\x08\x67\x6b\x70\x34\x6c\x28\x67\xd1\x91\x1f\x57\xe5\x65\x2a\x68\x09\x67\x3e\x79\x0d\x54\x79\x72\xa1\x8c\x5d\x79\xb4\x52\xd8\x79\x37\x75\x73\x59\x69\x90\x2a\x51\x70\x53\xe8\x6c\x05\x98\x11\x4f\x99\x51\x63\x6b\x0a\x4e\x2d\x4e\x0b\x4e\xe6\x5d\xf3\x53\x3b\x53\x97\x5b\x66\x5b\xe3\x76\x01\x4f\xc7\x8c\x54\x53\x1c\x59\x33\x00\x36\x00\x34\x00\x30\x00\x35\x30\x31\x00\x08\x67\x31\x00\x30\x00\x08\x67\x48\x67\x65\x72\x67\x65\x56\x4c\x54\x44\xa2\x30\x00\x02\x04\x06\x08\x09\x0b\x0d\x0f\x11\x13\x15\x17\x19\x1b\x1d\x1f\x22\x24\x26\x28\x29\x2a\x2b\x2c\x2d\x30\x33\x36\x39\x3c\x3d\x3e\x3f\x40\x42\x44\x46\x47\x48\x49\x4a\x4b\x4d\x4e\x4f\x50\xe4\x4e\x8c\x54\xa1\x30\x01\x30\x5b\x27\x01\x4a\x34\x00\x01\x52\x39\x01\xa2\x30\x00\x5a\x49\xa4\x30\x00\x27\x4f\x0c\xa4\x30\x00\x4f\x1d\x02\x05\x4f\xa8\x30\x00\x11\x07\x54\x21\xa8\x30\x00\x54\x03\x54\xa4\x30\x06\x4f\x15\x06\x58\x3c\x07\x00\x46\xab\x30\x00\x3e\x18\x1d\x00\x42\x3f\x51\xac\x30\x00\x41\x47\x00\x47\x32\xae\x30\xac\x30\xae\x30\x00\x1d\x4e\xad\x30\x00\x38\x3d\x4f\x01\x3e\x13\x4f\xad\x30\xed\x30\xad\x30\x00\x40\x03\x3c\x33\xad\x30\x00\x40\x34\x4f\x1b\x3e\xad\x30\x00\x40\x42\x16\x1b\xb0\x30\x00\x39\x30\xa4\x30\x0c\x45\x3c\x24\x4f\x0b\x47\x18\x00\x49\xaf\x30\x00\x3e\x4d\x1e\xb1\x30\x00\x4b\x08\x02\x3a\x19\x02\x4b\x2c\xa4\x30\x11\x00\x0b\x47\xb5\x30\x00\x3e\x0c\x47\x2b\xb0\x30\x07\x3a\x43\x00\xb9\x30\x02\x3a\x08\x02\x3a\x0f\x07\x43\x00\xb7\x30\x10\x00\x12\x34\x11\x3c\x13\x17\xa4\x30\x2a\x1f\x24\x2b\x00\x20\xbb\x30\x16\x41\x00\x38\x0d\xc4\x30\x0d\x38\x00\xd0\x30\x00\x2c\x1c\x1b\xa2\x30\x32\x00\x17\x26\x49\xaf\x30\x25\x00\x3c\xb3\x30\x21\x00\x20\x38\xa1\x30\x34\x00\x48\x22\x28\xa3\x30\x32\x00\x59\x25\xa7\x30\x2f\x1c\x10\x00\x44\xd5\x30\x00\x14\x1e\xaf\x30\x29\x00\x10\x4d\x3c\xda\x30\xbd\x30\xb8\x30\x22\x13\x1a\x20\x33\x0c\x22\x3b\x01\x22\x44\x00\x21\x44\x07\xa4\x30\x39\x00\x4f\x24\xc8\x30\x14\x23\x00\xdb\x30\xf3\x30\xc9\x30\x14\x2a\x00\x12\x33\x22\x12\x33\x2a\xa4\x30\x3a\x00\x0b\x49\xa4\x30\x3a\x00\x47\x3a\x1f\x2b\x3a\x47\x0b\xb7\x30\x27\x3c\x00\x30\x3c\xaf\x30\x30\x00\x3e\x44\xdf\x30\xea\x30\xd0\x30\x0f\x1a\x00\x2c\x1b\xe1\x30\xac\x30\xac\x30\x35\x00\x1c\x47\x35\x50\x1c\x3f\xa2\x30\x42\x5a\x27\x42\x5a\x49\x44\x00\x51\xc3\x30\x27\x00\x05\x28\xea\x30\xe9\x30\xd4\x30\x17\x00\x28\xd6\x30\x15\x26\x00\x15\xec\x30\xe0\x30\xb2\x30\x3a\x41\x16\x00\x41\xc3\x30\x2c\x00\x05\x30\x00\xb9\x70\x31\x00\x30\x00\xb9\x70\x32\x00\x30\x00\xb9\x70\x68\x50\x61\x64\x61\x41\x55\x62\x61\x72\x6f\x56\x70\x63\x64\x6d\x64\x00\x6d\x00\xb2\x00\x49\x00\x55\x00\x73\x5e\x10\x62\x2d\x66\x8c\x54\x27\x59\x63\x6b\x0e\x66\xbb\x6c\x2a\x68\x0f\x5f\x1a\x4f\x3e\x79\x70\x00\x41\x6e\x00\x41\xbc\x03\x41\x6d\x00\x41\x6b\x00\x41\x4b\x00\x42\x4d\x00\x42\x47\x00\x42\x63\x61\x6c\x6b\x63\x61\x6c\x70\x00\x46\x6e\x00\x46\xbc\x03\x46\xbc\x03\x67\x6d\x00\x67\x6b\x00\x67\x48\x00\x7a\x6b\x48\x7a\x4d\x48\x7a\x47\x48\x7a\x54\x48\x7a\xbc\x03\x13\x21\x6d\x00\x13\x21\x64\x00\x13\x21\x6b\x00\x13\x21\x66\x00\x6d\x6e\x00\x6d\xbc\x03\x6d\x6d\x00\x6d\x63\x00\x6d\x6b\x00\x6d\x63\x00\x0a\x0a\x4f\x00\x0a\x4f\x6d\x00\xb2\x00\x63\x00\x08\x0a\x4f\x0a\x0a\x50\x00\x0a\x50\x6d\x00\xb3\x00\x6b\x00\x6d\x00\xb3\x00\x6d\x00\x15\x22\x73\x00\x6d\x00\x15\x22\x73\x00\xb2\x00\x50\x61\x6b\x50\x61\x4d\x50\x61\x47\x50\x61\x72\x61\x64\x72\x61\x64\xd1\x73\x72\x00\x61\x00\x64\x00\x15\x22\x73\x00\xb2\x00\x70\x00\x73\x6e\x00\x73\xbc\x03\x73\x6d\x00\x73\x70\x00\x56\x6e\x00\x56\xbc\x03\x56\x6d\x00\x56\x6b\x00\x56\x4d\x00\x56\x70\x00\x57\x6e\x00\x57\xbc\x03\x57\x6d\x00\x57\x6b\x00\x57\x4d\x00\x57\x6b\x00\xa9\x03\x4d\x00\xa9\x03\x61\x2e\x6d\x2e\x42\x71\x63\x63\x63\x64\x43\xd1\x6b\x67\x43\x6f\x2e\x64\x42\x47\x79\x68\x61\x48\x50\x69\x6e\x4b\x4b\x4b\x4d\x6b\x74\x6c\x6d\x6c\x6e\x6c\x6f\x67\x6c\x78\x6d\x62\x6d\x69\x6c\x6d\x6f\x6c\x50\x48\x70\x2e\x6d\x2e\x50\x50\x4d\x50\x52\x73\x72\x53\x76\x57\x62\x56\xd1\x6d\x41\xd1\x6d\x31\x00\xe5\x65\x31\x00\x30\x00\xe5\x65\x32\x00\x30\x00\xe5\x65\x33\x00\x30\x00\xe5\x65\x67\x61\x6c\x4a\x04\x4c\x04\x26\x01\x53\x01\x27\xa7\x37\xab\x6b\x02\x52\xab\x48\x8c\xf4\x66\xca\x8e\xc8\x8c\xd1\x6e\x32\x4e\xe5\x53\x9c\x9f\x9c\x9f\x51\x59\xd1\x91\x87\x55\x48\x59\xf6\x61\x69\x76\x85\x7f\x3f\x86\xba\x87\xf8\x88\x8f\x90\x02\x6a\x1b\x6d\xd9\x70\xde\x73\x3d\x84\x6a\x91\xf1\x99\x82\x4e\x75\x53\x04\x6b\x1b\x72\x2d\x86\x1e\x9e\x50\x5d\xeb\x6f\xcd\x85\x64\x89\xc9\x62\xd8\x81\x1f\x88\xca\x5e\x17\x67\x6a\x6d\xfc\x72\xce\x90\x86\x4f\xb7\x51\xde\x52\xc4\x64\xd3\x6a\x10\x72\xe7\x76\x01\x80\x06\x86\x5c\x86\xef\x8d\x32\x97\x6f\x9b\xfa\x9d\x8c\x78\x7f\x79\xa0\x7d\xc9\x83\x04\x93\x7f\x9e\xd6\x8a\xdf\x58\x04\x5f\x60\x7c\x7e\x80\x62\x72\xca\x78\xc2\x8c\xf7\x96\xd8\x58\x62\x5c\x13\x6a\xda\x6d\x0f\x6f\x2f\x7d\x37\x7e\x4b\x96\xd2\x52\x8b\x80\xdc\x51\xcc\x51\x1c\x7a\xbe\x7d\xf1\x83\x75\x96\x80\x8b\xcf\x62\x02\x6a\xfe\x8a\x39\x4e\xe7\x5b\x12\x60\x87\x73\x70\x75\x17\x53\xfb\x78\xbf\x4f\xa9\x5f\x0d\x4e\xcc\x6c\x78\x65\x22\x7d\xc3\x53\x5e\x58\x01\x77\x49\x84\xaa\x8a\xba\x6b\xb0\x8f\x88\x6c\xfe\x62\xe5\x82\xa0\x63\x65\x75\xae\x4e\x69\x51\xc9\x51\x81\x68\xe7\x7c\x6f\x82\xd2\x8a\xcf\x91\xf5\x52\x42\x54\x73\x59\xec\x5e\xc5\x65\xfe\x6f\x2a\x79\xad\x95\x6a\x9a\x97\x9e\xce\x9e\x9b\x52\xc6\x66\x77\x6b\x62\x8f\x74\x5e\x90\x61\x00\x62\x9a\x64\x23\x6f\x49\x71\x89\x74\xca\x79\xf4\x7d\x6f\x80\x26\x8f\xee\x84\x23\x90\x4a\x93\x17\x52\xa3\x52\xbd\x54\xc8\x70\xc2\x88\xaa\x8a\xc9\x5e\xf5\x5f\x7b\x63\xae\x6b\x3e\x7c\x75\x73\xe4\x4e\xf9\x56\xe7\x5b\xba\x5d\x1c\x60\xb2\x73\x69\x74\x9a\x7f\x46\x80\x34\x92\xf6\x96\x48\x97\x18\x98\x8b\x4f\xae\x79\xb4\x91\xb8\x96\xe1\x60\x86\x4e\xda\x50\xee\x5b\x3f\x5c\x99\x65\x02\x6a\xce\x71\x42\x76\xfc\x84\x7c\x90\x8d\x9f\x88\x66\x2e\x96\x89\x52\x7b\x67\xf3\x67\x41\x6d\x9c\x6e\x09\x74\x59\x75\x6b\x78\x10\x7d\x5e\x98\x6d\x51\x2e\x62\x78\x96\x2b\x50\x19\x5d\xea\x6d\x2a\x8f\x8b\x5f\x44\x61\x17\x68\x87\x73\x86\x96\x29\x52\x0f\x54\x65\x5c\x13\x66\x4e\x67\xa8\x68\xe5\x6c\x06\x74\xe2\x75\x79\x7f\xcf\x88\xe1\x88\xcc\x91\xe2\x96\x3f\x53\xba\x6e\x1d\x54\xd0\x71\x98\x74\xfa\x85\xa3\x96\x57\x9c\x9f\x9e\x97\x67\xcb\x6d\xe8\x81\xcb\x7a\x20\x7b\x92\x7c\xc0\x72\x99\x70\x58\x8b\xc0\x4e\x36\x83\x3a\x52\x07\x52\xa6\x5e\xd3\x62\xd6\x7c\x85\x5b\x1e\x6d\xb4\x66\x3b\x8f\x4c\x88\x4d\x96\x8b\x89\xd3\x5e\x40\x51\xc0\x55\x00\x00\x00\x00\x5a\x58\x00\x00\x74\x66\x00\x00\x00\x00\xde\x51\x2a\x73\xca\x76\x3c\x79\x5e\x79\x65\x79\x8f\x79\x56\x97\xbe\x7c\xbd\x7f\x00\x00\x12\x86\x00\x00\xf8\x8a\x00\x00\x00\x00\x38\x90\xfd\x90\xef\x98\xfc\x98\x28\x99\xb4\x9d\xde\x90\xb7\x96\xae\x4f\xe7\x50\x4d\x51\xc9\x52\xe4\x52\x51\x53\x9d\x55\x06\x56\x68\x56\x40\x58\xa8\x58\x64\x5c\x6e\x5c\x94\x60\x68\x61\x8e\x61\xf2\x61\x4f\x65\xe2\x65\x91\x66\x85\x68\x77\x6d\x1a\x6e\x22\x6f\x6e\x71\x2b\x72\x22\x74\x91\x78\x3e\x79\x49\x79\x48\x79\x50\x79\x56\x79\x5d\x79\x8d\x79\x8e\x79\x40\x7a\x81\x7a\xc0\x7b\xf4\x7d\x09\x7e\x41\x7e\x72\x7f\x05\x80\xed\x81\x79\x82\x79\x82\x57\x84\x10\x89\x96\x89\x01\x8b\x39\x8b\xd3\x8c\x08\x8d\xb6\x8f\x38\x90\xe3\x96\xff\x97\x3b\x98\x75\x60\xee\x42\x18\x82\x02\x26\x4e\xb5\x51\x68\x51\x80\x4f\x45\x51\x80\x51\xc7\x52\xfa\x52\x9d\x55\x55\x55\x99\x55\xe2\x55\x5a\x58\xb3\x58\x44\x59\x54\x59\x62\x5a\x28\x5b\xd2\x5e\xd9\x5e\x69\x5f\xad\x5f\xd8\x60\x4e\x61\x08\x61\x8e\x61\x60\x61\xf2\x61\x34\x62\xc4\x63\x1c\x64\x52\x64\x56\x65\x74\x66\x17\x67\x1b\x67\x56\x67\x79\x6b\xba\x6b\x41\x6d\xdb\x6e\xcb\x6e\x22\x6f\x1e\x70\x6e\x71\xa7\x77\x35\x72\xaf\x72\x2a\x73\x71\x74\x06\x75\x3b\x75\x1d\x76\x1f\x76\xca\x76\xdb\x76\xf4\x76\x4a\x77\x40\x77\xcc\x78\xb1\x7a\xc0\x7b\x7b\x7c\x5b\x7d\xf4\x7d\x3e\x7f\x05\x80\x52\x83\xef\x83\x79\x87\x41\x89\x86\x89\x96\x89\xbf\x8a\xf8\x8a\xcb\x8a\x01\x8b\xfe\x8a\xed\x8a\x39\x8b\x8a\x8b\x08\x8d\x38\x8f\x72\x90\x99\x91\x76\x92\x7c\x96\xe3\x96\x56\x97\xdb\x97\xff\x97\x0b\x98\x3b\x98\x12\x9b\x9c\x9f\x4a\x28\x44\x28\xd5\x33\x9d\x3b\x18\x40\x39\x40\x49\x52\xd0\x5c\xd3\x7e\x43\x9f\x8e\x9f\x2a\xa0\x02\x66\x66\x66\x69\x66\x6c\x66\x66\x69\x66\x66\x6c\x7f\x01\x74\x73\x00\x74\x65\x05\x0f\x11\x0f\x00\x0f\x06\x19\x11\x0f\x08\xd9\x05\xb4\x05\x00\x00\x00\x00\xf2\x05\xb7\x05\xd0\x05\x12\x00\x03\x04\x0b\x0c\x0d\x18\x1a\xe9\x05\xc1\x05\xe9\x05\xc2\x05\x49\xfb\xc1\x05\x49\xfb\xc2\x05\xd0\x05\xb7\x05\xd0\x05\xb8\x05\xd0\x05\xbc\x05\xd8\x05\xbc\x05\xde\x05\xbc\x05\xe0\x05\xbc\x05\xe3\x05\xbc\x05\xb9\x05\x2d\x03\x2e\x03\x2f\x03\x30\x03\x31\x03\x1c\x00\x18\x06\x22\x06\x2b\x06\xd0\x05\xdc\x05\x71\x06\x00\x00\x0a\x0a\x0a\x0a\x0d\x0d\x0d\x0d\x0f\x0f\x0f\x0f\x09\x09\x09\x09\x0e\x0e\x0e\x0e\x08\x08\x08\x08\x33\x33\x33\x33\x35\x35\x35\x35\x13\x13\x13\x13\x12\x12\x12\x12\x15\x15\x15\x15\x16\x16\x16\x16\x1c\x1c\x1b\x1b\x1d\x1d\x17\x17\x27\x27\x20\x20\x38\x38\x38\x38\x3e\x3e\x3e\x3e\x42\x42\x42\x42\x40\x40\x40\x40\x49\x49\x4a\x4a\x4a\x4a\x4f\x4f\x50\x50\x50\x50\x4d\x4d\x4d\x4d\x61\x61\x62\x62\x49\x06\x64\x64\x64\x64\x7e\x7e\x7d\x7d\x7f\x7f\x2e\x82\x82\x7c\x7c\x80\x80\x87\x87\x87\x87\x00\x00\x26\x06\x00\x01\x00\x01\x00\xaf\x00\xaf\x00\x22\x00\x22\x00\xa1\x00\xa1\x00\xa0\x00\xa0\x00\xa2\x00\xa2\x00\xaa\x00\xaa\x00\xaa\x00\x23\x00\x23\x00\x23\xcc\x06\x00\x00\x00\x00\x26\x06\x00\x06\x00\x07\x00\x1f\x00\x23\x00\x24\x02\x06\x02\x07\x02\x08\x02\x1f\x02\x23\x02\x24\x04\x06\x04\x07\x04\x08\x04\x1f\x04\x23\x04\x24\x05\x06\x05\x1f\x05\x23\x05\x24\x06\x07\x06\x1f\x07\x06\x07\x1f\x08\x06\x08\x07\x08\x1f\x0d\x06\x0d\x07\x0d\x08\x0d\x1f\x0f\x07\x0f\x1f\x10\x06\x10\x07\x10\x08\x10\x1f\x11\x07\x11\x1f\x12\x1f\x13\x06\x13\x1f\x14\x06\x14\x1f\x1b\x06\x1b\x07\x1b\x08\x1b\x1f\x1b\x23\x1b\x24\x1c\x07\x1c\x1f\x1c\x23\x1c\x24\x1d\x01\x1d\x06\x1d\x07\x1d\x08\x1d\x1e\x1d\x1f\x1d\x23\x1d\x24\x1e\x06\x1e\x07\x1e\x08\x1e\x1f\x1e\x23\x1e\x24\x1f\x06\x1f\x07\x1f\x08\x1f\x1f\x1f\x23\x1f\x24\x20\x06\x20\x07\x20\x08\x20\x1f\x20\x23\x20\x24\x21\x06\x21\x1f\x21\x23\x21\x24\x24\x06\x24\x07\x24\x08\x24\x1f\x24\x23\x24\x24\x0a\x4a\x0b\x4a\x23\x4a\x20\x00\x4c\x06\x51\x06\x51\x06\xff\x00\x1f\x26\x06\x00\x0b\x00\x0c\x00\x1f\x00\x20\x00\x23\x00\x24\x02\x0b\x02\x0c\x02\x1f\x02\x20\x02\x23\x02\x24\x04\x0b\x04\x0c\x04\x1f\x26\x06\x04\x20\x04\x23\x04\x24\x05\x0b\x05\x0c\x05\x1f\x05\x20\x05\x23\x05\x24\x1b\x23\x1b\x24\x1c\x23\x1c\x24\x1d\x01\x1d\x1e\x1d\x1f\x1d\x23\x1d\x24\x1e\x1f\x1e\x23\x1e\x24\x1f\x01\x1f\x1f\x20\x0b\x20\x0c\x20\x1f\x20\x20\x20\x23\x20\x24\x23\x4a\x24\x0b\x24\x0c\x24\x1f\x24\x20\x24\x23\x24\x24\x00\x06\x00\x07\x00\x08\x00\x1f\x00\x21\x02\x06\x02\x07\x02\x08\x02\x1f\x02\x21\x04\x06\x04\x07\x04\x08\x04\x1f\x04\x21\x05\x1f\x06\x07\x06\x1f\x07\x06\x07\x1f\x08\x06\x08\x1f\x0d\x06\x0d\x07\x0d\x08\x0d\x1f\x0f\x07\x0f\x08\x0f\x1f\x10\x06\x10\x07\x10\x08\x10\x1f\x11\x07\x12\x1f\x13\x06\x13\x1f\x14\x06\x14\x1f\x1b\x06\x1b\x07\x1b\x08\x1b\x1f\x1c\x07\x1c\x1f\x1d\x06\x1d\x07\x1d\x08\x1d\x1e\x1d\x1f\x1e\x06\x1e\x07\x1e\x08\x1e\x1f\x1e\x21\x1f\x06\x1f\x07\x1f\x08\x1f\x1f\x20\x06\x20\x07\x20\x08\x20\x1f\x20\x21\x21\x06\x21\x1f\x21\x4a\x24\x06\x24\x07\x24\x08\x24\x1f\x24\x21\x00\x1f\x00\x21\x02\x1f\x02\x21\x04\x1f\x04\x21\x05\x1f\x05\x21\x0d\x1f\x0d\x21\x0e\x1f\x0e\x21\x1d\x1e\x1d\x1f\x1e\x1f\x20\x1f\x20\x21\x24\x1f\x24\x21\x40\x06\x4e\x06\x51\x06\x27\x06\x10\x22\x10\x23\x12\x22\x12\x23\x13\x22\x13\x23\x0c\x22\x0c\x23\x0d\x22\x0d\x23\x06\x22\x06\x23\x05\x22\x05\x23\x07\x22\x07\x23\x0e\x22\x0e\x23\x0f\x22\x0f\x23\x0d\x05\x0d\x06\x0d\x07\x0d\x1e\x0d\x0a\x0c\x0a\x0e\x0a\x0f\x0a\x10\x22\x10\x23\x12\x22\x12\x23\x13\x22\x13\x23\x0c\x22\x0c\x23\x0d\x22\x0d\x23\x06\x22\x06\x23\x05\x22\x05\x23\x07\x22\x07\x23\x0e\x22\x0e\x23\x0f\x22\x0f\x23\x0d\x05\x0d\x06\x0d\x07\x0d\x1e\x0d\x0a\x0c\x0a\x0e\x0a\x0f\x0a\x0d\x05\x0d\x06\x0d\x07\x0d\x1e\x0c\x20\x0d\x20\x10\x1e\x0c\x05\x0c\x06\x0c\x07\x0d\x05\x0d\x06\x0d\x07\x10\x1e\x11\x1e\x00\x24\x00\x24\x2a\x06\x00\x02\x1b\x00\x03\x02\x00\x03\x02\x00\x03\x1b\x00\x04\x1b\x00\x1b\x02\x00\x1b\x03\x00\x1b\x04\x02\x1b\x03\x02\x1b\x03\x03\x1b\x20\x03\x1b\x1f\x09\x03\x02\x09\x02\x03\x09\x02\x1f\x09\x1b\x03\x09\x1b\x03\x09\x1b\x02\x09\x1b\x1b\x09\x1b\x1b\x0b\x03\x03\x0b\x03\x03\x0b\x1b\x1b\x0a\x03\x1b\x0a\x03\x1b\x0a\x02\x20\x0a\x1b\x04\x0a\x1b\x04\x0a\x1b\x1b\x0a\x1b\x1b\x0c\x03\x1f\x0c\x04\x1b\x0c\x04\x1b\x0d\x1b\x03\x0d\x1b\x03\x0d\x1b\x1b\x0d\x1b\x20\x0f\x02\x1b\x0f\x1b\x1b\x0f\x1b\x1b\x0f\x1b\x1f\x10\x1b\x1b\x10\x1b\x20\x10\x1b\x1f\x17\x04\x1b\x17\x04\x1b\x18\x1b\x03\x18\x1b\x1b\x1a\x03\x1b\x1a\x03\x20\x1a\x03\x1f\x1a\x02\x02\x1a\x02\x02\x1a\x04\x1b\x1a\x04\x1b\x1a\x1b\x03\x1a\x1b\x03\x1b\x03\x02\x1b\x03\x1b\x1b\x03\x20\x1b\x02\x03\x1b\x02\x1b\x1b\x04\x02\x1b\x04\x1b\x28\x06\x1d\x04\x06\x1f\x1d\x04\x1f\x1d\x1d\x1e\x05\x1d\x1e\x05\x21\x1e\x04\x1d\x1e\x04\x1d\x1e\x04\x21\x1e\x1d\x22\x1e\x1d\x21\x22\x1d\x1d\x22\x1d\x1d\x00\x06\x22\x02\x04\x22\x02\x04\x21\x02\x06\x22\x02\x06\x21\x02\x1d\x22\x02\x1d\x21\x04\x1d\x22\x04\x05\x21\x04\x1d\x21\x0b\x06\x21\x0d\x05\x22\x0c\x05\x22\x0e\x05\x22\x1c\x04\x22\x1c\x1d\x22\x22\x05\x22\x22\x04\x22\x22\x1d\x22\x1d\x1d\x22\x1a\x1d\x22\x1e\x05\x22\x1a\x1d\x05\x1c\x05\x1d\x11\x1d\x22\x1b\x1d\x22\x1e\x04\x05\x1d\x06\x22\x1c\x04\x1d\x1b\x1d\x1d\x1c\x04\x1d\x1e\x04\x05\x04\x05\x22\x05\x04\x22\x1d\x04\x22\x19\x1d\x22\x00\x05\x22\x1b\x1d\x1d\x11\x04\x1d\x0d\x1d\x1d\x0b\x06\x22\x1e\x04\x22\x35\x06\x00\x0f\x9d\x0d\x0f\x9d\x27\x06\x00\x1d\x1d\x20\x00\x1c\x01\x0a\x1e\x06\x1e\x08\x0e\x1d\x12\x1e\x0a\x0c\x21\x1d\x12\x1d\x23\x20\x21\x0c\x1d\x1e\x35\x06\x00\x0f\x14\x27\x06\x0e\x1d\x22\xff\x00\x1d\x1d\x20\xff\x12\x1d\x23\x20\xff\x21\x0c\x1d\x1e\x27\x06\x05\x1d\xff\x05\x1d\x00\x1d\x20\x27\x06\x0a\xa5\x00\x1d\x2c\x00\x01\x30\x02\x30\x3a\x00\x3b\x00\x21\x00\x3f\x00\x16\x30\x17\x30\x26\x20\x13\x20\x12\x01\x00\x5f\x5f\x28\x29\x7b\x7d\x08\x30\x0c\x0d\x08\x09\x02\x03\x00\x01\x04\x05\x06\x07\x5b\x00\x5d\x00\x3e\x20\x3e\x20\x3e\x20\x3e\x20\x5f\x00\x5f\x00\x5f\x00\x2c\x00\x01\x30\x2e\x00\x00\x00\x3b\x00\x3a\x00\x3f\x00\x21\x00\x14\x20\x28\x00\x29\x00\x7b\x00\x7d\x00\x14\x30\x15\x30\x23\x26\x2a\x2b\x2d\x3c\x3e\x3d\x00\x5c\x24\x25\x40\x40\x06\xff\x0b\x00\x0b\xff\x0c\x20\x00\x4d\x06\x40\x06\xff\x0e\x00\x0e\xff\x0f\x00\x0f\xff\x10\x00\x10\xff\x11\x00\x11\xff\x12\x00\x12\x21\x06\x00\x01\x01\x02\x02\x03\x03\x04\x04\x05\x05\x05\x05\x06\x06\x07\x07\x07\x07\x08\x08\x09\x09\x09\x09\x0a\x0a\x0a\x0a\x0b\x0b\x0b\x0b\x0c\x0c\x0c\x0c\x0d\x0d\x0d\x0d\x0e\x0e\x0f\x0f\x10\x10\x11\x11\x12\x12\x12\x12\x13\x13\x13\x13\x14\x14\x14\x14\x15\x15\x15\x15\x16\x16\x16\x16\x17\x17\x17\x17\x18\x18\x18\x18\x19\x19\x19\x19\x20\x20\x20\x20\x21\x21\x21\x21\x22\x22\x22\x22\x23\x23\x23\x23\x24\x24\x24\x24\x25\x25\x25\x25\x26\x26\x26\x26\x27\x27\x28\x28\x29\x29\x29\x29\x22\x06\x22\x00\x22\x00\x22\x01\x22\x01\x22\x03\x22\x03\x22\x05\x22\x05\x21\x00\x85\x29\x01\x30\x01\x0b\x0c\x00\xfa\xf1\xa0\xa2\xa4\xa6\xa8\xe2\xe4\xe6\xc2\xfb\xa1\xa3\xa5\xa7\xa9\xaa\xac\xae\xb0\xb2\xb4\xb6\xb8\xba\xbc\xbe\xc0\xc3\xc5\xc7\xc9\xca\xcb\xcc\xcd\xce\xd1\xd4\xd7\xda\xdd\xde\xdf\xe0\xe1\xe3\xe5\xe7\xe8\xe9\xea\xeb\xec\xee\xf2\x98\x99\x31\x31\x4f\x31\x55\x31\x5b\x31\x61\x31\xa2\x00\xa3\x00\xac\x00\xaf\x00\xa6\x00\xa5\x00\xa9\x20\x00\x00\x02\x25\x90\x21\x91\x21\x92\x21\x93\x21\xa0\x25\xcb\x25\x99\x10\xba\x10\x00\x00\x00\x00\x9b\x10\xba\x10\x05\x05\xa5\x10\xba\x10\x05\x31\x11\x27\x11\x32\x11\x27\x11\x55\x47\x13\x3e\x13\x47\x13\x57\x13\x55\xb9\x14\xba\x14\xb9\x14\xb0\x14\x00\x00\x00\x00\xb9\x14\xbd\x14\x55\x50\xb8\x15\xaf\x15\xb9\x15\xaf\x15\x55\x35\x19\x30\x19\x05\x57\xd1\x65\xd1\x58\xd1\x65\xd1\x5f\xd1\x6e\xd1\x5f\xd1\x6f\xd1\x5f\xd1\x70\xd1\x5f\xd1\x71\xd1\x5f\xd1\x72\xd1\x55\x55\x55\x05\xb9\xd1\x65\xd1\xba\xd1\x65\xd1\xbb\xd1\x6e\xd1\xbc\xd1\x6e\xd1\xbb\xd1\x6f\xd1\xbc\xd1\x6f\xd1\x55\x55\x55\x41\x00\x61\x00\x41\x00\x61\x00\x69\x00\x41\x00\x61\x00\x41\x00\x43\x44\x00\x00\x47\x00\x00\x4a\x4b\x00\x00\x4e\x4f\x50\x51\x00\x53\x54\x55\x56\x57\x58\x59\x5a\x61\x62\x63\x64\x00\x66\x68\x00\x70\x00\x41\x00\x61\x00\x41\x42\x00\x44\x45\x46\x47\x4a\x00\x53\x00\x61\x00\x41\x42\x00\x44\x45\x46\x47\x00\x49\x4a\x4b\x4c\x4d\x00\x4f\x53\x00\x61\x00\x41\x00\x61\x00\x41\x00\x61\x00\x41\x00\x61\x00\x41\x00\x61\x00\x41\x00\x61\x00\x41\x00\x61\x00\x31\x01\x37\x02\x91\x03\xa3\x03\xb1\x03\xd1\x03\x24\x00\x1f\x04\x20\x05\x91\x03\xa3\x03\xb1\x03\xd1\x03\x24\x00\x1f\x04\x20\x05\x91\x03\xa3\x03\xb1\x03\xd1\x03\x24\x00\x1f\x04\x20\x05\x91\x03\xa3\x03\xb1\x03\xd1\x03\x24\x00\x1f\x04\x20\x05\x91\x03\xa3\x03\xb1\x03\xd1\x03\x24\x00\x1f\x04\x20\x05\x0b\x0c\x30\x00\x30\x00\x30\x00\x30\x00\x30\x00\x27\x06\x00\x01\x05\x08\x2a\x06\x1e\x08\x03\x0d\x20\x19\x1a\x1b\x1c\x09\x0f\x17\x0b\x18\x07\x0a\x00\x01\x04\x06\x0c\x0e\x10\x44\x90\x77\x45\x28\x06\x2c\x06\x00\x00\x47\x06\x33\x06\x17\x10\x11\x12\x13\x00\x06\x0e\x02\x0f\x34\x06\x2a\x06\x2b\x06\x2e\x06\x00\x00\x36\x06\x00\x00\x3a\x06\x2d\x06\x00\x00\x4a\x06\x00\x00\x44\x06\x00\x00\x46\x06\x33\x06\x39\x06\x00\x00\x35\x06\x42\x06\x00\x00\x34\x06\x00\x00\x00\x00\x2e\x06\x00\x00\x36\x06\x00\x00\x3a\x06\x00\x00\xba\x06\x00\x00\x6f\x06\x00\x00\x28\x06\x2c\x06\x00\x00\x47\x06\x00\x00\x00\x00\x2d\x06\x37\x06\x4a\x06\x43\x06\x00\x00\x45\x06\x46\x06\x33\x06\x39\x06\x41\x06\x35\x06\x42\x06\x00\x00\x34\x06\x2a\x06\x2b\x06\x2e\x06\x00\x00\x36\x06\x38\x06\x3a\x06\x6e\x06\x00\x00\xa1\x06\x27\x06\x00\x01\x05\x08\x20\x21\x0b\x06\x10\x23\x2a\x06\x1a\x1b\x1c\x09\x0f\x17\x0b\x18\x07\x0a\x00\x01\x04\x06\x0c\x0e\x10\x28\x06\x2c\x06\x2f\x06\x00\x00\x48\x06\x32\x06\x2d\x06\x37\x06\x4a\x06\x2a\x06\x1a\x1b\x1c\x09\x0f\x17\x0b\x18\x07\x0a\x00\x01\x04\x06\x0c\x0e\x10\x30\x2e\x30\x00\x2c\x00\x28\x00\x41\x00\x29\x00\x14\x30\x53\x00\x15\x30\x43\x52\x43\x44\x57\x5a\x41\x00\x48\x56\x4d\x56\x53\x44\x53\x53\x50\x50\x56\x57\x43\x4d\x43\x4d\x44\x4d\x52\x44\x4a\x4b\x30\x30\x00\x68\x68\x4b\x62\x57\x5b\xcc\x53\xc7\x30\x8c\x4e\x1a\x59\xe3\x89\x29\x59\xa4\x4e\x20\x66\x21\x71\x99\x65\x4d\x52\x8c\x5f\x8d\x51\xb0\x65\x1d\x52\x42\x7d\x1f\x75\xa9\x8c\xf0\x58\x39\x54\x14\x6f\x95\x62\x55\x63\x00\x4e\x09\x4e\x4a\x90\xe6\x5d\x2d\x4e\xf3\x53\x07\x63\x70\x8d\x53\x62\x81\x79\x7a\x7a\x08\x54\x80\x6e\x09\x67\x08\x67\x33\x75\x72\x52\xb6\x55\x4d\x91\x14\x30\x15\x30\x2c\x67\x09\x4e\x8c\x4e\x89\x5b\xb9\x70\x53\x62\xd7\x76\xdd\x52\x57\x65\x97\x5f\xef\x53\x30\x00\x38\x4e\x05\x00\x09\x22\x01\x60\x4f\xae\x4f\xbb\x4f\x02\x50\x7a\x50\x99\x50\xe7\x50\xcf\x50\x9e\x34\x3a\x06\x4d\x51\x54\x51\x64\x51\x77\x51\x1c\x05\xb9\x34\x67\x51\x8d\x51\x4b\x05\x97\x51\xa4\x51\xcc\x4e\xac\x51\xb5\x51\xdf\x91\xf5\x51\x03\x52\xdf\x34\x3b\x52\x46\x52\x72\x52\x77\x52\x15\x35\x02\x00\x20\x80\x80\x00\x08\x00\x00\xc7\x52\x00\x02\x1d\x33\x3e\x3f\x50\x82\x8a\x93\xac\xb6\xb8\xb8\xb8\x2c\x0a\x70\x70\xca\x53\xdf\x53\x63\x0b\xeb\x53\xf1\x53\x06\x54\x9e\x54\x38\x54\x48\x54\x68\x54\xa2\x54\xf6\x54\x10\x55\x53\x55\x63\x55\x84\x55\x84\x55\x99\x55\xab\x55\xb3\x55\xc2\x55\x16\x57\x06\x56\x17\x57\x51\x56\x74\x56\x07\x52\xee\x58\xce\x57\xf4\x57\x0d\x58\x8b\x57\x32\x58\x31\x58\xac\x58\xe4\x14\xf2\x58\xf7\x58\x06\x59\x1a\x59\x22\x59\x62\x59\xa8\x16\xea\x16\xec\x59\x1b\x5a\x27\x5a\xd8\x59\x66\x5a\xee\x36\xfc\x36\x08\x5b\x3e\x5b\x3e\x5b\xc8\x19\xc3\x5b\xd8\x5b\xe7\x5b\xf3\x5b\x18\x1b\xff\x5b\x06\x5c\x53\x5f\x22\x5c\x81\x37\x60\x5c\x6e\x5c\xc0\x5c\x8d\x5c\xe4\x1d\x43\x5d\xe6\x1d\x6e\x5d\x6b\x5d\x7c\x5d\xe1\x5d\xe2\x5d\x2f\x38\xfd\x5d\x28\x5e\x3d\x5e\x69\x5e\x62\x38\x83\x21\x7c\x38\xb0\x5e\xb3\x5e\xb6\x5e\xca\x5e\x92\xa3\xfe\x5e\x31\x23\x31\x23\x01\x82\x22\x5f\x22\x5f\xc7\x38\xb8\x32\xda\x61\x62\x5f\x6b\x5f\xe3\x38\x9a\x5f\xcd\x5f\xd7\x5f\xf9\x5f\x81\x60\x3a\x39\x1c\x39\x94\x60\xd4\x26\xc7\x60\x02\x02\x00\x00\x00\x00\x00\x00\x00\x08\x00\x0a\x00\x00\x02\x08\x00\x80\x08\x00\x00\x08\x80\x28\x80\x02\x00\x00\x02\x48\x61\x00\x04\x06\x04\x32\x46\x6a\x5c\x67\x96\xaa\xae\xc8\xd3\x5d\x62\x00\x54\x77\xf3\x0c\x2b\x3d\x63\xfc\x62\x68\x63\x83\x63\xe4\x63\xf1\x2b\x22\x64\xc5\x63\xa9\x63\x2e\x3a\x69\x64\x7e\x64\x9d\x64\x77\x64\x6c\x3a\x4f\x65\x6c\x65\x0a\x30\xe3\x65\xf8\x66\x49\x66\x19\x3b\x91\x66\x08\x3b\xe4\x3a\x92\x51\x95\x51\x00\x67\x9c\x66\xad\x80\xd9\x43\x17\x67\x1b\x67\x21\x67\x5e\x67\x53\x67\xc3\x33\x49\x3b\xfa\x67\x85\x67\x52\x68\x85\x68\x6d\x34\x8e\x68\x1f\x68\x14\x69\x9d\x3b\x42\x69\xa3\x69\xea\x69\xa8\x6a\xa3\x36\xdb\x6a\x18\x3c\x21\x6b\xa7\x38\x54\x6b\x4e\x3c\x72\x6b\x9f\x6b\xba\x6b\xbb\x6b\x8d\x3a\x0b\x1d\xfa\x3a\x4e\x6c\xbc\x3c\xbf\x6c\xcd\x6c\x67\x6c\x16\x6d\x3e\x6d\x77\x6d\x41\x6d\x69\x6d\x78\x6d\x85\x6d\x1e\x3d\x34\x6d\x2f\x6e\x6e\x6e\x33\x3d\xcb\x6e\xc7\x6e\xd1\x3e\xf9\x6d\x6e\x6f\x5e\x3f\x8e\x3f\xc6\x6f\x39\x70\x1e\x70\x1b\x70\x96\x3d\x4a\x70\x7d\x70\x77\x70\xad\x70\x25\x05\x45\x71\x63\x42\x9c\x71\xab\x43\x28\x72\x35\x72\x50\x72\x08\x46\x80\x72\x95\x72\x35\x47\x02\x20\x00\x00\x20\x00\x00\x00\x00\x08\x80\x00\x00\x02\x02\x80\x8a\x00\x00\x20\x00\x08\x0a\x00\x80\x88\x80\x20\x14\x48\x7a\x73\x8b\x73\xac\x3e\xa5\x73\xb8\x3e\xb8\x3e\x47\x74\x5c\x74\x71\x74\x85\x74\xca\x74\x1b\x3f\x24\x75\x36\x4c\x3e\x75\x92\x4c\x70\x75\x9f\x21\x10\x76\xa1\x4f\xb8\x4f\x44\x50\xfc\x3f\x08\x40\xf4\x76\xf3\x50\xf2\x50\x19\x51\x33\x51\x1e\x77\x1f\x77\x1f\x77\x4a\x77\x39\x40\x8b\x77\x46\x40\x96\x40\x1d\x54\x4e\x78\x8c\x78\xcc\x78\xe3\x40\x26\x56\x56\x79\x9a\x56\xc5\x56\x8f\x79\xeb\x79\x2f\x41\x40\x7a\x4a\x7a\x4f\x7a\x7c\x59\xa7\x5a\xa7\x5a\xee\x7a\x02\x42\xab\x5b\xc6\x7b\xc9\x7b\x27\x42\x80\x5c\xd2\x7c\xa0\x42\xe8\x7c\xe3\x7c\x00\x7d\x86\x5f\x63\x7d\x01\x43\xc7\x7d\x02\x7e\x45\x7e\x34\x43\x28\x62\x47\x62\x59\x43\xd9\x62\x7a\x7f\x3e\x63\x95\x7f\xfa\x7f\x05\x80\xda\x64\x23\x65\x60\x80\xa8\x65\x70\x80\x5f\x33\xd5\x43\xb2\x80\x03\x81\x0b\x44\x3e\x81\xb5\x5a\xa7\x67\xb5\x67\x93\x33\x9c\x33\x01\x82\x04\x82\x9e\x8f\x6b\x44\x91\x82\x8b\x82\x9d\x82\xb3\x52\xb1\x82\xb3\x82\xbd\x82\xe6\x82\x3c\x6b\xe5\x82\x1d\x83\x63\x83\xad\x83\x23\x83\xbd\x83\xe7\x83\x57\x84\x53\x83\xca\x83\xcc\x83\xdc\x83\x36\x6c\x6b\x6d\x02\x00\x00\x20\x22\x2a\xa0\x0a\x00\x20\x80\x28\x00\xa8\x20\x20\x00\x02\x80\x22\x02\x8a\x08\x00\xaa\x00\x00\x00\x02\x00\x00\x28\xd5\x6c\x2b\x45\xf1\x84\xf3\x84\x16\x85\xca\x73\x64\x85\x2c\x6f\x5d\x45\x61\x45\xb1\x6f\xd2\x70\x6b\x45\x50\x86\x5c\x86\x67\x86\x69\x86\xa9\x86\x88\x86\x0e\x87\xe2\x86\x79\x87\x28\x87\x6b\x87\x86\x87\xd7\x45\xe1\x87\x01\x88\xf9\x45\x60\x88\x63\x88\x67\x76\xd7\x88\xde\x88\x35\x46\xfa\x88\xbb\x34\xae\x78\x66\x79\xbe\x46\xc7\x46\xa0\x8a\xed\x8a\x8a\x8b\x55\x8c\xa8\x7c\xab\x8c\xc1\x8c\x1b\x8d\x77\x8d\x2f\x7f\x04\x08\xcb\x8d\xbc\x8d\xf0\x8d\xde\x08\xd4\x8e\x38\x8f\xd2\x85\xed\x85\x94\x90\xf1\x90\x11\x91\x2e\x87\x1b\x91\x38\x92\xd7\x92\xd8\x92\x7c\x92\xf9\x93\x15\x94\xfa\x8b\x8b\x95\x95\x49\xb7\x95\x77\x8d\xe6\x49\xc3\x96\xb2\x5d\x23\x97\x45\x91\x1a\x92\x6e\x4a\x76\x4a\xe0\x97\x0a\x94\xb2\x4a\x96\x94\x0b\x98\x0b\x98\x29\x98\xb6\x95\xe2\x98\x33\x4b\x29\x99\xa7\x99\xc2\x99\xfe\x99\xce\x4b\x30\x9b\x12\x9b\x40\x9c\xfd\x9c\xce\x4c\xed\x4c\x67\x9d\xce\xa0\xf8\x4c\x05\xa1\x0e\xa2\x91\xa2\xbb\x9e\x56\x4d\xf9\x9e\xfe\x9e\x05\x9f\x0f\x9f\x16\x9f\x3b\x9f\x00\xa6\x02\x88\xa0\x00\x00\x00\x00\x80\x00\x28\x00\x08\xa0\x80\xa0\x80\x00\x80\x80\x00\x0a\x88\x80\x00\x80\x00\x20\x2a\x00\x80\x00\x44\x20\x15\x22\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4d\x03\x00\x97\x05\x20\xc6\x05\x00\xe7\x06\x00\x45\x07\x00\xe2\x08\x00\x53\x09\x00\xcd\x0b\x20\x38\x0e\x00\x73\x0f\x20\x5d\x13\x20\x60\x1a\x20\xaa\x1b\x00\xf4\x1c\x00\xfe\x1d\x20\x7f\x2d\x20\xf0\xa6\x00\xb2\xaa\x00\xfe\x01\x01\xab\x0e\x01\x73\x11\x21\x70\x13\x01\xb8\x16\x01\x9a\x1a\x01\x9f\xbc\x01\x22\xe0\x01\x4b\xe9\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb2\xcf\xd4\x00\xe8\x03\xdc\x00\xe8\x00\xd8\x04\xdc\x01\xca\x03\xdc\x01\xca\x0a\xdc\x04\x01\x03\xdc\xc7\x00\xf0\xc0\x02\xdc\xc2\x01\xdc\x80\xc2\x03\xdc\xc0\x00\xe8\x01\xdc\xc0\x41\xe9\x00\xea\x41\xe9\x00\xea\x00\xe9\xcc\xb0\xe2\xc4\xb0\xd8\x00\xdc\xc3\x00\xdc\xc2\x00\xde\x00\xdc\xc5\x05\xdc\xc1\x00\xdc\xc1\x00\xde\x00\xe4\xc0\x49\x0a\x43\x13\x80\x00\x17\x80\x41\x18\x80\xc0\x00\xdc\x80\x00\x12\xb0\x17\xc7\x42\x1e\xaf\x47\x1b\xc1\x01\xdc\xc4\x00\xdc\xc1\x00\xdc\x8f\x00\x23\xb0\x34\xc6\x81\xc3\x00\xdc\xc0\x81\xc1\x80\x00\xdc\xc1\x00\xdc\xa2\x00\x24\x9d\xc0\x00\xdc\xc1\x00\xdc\xc1\x02\xdc\xc0\x01\xdc\xc0\x00\xdc\xc2\x00\xdc\xc0\x00\xdc\xc0\x00\xdc\xc0\x00\xdc\xc1\xb0\x6f\xc6\x00\xdc\xc0\x88\x00\xdc\x97\xc3\x80\xc8\x80\xc2\x80\xc4\xaa\x02\xdc\xb0\x46\x00\xdc\xcd\x80\x00\xdc\xc1\x00\xdc\xc1\x00\xdc\xc2\x02\xdc\x42\x1b\xc2\x00\xdc\xc1\x01\xdc\xc4\xb0\x0b\x00\x07\x8f\x00\x09\x82\xc0\x00\xdc\xc1\xb0\x36\x00\x07\x8f\x00\x09\xaf\xc0\xb0\x0c\x00\x07\x8f\x00\x09\xb0\x3d\x00\x07\x8f\x00\x09\xb0\x3d\x00\x07\x8f\x00\x09\xb0\x4e\x00\x09\xb0\x4e\x00\x09\x86\x00\x54\x00\x5b\xb0\x34\x00\x07\x8f\x00\x09\xb0\x3c\x01\x09\x8f\x00\x09\xb0\x4b\x00\x09\xb0\x3c\x01\x67\x00\x09\x8c\x03\x6b\xb0\x3b\x01\x76\x00\x09\x8c\x03\x7a\xb0\x1b\x01\xdc\x9a\x00\xdc\x80\x00\xdc\x80\x00\xd8\xb0\x06\x41\x81\x80\x00\x84\x84\x03\x82\x81\x00\x82\x80\xc1\x00\x09\x80\xc1\xb0\x0d\x00\xdc\xb0\x3f\x00\x07\x80\x01\x09\xb0\x21\x00\xdc\xb2\x9e\xc2\xb3\x83\x00\x09\x9e\x00\x09\xb0\x6c\x00\x09\x89\xc0\xb0\x9a\x00\xe4\xb0\x5e\x00\xde\xc0\x00\xdc\xb0\xaa\xc0\x00\xdc\xb0\x16\x00\x09\x93\xc7\x81\x00\xdc\xaf\xc4\x05\xdc\xc1\x00\xdc\x80\x01\xdc\xb0\x42\x00\x07\x8e\x00\x09\xa5\xc0\x00\xdc\xc6\xb0\x05\x01\x09\xb0\x09\x00\x07\x8a\x01\x09\xb0\x12\x00\x07\xb0\x67\xc2\x41\x00\x04\xdc\xc1\x03\xdc\xc0\x41\x00\x05\x01\x83\x00\xdc\x85\xc0\x82\xc1\xb0\x95\xc1\x00\xdc\xc6\x00\xdc\xc1\x00\xea\x00\xd6\x00\xdc\x00\xca\xe4\x00\xe8\x01\xe4\x00\xdc\x80\xc0\x00\xe9\x00\xdc\xc0\x00\xdc\xb2\x9f\xc1\x01\x01\xc3\x02\x01\xc1\x83\xc0\x82\x01\x01\xc0\x00\xdc\xc0\x01\x01\x03\xdc\xc0\xb8\x03\xcd\xc2\xb0\x5c\x00\x09\xb0\x2f\xdf\xb1\xf9\x00\xda\x00\xe4\x00\xe8\x00\xde\x01\xe0\xb0\x38\x01\x08\xb8\x6d\xa3\xc0\x83\xc9\x9f\xc1\xb0\x1f\xc1\xb0\xe3\x00\x09\xa4\x00\x09\xb0\x66\x00\x09\x9a\xd1\xb0\x08\x02\xdc\xa4\x00\x09\xb0\x2e\x00\x07\x8b\x00\x09\xb0\xbe\xc0\x80\xc1\x00\xdc\x81\xc1\x84\xc1\x80\xc0\xb0\x03\x00\x09\xb0\xc5\x00\x09\xb8\x46\xff\x00\x1a\xb2\xd0\xc6\x06\xdc\xc1\xb3\x9c\x00\xdc\xb0\xb1\x00\xdc\xb0\x64\xc4\xb6\x61\x00\xdc\x80\xc0\xa7\xc0\x00\x01\x00\xdc\x83\x00\x09\xb0\x74\xc0\x00\xdc\xb2\x0c\xc3\xb1\x52\xc1\xb0\x68\x01\xdc\xc2\x00\xdc\xc0\x03\xdc\xb0\xc4\x00\x09\xb0\x07\x00\x09\xb0\x08\x00\x09\x00\x07\xb0\x14\xc2\xaf\x01\x09\xb0\x0d\x00\x07\xb0\x1b\x00\x09\x88\x00\x07\xb0\x39\x00\x09\x00\x07\xb0\x81\x00\x07\x00\x09\xb0\x1f\x01\x07\x8f\x00\x09\x97\xc6\x82\xc4\xb0\x9c\x00\x09\x82\x00\x07\x96\xc0\xb0\x32\x00\x09\x00\x07\xb0\xca\x00\x09\x00\x07\xb0\x4d\x00\x09\xb0\x45\x00\x09\x00\x07\xb0\x42\x00\x09\xb0\xdc\x00\x09\x00\x07\xb0\xd1\x01\x09\x83\x00\x07\xb0\x6b\x00\x09\xb0\x22\x00\x09\x91\x00\x09\xb0\x20\x00\x09\xb1\x74\x00\x09\xb0\xd1\x00\x07\x80\x01\x09\xb0\x20\x00\x09\xb8\x45\x27\x04\x01\xb0\x0a\xc6\xb4\x88\x01\x06\xb8\x44\x7b\x00\x01\xb8\x0c\x95\x01\xd8\x02\x01\x82\x00\xe2\x04\xd8\x87\x07\xdc\x81\xc4\x01\xdc\x9d\xc3\xb0\x63\xc2\xb8\x05\x8a\xc6\x80\xd0\x81\xc6\x80\xc1\x80\xc4\xb0\xd4\xc6\xb1\x84\xc3\xb5\xaf\x06\xdc\xb0\x3c\xc5\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x64\x6c\x61\x6d\x2c\x41\x64\x6c\x6d\x00\x41\x68\x6f\x6d\x2c\x41\x68\x6f\x6d\x00\x41\x6e\x61\x74\x6f\x6c\x69\x61\x6e\x5f\x48\x69\x65\x72\x6f\x67\x6c\x79\x70\x68\x73\x2c\x48\x6c\x75\x77\x00\x41\x72\x61\x62\x69\x63\x2c\x41\x72\x61\x62\x00\x41\x72\x6d\x65\x6e\x69\x61\x6e\x2c\x41\x72\x6d\x6e\x00\x41\x76\x65\x73\x74\x61\x6e\x2c\x41\x76\x73\x74\x00\x42\x61\x6c\x69\x6e\x65\x73\x65\x2c\x42\x61\x6c\x69\x00\x42\x61\x6d\x75\x6d\x2c\x42\x61\x6d\x75\x00\x42\x61\x73\x73\x61\x5f\x56\x61\x68\x2c\x42\x61\x73\x73\x00\x42\x61\x74\x61\x6b\x2c\x42\x61\x74\x6b\x00\x42\x65\x6e\x67\x61\x6c\x69\x2c\x42\x65\x6e\x67\x00\x42\x68\x61\x69\x6b\x73\x75\x6b\x69\x2c\x42\x68\x6b\x73\x00\x42\x6f\x70\x6f\x6d\x6f\x66\x6f\x2c\x42\x6f\x70\x6f\x00\x42\x72\x61\x68\x6d\x69\x2c\x42\x72\x61\x68\x00\x42\x72\x61\x69\x6c\x6c\x65\x2c\x42\x72\x61\x69\x00\x42\x75\x67\x69\x6e\x65\x73\x65\x2c\x42\x75\x67\x69\x00\x42\x75\x68\x69\x64\x2c\x42\x75\x68\x64\x00\x43\x61\x6e\x61\x64\x69\x61\x6e\x5f\x41\x62\x6f\x72\x69\x67\x69\x6e\x61\x6c\x2c\x43\x61\x6e\x73\x00\x43\x61\x72\x69\x61\x6e\x2c\x43\x61\x72\x69\x00\x43\x61\x75\x63\x61\x73\x69\x61\x6e\x5f\x41\x6c\x62\x61\x6e\x69\x61\x6e\x2c\x41\x67\x68\x62\x00\x43\x68\x61\x6b\x6d\x61\x2c\x43\x61\x6b\x6d\x00\x43\x68\x61\x6d\x2c\x43\x68\x61\x6d\x00\x43\x68\x65\x72\x6f\x6b\x65\x65\x2c\x43\x68\x65\x72\x00\x43\x68\x6f\x72\x61\x73\x6d\x69\x61\x6e\x2c\x43\x68\x72\x73\x00\x43\x6f\x6d\x6d\x6f\x6e\x2c\x5a\x79\x79\x79\x00\x43\x6f\x70\x74\x69\x63\x2c\x43\x6f\x70\x74\x2c\x51\x61\x61\x63\x00\x43\x75\x6e\x65\x69\x66\x6f\x72\x6d\x2c\x58\x73\x75\x78\x00\x43\x79\x70\x72\x69\x6f\x74\x2c\x43\x70\x72\x74\x00\x43\x79\x72\x69\x6c\x6c\x69\x63\x2c\x43\x79\x72\x6c\x00\x44\x65\x73\x65\x72\x65\x74\x2c\x44\x73\x72\x74\x00\x44\x65\x76\x61\x6e\x61\x67\x61\x72\x69\x2c\x44\x65\x76\x61\x00\x44\x69\x76\x65\x73\x5f\x41\x6b\x75\x72\x75\x2c\x44\x69\x61\x6b\x00\x44\x6f\x67\x72\x61\x2c\x44\x6f\x67\x72\x00\x44\x75\x70\x6c\x6f\x79\x61\x6e\x2c\x44\x75\x70\x6c\x00\x45\x67\x79\x70\x74\x69\x61\x6e\x5f\x48\x69\x65\x72\x6f\x67\x6c\x79\x70\x68\x73\x2c\x45\x67\x79\x70\x00\x45\x6c\x62\x61\x73\x61\x6e\x2c\x45\x6c\x62\x61\x00\x45\x6c\x79\x6d\x61\x69\x63\x2c\x45\x6c\x79\x6d\x00\x45\x74\x68\x69\x6f\x70\x69\x63\x2c\x45\x74\x68\x69\x00\x47\x65\x6f\x72\x67\x69\x61\x6e\x2c\x47\x65\x6f\x72\x00\x47\x6c\x61\x67\x6f\x6c\x69\x74\x69\x63\x2c\x47\x6c\x61\x67\x00\x47\x6f\x74\x68\x69\x63\x2c\x47\x6f\x74\x68\x00\x47\x72\x61\x6e\x74\x68\x61\x2c\x47\x72\x61\x6e\x00\x47\x72\x65\x65\x6b\x2c\x47\x72\x65\x6b\x00\x47\x75\x6a\x61\x72\x61\x74\x69\x2c\x47\x75\x6a\x72\x00\x47\x75\x6e\x6a\x61\x6c\x61\x5f\x47\x6f\x6e\x64\x69\x2c\x47\x6f\x6e\x67\x00\x47\x75\x72\x6d\x75\x6b\x68\x69\x2c\x47\x75\x72\x75\x00\x48\x61\x6e\x2c\x48\x61\x6e\x69\x00\x48\x61\x6e\x67\x75\x6c\x2c\x48\x61\x6e\x67\x00\x48\x61\x6e\x69\x66\x69\x5f\x52\x6f\x68\x69\x6e\x67\x79\x61\x2c\x52\x6f\x68\x67\x00\x48\x61\x6e\x75\x6e\x6f\x6f\x2c\x48\x61\x6e\x6f\x00\x48\x61\x74\x72\x61\x6e\x2c\x48\x61\x74\x72\x00\x48\x65\x62\x72\x65\x77\x2c\x48\x65\x62\x72\x00\x48\x69\x72\x61\x67\x61\x6e\x61\x2c\x48\x69\x72\x61\x00\x49\x6d\x70\x65\x72\x69\x61\x6c\x5f\x41\x72\x61\x6d\x61\x69\x63\x2c\x41\x72\x6d\x69\x00\x49\x6e\x68\x65\x72\x69\x74\x65\x64\x2c\x5a\x69\x6e\x68\x2c\x51\x61\x61\x69\x00\x49\x6e\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x61\x6c\x5f\x50\x61\x68\x6c\x61\x76\x69\x2c\x50\x68\x6c\x69\x00\x49\x6e\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x61\x6c\x5f\x50\x61\x72\x74\x68\x69\x61\x6e\x2c\x50\x72\x74\x69\x00\x4a\x61\x76\x61\x6e\x65\x73\x65\x2c\x4a\x61\x76\x61\x00\x4b\x61\x69\x74\x68\x69\x2c\x4b\x74\x68\x69\x00\x4b\x61\x6e\x6e\x61\x64\x61\x2c\x4b\x6e\x64\x61\x00\x4b\x61\x74\x61\x6b\x61\x6e\x61\x2c\x4b\x61\x6e\x61\x00\x4b\x61\x79\x61\x68\x5f\x4c\x69\x2c\x4b\x61\x6c\x69\x00\x4b\x68\x61\x72\x6f\x73\x68\x74\x68\x69\x2c\x4b\x68\x61\x72\x00\x4b\x68\x6d\x65\x72\x2c\x4b\x68\x6d\x72\x00\x4b\x68\x6f\x6a\x6b\x69\x2c\x4b\x68\x6f\x6a\x00\x4b\x68\x69\x74\x61\x6e\x5f\x53\x6d\x61\x6c\x6c\x5f\x53\x63\x72\x69\x70\x74\x2c\x4b\x69\x74\x73\x00\x4b\x68\x75\x64\x61\x77\x61\x64\x69\x2c\x53\x69\x6e\x64\x00\x4c\x61\x6f\x2c\x4c\x61\x6f\x6f\x00\x4c\x61\x74\x69\x6e\x2c\x4c\x61\x74\x6e\x00\x4c\x65\x70\x63\x68\x61\x2c\x4c\x65\x70\x63\x00\x4c\x69\x6d\x62\x75\x2c\x4c\x69\x6d\x62\x00\x4c\x69\x6e\x65\x61\x72\x5f\x41\x2c\x4c\x69\x6e\x61\x00\x4c\x69\x6e\x65\x61\x72\x5f\x42\x2c\x4c\x69\x6e\x62\x00\x4c\x69\x73\x75\x2c\x4c\x69\x73\x75\x00\x4c\x79\x63\x69\x61\x6e\x2c\x4c\x79\x63\x69\x00\x4c\x79\x64\x69\x61\x6e\x2c\x4c\x79\x64\x69\x00\x4d\x61\x6b\x61\x73\x61\x72\x2c\x4d\x61\x6b\x61\x00\x4d\x61\x68\x61\x6a\x61\x6e\x69\x2c\x4d\x61\x68\x6a\x00\x4d\x61\x6c\x61\x79\x61\x6c\x61\x6d\x2c\x4d\x6c\x79\x6d\x00\x4d\x61\x6e\x64\x61\x69\x63\x2c\x4d\x61\x6e\x64\x00\x4d\x61\x6e\x69\x63\x68\x61\x65\x61\x6e\x2c\x4d\x61\x6e\x69\x00\x4d\x61\x72\x63\x68\x65\x6e\x2c\x4d\x61\x72\x63\x00\x4d\x61\x73\x61\x72\x61\x6d\x5f\x47\x6f\x6e\x64\x69\x2c\x47\x6f\x6e\x6d\x00\x4d\x65\x64\x65\x66\x61\x69\x64\x72\x69\x6e\x2c\x4d\x65\x64\x66\x00\x4d\x65\x65\x74\x65\x69\x5f\x4d\x61\x79\x65\x6b\x2c\x4d\x74\x65\x69\x00\x4d\x65\x6e\x64\x65\x5f\x4b\x69\x6b\x61\x6b\x75\x69\x2c\x4d\x65\x6e\x64\x00\x4d\x65\x72\x6f\x69\x74\x69\x63\x5f\x43\x75\x72\x73\x69\x76\x65\x2c\x4d\x65\x72\x63\x00\x4d\x65\x72\x6f\x69\x74\x69\x63\x5f\x48\x69\x65\x72\x6f\x67\x6c\x79\x70\x68\x73\x2c\x4d\x65\x72\x6f\x00\x4d\x69\x61\x6f\x2c\x50\x6c\x72\x64\x00\x4d\x6f\x64\x69\x2c\x4d\x6f\x64\x69\x00\x4d\x6f\x6e\x67\x6f\x6c\x69\x61\x6e\x2c\x4d\x6f\x6e\x67\x00\x4d\x72\x6f\x2c\x4d\x72\x6f\x6f\x00\x4d\x75\x6c\x74\x61\x6e\x69\x2c\x4d\x75\x6c\x74\x00\x4d\x79\x61\x6e\x6d\x61\x72\x2c\x4d\x79\x6d\x72\x00\x4e\x61\x62\x61\x74\x61\x65\x61\x6e\x2c\x4e\x62\x61\x74\x00\x4e\x61\x6e\x64\x69\x6e\x61\x67\x61\x72\x69\x2c\x4e\x61\x6e\x64\x00\x4e\x65\x77\x5f\x54\x61\x69\x5f\x4c\x75\x65\x2c\x54\x61\x6c\x75\x00\x4e\x65\x77\x61\x2c\x4e\x65\x77\x61\x00\x4e\x6b\x6f\x2c\x4e\x6b\x6f\x6f\x00\x4e\x75\x73\x68\x75\x2c\x4e\x73\x68\x75\x00\x4e\x79\x69\x61\x6b\x65\x6e\x67\x5f\x50\x75\x61\x63\x68\x75\x65\x5f\x48\x6d\x6f\x6e\x67\x2c\x48\x6d\x6e\x70\x00\x4f\x67\x68\x61\x6d\x2c\x4f\x67\x61\x6d\x00\x4f\x6c\x5f\x43\x68\x69\x6b\x69\x2c\x4f\x6c\x63\x6b\x00\x4f\x6c\x64\x5f\x48\x75\x6e\x67\x61\x72\x69\x61\x6e\x2c\x48\x75\x6e\x67\x00\x4f\x6c\x64\x5f\x49\x74\x61\x6c\x69\x63\x2c\x49\x74\x61\x6c\x00\x4f\x6c\x64\x5f\x4e\x6f\x72\x74\x68\x5f\x41\x72\x61\x62\x69\x61\x6e\x2c\x4e\x61\x72\x62\x00\x4f\x6c\x64\x5f\x50\x65\x72\x6d\x69\x63\x2c\x50\x65\x72\x6d\x00\x4f\x6c\x64\x5f\x50\x65\x72\x73\x69\x61\x6e\x2c\x58\x70\x65\x6f\x00\x4f\x6c\x64\x5f\x53\x6f\x67\x64\x69\x61\x6e\x2c\x53\x6f\x67\x6f\x00\x4f\x6c\x64\x5f\x53\x6f\x75\x74\x68\x5f\x41\x72\x61\x62\x69\x61\x6e\x2c\x53\x61\x72\x62\x00\x4f\x6c\x64\x5f\x54\x75\x72\x6b\x69\x63\x2c\x4f\x72\x6b\x68\x00\x4f\x72\x69\x79\x61\x2c\x4f\x72\x79\x61\x00\x4f\x73\x61\x67\x65\x2c\x4f\x73\x67\x65\x00\x4f\x73\x6d\x61\x6e\x79\x61\x2c\x4f\x73\x6d\x61\x00\x50\x61\x68\x61\x77\x68\x5f\x48\x6d\x6f\x6e\x67\x2c\x48\x6d\x6e\x67\x00\x50\x61\x6c\x6d\x79\x72\x65\x6e\x65\x2c\x50\x61\x6c\x6d\x00\x50\x61\x75\x5f\x43\x69\x6e\x5f\x48\x61\x75\x2c\x50\x61\x75\x63\x00\x50\x68\x61\x67\x73\x5f\x50\x61\x2c\x50\x68\x61\x67\x00\x50\x68\x6f\x65\x6e\x69\x63\x69\x61\x6e\x2c\x50\x68\x6e\x78\x00\x50\x73\x61\x6c\x74\x65\x72\x5f\x50\x61\x68\x6c\x61\x76\x69\x2c\x50\x68\x6c\x70\x00\x52\x65\x6a\x61\x6e\x67\x2c\x52\x6a\x6e\x67\x00\x52\x75\x6e\x69\x63\x2c\x52\x75\x6e\x72\x00\x53\x61\x6d\x61\x72\x69\x74\x61\x6e\x2c\x53\x61\x6d\x72\x00\x53\x61\x75\x72\x61\x73\x68\x74\x72\x61\x2c\x53\x61\x75\x72\x00\x53\x68\x61\x72\x61\x64\x61\x2c\x53\x68\x72\x64\x00\x53\x68\x61\x76\x69\x61\x6e\x2c\x53\x68\x61\x77\x00\x53\x69\x64\x64\x68\x61\x6d\x2c\x53\x69\x64\x64\x00\x53\x69\x67\x6e\x57\x72\x69\x74\x69\x6e\x67\x2c\x53\x67\x6e\x77\x00\x53\x69\x6e\x68\x61\x6c\x61\x2c\x53\x69\x6e\x68\x00\x53\x6f\x67\x64\x69\x61\x6e\x2c\x53\x6f\x67\x64\x00\x53\x6f\x72\x61\x5f\x53\x6f\x6d\x70\x65\x6e\x67\x2c\x53\x6f\x72\x61\x00\x53\x6f\x79\x6f\x6d\x62\x6f\x2c\x53\x6f\x79\x6f\x00\x53\x75\x6e\x64\x61\x6e\x65\x73\x65\x2c\x53\x75\x6e\x64\x00\x53\x79\x6c\x6f\x74\x69\x5f\x4e\x61\x67\x72\x69\x2c\x53\x79\x6c\x6f\x00\x53\x79\x72\x69\x61\x63\x2c\x53\x79\x72\x63\x00\x54\x61\x67\x61\x6c\x6f\x67\x2c\x54\x67\x6c\x67\x00\x54\x61\x67\x62\x61\x6e\x77\x61\x2c\x54\x61\x67\x62\x00\x54\x61\x69\x5f\x4c\x65\x2c\x54\x61\x6c\x65\x00\x54\x61\x69\x5f\x54\x68\x61\x6d\x2c\x4c\x61\x6e\x61\x00\x54\x61\x69\x5f\x56\x69\x65\x74\x2c\x54\x61\x76\x74\x00\x54\x61\x6b\x72\x69\x2c\x54\x61\x6b\x72\x00\x54\x61\x6d\x69\x6c\x2c\x54\x61\x6d\x6c\x00\x54\x61\x6e\x67\x75\x74\x2c\x54\x61\x6e\x67\x00\x54\x65\x6c\x75\x67\x75\x2c\x54\x65\x6c\x75\x00\x54\x68\x61\x61\x6e\x61\x2c\x54\x68\x61\x61\x00\x54\x68\x61\x69\x2c\x54\x68\x61\x69\x00\x54\x69\x62\x65\x74\x61\x6e\x2c\x54\x69\x62\x74\x00\x54\x69\x66\x69\x6e\x61\x67\x68\x2c\x54\x66\x6e\x67\x00\x54\x69\x72\x68\x75\x74\x61\x2c\x54\x69\x72\x68\x00\x55\x67\x61\x72\x69\x74\x69\x63\x2c\x55\x67\x61\x72\x00\x56\x61\x69\x2c\x56\x61\x69\x69\x00\x57\x61\x6e\x63\x68\x6f\x2c\x57\x63\x68\x6f\x00\x57\x61\x72\x61\x6e\x67\x5f\x43\x69\x74\x69\x2c\x57\x61\x72\x61\x00\x59\x65\x7a\x69\x64\x69\x2c\x59\x65\x7a\x69\x00\x59\x69\x2c\x59\x69\x69\x69\x00\x5a\x61\x6e\x61\x62\x61\x7a\x61\x72\x5f\x53\x71\x75\x61\x72\x65\x2c\x5a\x61\x6e\x62\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x19\x99\x45\x85\x19\x99\x45\xae\x19\x80\x45\x8e\x19\x80\x45\x84\x19\x96\x45\x80\x19\x9e\x45\x80\x19\xe1\x60\x45\xa6\x19\x84\x45\x84\x19\x81\x0d\x93\x19\xe0\x0f\x37\x83\x2b\x80\x19\x82\x2b\x01\x83\x2b\x80\x19\x80\x2b\x03\x80\x2b\x80\x19\x80\x2b\x80\x19\x82\x2b\x00\x80\x2b\x00\x93\x2b\x00\xbe\x2b\x8d\x1a\x8f\x2b\xe0\x24\x1d\x81\x37\xe0\x48\x1d\x00\xa5\x05\x01\xb1\x05\x01\x82\x05\x00\xb6\x34\x07\x9a\x34\x03\x85\x34\x0a\x84\x04\x80\x19\x85\x04\x80\x19\x8d\x04\x80\x19\x80\x04\x00\x80\x04\x80\x19\x9f\x04\x80\x19\x89\x04\x8a\x37\x99\x04\x80\x37\xe0\x0b\x04\x80\x19\xa1\x04\x8d\x87\x00\xbb\x87\x01\x82\x87\xaf\x04\xb1\x91\x0d\xba\x63\x01\x82\x63\xad\x7b\x01\x8e\x7b\x00\x9b\x50\x01\x80\x50\x00\x8a\x87\x34\x94\x04\x00\x91\x04\x0a\x8e\x04\x80\x19\x9c\x04\xd0\x1f\x83\x37\x8e\x1f\x81\x19\x99\x1f\x83\x0b\x00\x87\x0b\x01\x81\x0b\x01\x95\x0b\x00\x86\x0b\x00\x80\x0b\x02\x83\x0b\x01\x88\x0b\x01\x81\x0b\x01\x83\x0b\x07\x80\x0b\x03\x81\x0b\x00\x84\x0b\x01\x98\x0b\x01\x82\x2e\x00\x85\x2e\x03\x81\x2e\x01\x95\x2e\x00\x86\x2e\x00\x81\x2e\x00\x81\x2e\x00\x81\x2e\x01\x80\x2e\x00\x84\x2e\x03\x81\x2e\x01\x82\x2e\x02\x80\x2e\x06\x83\x2e\x00\x80\x2e\x06\x90\x2e\x09\x82\x2c\x00\x88\x2c\x00\x82\x2c\x00\x95\x2c\x00\x86\x2c\x00\x81\x2c\x00\x84\x2c\x01\x89\x2c\x00\x82\x2c\x00\x82\x2c\x01\x80\x2c\x0e\x83\x2c\x01\x8b\x2c\x06\x86\x2c\x00\x82\x70\x00\x87\x70\x01\x81\x70\x01\x95\x70\x00\x86\x70\x00\x81\x70\x00\x84\x70\x01\x88\x70\x01\x81\x70\x01\x82\x70\x06\x82\x70\x03\x81\x70\x00\x84\x70\x01\x91\x70\x09\x81\x8e\x00\x85\x8e\x02\x82\x8e\x00\x83\x8e\x02\x81\x8e\x00\x80\x8e\x00\x81\x8e\x02\x81\x8e\x02\x82\x8e\x02\x8b\x8e\x03\x84\x8e\x02\x82\x8e\x00\x83\x8e\x01\x80\x8e\x05\x80\x8e\x0d\x94\x8e\x04\x8c\x90\x00\x82\x90\x00\x96\x90\x00\x8f\x90\x02\x87\x90\x00\x82\x90\x00\x83\x90\x06\x81\x90\x00\x82\x90\x04\x83\x90\x01\x89\x90\x06\x88\x90\x8c\x3c\x00\x82\x3c\x00\x96\x3c\x00\x89\x3c\x00\x84\x3c\x01\x88\x3c\x00\x82\x3c\x00\x83\x3c\x06\x81\x3c\x06\x80\x3c\x00\x83\x3c\x01\x89\x3c\x00\x81\x3c\x0c\x8c\x4f\x00\x82\x4f\x00\xb2\x4f\x00\x82\x4f\x00\x85\x4f\x03\x8f\x4f\x01\x99\x4f\x00\x82\x81\x00\x91\x81\x02\x97\x81\x00\x88\x81\x00\x80\x81\x01\x86\x81\x02\x80\x81\x03\x85\x81\x00\x80\x81\x00\x87\x81\x05\x89\x81\x01\x82\x81\x0b\xb9\x92\x03\x80\x19\x9b\x92\x24\x81\x44\x00\x80\x44\x00\x84\x44\x00\x97\x44\x00\x80\x44\x00\x96\x44\x01\x84\x44\x00\x80\x44\x00\x85\x44\x01\x89\x44\x01\x83\x44\x1f\xc7\x93\x00\xa3\x93\x03\xa6\x93\x00\xa3\x93\x00\x8e\x93\x00\x86\x93\x83\x19\x81\x93\x24\xe0\x3f\x5e\xa5\x27\x00\x80\x27\x04\x80\x27\x01\xaa\x27\x80\x19\x83\x27\xe0\x9f\x30\xc8\x26\x00\x83\x26\x01\x86\x26\x00\x80\x26\x00\x83\x26\x01\xa8\x26\x00\x83\x26\x01\xa0\x26\x00\x83\x26\x01\x86\x26\x00\x80\x26\x00\x83\x26\x01\x8e\x26\x00\xb8\x26\x00\x83\x26\x01\xc2\x26\x01\x9f\x26\x02\x99\x26\x05\xd5\x17\x01\x85\x17\x01\xe2\x1f\x12\x9c\x66\x02\xca\x7a\x82\x19\x8a\x7a\x06\x8c\x88\x00\x86\x88\x0a\x94\x32\x81\x19\x08\x93\x11\x0b\x8c\x89\x00\x82\x89\x00\x81\x89\x0b\xdd\x40\x01\x89\x40\x05\x89\x40\x05\x81\x5b\x81\x19\x80\x5b\x80\x19\x88\x5b\x00\x89\x5b\x05\xd8\x5b\x06\xaa\x5b\x04\xc5\x12\x09\x9e\x47\x00\x8b\x47\x03\x8b\x47\x03\x80\x47\x02\x8b\x47\x9d\x8a\x01\x84\x8a\x0a\xab\x61\x03\x99\x61\x05\x8a\x61\x02\x81\x61\x9f\x40\x9b\x10\x01\x81\x10\xbe\x8b\x00\x9c\x8b\x01\x8a\x8b\x05\x89\x8b\x05\x8d\x8b\x01\x90\x37\x3e\xcb\x07\x03\xac\x07\x02\xbf\x85\xb3\x0a\x07\x83\x0a\xb7\x46\x02\x8e\x46\x02\x82\x46\xaf\x67\x88\x1d\x06\xaa\x27\x01\x82\x27\x87\x85\x07\x82\x37\x80\x19\x8c\x37\x80\x19\x86\x37\x83\x19\x80\x37\x85\x19\x80\x37\x82\x19\x81\x37\x80\x19\x04\xa5\x45\x84\x2b\x80\x1d\xb0\x45\x84\x2b\x83\x45\x84\x2b\x8c\x45\x80\x1d\xc5\x45\x80\x2b\xb9\x37\x00\x84\x37\xe0\x9f\x45\x95\x2b\x01\x85\x2b\x01\xa5\x2b\x01\x85\x2b\x01\x87\x2b\x00\x80\x2b\x00\x80\x2b\x00\x80\x2b\x00\x9e\x2b\x01\xb4\x2b\x00\x8e\x2b\x00\x8d\x2b\x01\x85\x2b\x00\x92\x2b\x01\x82\x2b\x00\x88\x2b\x00\x8b\x19\x81\x37\xd6\x19\x00\x8a\x19\x80\x45\x01\x8a\x19\x80\x45\x8e\x19\x00\x8c\x45\x02\x9f\x19\x0f\xa0\x37\x0e\xa5\x19\x80\x2b\x82\x19\x81\x45\x85\x19\x80\x45\x9a\x19\x80\x45\x90\x19\xa8\x45\x82\x19\x03\xe2\x36\x19\x18\x8a\x19\x14\xe3\x3f\x19\xe0\x9f\x0f\xe2\x13\x19\x01\x9f\x19\x00\xe0\x08\x19\xae\x28\x00\xae\x28\x00\x9f\x45\xe0\x13\x1a\x04\x86\x1a\xa5\x27\x00\x80\x27\x04\x80\x27\x01\xb7\x94\x06\x81\x94\x0d\x80\x94\x96\x26\x08\x86\x26\x00\x86\x26\x00\x86\x26\x00\x86\x26\x00\x86\x26\x00\x86\x26\x00\x86\x26\x00\x86\x26\x00\x9f\x1d\xd2\x19\x2c\x99\x2f\x00\xd8\x2f\x0b\xe0\x75\x2f\x19\x8b\x19\x03\x84\x19\x80\x2f\x80\x19\x80\x2f\x98\x19\x88\x2f\x83\x37\x81\x30\x87\x19\x83\x2f\x83\x19\x00\xd5\x35\x01\x81\x37\x81\x19\x82\x35\x80\x19\xd9\x3d\x81\x19\x82\x3d\x04\xaa\x0d\x00\xdd\x30\x00\x8f\x19\x9f\x0d\xa3\x19\x0b\x8f\x3d\x9e\x30\x00\xbf\x19\x9e\x30\xd0\x19\xae\x3d\x80\x19\xd7\x3d\xe0\x47\x19\xf0\x09\x5f\x2f\xbf\x19\xf0\x41\x9c\x2f\x02\xe4\x2c\x9b\x02\xb6\x9b\x08\xaf\x4a\xe0\xcb\x97\x13\xdf\x1d\xd7\x08\x07\xa1\x19\xe0\x05\x45\x82\x19\xb4\x45\x01\x88\x45\x29\x8a\x45\xac\x86\x02\x89\x19\x05\xb7\x76\x07\xc5\x7c\x07\x8b\x7c\x05\x9f\x1f\xad\x3e\x80\x19\x80\x3e\xa3\x79\x0a\x80\x79\x9c\x30\x02\xcd\x3a\x00\x80\x19\x89\x3a\x03\x81\x3a\x9e\x5e\x00\xb6\x16\x08\x8d\x16\x01\x89\x16\x01\x83\x16\x9f\x5e\xc2\x8c\x17\x84\x8c\x96\x55\x09\x85\x26\x01\x85\x26\x01\x85\x26\x08\x86\x26\x00\x86\x26\x00\xaa\x45\x80\x19\x88\x45\x80\x2b\x83\x45\x81\x19\x03\xcf\x17\xad\x55\x01\x89\x55\x05\xf0\x1b\x43\x30\x0b\x96\x30\x03\xb0\x30\x70\x10\xa3\xe1\x0d\x2f\x01\xe0\x09\x2f\x25\x86\x45\x0b\x84\x05\x04\x99\x34\x00\x84\x34\x00\x80\x34\x00\x81\x34\x00\x81\x34\x00\x89\x34\xe0\x11\x04\x10\xe1\x0a\x04\x81\x19\x0f\xbf\x04\x01\xb5\x04\x27\x8d\x04\x01\x8f\x37\x89\x19\x05\x8d\x37\x81\x1d\xa2\x19\x00\x92\x19\x00\x83\x19\x03\x84\x04\x00\xe0\x26\x04\x01\x80\x19\x00\x9f\x19\x99\x45\x85\x19\x99\x45\x8a\x19\x89\x3d\x80\x19\xac\x3d\x81\x19\x9e\x30\x02\x85\x30\x01\x85\x30\x01\x85\x30\x01\x82\x30\x02\x86\x19\x00\x86\x19\x09\x84\x19\x01\x8b\x49\x00\x99\x49\x00\x92\x49\x00\x81\x49\x00\x8e\x49\x01\x8d\x49\x21\xe0\x1a\x49\x04\x82\x19\x03\xac\x19\x02\x88\x19\xce\x2b\x00\x8c\x19\x02\x80\x2b\x2e\xac\x19\x80\x37\x60\x21\x9c\x4b\x02\xb0\x13\x0e\x80\x37\x9a\x19\x03\xa3\x69\x08\x82\x69\x9a\x29\x04\xaa\x6b\x04\x9d\x96\x00\x80\x96\xa3\x6c\x03\x8d\x6c\x29\xcf\x1e\xaf\x7e\x9d\x72\x01\x89\x72\x05\xa3\x71\x03\xa3\x71\x03\xa7\x24\x07\xb3\x14\x0a\x80\x14\x60\x2f\xe0\xd6\x48\x08\x95\x48\x09\x87\x48\x60\x37\x85\x1c\x01\x80\x1c\x00\xab\x1c\x00\x81\x1c\x02\x80\x1c\x01\x80\x1c\x95\x36\x00\x88\x36\x9f\x74\x9e\x5f\x07\x88\x5f\x2f\x92\x33\x00\x81\x33\x04\x84\x33\x9b\x77\x02\x80\x77\x99\x4c\x04\x80\x4c\x3f\x9f\x58\x97\x57\x03\x93\x57\x01\xad\x57\x83\x3f\x00\x81\x3f\x04\x87\x3f\x00\x82\x3f\x00\x9c\x3f\x01\x82\x3f\x03\x89\x3f\x06\x88\x3f\x06\x9f\x6e\x9f\x6a\x1f\xa6\x51\x03\x8b\x51\x08\xb5\x06\x02\x86\x06\x95\x39\x01\x87\x39\x92\x38\x04\x87\x38\x91\x78\x06\x83\x78\x0b\x86\x78\x4f\xc8\x6f\x36\xb2\x68\x0c\xb2\x68\x06\x85\x68\xa7\x31\x07\x89\x31\x60\xc5\x9e\x04\x00\xa9\x9a\x00\x82\x9a\x01\x81\x9a\x4d\xa7\x6d\x07\xa9\x82\x55\x9b\x18\x13\x96\x25\x08\xcd\x0e\x03\x9d\x0e\x0e\x80\x0e\xc1\x3b\x0a\x80\x3b\x01\x98\x83\x06\x89\x83\x05\xb4\x15\x00\x91\x15\x07\xa6\x4e\x08\xdf\x7d\x00\x93\x81\x0a\x91\x41\x00\xab\x41\x40\x86\x5d\x00\x80\x5d\x00\x83\x5d\x00\x8e\x5d\x00\x8a\x5d\x05\xba\x43\x04\x89\x43\x05\x83\x2a\x00\x87\x2a\x01\x81\x2a\x01\x95\x2a\x00\x86\x2a\x00\x81\x2a\x00\x84\x2a\x00\x80\x37\x88\x2a\x01\x81\x2a\x01\x82\x2a\x01\x80\x2a\x05\x80\x2a\x04\x86\x2a\x01\x86\x2a\x02\x84\x2a\x60\x2a\xdb\x62\x00\x84\x62\x1d\xc7\x95\x07\x89\x95\x60\x45\xb5\x7f\x01\xa5\x7f\x21\xc4\x5a\x0a\x89\x5a\x05\x8c\x5b\x12\xb8\x8d\x06\x89\x8d\x35\x9a\x02\x01\x8e\x02\x03\x8f\x02\x60\x5f\xbb\x21\x60\x03\xd2\x99\x0b\x80\x99\x86\x20\x01\x80\x20\x01\x87\x20\x00\x81\x20\x00\x9d\x20\x00\x81\x20\x01\x8b\x20\x08\x89\x20\x45\x87\x60\x01\xad\x60\x01\x8a\x60\x1a\xc7\x9c\x07\xd2\x84\x1c\xb8\x75\x60\xa6\x88\x0c\x00\xac\x0c\x00\x8d\x0c\x09\x9c\x0c\x02\x9f\x52\x01\x95\x52\x00\x8d\x52\x48\x86\x53\x00\x81\x53\x00\xab\x53\x02\x80\x53\x00\x81\x53\x00\x88\x53\x07\x89\x53\x05\x85\x2d\x00\x81\x2d\x00\xa4\x2d\x00\x81\x2d\x00\x85\x2d\x06\x89\x2d\x60\xd5\x98\x4d\x60\x56\x80\x4a\x0e\xb1\x8e\x0c\x80\x8e\xe3\x39\x1b\x60\x05\xe0\x0e\x1b\x00\x84\x1b\x0a\xe0\x63\x1b\x6a\x5b\xe3\xce\x23\x00\x88\x23\x6f\x66\xe1\xe6\x03\x70\x11\x58\xe1\xd8\x08\x06\x9e\x5c\x00\x89\x5c\x03\x81\x5c\x5f\x9d\x09\x01\x85\x09\x09\xc5\x73\x09\x89\x73\x00\x86\x73\x00\x94\x73\x04\x92\x73\x62\x4f\xda\x54\x60\x04\xca\x59\x03\xb8\x59\x06\x90\x59\x3f\x80\x8f\x80\x64\x81\x19\x80\x42\x0a\x81\x2f\x0d\xf0\x07\x97\x8f\x07\xe2\x9f\x8f\xe1\x75\x42\x29\x88\x8f\x70\x12\x96\x80\x3d\xe0\xbd\x35\x30\x82\x35\x10\x83\x3d\x07\xe1\x2b\x64\x68\xa3\xe0\x0a\x22\x04\x8c\x22\x02\x88\x22\x06\x89\x22\x01\x83\x22\x83\x19\x70\x02\xfb\xe0\x95\x19\x09\xa6\x19\x01\xbd\x19\x82\x37\x90\x19\x87\x37\x81\x19\x86\x37\x9d\x19\x83\x37\xba\x19\x16\xc5\x2b\x60\x39\x93\x19\x0b\xd6\x19\x08\x98\x19\x60\x26\xd4\x19\x00\xc6\x19\x00\x81\x19\x01\x80\x19\x01\x81\x19\x01\x83\x19\x00\x8b\x19\x00\x80\x19\x00\x86\x19\x00\xc0\x19\x00\x83\x19\x01\x87\x19\x00\x86\x19\x00\x9b\x19\x00\x83\x19\x00\x84\x19\x00\x80\x19\x02\x86\x19\x00\xe0\xf3\x19\x01\xe0\xc3\x19\x01\xb1\x19\xe2\x2b\x80\x0e\x84\x80\x00\x8e\x80\x64\xef\x86\x28\x00\x90\x28\x01\x86\x28\x00\x81\x28\x00\x84\x28\x60\x74\xac\x65\x02\x8d\x65\x01\x89\x65\x03\x81\x65\x61\x0f\xb9\x98\x04\x80\x98\x64\x9f\xe0\x64\x56\x01\x8f\x56\x28\xcb\x01\x03\x89\x01\x03\x81\x01\x62\xb0\xc3\x19\x4b\xbc\x19\x60\x61\x83\x04\x00\x9a\x04\x00\x81\x04\x00\x80\x04\x01\x80\x04\x00\x89\x04\x00\x83\x04\x00\x80\x04\x00\x80\x04\x05\x80\x04\x03\x80\x04\x00\x80\x04\x00\x80\x04\x00\x82\x04\x00\x81\x04\x00\x80\x04\x01\x80\x04\x00\x80\x04\x00\x80\x04\x00\x80\x04\x00\x80\x04\x00\x81\x04\x00\x80\x04\x01\x83\x04\x00\x86\x04\x00\x83\x04\x00\x83\x04\x00\x80\x04\x00\x89\x04\x00\x90\x04\x04\x82\x04\x00\x84\x04\x00\x90\x04\x33\x81\x04\x60\xad\xab\x19\x03\xe0\x03\x19\x0b\x8e\x19\x01\x8e\x19\x00\x8e\x19\x00\xa4\x19\x09\xe0\x4d\x19\x37\x99\x19\x80\x35\x81\x19\x0c\xab\x19\x03\x88\x19\x06\x81\x19\x0d\x85\x19\x60\x39\xe3\x77\x19\x07\x8c\x19\x02\x8c\x19\x02\xe0\x13\x19\x0b\xd8\x19\x06\x8b\x19\x13\x8b\x19\x03\xb7\x19\x07\x89\x19\x05\xa7\x19\x07\x9d\x19\x01\x81\x19\x4d\xe0\x18\x19\x00\xd1\x19\x00\xe0\x26\x19\x0b\x8d\x19\x01\x84\x19\x02\x82\x19\x04\x86\x19\x08\x98\x19\x06\x86\x19\x08\x82\x19\x0c\x86\x19\x28\xe0\x32\x19\x00\xb6\x19\x24\x89\x19\x63\xa5\xf0\x96\x7d\x2f\x21\xef\xd4\x2f\x0a\xe0\x7d\x2f\x01\xf0\x06\x21\x2f\x0d\xf0\x0c\xd0\x2f\x6b\xbe\xe1\xbd\x2f\x65\x81\xf0\x02\xea\x2f\x7a\xdc\x55\x80\x19\x1d\xdf\x19\x60\x1f\xe0\x8f\x37\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x82\xc1\x00\x00\x01\x2b\x01\x00\x00\x01\x2b\x1c\x00\x0c\x01\x45\x80\x92\x00\x00\x02\x1d\x6b\x00\x02\x1d\x28\x01\x02\x1d\x45\x00\x02\x1d\x28\x81\x03\x00\x00\x05\x04\x31\x87\x91\x9a\x0d\x00\x00\x05\x04\x31\x87\x91\x9a\x00\x03\x04\x87\x91\x01\x00\x00\x05\x04\x31\x87\x91\x9a\x1f\x00\x00\x08\x01\x04\x50\x51\x78\x31\x82\x87\x09\x00\x0a\x02\x04\x87\x09\x00\x09\x03\x04\x91\x9a\x05\x00\x00\x02\x04\x87\x62\x00\x00\x02\x04\x31\x81\xfb\x00\x00\x0d\x0b\x1f\x2a\x2c\x2e\x3c\x45\x4f\x70\x7d\x8e\x90\x95\x00\x0c\x0b\x1f\x2a\x2c\x2e\x3c\x45\x4f\x70\x8e\x90\x95\x10\x00\x00\x14\x0b\x1f\x21\x2d\x53\x2a\x2c\x2e\x3c\x4e\x4f\x60\x70\x43\x81\x86\x8d\x8e\x90\x95\x00\x15\x0b\x1f\x21\x2d\x53\x2a\x2c\x2e\x3c\x47\x4e\x4f\x60\x70\x43\x81\x86\x8d\x8e\x90\x95\x09\x04\x1f\x21\x3b\x4e\x75\x00\x09\x03\x0b\x15\x86\x75\x00\x09\x02\x2e\x5d\x75\x00\x09\x02\x2c\x41\x80\x75\x00\x0d\x02\x2a\x8e\x80\x71\x00\x09\x02\x3c\x60\x82\xcf\x00\x09\x03\x15\x5e\x8a\x80\x30\x00\x00\x02\x27\x45\x85\xb8\x00\x01\x04\x11\x32\x89\x88\x80\x4a\x00\x01\x02\x5b\x76\x00\x00\x00\x02\x5b\x76\x84\x49\x00\x00\x04\x0b\x1f\x2a\x3c\x00\x01\x1f\x00\x04\x0b\x1f\x2a\x3c\x00\x02\x1f\x2a\x00\x01\x1f\x01\x02\x0b\x1f\x00\x02\x1f\x7d\x00\x02\x0b\x1f\x00\x02\x1f\x7d\x00\x06\x1f\x3c\x4f\x70\x8e\x90\x00\x01\x1f\x01\x02\x1f\x7d\x01\x01\x1f\x00\x02\x1f\x7d\x00\x02\x0b\x1f\x06\x01\x1f\x00\x02\x1f\x60\x00\x02\x0b\x1f\x01\x01\x1f\x00\x02\x0b\x1f\x03\x01\x1f\x00\x08\x0b\x1f\x2a\x3c\x60\x70\x90\x95\x00\x02\x1f\x2a\x00\x03\x1f\x2a\x3c\x01\x02\x0b\x1f\x00\x01\x0b\x01\x02\x1f\x2a\x00\x01\x60\x80\x44\x00\x01\x01\x2b\x35\x00\x00\x02\x1d\x87\x81\xb5\x00\x00\x02\x45\x5b\x80\x3f\x00\x00\x03\x1f\x2a\x45\x8c\xd1\x00\x00\x02\x1d\x28\x81\x3c\x00\x01\x06\x0d\x30\x2f\x35\x3d\x9b\x00\x05\x0d\x30\x2f\x35\x3d\x01\x00\x00\x01\x2f\x00\x00\x09\x06\x0d\x30\x2f\x35\x3d\x9b\x00\x00\x00\x05\x0d\x30\x2f\x35\x3d\x07\x06\x0d\x30\x2f\x35\x3d\x9b\x03\x05\x0d\x30\x2f\x35\x3d\x09\x00\x03\x02\x0d\x2f\x01\x00\x00\x05\x0d\x30\x2f\x35\x3d\x04\x02\x35\x3d\x00\x00\x00\x05\x0d\x30\x2f\x35\x3d\x03\x00\x01\x03\x2f\x35\x3d\x01\x01\x2f\x58\x00\x03\x02\x35\x3d\x02\x00\x00\x02\x35\x3d\x59\x00\x00\x06\x0d\x30\x2f\x35\x3d\x9b\x00\x02\x35\x3d\x80\x12\x00\x0f\x01\x2f\x1f\x00\x23\x01\x2f\x3b\x00\x27\x01\x2f\x37\x00\x30\x01\x2f\x0e\x00\x0b\x01\x2f\x32\x00\x00\x01\x2f\x57\x00\x18\x01\x2f\x09\x00\x04\x01\x2f\x5f\x00\x1e\x01\x2f\xc0\x31\xef\x00\x00\x02\x1d\x28\x80\x0f\x00\x07\x02\x2f\x45\x80\xa7\x00\x02\x0e\x1f\x21\x2c\x2e\x41\x3c\x3b\x4e\x4f\x5a\x60\x43\x8d\x95\x02\x0d\x1f\x21\x2c\x2e\x41\x3c\x3b\x4e\x5a\x60\x43\x8d\x95\x03\x0b\x1f\x21\x2c\x2e\x41\x3b\x4e\x5a\x43\x8d\x95\x80\x36\x00\x00\x02\x0b\x1f\x00\x00\x00\x02\x1f\x8e\x39\x00\x00\x03\x3e\x45\x5e\x80\x1f\x00\x00\x02\x10\x3a\xc0\x13\xa1\x00\x00\x02\x04\x91\x09\x00\x00\x02\x04\x91\x46\x00\x01\x05\x0d\x30\x2f\x35\x3d\x80\x99\x00\x04\x06\x0d\x30\x2f\x35\x3d\x9b\x09\x00\x00\x02\x35\x3d\x2c\x00\x01\x02\x35\x3d\x80\xdf\x00\x02\x02\x1c\x49\x03\x00\x2c\x03\x1c\x48\x49\x02\x00\x08\x02\x1c\x49\x81\x1f\x00\x1b\x02\x04\x1a\x8f\x84\x00\x00\x02\x2a\x8e\x00\x00\x00\x02\x2a\x8e\x36\x00\x01\x02\x2a\x8e\x8c\x12\x00\x01\x02\x2a\x8e\x00\x00\x00\x02\x2a\x8e\xc0\x5c\x4b\x00\x03\x01\x22\x96\x3b\x00\x11\x01\x2f\x9e\x5d\x00\x01\x01\x2f\xce\xcd\x2d\x00\x00\x43\x6e\x2c\x55\x6e\x61\x73\x73\x69\x67\x6e\x65\x64\x00\x4c\x75\x2c\x55\x70\x70\x65\x72\x63\x61\x73\x65\x5f\x4c\x65\x74\x74\x65\x72\x00\x4c\x6c\x2c\x4c\x6f\x77\x65\x72\x63\x61\x73\x65\x5f\x4c\x65\x74\x74\x65\x72\x00\x4c\x74\x2c\x54\x69\x74\x6c\x65\x63\x61\x73\x65\x5f\x4c\x65\x74\x74\x65\x72\x00\x4c\x6d\x2c\x4d\x6f\x64\x69\x66\x69\x65\x72\x5f\x4c\x65\x74\x74\x65\x72\x00\x4c\x6f\x2c\x4f\x74\x68\x65\x72\x5f\x4c\x65\x74\x74\x65\x72\x00\x4d\x6e\x2c\x4e\x6f\x6e\x73\x70\x61\x63\x69\x6e\x67\x5f\x4d\x61\x72\x6b\x00\x4d\x63\x2c\x53\x70\x61\x63\x69\x6e\x67\x5f\x4d\x61\x72\x6b\x00\x4d\x65\x2c\x45\x6e\x63\x6c\x6f\x73\x69\x6e\x67\x5f\x4d\x61\x72\x6b\x00\x4e\x64\x2c\x44\x65\x63\x69\x6d\x61\x6c\x5f\x4e\x75\x6d\x62\x65\x72\x2c\x64\x69\x67\x69\x74\x00\x4e\x6c\x2c\x4c\x65\x74\x74\x65\x72\x5f\x4e\x75\x6d\x62\x65\x72\x00\x4e\x6f\x2c\x4f\x74\x68\x65\x72\x5f\x4e\x75\x6d\x62\x65\x72\x00\x53\x6d\x2c\x4d\x61\x74\x68\x5f\x53\x79\x6d\x62\x6f\x6c\x00\x53\x63\x2c\x43\x75\x72\x72\x65\x6e\x63\x79\x5f\x53\x79\x6d\x62\x6f\x6c\x00\x53\x6b\x2c\x4d\x6f\x64\x69\x66\x69\x65\x72\x5f\x53\x79\x6d\x62\x6f\x6c\x00\x53\x6f\x2c\x4f\x74\x68\x65\x72\x5f\x53\x79\x6d\x62\x6f\x6c\x00\x50\x63\x2c\x43\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x5f\x50\x75\x6e\x63\x74\x75\x61\x74\x69\x6f\x6e\x00\x50\x64\x2c\x44\x61\x73\x68\x5f\x50\x75\x6e\x63\x74\x75\x61\x74\x69\x6f\x6e\x00\x50\x73\x2c\x4f\x70\x65\x6e\x5f\x50\x75\x6e\x63\x74\x75\x61\x74\x69\x6f\x6e\x00\x50\x65\x2c\x43\x6c\x6f\x73\x65\x5f\x50\x75\x6e\x63\x74\x75\x61\x74\x69\x6f\x6e\x00\x50\x69\x2c\x49\x6e\x69\x74\x69\x61\x6c\x5f\x50\x75\x6e\x63\x74\x75\x61\x74\x69\x6f\x6e\x00\x50\x66\x2c\x46\x69\x6e\x61\x6c\x5f\x50\x75\x6e\x63\x74\x75\x61\x74\x69\x6f\x6e\x00\x50\x6f\x2c\x4f\x74\x68\x65\x72\x5f\x50\x75\x6e\x63\x74\x75\x61\x74\x69\x6f\x6e\x00\x5a\x73\x2c\x53\x70\x61\x63\x65\x5f\x53\x65\x70\x61\x72\x61\x74\x6f\x72\x00\x5a\x6c\x2c\x4c\x69\x6e\x65\x5f\x53\x65\x70\x61\x72\x61\x74\x6f\x72\x00\x5a\x70\x2c\x50\x61\x72\x61\x67\x72\x61\x70\x68\x5f\x53\x65\x70\x61\x72\x61\x74\x6f\x72\x00\x43\x63\x2c\x43\x6f\x6e\x74\x72\x6f\x6c\x2c\x63\x6e\x74\x72\x6c\x00\x43\x66\x2c\x46\x6f\x72\x6d\x61\x74\x00\x43\x73\x2c\x53\x75\x72\x72\x6f\x67\x61\x74\x65\x00\x43\x6f\x2c\x50\x72\x69\x76\x61\x74\x65\x5f\x55\x73\x65\x00\x4c\x43\x2c\x43\x61\x73\x65\x64\x5f\x4c\x65\x74\x74\x65\x72\x00\x4c\x2c\x4c\x65\x74\x74\x65\x72\x00\x4d\x2c\x4d\x61\x72\x6b\x2c\x43\x6f\x6d\x62\x69\x6e\x69\x6e\x67\x5f\x4d\x61\x72\x6b\x00\x4e\x2c\x4e\x75\x6d\x62\x65\x72\x00\x53\x2c\x53\x79\x6d\x62\x6f\x6c\x00\x50\x2c\x50\x75\x6e\x63\x74\x75\x61\x74\x69\x6f\x6e\x2c\x70\x75\x6e\x63\x74\x00\x5a\x2c\x53\x65\x70\x61\x72\x61\x74\x6f\x72\x00\x43\x2c\x4f\x74\x68\x65\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x3e\x00\x00\x00\xc0\x01\x00\x00\x00\x0e\x00\x00\x00\xf0\x00\x00\x00\x00\x7f\x00\x00\x00\x80\x03\x01\x00\x00\x3c\xfa\x18\x17\x56\x0d\x56\x12\x13\x16\x0c\x16\x11\x36\xe9\x02\x36\x4c\x36\xe1\x12\x12\x16\x13\x0e\x10\x0e\xe2\x12\x12\x0c\x13\x0c\xfa\x19\x17\x16\x6d\x0f\x16\x0e\x0f\x05\x14\x0c\x1b\x0f\x0e\x0f\x0c\x2b\x0e\x02\x36\x0e\x0b\x05\x15\x4b\x16\xe1\x0f\x0c\xc1\xe2\x10\x0c\xe2\x00\xff\x30\x02\xff\x08\x02\xff\x27\xbf\x22\x21\x02\x5f\x5f\x21\x22\x61\x02\x21\x02\x41\x42\x21\x02\x21\x02\x9f\x7f\x02\x5f\x5f\x21\x02\x5f\x3f\x02\x05\x3f\x22\x65\x01\x03\x02\x01\x03\x02\x01\x03\x02\xff\x08\x02\xff\x0a\x02\x01\x03\x02\x5f\x21\x02\xff\x32\xa2\x21\x02\x21\x22\x5f\x41\x02\xff\x00\xe2\x3c\x05\xe2\x13\xe4\x0a\x6e\xe4\x04\xee\x06\x84\xce\x04\x0e\x04\xee\x09\xe6\x68\x7f\x04\x0e\x3f\x20\x04\x42\x16\x01\x60\x2e\x01\x16\x41\x00\x01\x00\x21\x02\xe1\x09\x00\xe1\x01\xe2\x1b\x3f\x02\x41\x42\xff\x10\x62\x3f\x0c\x5f\x3f\x02\xe1\x2b\xe2\x28\xff\x1a\x0f\x86\x28\xff\x2f\xff\x06\x02\xff\x58\x00\xe1\x1e\x20\x04\xb6\xe2\x21\x16\x11\x20\x2f\x0d\x00\xe6\x25\x11\x06\x16\x26\x16\x26\x16\x06\xe0\x00\xe5\x13\x60\x65\x36\xe0\x03\xbb\x4c\x36\x0d\x36\x2f\xe6\x03\x16\x1b\x00\x36\xe5\x18\x04\xe5\x02\xe6\x0d\xe9\x02\x76\x25\x06\xe5\x5b\x16\x05\xc6\x1b\x0f\xa6\x24\x26\x0f\x66\x25\xe9\x02\x45\x2f\x05\xf6\x06\x00\x1b\x05\x06\xe5\x16\xe6\x13\x20\xe5\x51\xe6\x03\x05\xe0\x06\xe9\x02\xe5\x19\xe6\x01\x24\x0f\x56\x04\x20\x06\x2d\xe5\x0e\x66\x04\xe6\x01\x04\x46\x04\x86\x20\xf6\x07\x00\xe5\x11\x46\x20\x16\x00\xe5\x03\xe0\x2d\xe5\x0d\x00\xe5\x0a\xe0\x03\xe6\x07\x1b\xe6\x18\x07\xe5\x2e\x06\x07\x06\x05\x47\xe6\x00\x67\x06\x27\x05\xc6\xe5\x02\x26\x36\xe9\x02\x16\x04\xe5\x07\x06\x27\x00\xe5\x00\x20\x25\x20\xe5\x0e\x00\xc5\x00\x05\x40\x65\x20\x06\x05\x47\x66\x20\x27\x20\x27\x06\x05\xe0\x00\x07\x60\x25\x00\x45\x26\x20\xe9\x02\x25\x2d\xab\x0f\x0d\x05\x16\x06\x20\x26\x07\x00\xa5\x60\x25\x20\xe5\x0e\x00\xc5\x00\x25\x00\x25\x00\x25\x20\x06\x00\x47\x26\x60\x26\x20\x46\x40\x06\xc0\x65\x00\x05\xc0\xe9\x02\x26\x45\x06\x16\xe0\x02\x26\x07\x00\xe5\x01\x00\x45\x00\xe5\x0e\x00\xc5\x00\x25\x00\x85\x20\x06\x05\x47\x86\x00\x26\x07\x00\x27\x06\x20\x05\xe0\x07\x25\x26\x20\xe9\x02\x16\x0d\xc0\x05\xa6\x00\x06\x27\x00\xe5\x00\x20\x25\x20\xe5\x0e\x00\xc5\x00\x25\x00\x85\x20\x06\x05\x07\x06\x07\x66\x20\x27\x20\x27\x06\xc0\x26\x07\x60\x25\x00\x45\x26\x20\xe9\x02\x0f\x05\xab\xe0\x02\x06\x05\x00\xa5\x40\x45\x00\x65\x40\x25\x00\x05\x00\x25\x40\x25\x40\x45\x40\xe5\x04\x60\x27\x06\x27\x40\x47\x00\x47\x06\x20\x05\xa0\x07\xe0\x06\xe9\x02\x4b\xaf\x0d\x0f\x80\x06\x47\x06\xe5\x00\x00\x45\x00\xe5\x0f\x00\xe5\x08\x40\x05\x46\x67\x00\x46\x00\x66\xc0\x26\x00\x45\x80\x25\x26\x20\xe9\x02\xc0\x16\xcb\x0f\x05\x06\x27\x16\xe5\x00\x00\x45\x00\xe5\x0f\x00\xe5\x02\x00\x85\x20\x06\x05\x07\x06\x87\x00\x06\x27\x00\x27\x26\xc0\x27\xc0\x05\x00\x25\x26\x20\xe9\x02\x00\x25\xe0\x05\x26\x27\xe5\x01\x00\x45\x00\xe5\x21\x26\x05\x47\x66\x00\x47\x00\x47\x06\x05\x0f\x60\x45\x07\xcb\x45\x26\x20\xe9\x02\xeb\x01\x0f\xa5\x00\x06\x27\x00\xe5\x0a\x40\xe5\x10\x00\xe5\x01\x00\x05\x20\xc5\x40\x06\x60\x47\x46\x00\x06\x00\xe7\x00\xa0\xe9\x02\x20\x27\x16\xe0\x04\xe5\x28\x06\x25\xc6\x60\x0d\xa5\x04\xe6\x00\x16\xe9\x02\x36\xe0\x1d\x25\x00\x05\x00\x85\x00\xe5\x10\x00\x05\x00\xe5\x02\x06\x25\xe6\x01\x05\x20\x85\x00\x04\x00\xa6\x20\xe9\x02\x20\x65\xe0\x18\x05\x4f\xf6\x07\x0f\x16\x4f\x26\xaf\xe9\x02\xeb\x02\x0f\x06\x0f\x06\x0f\x06\x12\x13\x12\x13\x27\xe5\x00\x00\xe5\x1c\x60\xe6\x06\x07\x86\x16\x26\x85\xe6\x03\x00\xe6\x1c\x00\xef\x00\x06\xaf\x00\x2f\x96\x6f\x36\xe0\x1d\xe5\x23\x27\x66\x07\xa6\x07\x26\x27\x26\x05\xe9\x02\xb6\xa5\x27\x26\x65\x46\x05\x47\x25\xc7\x45\x66\xe5\x05\x06\x27\x26\xa7\x06\x05\x07\xe9\x02\x47\x06\x2f\xe1\x1e\x00\x01\x80\x01\x20\xe2\x23\x16\x04\x42\xe5\x80\xc1\x00\x65\x20\xc5\x00\x05\x00\x65\x20\xe5\x21\x00\x65\x20\xe5\x19\x00\x65\x20\xc5\x00\x05\x00\x65\x20\xe5\x07\x00\xe5\x31\x00\x65\x20\xe5\x3b\x20\x46\xf6\x01\xeb\x0c\x40\xe5\x08\xef\x02\xa0\xe1\x4e\x20\xa2\x20\x11\xe5\x81\xe4\x0f\x16\xe5\x09\x17\xe5\x12\x12\x13\x40\xe5\x43\x56\x4a\xe5\x00\xc0\xe5\x05\x00\x65\x46\xe0\x03\xe5\x0a\x46\x36\xe0\x01\xe5\x0a\x26\xe0\x04\xe5\x05\x00\x45\x00\x26\xe0\x04\xe5\x2c\x26\x07\xc6\xe7\x00\x06\x27\xe6\x03\x56\x04\x56\x0d\x05\x06\x20\xe9\x02\xa0\xeb\x02\xa0\xb6\x11\x76\x46\x1b\x00\xe9\x02\xa0\xe5\x1b\x04\xe5\x2d\xc0\x85\x26\xe5\x1a\x06\x05\x80\xe5\x3e\xe0\x02\xe5\x17\x00\x46\x67\x26\x47\x60\x27\x06\xa7\x46\x60\x0f\x40\x36\xe9\x02\xe5\x16\x20\x85\xe0\x03\xe5\x24\x60\xe5\x12\xa0\xe9\x02\x0b\x40\xef\x1a\xe5\x0f\x26\x27\x06\x20\x36\xe5\x2d\x07\x06\x07\xc6\x00\x06\x07\x06\x27\xe6\x00\xa7\xe6\x02\x20\x06\xe9\x02\xa0\xe9\x02\xa0\xd6\x04\xb6\x20\xe6\x06\x08\x26\xe0\x37\x66\x07\xe5\x27\x06\x07\x86\x07\x06\x87\x06\x27\xc5\x60\xe9\x02\xd6\xef\x02\xe6\x01\xef\x01\x40\x26\x07\xe5\x16\x07\x66\x27\x26\x07\x46\x25\xe9\x02\xe5\x24\x06\x07\x26\x47\x06\x07\x46\x27\xe0\x00\x76\xe5\x1c\xe7\x00\xe6\x00\x27\x26\x40\x96\xe9\x02\x40\x45\xe9\x02\xe5\x16\xa4\x36\xe2\x01\xc0\xe1\x23\x20\x41\xf6\x00\xe0\x00\x46\x16\xe6\x05\x07\xc6\x65\x06\xa5\x06\x25\x07\x26\x05\x80\xe2\x24\xe4\x37\xe2\x05\x04\xe2\x1a\xe4\x1d\xe6\x32\x00\x86\xff\x80\x0e\xe2\x00\xff\x5a\xe2\x00\xe1\x00\xa2\x20\xa1\x20\xe2\x00\xe1\x00\xe2\x00\xe1\x00\xa2\x20\xa1\x20\xe2\x00\x00\x01\x00\x01\x00\x01\x00\x3f\xc2\xe1\x00\xe2\x06\x20\xe2\x00\xe3\x00\xe2\x00\xe3\x00\xe2\x00\xe3\x00\x82\x00\x22\x61\x03\x0e\x02\x4e\x42\x00\x22\x61\x03\x4e\x62\x20\x22\x61\x00\x4e\xe2\x00\x81\x4e\x20\x42\x00\x22\x61\x03\x2e\x00\xf7\x03\x9b\xb1\x36\x14\x15\x12\x34\x15\x12\x14\xf6\x00\x18\x19\x9b\x17\xf6\x01\x14\x15\x76\x30\x56\x0c\x12\x13\xf6\x03\x0c\x16\x10\xf6\x02\x17\x9b\x00\xfb\x02\x0b\x04\x20\xab\x4c\x12\x13\x04\xeb\x02\x4c\x12\x13\x00\xe4\x05\x40\xed\x18\xe0\x08\xe6\x05\x68\x06\x48\xe6\x04\xe0\x07\x2f\x01\x6f\x01\x2f\x02\x41\x22\x41\x02\x0f\x01\x2f\x0c\x81\xaf\x01\x0f\x01\x0f\x01\x0f\x61\x0f\x02\x61\x02\x65\x02\x2f\x22\x21\x8c\x3f\x42\x0f\x0c\x2f\x02\x0f\xeb\x08\xea\x1b\x3f\x6a\x0b\x2f\x60\x8c\x8f\x2c\x6f\x0c\x2f\x0c\x2f\x0c\xcf\x0c\xef\x17\x2c\x2f\x0c\x0f\x0c\xef\x17\xec\x80\x84\xef\x00\x12\x13\x12\x13\xef\x0c\x2c\xcf\x12\x13\xef\x49\x0c\xef\x16\xec\x11\xef\x20\xac\xef\x3d\xe0\x11\xef\x03\xe0\x0d\xeb\x34\xef\x46\xeb\x0e\xef\x80\x2f\x0c\xef\x01\x0c\xef\x2e\xec\x00\xef\x67\x0c\xef\x80\x70\x12\x13\x12\x13\x12\x13\x12\x13\x12\x13\x12\x13\x12\x13\xeb\x16\xef\x24\x8c\x12\x13\xec\x17\x12\x13\x12\x13\x12\x13\x12\x13\x12\x13\xec\x08\xef\x80\x78\xec\x7b\x12\x13\x12\x13\x12\x13\x12\x13\x12\x13\x12\x13\x12\x13\x12\x13\x12\x13\x12\x13\x12\x13\xec\x37\x12\x13\x12\x13\xec\x18\x12\x13\xec\x80\x7a\xef\x28\xec\x0d\x2f\xac\xef\x1f\x20\xef\x18\x00\xef\x61\xe1\x27\x00\xe2\x27\x00\x5f\x21\x22\xdf\x41\x02\x3f\x02\x3f\x82\x24\x41\x02\xff\x5a\x02\xaf\x7f\x46\x3f\x80\x76\x0b\x36\xe2\x1e\x00\x02\x80\x02\x20\xe5\x30\xc0\x04\x16\xe0\x06\x06\xe5\x0f\xe0\x01\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xc5\x00\xe6\x18\x36\x14\x15\x14\x15\x56\x14\x15\x16\x14\x15\xf6\x01\x11\x36\x11\x16\x14\x15\x36\x14\x15\x12\x13\x12\x13\x12\x13\x12\x13\x96\x04\xf6\x02\x31\x76\x11\x16\x12\xf6\x05\x2f\x16\xe0\x25\xef\x12\x00\xef\x51\xe0\x04\xef\x80\x4e\xe0\x12\xef\x04\x60\x17\x56\x0f\x04\x05\x0a\x12\x13\x12\x13\x12\x13\x12\x13\x12\x13\x2f\x12\x13\x12\x13\x12\x13\x12\x13\x11\x12\x33\x0f\xea\x01\x66\x27\x11\x84\x2f\x4a\x04\x05\x16\x2f\x00\xe5\x4e\x20\x26\x2e\x24\x05\x11\xe5\x52\x16\x44\x05\x80\xe5\x23\x00\xe5\x56\x00\x2f\x6b\xef\x02\xe5\x18\xef\x1c\xe0\x04\xe5\x08\xef\x17\x00\xeb\x02\xef\x16\xeb\x00\x0f\xeb\x07\xef\x18\xeb\x02\xef\x1f\xeb\x07\xef\x80\xb8\xe5\x99\x38\xef\x38\xe5\xc0\x11\x75\x40\xe5\x0d\x04\xe5\x83\xef\x40\xef\x2f\xe0\x01\xe5\x20\xa4\x36\xe5\x80\x84\x04\x56\xe5\x08\xe9\x02\x25\xe0\x0c\xff\x26\x05\x06\x48\x16\xe6\x02\x16\x04\xff\x14\x24\x26\xe5\x3e\xea\x02\x26\xb6\xe0\x00\xee\x0f\xe4\x01\x2e\xff\x06\x22\xff\x36\x04\xe2\x00\x9f\xff\x02\x04\x2e\x7f\x05\x7f\x22\xff\x0d\x61\x02\x81\x02\xff\x02\x20\x5f\x41\x02\x3f\xe0\x22\x3f\x05\x24\x02\xc5\x06\x45\x06\x65\x06\xe5\x0f\x27\x26\x07\x6f\x06\x40\xab\x2f\x0d\x0f\xa0\xe5\x2c\x76\xe0\x00\x27\xe5\x2a\xe7\x08\x26\xe0\x00\x36\xe9\x02\xa0\xe6\x0a\xa5\x56\x05\x16\x25\x06\xe9\x02\xe5\x14\xe6\x00\x36\xe5\x0f\xe6\x03\x27\xe0\x03\x16\xe5\x15\x40\x46\x07\xe5\x27\x06\x27\x66\x27\x26\x47\xf6\x05\x00\x04\xe9\x02\x60\x36\x85\x06\x04\xe5\x01\xe9\x02\x85\x00\xe5\x21\xa6\x27\x26\x27\x26\xe0\x01\x45\x06\xe5\x00\x06\x07\x20\xe9\x02\x20\x76\xe5\x08\x04\xa5\x4f\x05\x07\x06\x07\xe5\x2a\x06\x05\x46\x25\x26\x85\x26\x05\x06\x05\xe0\x10\x25\x04\x36\xe5\x03\x07\x26\x27\x36\x05\x24\x07\x06\xe0\x02\xa5\x20\xa5\x20\xa5\xe0\x01\xc5\x00\xc5\x00\xe2\x23\x0e\x64\xe2\x01\x04\x2e\x60\xe2\x48\xe5\x1b\x27\x06\x27\x06\x27\x16\x07\x06\x20\xe9\x02\xa0\xe5\xab\x1c\xe0\x04\xe5\x0f\x60\xe5\x29\x60\xfc\x87\x78\xfd\x98\x78\xe5\x80\xe6\x20\xe5\x62\xe0\x1e\xc2\xe0\x04\x82\x80\x05\x06\xe5\x02\x0c\xe5\x05\x00\x85\x00\x05\x00\x25\x00\x25\x00\xe5\x64\xee\x08\xe0\x09\xe5\x80\xe3\x13\x12\xe0\x08\xe5\x38\x20\xe5\x2e\xe0\x20\xe5\x04\x0d\x0f\x20\xe6\x08\xd6\x12\x13\x16\xa0\xe6\x08\x16\x31\x30\x12\x13\x12\x13\x12\x13\x12\x13\x12\x13\x12\x13\x12\x13\x12\x13\x36\x12\x13\x76\x50\x56\x00\x76\x11\x12\x13\x12\x13\x12\x13\x56\x0c\x11\x4c\x00\x16\x0d\x36\x60\x85\x00\xe5\x7f\x20\x1b\x00\x56\x0d\x56\x12\x13\x16\x0c\x16\x11\x36\xe9\x02\x36\x4c\x36\xe1\x12\x12\x16\x13\x0e\x10\x0e\xe2\x12\x12\x0c\x13\x0c\x12\x13\x16\x12\x13\x36\xe5\x02\x04\xe5\x25\x24\xe5\x17\x40\xa5\x20\xa5\x20\xa5\x20\x45\x40\x2d\x0c\x0e\x0f\x2d\x00\x0f\x6c\x2f\xe0\x02\x5b\x2f\x20\xe5\x04\x00\xe5\x12\x00\xe5\x0b\x00\x25\x00\xe5\x07\x20\xe5\x06\xe0\x1a\xe5\x73\x80\x56\x60\xeb\x25\x40\xef\x01\xea\x2d\x6b\xef\x09\x2b\x4f\x00\xef\x05\x40\x0f\xe0\x27\xef\x25\x06\xe0\x7a\xe5\x15\x40\xe5\x29\xe0\x07\x06\xeb\x13\x60\xe5\x18\x6b\xe0\x01\xe5\x0c\x0a\xe5\x00\x0a\x80\xe5\x1e\x86\x80\xe5\x16\x00\x16\xe5\x1c\x60\xe5\x00\x16\x8a\xe0\x22\xe1\x20\xe2\x20\xe5\x46\x20\xe9\x02\xa0\xe1\x1c\x60\xe2\x1c\x60\xe5\x20\xe0\x00\xe5\x2c\xe0\x03\x16\xe0\x80\x08\xe5\x80\xaf\xe0\x01\xe5\x0e\xe0\x02\xe5\x00\xe0\x80\x10\xa5\x20\x05\x00\xe5\x24\x00\x25\x40\x05\x20\xe5\x0f\x00\x16\xeb\x00\xe5\x0f\x2f\xcb\xe5\x17\xe0\x00\xeb\x01\xe0\x28\xe5\x0b\x00\x25\x80\x8b\xe5\x0e\xab\x40\x16\xe5\x12\x80\x16\xe0\x38\xe5\x30\x60\x2b\x25\xeb\x08\x20\xeb\x26\x05\x46\x00\x26\x80\x66\x65\x00\x45\x00\xe5\x15\x20\x46\x60\x06\xeb\x01\xc0\xf6\x01\xc0\xe5\x15\x2b\x16\xe5\x15\x4b\xe0\x18\xe5\x00\x0f\xe5\x14\x26\x60\x8b\xd6\xe0\x01\xe5\x2e\x40\xd6\xe5\x0e\x20\xeb\x00\xe5\x0b\x80\xeb\x00\xe5\x0a\xc0\x76\xe0\x04\xcb\xe0\x48\xe5\x41\xe0\x2f\xe1\x2b\xe0\x05\xe2\x2b\xc0\xab\xe5\x1c\x66\xe0\x00\xe9\x02\xe0\x80\x9e\xeb\x17\x00\xe5\x22\x00\x26\x11\x20\x25\xe0\x46\xe5\x15\xeb\x02\x05\xe0\x00\xe5\x0e\xe6\x03\x6b\x96\xe0\x4e\xe5\x0d\xcb\xe0\x0c\xe5\x0f\xe0\x01\x07\x06\x07\xe5\x2d\xe6\x07\xd6\x60\xeb\x0c\xe9\x02\xe0\x07\x46\x07\xe5\x25\x47\x66\x27\x26\x36\x1b\x76\xe0\x03\x1b\x20\xe5\x11\xc0\xe9\x02\xa0\x46\xe5\x1c\x86\x07\xe6\x00\x00\xe9\x02\x76\x05\x27\x05\xe0\x00\xe5\x1b\x06\x36\x05\xe0\x01\x26\x07\xe5\x28\x47\xe6\x01\x27\x65\x76\x66\x16\x07\x06\xe9\x02\x05\x16\x05\x56\x00\xeb\x0c\xe0\x03\xe5\x0a\x00\xe5\x11\x47\x46\x27\x06\x07\x26\xb6\x06\xe0\x39\xc5\x00\x05\x00\x65\x00\xe5\x07\x00\xe5\x02\x16\xa0\xe5\x27\x06\x47\xe6\x00\x80\xe9\x02\xa0\x26\x27\x00\xe5\x00\x20\x25\x20\xe5\x0e\x00\xc5\x00\x25\x00\x85\x00\x26\x05\x27\x06\x67\x20\x27\x20\x47\x20\x05\xa0\x07\x80\x85\x27\x20\xc6\x40\x86\xe0\x80\x03\xe5\x2d\x47\xe6\x00\x27\x46\x07\x06\x65\x96\xe9\x02\x36\x00\x16\x06\x45\xe0\x16\xe5\x28\x47\xa6\x07\x06\x67\x26\x07\x26\x25\x16\x05\xe0\x00\xe9\x02\xe0\x80\x1e\xe5\x27\x47\x66\x20\x67\x26\x07\x26\xf6\x0f\x65\x26\xe0\x1a\xe5\x28\x47\xe6\x00\x27\x06\x07\x26\x56\x05\xe0\x03\xe9\x02\xa0\xf6\x05\xe0\x0b\xe5\x23\x06\x07\x06\x27\xa6\x07\x06\x05\xc0\xe9\x02\xe0\x2e\xe5\x13\x20\x46\x27\x66\x07\x86\x60\xe9\x02\x2b\x56\x0f\xe0\x80\x38\xe5\x24\x47\xe6\x01\x07\x26\x16\xe0\x5c\xe1\x18\xe2\x18\xe9\x02\xeb\x01\xe0\x04\xe5\x00\x20\x05\x20\xe5\x00\x00\x25\x00\xe5\x10\xa7\x00\x27\x20\x26\x07\x06\x05\x07\x05\x07\x06\x56\xe0\x01\xe9\x02\xe0\x3e\xe5\x00\x20\xe5\x1f\x47\x66\x20\x26\x67\x06\x05\x16\x05\x07\xe0\x13\x05\xe6\x02\xe5\x20\xa6\x07\x05\x66\xf6\x00\x06\xe0\x00\x05\xa6\x27\x46\xe5\x26\xe6\x05\x07\x26\x56\x05\x96\xe0\x15\xe5\x31\xe0\x80\x7f\xe5\x01\x00\xe5\x1d\x07\xc6\x00\xa6\x07\x06\x05\x96\xe0\x02\xe9\x02\xeb\x0b\x40\x36\xe5\x16\x20\xe6\x0e\x00\x07\xc6\x07\x26\x07\x26\xe0\x41\xc5\x00\x25\x00\xe5\x1e\xa6\x40\x06\x00\x26\x00\xc6\x05\x06\xe0\x00\xe9\x02\xa0\xa5\x00\x25\x00\xe5\x18\x87\x00\x26\x00\x27\x06\x07\x06\x05\xc0\xe9\x02\xe0\x80\xae\xe5\x0b\x26\x27\x36\xe0\x80\x2f\x05\xe0\x07\xeb\x0d\xef\x00\x6d\xef\x09\xe0\x05\x16\xe5\x83\x12\xe0\x5e\xea\x67\x00\x96\xe0\x03\xe5\x80\x3c\xe0\x8a\x34\xe5\x83\xa7\x00\xfb\x01\xe0\x8f\x3f\xe5\x81\xbf\xe0\xa1\x31\xe5\x81\xb1\xc0\xe5\x17\x00\xe9\x02\x60\x36\xe0\x58\xe5\x16\x20\x86\x16\xe0\x02\xe5\x28\xc6\x96\x6f\x64\x16\x0f\xe0\x02\xe9\x02\x00\xcb\x00\xe5\x0d\x80\xe5\x0b\xe0\x82\x28\xe1\x18\xe2\x18\xeb\x0f\x76\xe0\x5d\xe5\x43\x60\x06\x05\xe7\x2f\xc0\x66\xe4\x05\xe0\x38\x24\x16\x04\x06\xe0\x03\x27\xe0\x06\xe5\x97\x70\xe0\x00\xe5\x84\x4e\xe0\x22\xe5\x01\xe0\xa2\x6f\xe5\x80\x97\xe0\x29\x45\xe0\x09\x65\xe0\x00\xe5\x81\x04\xe0\x88\x7c\xe5\x63\x80\xe5\x05\x40\xe5\x01\xc0\xe5\x02\x20\x0f\x26\x16\x7b\xe0\x92\xd4\xef\x80\x6e\xe0\x02\xef\x1f\x20\xef\x34\x27\x46\x4f\xa7\xfb\x00\xe6\x00\x2f\xc6\xef\x16\x66\xef\x33\xe0\x0f\xef\x3a\x46\x0f\xe0\x80\x12\xeb\x0c\xe0\x04\xef\x4f\xe0\x01\xeb\x11\xe0\x7f\xe1\x12\xe2\x12\xe1\x12\xc2\x00\xe2\x0a\xe1\x12\xe2\x12\x01\x00\x21\x20\x01\x20\x21\x20\x61\x00\xe1\x00\x62\x00\x02\x00\xc2\x00\xe2\x03\xe1\x12\xe2\x12\x21\x00\x61\x20\xe1\x00\x00\xc1\x00\xe2\x12\x21\x00\x61\x00\x81\x00\x01\x40\xc1\x00\xe2\x12\xe1\x12\xe2\x12\xe1\x12\xe2\x12\xe1\x12\xe2\x12\xe1\x12\xe2\x12\xe1\x12\xe2\x12\xe1\x12\xe2\x14\x20\xe1\x11\x0c\xe2\x11\x0c\xa2\xe1\x11\x0c\xe2\x11\x0c\xa2\xe1\x11\x0c\xe2\x11\x0c\xa2\xe1\x11\x0c\xe2\x11\x0c\xa2\xe1\x11\x0c\xe2\x11\x0c\xa2\x3f\x20\xe9\x2a\xef\x81\x78\xe6\x2f\x6f\xe6\x2a\xef\x00\x06\xef\x06\x06\x2f\x96\xe0\x07\x86\x00\xe6\x07\xe0\x84\xc8\xc6\x00\xe6\x09\x20\xc6\x00\x26\x00\x86\xe0\x80\x4d\xe5\x25\x40\xc6\xc4\x20\xe9\x02\x60\x05\x0f\xe0\x80\xe8\xe5\x24\x66\xe9\x02\x80\x0d\xe0\x84\x78\xe5\x80\x3d\x20\xeb\x01\xc6\xe0\x21\xe1\x1a\xe2\x1a\xc6\x04\x60\xe9\x02\x60\x36\xe0\x82\x89\xeb\x33\x0f\x4b\x0d\x6b\xe0\x44\xeb\x25\x0f\xeb\x07\xe0\x80\x3a\x65\x00\xe5\x13\x00\x25\x00\x05\x20\x05\x00\xe5\x02\x00\x65\x00\x05\x00\x05\xa0\x05\x60\x05\x00\x05\x00\x05\x00\x45\x00\x25\x00\x05\x20\x05\x00\x05\x00\x05\x00\x05\x00\x05\x00\x25\x00\x05\x20\x65\x00\xc5\x00\x65\x00\x65\x00\x05\x00\xe5\x02\x00\xe5\x09\x80\x45\x00\x85\x00\xe5\x09\xe0\x2c\x2c\xe0\x80\x86\xef\x24\x60\xef\x5c\xe0\x04\xef\x07\x20\xef\x07\x00\xef\x07\x00\xef\x1d\xe0\x02\xeb\x05\xef\x80\x19\xe0\x30\xef\x15\xe0\x05\xef\x24\x60\xef\x01\xc0\x2f\xe0\x06\xaf\xe0\x80\x12\xef\x80\x73\x8e\xef\x82\x50\xe0\x00\xef\x05\x40\xef\x05\x40\xef\x6c\xe0\x04\xef\x51\xc0\xef\x04\xe0\x0c\xef\x04\x60\xef\x30\xe0\x00\xef\x02\xa0\xef\x20\xe0\x00\xef\x16\x20\x2f\xe0\x46\xef\x71\x00\xef\x4a\x00\xef\x7f\xe0\x04\xef\x06\x20\x8f\x40\x4f\x80\xcf\xe0\x01\xef\x11\xc0\xcf\xe0\x01\x4f\xe0\x05\xcf\xe0\x21\xef\x80\x0b\x00\xef\x2f\xe0\x1d\xe9\x02\xe0\x83\x7e\xe5\xc0\x66\x56\xe0\x1a\xe5\x8f\xad\xe0\x03\xe5\x80\x56\x20\xe5\x95\xfa\xe0\x06\xe5\x9c\xa9\xe0\x8b\x97\xe5\x81\x96\xe0\x85\x5a\xe5\x92\xc3\xe0\xca\xac\x2e\x1b\xe0\x16\xfb\x58\xe0\x78\xe6\x80\x68\xe0\xc0\xbd\x88\xfd\xc0\xbf\x76\x20\xfd\xc0\xbf\x76\x20\x00\x00\x41\x53\x43\x49\x49\x5f\x48\x65\x78\x5f\x44\x69\x67\x69\x74\x2c\x41\x48\x65\x78\x00\x42\x69\x64\x69\x5f\x43\x6f\x6e\x74\x72\x6f\x6c\x2c\x42\x69\x64\x69\x5f\x43\x00\x44\x61\x73\x68\x00\x44\x65\x70\x72\x65\x63\x61\x74\x65\x64\x2c\x44\x65\x70\x00\x44\x69\x61\x63\x72\x69\x74\x69\x63\x2c\x44\x69\x61\x00\x45\x78\x74\x65\x6e\x64\x65\x72\x2c\x45\x78\x74\x00\x48\x65\x78\x5f\x44\x69\x67\x69\x74\x2c\x48\x65\x78\x00\x49\x44\x53\x5f\x42\x69\x6e\x61\x72\x79\x5f\x4f\x70\x65\x72\x61\x74\x6f\x72\x2c\x49\x44\x53\x42\x00\x49\x44\x53\x5f\x54\x72\x69\x6e\x61\x72\x79\x5f\x4f\x70\x65\x72\x61\x74\x6f\x72\x2c\x49\x44\x53\x54\x00\x49\x64\x65\x6f\x67\x72\x61\x70\x68\x69\x63\x2c\x49\x64\x65\x6f\x00\x4a\x6f\x69\x6e\x5f\x43\x6f\x6e\x74\x72\x6f\x6c\x2c\x4a\x6f\x69\x6e\x5f\x43\x00\x4c\x6f\x67\x69\x63\x61\x6c\x5f\x4f\x72\x64\x65\x72\x5f\x45\x78\x63\x65\x70\x74\x69\x6f\x6e\x2c\x4c\x4f\x45\x00\x4e\x6f\x6e\x63\x68\x61\x72\x61\x63\x74\x65\x72\x5f\x43\x6f\x64\x65\x5f\x50\x6f\x69\x6e\x74\x2c\x4e\x43\x68\x61\x72\x00\x50\x61\x74\x74\x65\x72\x6e\x5f\x53\x79\x6e\x74\x61\x78\x2c\x50\x61\x74\x5f\x53\x79\x6e\x00\x50\x61\x74\x74\x65\x72\x6e\x5f\x57\x68\x69\x74\x65\x5f\x53\x70\x61\x63\x65\x2c\x50\x61\x74\x5f\x57\x53\x00\x51\x75\x6f\x74\x61\x74\x69\x6f\x6e\x5f\x4d\x61\x72\x6b\x2c\x51\x4d\x61\x72\x6b\x00\x52\x61\x64\x69\x63\x61\x6c\x00\x52\x65\x67\x69\x6f\x6e\x61\x6c\x5f\x49\x6e\x64\x69\x63\x61\x74\x6f\x72\x2c\x52\x49\x00\x53\x65\x6e\x74\x65\x6e\x63\x65\x5f\x54\x65\x72\x6d\x69\x6e\x61\x6c\x2c\x53\x54\x65\x72\x6d\x00\x53\x6f\x66\x74\x5f\x44\x6f\x74\x74\x65\x64\x2c\x53\x44\x00\x54\x65\x72\x6d\x69\x6e\x61\x6c\x5f\x50\x75\x6e\x63\x74\x75\x61\x74\x69\x6f\x6e\x2c\x54\x65\x72\x6d\x00\x55\x6e\x69\x66\x69\x65\x64\x5f\x49\x64\x65\x6f\x67\x72\x61\x70\x68\x2c\x55\x49\x64\x65\x6f\x00\x56\x61\x72\x69\x61\x74\x69\x6f\x6e\x5f\x53\x65\x6c\x65\x63\x74\x6f\x72\x2c\x56\x53\x00\x57\x68\x69\x74\x65\x5f\x53\x70\x61\x63\x65\x2c\x73\x70\x61\x63\x65\x00\x42\x69\x64\x69\x5f\x4d\x69\x72\x72\x6f\x72\x65\x64\x2c\x42\x69\x64\x69\x5f\x4d\x00\x45\x6d\x6f\x6a\x69\x00\x45\x6d\x6f\x6a\x69\x5f\x43\x6f\x6d\x70\x6f\x6e\x65\x6e\x74\x2c\x45\x43\x6f\x6d\x70\x00\x45\x6d\x6f\x6a\x69\x5f\x4d\x6f\x64\x69\x66\x69\x65\x72\x2c\x45\x4d\x6f\x64\x00\x45\x6d\x6f\x6a\x69\x5f\x4d\x6f\x64\x69\x66\x69\x65\x72\x5f\x42\x61\x73\x65\x2c\x45\x42\x61\x73\x65\x00\x45\x6d\x6f\x6a\x69\x5f\x50\x72\x65\x73\x65\x6e\x74\x61\x74\x69\x6f\x6e\x2c\x45\x50\x72\x65\x73\x00\x45\x78\x74\x65\x6e\x64\x65\x64\x5f\x50\x69\x63\x74\x6f\x67\x72\x61\x70\x68\x69\x63\x2c\x45\x78\x74\x50\x69\x63\x74\x00\x44\x65\x66\x61\x75\x6c\x74\x5f\x49\x67\x6e\x6f\x72\x61\x62\x6c\x65\x5f\x43\x6f\x64\x65\x5f\x50\x6f\x69\x6e\x74\x2c\x44\x49\x00\x49\x44\x5f\x53\x74\x61\x72\x74\x2c\x49\x44\x53\x00\x43\x61\x73\x65\x5f\x49\x67\x6e\x6f\x72\x61\x62\x6c\x65\x2c\x43\x49\x00\x41\x53\x43\x49\x49\x00\x41\x6c\x70\x68\x61\x62\x65\x74\x69\x63\x2c\x41\x6c\x70\x68\x61\x00\x41\x6e\x79\x00\x41\x73\x73\x69\x67\x6e\x65\x64\x00\x43\x61\x73\x65\x64\x00\x43\x68\x61\x6e\x67\x65\x73\x5f\x57\x68\x65\x6e\x5f\x43\x61\x73\x65\x66\x6f\x6c\x64\x65\x64\x2c\x43\x57\x43\x46\x00\x43\x68\x61\x6e\x67\x65\x73\x5f\x57\x68\x65\x6e\x5f\x43\x61\x73\x65\x6d\x61\x70\x70\x65\x64\x2c\x43\x57\x43\x4d\x00\x43\x68\x61\x6e\x67\x65\x73\x5f\x57\x68\x65\x6e\x5f\x4c\x6f\x77\x65\x72\x63\x61\x73\x65\x64\x2c\x43\x57\x4c\x00\x43\x68\x61\x6e\x67\x65\x73\x5f\x57\x68\x65\x6e\x5f\x4e\x46\x4b\x43\x5f\x43\x61\x73\x65\x66\x6f\x6c\x64\x65\x64\x2c\x43\x57\x4b\x43\x46\x00\x43\x68\x61\x6e\x67\x65\x73\x5f\x57\x68\x65\x6e\x5f\x54\x69\x74\x6c\x65\x63\x61\x73\x65\x64\x2c\x43\x57\x54\x00\x43\x68\x61\x6e\x67\x65\x73\x5f\x57\x68\x65\x6e\x5f\x55\x70\x70\x65\x72\x63\x61\x73\x65\x64\x2c\x43\x57\x55\x00\x47\x72\x61\x70\x68\x65\x6d\x65\x5f\x42\x61\x73\x65\x2c\x47\x72\x5f\x42\x61\x73\x65\x00\x47\x72\x61\x70\x68\x65\x6d\x65\x5f\x45\x78\x74\x65\x6e\x64\x2c\x47\x72\x5f\x45\x78\x74\x00\x49\x44\x5f\x43\x6f\x6e\x74\x69\x6e\x75\x65\x2c\x49\x44\x43\x00\x4c\x6f\x77\x65\x72\x63\x61\x73\x65\x2c\x4c\x6f\x77\x65\x72\x00\x4d\x61\x74\x68\x00\x55\x70\x70\x65\x72\x63\x61\x73\x65\x2c\x55\x70\x70\x65\x72\x00\x58\x49\x44\x5f\x43\x6f\x6e\x74\x69\x6e\x75\x65\x2c\x58\x49\x44\x43\x00\x58\x49\x44\x5f\x53\x74\x61\x72\x74\x2c\x58\x49\x44\x53\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x51\x01\x00\x40\x51\x01\x00\x10\x52\x01\x00\xb0\x53\x01\x00\xe3\x53\x01\x00\x00\x54\x01\x00\x50\x54\x01\x00\x70\x54\x01\x00\x7b\x54\x01\x00\x90\x54\x01\x00\xd0\xe1\x00\x00\xb0\x54\x01\x00\xd0\x54\x01\x00\xf0\x54\x01\x00\x10\x55\x01\x00\x40\x55\x01\x00\xf9\x56\x01\x00\xfe\x56\x01\x00\x10\x57\x01\x00\x50\x57\x01\x00\x70\x57\x01\x00\xe0\x58\x01\x00\x39\x59\x01\x00\x45\x59\x01\x00\x4a\x59\x01\x00\x50\x59\x01\x00\x92\x59\x01\x00\x96\x59\x01\x00\xb0\x59\x01\x00\x00\x5a\x01\x00\x3a\x5a\x01\x00\x50\x5a\x01\x00\x6f\x5a\x01\x00\x78\x5a\x01\x00\x80\x5a\x01\x00\x40\x5b\x01\x00\x90\x5b\x01\x00\x90\x5c\x01\x00\xba\x5c\x01\x00\xd0\x5c\x01\x00\xf0\x5c\x01\x00\xa0\x5d\x01\x00\x90\x5e\x01\x00\xac\x5e\x01\x00\xb0\x5e\x01\x00\x00\x5f\x01\x00\x90\x5f\x01\x00\x30\x60\x01\x00\x40\xdd\x00\x00\x30\xda\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1c\x00\xc8\x00\x9b\x01\x33\x00\x0f\x00\x41\x00\x20\x00\x0b\x00\x0c\x00\x11\x00\x72\x02\x1f\x00\x17\x00\x16\x00\x21\x00\xb9\x01\x05\x00\x0a\x00\x35\x00\x17\x00\x66\x01\x59\x00\x0c\x00\x05\x00\x04\x00\x42\x00\x04\x00\x0f\x00\x47\x00\x3a\x00\x0b\x00\x1f\x00\x09\x00\x04\x00\xbc\x00\x47\x00\xf1\x00\x2a\x00\x0c\x00\x16\x00\xab\x00\xee\x00\x1c\x00\x04\x00\x42\x00\x90\x00\x9c\x00\x33\x00\x15\x04\xb4\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xac\x80\xfe\x80\x44\xdb\x80\x52\x7a\x80\x48\x08\x81\x4e\x04\x80\x42\xe2\x80\x60\xcd\x66\x80\x40\xa8\x80\xd6\x80\x00\x00\x00\x00\xdd\x80\x43\x70\x11\x80\x99\x09\x81\x5c\x1f\x80\x9a\x82\x8a\x80\x9f\x83\x97\x81\x8d\x81\xc0\x8c\x18\x11\x1c\x91\x03\x01\x89\x00\x14\x28\x11\x09\x02\x05\x13\x24\xca\x21\x18\x08\x08\x00\x21\x0b\x0b\x91\x09\x00\x06\x00\x29\x41\x21\x83\x40\xa7\x08\x80\x97\x80\x90\x80\x41\xbc\x81\x8b\x88\x24\x21\x09\x14\x8d\x00\x01\x85\x97\x81\xb8\x00\x80\x9c\x83\x88\x81\x41\x55\x81\x9e\x89\x41\x92\x95\xbe\x83\x9f\x81\x60\xd4\x62\x00\x03\x80\x40\xd2\x00\x80\x60\xd4\xc0\xd4\x80\xc6\x01\x08\x09\x0b\x80\x8b\x00\x06\x80\xc0\x03\x0f\x06\x80\x9b\x03\x04\x00\x16\x80\x41\x53\x81\x98\x80\x98\x80\x9e\x80\x98\x80\x9e\x80\x98\x80\x9e\x80\x98\x80\x9e\x80\x98\x07\x81\xb1\x55\xff\x18\x9a\x01\x00\x08\x80\x89\x03\x00\x00\x28\x18\x00\x00\x02\x01\x00\x08\x00\x00\x00\x00\x01\x00\x0b\x06\x03\x03\x00\x80\x89\x80\x90\x22\x04\x80\x90\x00\x00\x00\x00\x00\x00\x00\x00\x43\x44\x80\x42\x69\x8d\x00\x01\x01\x00\xc7\x8a\xaf\x8c\x06\x8f\x80\xe4\x33\x19\x0b\x80\xa2\x80\x9d\x8f\xe5\x8a\xe4\x0a\x88\x02\x03\x40\xa6\x8b\x16\x85\x93\xb5\x09\x8e\x01\x22\x89\x81\x9c\x82\xb9\x31\x09\x81\x89\x80\x89\x81\x9c\x82\xb9\x23\x09\x0b\x80\x9d\x0a\x80\x8a\x82\xb9\x38\x10\x81\x94\x81\x95\x13\x82\xb9\x31\x09\x81\x88\x81\x89\x81\x9d\x80\xba\x22\x10\x82\x89\x80\xa7\x83\xb9\x30\x10\x17\x81\x8a\x81\x9c\x82\xb9\x30\x10\x17\x81\x8a\x81\x9b\x83\xb9\x30\x10\x82\x89\x80\x89\x81\x9c\x82\xca\x28\x00\x87\x91\x81\xbc\x01\x86\x91\x80\xe2\x01\x28\x81\x8f\x80\x40\xa2\x90\x8a\x8a\x80\xa3\xed\x8b\x00\x0b\x96\x1b\x10\x11\x32\x83\x8c\x8b\x00\x89\x83\x46\x73\x81\x9d\x81\x9d\x81\x9d\x81\xc1\x92\x40\xbb\x81\xa1\x80\xf5\x8b\x83\x88\x40\xdd\x84\xb8\x89\x81\x93\xc9\x81\xbe\x84\xaf\x8e\xbb\x82\x9d\x88\x09\xb8\x8a\xb1\x92\x41\xaf\x8d\x46\xc0\xb3\x48\xf5\x9f\x60\x78\x73\x87\xa1\x81\x41\x61\x07\x80\x96\x84\xd7\x81\xb1\x8f\x00\xb8\x80\xa5\x84\x9b\x8b\xac\x83\xaf\x8b\xa4\x80\xc2\x8d\x8b\x07\x81\xac\x82\xb1\x00\x11\x0c\x80\xab\x24\x80\x40\xec\x87\x60\x4f\x32\x80\x48\x56\x84\x46\x85\x10\x0c\x83\x43\x13\x83\x41\x82\x81\x41\x52\x82\xb4\x8d\xbb\x80\xac\x88\xc6\x82\xa3\x8b\x91\x81\xb8\x82\xaf\x8c\x8d\x81\xdb\x88\x08\x28\x40\x9f\x89\x96\x83\xb9\x31\x09\x81\x89\x80\x89\x81\x40\xd0\x8c\x02\xe9\x91\x40\xec\x31\x86\x9c\x81\xd1\x8e\x00\xe9\x8a\xe6\x8d\x41\x00\x8c\x40\xf6\x28\x09\x0a\x00\x80\x40\x8d\x31\x2b\x80\x9b\x89\xa9\x20\x83\x91\x8a\xad\x8d\x41\x96\x38\x86\xd2\x95\x80\x8d\xf9\x2a\x00\x08\x10\x02\x80\xc1\x20\x08\x83\x41\x5b\x83\x60\x50\x57\x00\xb6\x33\xdc\x81\x60\x4c\xab\x80\x60\x23\x60\x30\x90\x0e\x01\x04\x49\x1b\x80\x47\xe7\x99\x85\x99\x85\x99\x00\x00\x00\x00\x00\x40\xa9\x80\x8e\x80\x41\xf4\x88\x31\x9d\x84\xdf\x80\xb3\x80\x59\xb0\xbe\x8c\x80\xa1\xa4\x42\xb0\x80\x8c\x80\x8f\x8c\x40\xd2\x8f\x43\x4f\x99\x47\x91\x81\x60\x7a\x1d\x81\x40\xd1\x80\x40\x86\x81\x43\x61\x83\x60\x21\x5f\x8f\x43\x45\x99\x61\xcc\x5f\x99\x85\x99\x85\x99\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x49\xbd\x80\x97\x80\x41\x65\x80\x97\x80\xe5\x80\x97\x80\x40\xe9\x80\x91\x81\xe6\x80\x97\x80\xf6\x80\x8e\x80\x4d\x54\x80\x44\xd5\x80\x50\x20\x81\x60\xcf\x6d\x81\x53\x9d\x80\x97\x80\x41\x57\x80\x8b\x80\x40\xf0\x80\x43\x7f\x80\x60\xb8\x33\x07\x84\x6c\x2e\xac\xdf\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x4e\x80\x4e\x0e\x81\x46\x52\x81\x48\xae\x80\x50\xfd\x80\x60\xce\x3a\x80\xce\x88\x6d\x00\x06\x00\x9d\xdf\xff\x40\xef\x4e\x0f\x58\x84\x81\x48\x90\x80\x94\x80\x4f\x6b\x81\x40\xb6\x80\x42\xce\x80\x4f\xe0\x88\x46\x67\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\xff\x85\x40\xd6\x80\xb0\x80\x41\xd1\x80\x61\x07\xd9\x80\x8e\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x43\x79\x80\x4a\xb7\x80\xfe\x80\x60\x21\xe6\x81\x60\xcb\xc0\x85\x41\x95\x81\xf3\x00\x00\x00\x00\x00\x00\x00\x80\x41\x1e\x81\x00\x43\x79\x80\x60\x2d\x1f\x81\x60\xcb\xc0\x85\x41\x95\x81\xf3\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\xc3\x08\x08\x81\xa4\x81\x4e\xdc\xaa\x0a\x4e\x87\x3f\x3f\x87\x8b\x80\x8e\x80\xae\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xde\x80\xcf\x80\x97\x80\x44\x3c\x80\x59\x11\x80\x40\xe4\x3f\x3f\x87\x89\x11\x05\x02\x11\x80\xa9\x11\x80\x60\xdb\x07\x86\x8b\x84\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x9f\x06\x00\x01\x00\x01\x12\x10\x82\x9f\x80\xcf\x01\x80\x8b\x07\x80\xfb\x01\x01\x80\xa5\x80\x40\xbb\x88\x9e\x29\x84\xda\x08\x81\x89\x80\xa3\x04\x02\x04\x08\x80\xc9\x82\x9c\x80\x41\x93\x80\x40\x93\x80\xd7\x83\x42\xde\x87\xfb\x08\x80\xd2\x01\x80\xa1\x11\x80\x40\xfc\x81\x42\xd4\x80\xfe\x80\xa7\x81\xad\x80\xb5\x80\x88\x03\x03\x03\x80\x8b\x80\x88\x00\x26\x80\x90\x80\x88\x03\x03\x03\x80\x8b\x80\x41\x41\x80\xe1\x81\x46\x52\x81\xd4\x83\x45\x1c\x10\x8a\x80\x91\x80\x9b\x8c\x80\xa1\xa4\x40\xd9\x80\x40\xd5\x00\x00\x00\x00\x00\x00\x01\x3f\x3f\x87\x89\x11\x04\x00\x29\x04\x12\x80\x88\x12\x80\x88\x11\x11\x04\x08\x8f\x00\x20\x8b\x12\x2a\x08\x0b\x00\x07\x82\x8c\x06\x92\x81\x9a\x80\x8c\x8a\x80\xd6\x18\x10\x8a\x01\x0c\x0a\x00\x10\x11\x02\x06\x05\x1c\x85\x8f\x8f\x8f\x88\x80\x40\xa1\x08\x81\x40\xf7\x81\x41\x34\xd5\x99\x9a\x45\x20\x80\xe6\x82\xe4\x80\x41\x9e\x81\x40\xf0\x80\x41\x2e\x80\xd2\x80\x8b\x40\xd5\xa9\x80\xb4\x00\x82\xdf\x09\x80\xde\x80\xb0\xdd\x82\x8d\xdf\x9e\x80\xa7\x87\xae\x80\x41\x7f\x60\x72\x9b\x81\x40\xd1\x80\x40\x86\x81\x43\x61\x83\x88\x80\x60\x4d\x95\x41\x0d\x08\x00\x81\x89\x00\x00\x09\x82\xc3\x81\xe9\xa5\x86\x8b\x24\x00\x97\x04\x00\x01\x01\x80\xeb\xa0\x41\x6a\x91\xbf\x81\xb5\xa7\x8c\x82\x99\x95\x94\x81\x8b\x80\x92\x03\x1a\x00\x80\x40\x86\x08\x80\x9f\x99\x40\x83\x15\x0d\x0d\x0a\x16\x06\x80\x88\x60\xbc\xa6\x83\x54\xb9\x86\x8d\x87\xbf\x85\x42\x3e\xd4\x80\xc6\x01\x08\x09\x0b\x80\x8b\x00\x06\x80\xc0\x03\x0f\x06\x80\x9b\x03\x04\x00\x16\x80\x41\x53\x81\x41\x23\x81\xb1\x55\xff\x18\x9a\x01\x00\x08\x80\x89\x03\x00\x00\x28\x18\x00\x00\x02\x01\x00\x08\x00\x00\x00\x00\x01\x00\x0b\x06\x03\x03\x00\x80\x89\x80\x90\x22\x04\x80\x90\x42\x43\x8a\x84\x9e\x80\x9f\x99\x82\xa2\x80\xee\x82\x8c\xab\x83\x88\x31\x49\x9d\x89\x60\xfc\x05\x42\x1d\x6b\x05\xe1\x4f\xff\xaf\x89\x35\x99\x85\x46\x1b\x80\x59\xf0\x81\x99\x84\xb6\x83\x00\x00\x00\x00\x00\x00\x00\x00\xac\x80\x45\x5b\x80\xb2\x80\x4e\x40\x80\x44\x04\x80\x48\x08\x85\xbc\x80\xa6\x80\x8e\x80\x41\x85\x80\x4c\x03\x01\x80\x9e\x0b\x80\x41\xda\x80\x92\x80\xee\x80\x60\xcd\x8f\x81\xa4\x80\x89\x80\x40\xa8\x80\x4f\x9e\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x41\x48\x80\x45\x28\x80\x49\x02\x00\x80\x48\x28\x81\x48\xc4\x85\x42\xb8\x81\x6d\xdc\xd5\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x00\x80\xc6\x05\x03\x01\x81\x41\xf6\x40\x9e\x07\x25\x90\x0b\x80\x88\x81\x40\xfc\x84\x40\xd0\x80\xb6\x90\x80\x9a\x00\x01\x00\x40\x85\x3b\x81\x40\x85\x0b\x0a\x82\xc2\x9a\xda\x8a\xb9\x8a\xa1\x81\x40\xc8\x9b\xbc\x80\x8f\x02\x83\x9b\x80\xc9\x80\x8f\x80\xed\x80\x8f\x80\xed\x80\x8f\x80\xae\x82\xbb\x80\x8f\x06\x80\xf6\x80\xfe\x80\xed\x80\x8f\x80\xec\x81\x8f\x80\xfb\x80\xfb\x28\x80\xea\x80\x8c\x84\xca\x81\x9a\x00\x00\x03\x81\xc1\x10\x81\xbd\x80\xef\x00\x81\xa7\x0b\x84\x98\x30\x80\x89\x81\x42\xc0\x82\x44\x68\x8a\x88\x80\x41\x5a\x82\x41\x38\x39\x80\xaf\x8d\xf5\x80\x8e\x80\xa5\x88\xb5\x81\x40\x89\x81\xbf\x85\xd1\x98\x18\x28\x0a\xb1\xbe\xd8\x8b\xa4\x22\x82\x41\xbc\x00\x82\x8a\x82\x8c\x82\x8c\x82\x8c\x81\x4c\xef\x82\x41\x3c\x80\x41\xf9\x85\xe8\x83\xde\x80\x60\x75\x71\x80\x8b\x08\x80\x9b\x81\xd1\x81\x8d\xa1\xe5\x82\xec\x81\x40\xc9\x80\x9a\x91\xb8\x83\xa3\x80\xde\x80\x8b\x80\xa3\x80\x40\x94\x82\xc0\x83\xb2\x80\xe3\x84\x88\x82\xff\x81\x60\x4f\x2f\x80\x43\x00\x8f\x41\x0d\x00\x80\xae\x80\xac\x81\xc2\x80\x42\xfb\x80\x48\x03\x81\x42\x3a\x85\x42\x1d\x8a\x41\x67\x81\xf7\x81\xbd\x80\xcb\x80\x88\x82\xe7\x81\x40\xb1\x81\xd0\x80\x8f\x80\x97\x32\x84\x40\xcc\x02\x80\xfa\x81\x40\xfa\x81\xfd\x80\xf5\x81\xf2\x80\x41\x0c\x81\x41\x01\x0b\x80\x40\x9b\x80\xd2\x80\x91\x80\xd0\x80\x41\xa4\x80\x41\x01\x00\x81\xd0\x80\x60\x4d\x57\x84\xba\x86\x44\x57\x90\xcf\x81\x60\x61\x74\x12\x2f\x39\x86\x9d\x83\x4f\x81\x86\x41\xb4\x83\x45\xdf\x86\xec\x10\x82\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\xb6\x80\x42\x17\x81\x43\x6d\x80\x41\xb8\x80\x43\x59\x80\x42\xef\x80\xfe\x80\x49\x42\x80\xb7\x80\x42\x62\x80\x41\x8d\x80\xc3\x80\x53\x88\x80\xaa\x84\xe6\x81\xdc\x82\x60\x6f\x15\x80\x45\xf5\x80\x43\xc1\x80\x95\x80\x40\x88\x80\xeb\x80\x94\x81\x60\x54\x7a\x80\x53\xeb\x80\x42\x67\x82\x44\xce\x80\x60\x50\xa8\x81\x44\x9b\x08\x80\x60\x71\x57\x81\x48\x05\x82\xaf\x89\x35\x99\x85\x60\xfe\xa8\x89\x35\x99\x85\x60\x2f\xef\x09\x87\x60\x2f\xf1\x81\x00\x00\x60\x30\x05\x81\x98\x88\x8d\x82\x43\xc4\x59\xbf\xbf\x60\x51\xfc\x60\x59\x02\x41\x6d\x81\xe9\x60\x75\x09\x80\x9a\x57\xf7\x87\x44\xd5\xa9\x88\x60\x24\x66\x41\x8b\x60\x4d\x03\x60\xa6\xdd\xa1\x50\x34\x8a\x40\xdd\x81\x56\x81\x8d\x5d\x30\x4c\x1e\x42\x1d\x45\xe1\x53\x4a\x60\x20\x0b\x81\x4e\x3f\x84\xfa\x84\x4a\xef\x11\x80\x60\x90\xf9\x09\x00\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\xfd\xcf\x9f\x42\x0d\x81\x60\xff\xfd\x81\x60\xff\xfd\x81\x60\xff\xfd\x81\x60\xff\xfd\x81\x60\xff\xfd\x81\x60\xff\xfd\x81\x60\xff\xfd\x81\x60\xff\xfd\x81\x60\xff\xfd\x81\x60\xff\xfd\x81\x60\xff\xfd\x81\x60\xff\xfd\x81\x60\xff\xfd\x81\x60\xff\xfd\x81\x60\xff\xfd\x81\x60\xff\xfd\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x8e\x89\x86\x99\x18\x80\x99\x83\xa1\x30\x00\x08\x00\x0b\x03\x02\x80\x96\x80\x9e\x80\x5f\x17\x97\x87\x8e\x81\x92\x80\x89\x41\x30\x42\xcf\x40\x9f\x42\x75\x9d\x44\x6b\x41\xff\xff\x41\x80\x13\x98\x8e\x80\x60\xcd\x0c\x81\x41\x04\x81\x88\x84\x91\x80\xe3\x80\x5f\x87\x81\x97\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa1\x03\x80\x40\x82\x80\x8e\x80\x5f\x5b\x87\x98\x81\x4e\x06\x80\x41\xc8\x83\x8c\x82\x60\xce\x20\x83\x40\xbc\x03\x80\xd9\x81\x60\x2e\x7f\x99\x80\xd8\x8b\x40\xd5\x61\xf1\xe5\x99\x00\x00\x00\x00\xa0\x80\x8b\x80\x8f\x80\x45\x48\x80\x40\x93\x81\x40\xb3\x80\xaa\x82\x40\xf5\x80\xbc\x00\x02\x81\x41\x24\x81\x46\xe3\x81\x43\x15\x03\x81\x43\x04\x80\x40\xc5\x81\x40\xcb\x04\x80\x41\x39\x81\x41\x61\x83\x40\xad\x09\x81\x40\xda\x81\xc0\x81\x43\xbb\x81\x88\x82\x4d\xe3\x80\x8c\x80\x41\xc4\x80\x60\x74\xfb\x80\x41\x0d\x81\x40\xe2\x02\x80\x41\x7d\x81\xd5\x81\xde\x80\x40\x97\x81\x40\x92\x82\x40\x8f\x81\x40\xf8\x80\x60\x52\x65\x02\x81\x40\xa8\x80\x8b\x80\x8f\x80\xc0\x80\x4a\xf3\x81\x44\xfc\x84\x40\xec\x81\xf4\x83\xfe\x82\x40\x80\x0d\x80\x8f\x81\xd7\x08\x81\xeb\x80\x41\xa0\x81\x41\x74\x0c\x8e\xe8\x81\x40\xf8\x82\x42\x04\x00\x80\x40\xfa\x81\xd6\x81\x41\xa3\x81\x42\xb3\x81\x60\x4b\x74\x81\x40\x84\x80\xc0\x81\x8a\x80\x43\x52\x80\x60\x4e\x05\x80\x5d\xe7\x80\x00\x00\x00\x00\xe8\x81\x40\xc3\x80\x41\x18\x80\x9d\x80\xb3\x80\x93\x80\x41\x3f\x80\xe1\x00\x80\x59\x08\x80\xb2\x80\x8c\x02\x80\x40\x83\x80\x40\x9c\x80\x41\xa4\x80\x40\xd5\x81\x4b\x31\x80\x61\xa7\xa4\x81\xb1\x81\xb1\x81\xb1\x81\xb1\x81\xb1\x81\xb1\x81\xb1\x81\xb1\x81\xb1\x81\xb1\x81\xb1\x81\xb1\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x80\x89\x00\x80\x8a\x0a\x80\x43\x3d\x07\x80\x42\x00\x80\xb8\x80\xc7\x80\x8d\x01\x81\x40\xb3\x80\xaa\x8a\x00\x40\xea\x81\xb5\x8e\x9e\x80\x41\x04\x81\x44\xf3\x81\x40\xab\x03\x85\x41\x36\x81\x43\x14\x87\x43\x04\x80\xfb\x82\xc6\x81\x40\x9c\x12\x80\xa6\x19\x81\x41\x39\x81\x41\x61\x83\x40\xad\x08\x82\x40\xda\x84\xbd\x81\x43\xbb\x81\x88\x82\x4d\xe3\x80\x8c\x03\x80\x89\x00\x81\x41\xb0\x81\x60\x74\xfa\x81\x41\x0c\x82\x40\xe2\x84\x41\x7d\x81\xd5\x81\xde\x80\x40\x96\x82\x40\x92\x82\xfe\x80\x8f\x81\x40\xf8\x80\x60\x52\x63\x10\x83\x40\xa8\x80\x89\x00\x80\x8a\x0a\x80\xc0\x01\x80\x44\x39\x80\xaf\x80\x44\x85\x80\x40\xc6\x80\x41\x35\x81\x40\x97\x85\xc3\x85\xd8\x83\x43\xb7\x84\x40\xec\x86\xef\x83\xfe\x82\x40\x80\x0d\x80\x8f\x81\xd7\x84\xeb\x80\x41\xa0\x82\x8b\x81\x41\x65\x1a\x8e\xe8\x81\x40\xf8\x82\x42\x04\x00\x80\x40\xfa\x81\xd6\x0b\x81\x41\x9d\x82\xac\x80\x42\x84\x81\x45\x76\x84\x60\x45\xf8\x81\x40\x84\x80\xc0\x82\x89\x80\x43\x51\x81\x60\x4e\x05\x80\x5d\xe6\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x33\xff\x59\xbf\xbf\x60\x51\xfc\x60\x5a\x10\x08\x00\x81\x89\x00\x00\x09\x82\x61\x05\xd5\x60\xa6\xdd\xa1\x50\x34\x8a\x40\xdd\x81\x56\x81\x8d\x5d\x30\x54\x1e\x53\x4a\x58\x0a\x82\x60\xe5\xf1\x8f\x6d\x02\xef\x40\xef\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x88\x84\x91\x80\xe3\x80\x99\x80\x55\xde\x80\x49\x7e\x8a\x9c\x0c\x80\xae\x80\x4f\x9f\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x81\x91\x00\x80\x9b\x00\x80\x9c\x00\x80\xac\x80\x8e\x80\x4e\x7d\x83\x47\x5c\x81\x49\x9b\x81\x89\x81\xb5\x81\x8d\x81\x40\xb0\x80\x40\xbf\x1a\x2a\x02\x0a\x18\x18\x00\x03\x88\x20\x80\x91\x23\x88\x08\x00\x39\x9e\x0b\x20\x88\x09\x92\x21\x88\x21\x0b\x97\x81\x8f\x3b\x93\x0e\x81\x44\x3c\x8d\xc9\x01\x18\x08\x14\x1c\x12\x8d\x41\x92\x95\x0d\x80\x8d\x38\x35\x10\x1c\x01\x0c\x18\x02\x09\x89\x29\x81\x8b\x92\x03\x08\x00\x08\x03\x21\x2a\x97\x81\x8a\x0b\x18\x09\x0b\xaa\x0f\x80\xa7\x20\x00\x14\x22\x18\x14\x00\x40\xff\x80\x42\x02\x1a\x08\x81\x8d\x09\x89\x41\xdd\x89\x0f\x60\xce\x3c\x2c\x81\x40\xa1\x81\x91\x00\x80\x9b\x00\x80\x9c\x00\x00\x08\x81\x60\xd7\x76\x80\xb8\x80\xb8\x80\xb8\x80\xb8\x80\x00\x00\x00\x00\x00\xa2\x05\x04\x89\xee\x03\x80\x5f\x8c\x80\x8b\x80\x40\xd7\x80\x95\x80\xd9\x85\x8e\x81\x41\x6e\x81\x8b\x80\x40\xa5\x80\x98\x8a\x1a\x40\xc6\x80\x40\xe6\x81\x89\x80\x88\x80\xb9\x18\x84\x88\x01\x01\x09\x03\x01\x00\x09\x02\x02\x0f\x14\x00\x04\x8b\x8a\x09\x00\x08\x80\x91\x01\x81\x91\x28\x00\x0a\x0c\x01\x0b\x81\x8a\x0c\x09\x04\x08\x00\x81\x93\x0c\x28\x19\x03\x01\x01\x28\x01\x00\x00\x05\x02\x05\x80\x89\x81\x8e\x01\x03\x00\x03\x10\x80\x8a\x81\xaf\x82\x88\x80\x8d\x80\x8d\x80\x41\x73\x81\x41\xce\x82\x92\x81\xb2\x03\x80\x44\xd9\x80\x8b\x80\x42\x58\x00\x80\x61\xbd\x69\x80\x40\xc9\x80\x40\x9f\x81\x8b\x81\x8d\x01\x89\xca\x99\x01\x96\x80\x93\x01\x88\x94\x81\x40\xad\xa1\x81\xef\x09\x02\x81\xd2\x0a\x80\x41\x06\x80\xbe\x8a\x28\x97\x31\x0f\x8b\x01\x19\x03\x81\x8c\x09\x07\x81\x88\x04\x82\x8b\x17\x11\x00\x03\x05\x02\x05\xd5\xaf\xc5\x27\x0a\x3d\x10\x01\x10\x81\x89\x40\xe2\x8b\x41\x1f\xae\x80\x89\x80\xb1\x80\xd1\x80\xb2\xef\x22\x14\x86\x88\x98\x36\x88\x82\x8c\x86\x00\x00\xa2\x05\x04\x89\x5f\xd2\x80\x40\xd4\x80\x60\xdd\x2a\x80\x60\xf3\xd5\x99\x41\xfa\x84\x45\xaf\x83\x6c\x06\x6b\xdf\x61\xf3\xfa\x84\x60\x26\x1c\x80\x40\xda\x80\x8f\x83\x61\xcc\x76\x80\xbb\x11\x01\x82\xf4\x09\x8a\x94\x92\x10\x1a\x02\x30\x00\x97\x80\x40\xc8\x0b\x80\x94\x03\x81\x40\xad\x12\x84\xd2\x80\x8f\x82\x88\x80\x8a\x80\x42\x3e\x01\x07\x3d\x80\x88\x89\x0a\xb7\x80\xbc\x08\x08\x80\x90\x10\x8c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x23\x19\x81\x40\xcc\x1a\x01\x80\x42\x08\x81\x94\x81\xb1\x8b\xaa\x80\x92\x80\x8c\x07\x81\x90\x0c\x0f\x04\x80\x94\x06\x08\x03\x01\x06\x03\x81\x9b\x80\xa2\x00\x03\x10\x80\xbc\x82\x97\x80\x8d\x80\x43\x5a\x81\xb2\x03\x80\x61\xc4\xad\x80\x40\xc9\x80\x40\xbd\x01\x89\xca\x99\x00\x97\x80\x93\x01\x20\x82\x94\x81\x40\xad\xa0\x8b\x88\x80\xc5\x80\x95\x8b\xaa\x1c\x8b\x90\x10\x82\xc6\x00\x80\x40\xba\x81\xbe\x8c\x18\x97\x91\x80\x99\x81\x8c\x80\xd5\xd4\xaf\xc5\x28\x12\x0a\x92\x0e\x88\x40\xe2\x8b\x41\x1f\xae\x80\x89\x80\xb1\x80\xd1\x80\xb2\xef\x22\x14\x86\x88\x98\x36\x88\x82\x8c\x86\x40\xa8\x03\x80\x5f\x8c\x80\x8b\x80\x40\xd7\x80\x95\x80\xd9\x85\x8e\x81\x41\x6e\x81\x8b\x80\xde\x80\xc5\x80\x98\x8a\x1a\x40\xc6\x80\x40\xe6\x81\x89\x80\x88\x80\xb9\x18\x28\x8b\x80\xf1\x89\xf5\x81\x8a\x00\x00\x28\x10\x28\x89\x81\x8e\x01\x03\x00\x03\x10\x80\x8a\x84\xac\x82\x88\x80\x8d\x80\x8d\x80\x41\x73\x81\x41\xce\x82\x92\x81\xb2\x03\x80\x44\xd9\x80\x8b\x80\x42\x58\x00\x80\x61\xbd\x65\x40\xff\x8c\x82\x9e\x80\xbb\x85\x8b\x81\x8d\x01\x89\x91\xb8\x9a\x8e\x89\x80\x93\x01\x88\x03\x88\x41\xb1\x84\x41\x3d\x87\x41\x09\xaf\xff\xf3\x8b\xd4\xaa\x8b\x83\xb7\x87\x89\x85\xa7\x87\x9d\xd1\x8b\xae\x80\x89\x80\x41\xb8\x40\xff\x43\xfd\x00\x00\x00\x00\x40\xac\x80\x42\xa0\x80\x42\xcb\x80\x4b\x41\x81\x46\x52\x81\xd4\x83\x47\xfb\x84\x99\x84\xb0\x8f\x50\xf3\x80\x60\xcc\x9a\x8f\x40\xee\x80\x40\x9f\x80\xce\x88\x60\xbc\xa6\x83\x54\xce\x87\x6c\x2e\x84\x4f\xff\x00\xf5\x2b\x00\x00\x7a\x14\x00\x00\xfc\x05\x00\x00\x73\x74\x61\x63\x6b\x5f\x6c\x65\x6e\x20\x3c\x20\x50\x4f\x50\x5f\x53\x54\x41\x43\x4b\x5f\x4c\x45\x4e\x5f\x4d\x41\x58\x00\x6e\x6f\x64\x65\x5f\x6d\x6f\x64\x75\x6c\x65\x73\x2f\x6e\x65\x61\x72\x2d\x73\x64\x6b\x2d\x6a\x73\x2f\x71\x75\x69\x63\x6b\x6a\x73\x2f\x6c\x69\x62\x75\x6e\x69\x63\x6f\x64\x65\x2e\x63\x00\x75\x6e\x69\x63\x6f\x64\x65\x5f\x70\x72\x6f\x70\x5f\x6f\x70\x73\x00\x73\x74\x61\x63\x6b\x5f\x6c\x65\x6e\x20\x3e\x3d\x20\x32\x00\x73\x74\x61\x63\x6b\x5f\x6c\x65\x6e\x20\x3e\x3d\x20\x31\x00\x73\x74\x61\x63\x6b\x5f\x6c\x65\x6e\x20\x3d\x3d\x20\x31\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x05\x00\x00\x00\x1f\x0f\x07\x03\x01\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x08\x00\x00\x00\x00\x01\x00\x00\x00\x20\x00\x00\x00\x00\x04\x73\x74\x61\x63\x6b\x00\x25\x73\x0a\x00\x5b\x65\x78\x63\x65\x70\x74\x69\x6f\x6e\x5d\x0a\x00\x4a\x53\x5f\x56\x41\x4c\x55\x45\x5f\x47\x45\x54\x5f\x54\x41\x47\x28\x66\x75\x6e\x63\x5f\x76\x61\x6c\x29\x20\x3d\x3d\x20\x4a\x53\x5f\x54\x41\x47\x5f\x4d\x4f\x44\x55\x4c\x45\x00\x6e\x6f\x64\x65\x5f\x6d\x6f\x64\x75\x6c\x65\x73\x2f\x6e\x65\x61\x72\x2d\x73\x64\x6b\x2d\x6a\x73\x2f\x71\x75\x69\x63\x6b\x6a\x73\x2f\x71\x75\x69\x63\x6b\x6a\x73\x2d\x6c\x69\x62\x63\x2d\x6d\x69\x6e\x2e\x63\x00\x6a\x73\x5f\x6d\x6f\x64\x75\x6c\x65\x5f\x73\x65\x74\x5f\x69\x6d\x70\x6f\x72\x74\x5f\x6d\x65\x74\x61\x00\x75\x72\x6c\x00\x6d\x61\x69\x6e\x00\x70\x72\x65\x63\x31\x20\x21\x3d\x20\x42\x46\x5f\x50\x52\x45\x43\x5f\x49\x4e\x46\x00\x6e\x6f\x64\x65\x5f\x6d\x6f\x64\x75\x6c\x65\x73\x2f\x6e\x65\x61\x72\x2d\x73\x64\x6b\x2d\x6a\x73\x2f\x71\x75\x69\x63\x6b\x6a\x73\x2f\x6c\x69\x62\x62\x66\x2e\x63\x00\x5f\x5f\x62\x66\x5f\x72\x6f\x75\x6e\x64\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\xb0\x32\x01\x00\x70\x33\x01\x00\xd0\x36\x01\x00\x30\x37\x01\x00\x50\x3e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x5f\x52\x32\x37\x3b\xeb\x05\x9f\xda\x6e\x24\x01\x59\xf2\x35\x68\x57\x2f\x02\x1a\xba\x1e\x05\x0e\xe1\x7b\x10\xe0\x74\xd5\x1c\xe6\x06\x38\x05\x98\xbf\xd6\x2c\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x55\x49\x04\xa9\x6c\xba\x1e\x46\x8e\xc1\x2e\x0b\x16\x60\x08\x07\x13\x32\x0d\x20\x11\xf5\x0b\x38\x29\x66\x0f\x3e\xab\x32\x09\xf8\xee\x40\x2f\x05\x09\x76\x2e\x28\x6e\x32\x20\x25\x20\x73\x74\x72\x69\x70\x5f\x6c\x65\x6e\x29\x20\x3d\x3d\x20\x30\x00\x6e\x74\x74\x5f\x66\x66\x74\x5f\x70\x61\x72\x74\x69\x61\x6c\x00\x00\x00\x94\x00\x00\x00\x77\x00\x00\x00\x59\x00\x00\x00\x3b\x00\x00\x00\x1d\x00\x00\x00\x6e\x71\x20\x3e\x3d\x20\x31\x00\x6d\x70\x5f\x64\x69\x76\x6e\x6f\x72\x6d\x5f\x6c\x61\x72\x67\x65\x00\x71\x20\x21\x3d\x20\x61\x20\x26\x26\x20\x71\x20\x21\x3d\x20\x62\x00\x62\x66\x5f\x64\x69\x76\x72\x65\x6d\x00\x72\x20\x21\x3d\x20\x61\x20\x26\x26\x20\x72\x20\x21\x3d\x20\x62\x00\x71\x20\x21\x3d\x20\x72\x00\x80\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb0\x00\xb1\x00\xb2\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb5\x00\xb6\x00\xb7\x00\xb7\x00\xb8\x00\xb9\x00\xb9\x00\xba\x00\xbb\x00\xbb\x00\xbc\x00\xbd\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc0\x00\xc1\x00\xc1\x00\xc2\x00\xc3\x00\xc3\x00\xc4\x00\xc5\x00\xc5\x00\xc6\x00\xc7\x00\xc7\x00\xc8\x00\xc9\x00\xc9\x00\xca\x00\xcb\x00\xcb\x00\xcc\x00\xcc\x00\xcd\x00\xce\x00\xce\x00\xcf\x00\xd0\x00\xd0\x00\xd1\x00\xd1\x00\xd2\x00\xd3\x00\xd3\x00\xd4\x00\xd4\x00\xd5\x00\xd6\x00\xd6\x00\xd7\x00\xd7\x00\xd8\x00\xd9\x00\xd9\x00\xda\x00\xda\x00\xdb\x00\xdb\x00\xdc\x00\xdd\x00\xdd\x00\xde\x00\xde\x00\xdf\x00\xe0\x00\xe0\x00\xe1\x00\xe1\x00\xe2\x00\xe2\x00\xe3\x00\xe3\x00\xe4\x00\xe5\x00\xe5\x00\xe6\x00\xe6\x00\xe7\x00\xe7\x00\xe8\x00\xe8\x00\xe9\x00\xea\x00\xea\x00\xeb\x00\xeb\x00\xec\x00\xec\x00\xed\x00\xed\x00\xee\x00\xee\x00\xef\x00\xf0\x00\xf0\x00\xf1\x00\xf1\x00\xf2\x00\xf2\x00\xf3\x00\xf3\x00\xf4\x00\xf4\x00\xf5\x00\xf5\x00\xf6\x00\xf6\x00\xf7\x00\xf7\x00\xf8\x00\xf8\x00\xf9\x00\xf9\x00\xfa\x00\xfa\x00\xfb\x00\xfb\x00\xfc\x00\xfc\x00\xfd\x00\xfd\x00\xfe\x00\xfe\x00\xff\x00\x72\x20\x21\x3d\x20\x61\x00\x62\x66\x5f\x73\x71\x72\x74\x00\x72\x20\x21\x3d\x20\x61\x31\x20\x26\x26\x20\x72\x20\x21\x3d\x20\x62\x31\x00\x62\x66\x5f\x6c\x6f\x67\x69\x63\x5f\x6f\x70\x00\x00\x00\x01\x00\x00\x00\x0a\x00\x00\x00\x64\x00\x00\x00\xe8\x03\x00\x00\x10\x27\x00\x00\xa0\x86\x01\x00\x40\x42\x0f\x00\x80\x96\x98\x00\x00\xe1\xf5\x05\x00\xca\x9a\x3b\x62\x66\x5f\x70\x6f\x77\x5f\x75\x69\x00\x6e\x61\x6e\x00\x69\x6e\x66\x00\x00\x00\x00\x00\x00\x00\x20\x14\x10\x0d\x0c\x0b\x0a\x0a\x09\x09\x08\x08\x08\x08\x08\x07\x07\x07\x07\x07\x07\x07\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x60\x4e\xc2\x50\xa7\xf4\xd4\xd4\x00\x00\x00\x40\x00\x00\x00\x00\xd2\x68\x20\x37\xca\xe5\x1e\x0a\x8d\x64\x84\x31\x7a\x3e\x15\xb8\x75\x32\x98\x2d\xc4\x69\x53\x9d\xaa\xaa\xaa\x2a\xab\xaa\xaa\xaa\x30\x27\x61\x28\x54\x7a\x6a\x6a\xa1\x26\x88\x26\xe6\xfd\xf3\x3e\x83\x13\x00\x25\x44\xa7\xc8\xba\x06\x67\xb4\x23\x09\xc7\xc0\x82\xf1\x29\x97\x22\xed\x3d\xc8\xb2\xfd\x7f\x9e\x21\x2b\x57\xad\xa5\x88\x3b\xc3\x20\xab\x29\x7c\xda\x00\x00\x00\x20\x00\x00\x00\x00\x7e\xb5\x50\x1f\xb3\x84\x58\xac\xc6\x2c\xb2\x1e\x6f\xe2\xa6\x8a\x18\xe1\x21\x1e\xb2\xaa\x5d\x0c\x21\xcd\x9d\x1d\xe4\x34\x98\x43\x78\x4c\x24\x1d\x65\x0d\x7a\x36\x89\x05\xb4\x1c\x0c\x3e\x17\xac\x5b\xd9\x4b\x1c\x0d\x2b\xd7\xa8\x68\xd7\xea\x1b\x4c\xce\xf8\x98\x69\x34\x90\x1b\xe5\x72\x0f\x05\x3f\x43\x3b\x1b\x15\x6f\xb0\x2e\x75\x6f\xeb\x1a\x38\xfc\x46\x9c\xeb\x38\xa0\x1a\x17\xfd\x3b\x0e\x62\x30\x59\x1a\x56\x8c\x8d\xb3\xc3\xf4\x15\x1a\xe6\xa2\x95\x2b\xdc\x30\xd6\x19\xf9\xde\x7d\xcc\x99\x99\x99\x19\x9a\x99\x99\x99\x80\xec\x5f\x19\x31\x94\x60\x8a\x7b\xee\x28\x19\xf9\x22\x4f\x0b\xcf\x6a\xf4\x18\x18\xe3\x06\x8c\x46\x32\xc2\x18\x3d\x9f\x0a\xdc\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x47\x03\xb8\x32\x00\x00\x00\x40\x26\x3c\x4d\x4a\x47\x03\xb8\x52\xfd\xd9\xd5\x59\x00\x00\x00\x60\x8e\x06\x70\x65\x26\x3c\x4d\x6a\xf0\xa9\xb3\x6e\x47\x03\xb8\x72\x8e\x00\x6a\x76\xfd\xd9\xd5\x79\x6d\x3f\x05\x7d\x00\x00\x00\x80\xdf\x7e\xcc\x82\x8e\x06\x70\x85\xae\x05\xef\x87\x26\x3c\x4d\x8a\x45\xdd\x8d\x8c\xf0\xa9\xb3\x8e\x01\x05\xc1\x90\x47\x03\xb8\x92\x4c\x78\x9a\x94\x8e\x00\x6a\x96\xd6\x09\x28\x98\xfd\xd9\xd5\x99\x8f\x94\x74\x9b\x6d\x3f\x05\x9d\xb3\xc6\x88\x9e\x00\x00\x00\xa0\x37\xad\x6b\xa1\xdf\x7e\xcc\xa2\x23\x16\x23\xa4\x8e\x06\x70\xa5\x4e\x61\x4e\x00\x49\x6e\x66\x69\x6e\x69\x74\x79\x00\x30\x00\x30\x2e\x00\x6e\x20\x3e\x3d\x20\x31\x00\x62\x66\x5f\x69\x6e\x74\x65\x67\x65\x72\x5f\x74\x6f\x5f\x72\x61\x64\x69\x78\x5f\x72\x65\x63\x00\x62\x66\x5f\x6c\x6f\x67\x00\x62\x66\x5f\x6c\x6f\x67\x5f\x69\x6e\x74\x65\x72\x6e\x61\x6c\x00\x21\x79\x2d\x3e\x73\x69\x67\x6e\x00\x62\x66\x5f\x70\x6f\x77\x00\x62\x66\x5f\x65\x78\x70\x5f\x69\x6e\x74\x65\x72\x6e\x61\x6c\x00\x00\x41\xb8\xd0\x05\x0b\xec\x01\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x48\x6b\x01\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x38\x68\x01\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x04\x00\x00\x00\x54\x6f\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x68\x01\x00\x00\x76\x09\x70\x72\x6f\x64\x75\x63\x65\x72\x73\x01\x0c\x70\x72\x6f\x63\x65\x73\x73\x65\x64\x2d\x62\x79\x01\x05\x63\x6c\x61\x6e\x67\x56\x31\x30\x2e\x30\x2e\x30\x20\x28\x68\x74\x74\x70\x73\x3a\x2f\x2f\x67\x69\x74\x68\x75\x62\x2e\x63\x6f\x6d\x2f\x6c\x6c\x76\x6d\x2f\x6c\x6c\x76\x6d\x2d\x70\x72\x6f\x6a\x65\x63\x74\x20\x64\x33\x32\x31\x37\x30\x64\x62\x64\x35\x62\x30\x64\x35\x34\x34\x33\x36\x35\x33\x37\x62\x36\x62\x37\x35\x62\x65\x61\x66\x34\x34\x33\x32\x34\x65\x30\x63\x32\x38\x29') + near.promiseBatchActionDeployContract(promiseId, includeBytes('../build/promise_api.wasm')) near.promiseBatchActionFunctionCall(promiseId, 'cross_contract_callee', bytes('abc'), 0, 2 * Math.pow(10, 13)) near.promiseReturn(promiseId) } diff --git a/tests/src/public-key.js b/tests/src/public-key.js new file mode 100644 index 00000000..43f68d86 --- /dev/null +++ b/tests/src/public-key.js @@ -0,0 +1,76 @@ +import {near, bytes, types} from 'near-sdk-js' +import {CurveType, PublicKey} from 'near-sdk-js/lib/types' +import {assert} from 'near-sdk-js/lib/utils' + +function runtime_validate_public_key(prefix, public_key) { + let promiseId = near.promiseBatchCreate(prefix + '.pk.test.near') + near.promiseBatchActionCreateAccount(promiseId) + near.promiseBatchActionTransfer(promiseId, 10000000000000000000000000n) + near.promiseBatchActionAddKeyWithFullAccess(promiseId, public_key, 1n) + near.promiseReturn(promiseId) +} + +export function test_add_signer_key() { + runtime_validate_public_key('aa', near.signerAccountPk()) +} + +export function test_add_ed25519_key_bytes() { + let pk = new PublicKey(bytes(new Uint8Array([ + // CurveType.ED25519 = 0 + 0, + // ED25519 PublicKey data + 186, 44, 216, 49, 157, 48, 151, 47, + 23, 244, 137, 69, 78, 150, 54, 42, + 30, 248, 110, 26, 205, 18, 137, 154, + 10, 208, 26, 183, 65, 166, 223, 18 + ]))) + runtime_validate_public_key('a', pk.data) +} + +export function test_add_ed25519_key_string() { + let k = 'ed25519:DXkVZkHd7WUUejCK7i74uAoZWy1w9AZqshhTHxhmqHuB' + let pk = PublicKey.fromString(k) + runtime_validate_public_key('b', pk.data) +} + +export function test_add_secp256k1_key_bytes() { + let pk = new PublicKey(bytes(new Uint8Array([ + // CurveType.SECP256K1 = 1 + 1, + // SECP256K1 PublicKey data + 242, 86, 198, 230, 200, 11, 33, 63, 42, 160, 176, + 23, 68, 35, 93, 81, 92, 89, 68, 53, 190, 101, + 27, 21, 136, 58, 16, 221, 71, 47, 166, 70, 206, + 98, 234, 243, 103, 13, 197, 203, 145, 0, 160, 202, + 42, 85, 178, 193, 71, 193, 233, 163, 140, 228, 40, + 135, 142, 125, 70, 225, 251, 113, 74, 153 + ] + ))) + runtime_validate_public_key('c', pk.data) +} + +export function test_add_secp256k1_key_string() { + let k = 'secp256k1:5r22SrjrDvgY3wdQsnjgxkeAbU1VcM71FYvALEQWihjM3Xk4Be1CpETTqFccChQr4iJwDroSDVmgaWZv2AcXvYeL' + let pk = PublicKey.fromString(k) + runtime_validate_public_key('d', pk.data) +} + +export function add_invalid_public_key() { + runtime_validate_public_key('e', bytes(new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]))) +} + +export function curve_type() { + assert(new PublicKey(near.signerAccountPk()).curveType() == CurveType.ED25519) +} + +export function create_invalid_curve_type() { + new PublicKey(bytes(new Uint8Array([2, 1]))) +} + +export function create_invalid_length() { + new PublicKey(bytes(new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]))) +} + +export function create_from_invalid_base58() { + PublicKey.fromString('ed25519:!@#$%^&*') +} \ No newline at end of file diff --git a/tests/src/typescript.ts b/tests/src/typescript.ts index c53e7a0a..f9478cac 100644 --- a/tests/src/typescript.ts +++ b/tests/src/typescript.ts @@ -1,18 +1,13 @@ import { - NearContract, NearBindgen, view, } from 'near-sdk-js' -@NearBindgen -class TypeScriptTestContract extends NearContract { - @view +@NearBindgen({}) +class TypeScriptTestContract { + @view({}) bigint() { // JSON.stringify cannot seriaize a BigInt, need manually toString return (1n + 2n).toString() } - - default() { - return new TypeScriptTestContract() - } } \ No newline at end of file diff --git a/tests/src/unordered-map.js b/tests/src/unordered-map.js index aa70f09a..9c897801 100644 --- a/tests/src/unordered-map.js +++ b/tests/src/unordered-map.js @@ -1,70 +1,63 @@ import { - NearContract, NearBindgen, call, view, UnorderedMap, - Vector } from 'near-sdk-js' -import {House, Room} from './model.js'; +import { House, Room } from './model.js'; -@NearBindgen -class UnorderedMapTestContract extends NearContract { +@NearBindgen({}) +class UnorderedMapTestContract { constructor() { - super() this.unorderedMap = new UnorderedMap('a'); } - default() { - return new UnorderedMapTestContract(); - } - - @view + @view({}) len() { - return this.unorderedMap.len(); + return this.unorderedMap.length; } - @view + @view({}) isEmpty() { return this.unorderedMap.isEmpty(); } - @view - get({key}) { + @view({}) + get({ key }) { return this.unorderedMap.get(key); } - @call - set({key, value}) { + @call({}) + set({ key, value }) { this.unorderedMap.set(key, value); } - @call - remove_key({key}) { + @call({}) + remove_key({ key }) { this.unorderedMap.remove(key); } - @call + @call({}) clear() { this.unorderedMap.clear(); } - @view + @view({}) toArray() { return this.unorderedMap.toArray(); } - @call - extend({kvs}) { + @call({}) + extend({ kvs }) { this.unorderedMap.extend(kvs); } - @call + @call({}) add_house() { this.unorderedMap.set('house1', new House('house1', [new Room('room1', '200sqft'), new Room('room2', '300sqft')])) } - @view + @view({}) get_house() { const rawHouse = this.unorderedMap.get('house1') const house = new House(rawHouse.name, rawHouse.rooms) diff --git a/tests/src/unordered-set.js b/tests/src/unordered-set.js index 4fe1e16b..b7500c11 100644 --- a/tests/src/unordered-set.js +++ b/tests/src/unordered-set.js @@ -1,66 +1,60 @@ import { - NearContract, NearBindgen, call, view, UnorderedSet, } from 'near-sdk-js' -import {House, Room} from './model.js'; +import { House, Room } from './model.js'; -@NearBindgen -class UnorderedSetTestContract extends NearContract { +@NearBindgen({}) +class UnorderedSetTestContract { constructor() { - super() this.unorderedSet = new UnorderedSet('a'); } - default() { - return new UnorderedSetTestContract(); - } - - @view + @view({}) len() { - return this.unorderedSet.len(); + return this.unorderedSet.length; } - @view + @view({}) isEmpty() { return this.unorderedSet.isEmpty(); } - @view - contains({element}) { + @view({}) + contains({ element }) { return this.unorderedSet.contains(element); } - @call - set({element}) { + @call({}) + set({ element }) { this.unorderedSet.set(element); } - @call - remove_key({element}) { + @call({}) + remove_key({ element }) { this.unorderedSet.remove(element); } - @call + @call({}) clear() { this.unorderedSet.clear(); } - @view + @view({}) toArray() { const res = this.unorderedSet.toArray(); return res; } - @call - extend({elements}) { + @call({}) + extend({ elements }) { this.unorderedSet.extend(elements); } - @call - add_house({name, rooms}) { + @call({}) + add_house({ name, rooms }) { let house = new House(name, []) for (let r of rooms) { house.rooms.push(new Room(r.name, r.size)) @@ -68,8 +62,8 @@ class UnorderedSetTestContract extends NearContract { this.unorderedSet.set(house) } - @view - house_exist({name, rooms}) { + @view({}) + house_exist({ name, rooms }) { let house = new House(name, []) for (let r of rooms) { house.rooms.push(new Room(r.name, r.size)) diff --git a/tests/src/vector.js b/tests/src/vector.js index 8271cb7d..ef157055 100644 --- a/tests/src/vector.js +++ b/tests/src/vector.js @@ -1,5 +1,4 @@ import { - NearContract, NearBindgen, call, view, @@ -7,73 +6,68 @@ import { } from 'near-sdk-js' import {House, Room} from './model.js'; -@NearBindgen -class VectorTestContract extends NearContract { +@NearBindgen({}) +class VectorTestContract { constructor() { - super() this.vector = new Vector('a'); } - default() { - return new VectorTestContract(); - } - - @view + @view({}) len() { - return this.vector.len(); + return this.vector.length; } - @view + @view({}) isEmpty() { return this.vector.isEmpty(); } - @view + @view({}) get({index}) { return this.vector.get(index); } - @call + @call({}) push({value}) { this.vector.push(value); } - @call + @call({}) pop() { this.vector.pop(); } - @call + @call({}) clear() { this.vector.clear(); } - @view + @view({}) toArray() { return this.vector.toArray(); } - @call + @call({}) extend({kvs}) { this.vector.extend(kvs); } - @call + @call({}) replace({index, value}) { this.vector.replace(index, value); } - @call + @call({}) swapRemove({index}) { this.vector.swapRemove(index); } - @call + @call({}) add_house() { this.vector.push(new House('house1', [new Room('room1', '200sqft'), new Room('room2', '300sqft')])); } - @view + @view({}) get_house() { return this.vector.get(0); } diff --git a/tests/yarn.lock b/tests/yarn.lock index 196ce3c5..8317aabf 100644 --- a/tests/yarn.lock +++ b/tests/yarn.lock @@ -1046,10 +1046,10 @@ near-api-js@^0.44.1: text-encoding-utf-8 "^1.0.2" tweetnacl "^1.0.1" -near-sandbox@^0.0.12: - version "0.0.12" - resolved "https://registry.npmjs.org/near-sandbox/-/near-sandbox-0.0.12.tgz#b0e36c9458a437c5cb4e1218f715585f087904b1" - integrity sha512-NfMSbPYiSpSMijM3JoC1FuNJuc3Pop86OF+/01ahc8phWQbjT404rMR+UvvuCZQ6Qge8/MC76KjBUPg3d7mg1Q== +near-sandbox@^0.0.13: + version "0.0.13" + resolved "https://registry.yarnpkg.com/near-sandbox/-/near-sandbox-0.0.13.tgz#139b70708ccefcdf2dd406710f6615590d1880e5" + integrity sha512-rtRn51BBD1oT9SeGAIInKVedfaS/i4VqKqznZIvFddWo0jcI4lMoK1yHuTVuEE7YfEE12NsspFG1GxN1SlPV2g== dependencies: got "^11.8.2" tar "^6.1.0" @@ -1061,10 +1061,10 @@ near-units@^0.1.9: dependencies: bn.js "^5.2.0" -near-workspaces@3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/near-workspaces/-/near-workspaces-3.1.0.tgz#d462ecb4bf2ae1cc33063995a1ef7db5e204910f" - integrity sha512-0f/S2YU0xNQ7UQwCW/pkqXspjeK0N+nYj3x7/sx+tUMsckNzahTLNww+3I0YBa/UtcMrCVsT5WDG8emvhdRxnQ== +near-workspaces@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/near-workspaces/-/near-workspaces-3.2.1.tgz#38c33474ece5898323f10cff7c75f771bb5a991a" + integrity sha512-761D8lsbSetS+Nu9C4IWdONn0gBSVpfjY8V09AOQt1Zb5XjtURFWpFTZun6vQJhvWv5+RsSNTF6uYsLyTLJBAA== dependencies: base64url "^3.0.1" bn.js "^5.2.0" @@ -1074,7 +1074,7 @@ near-workspaces@3.1.0: fs-extra "^10.0.0" js-sha256 "^0.9.0" near-api-js "^0.44.1" - near-sandbox "^0.0.12" + near-sandbox "^0.0.13" near-units "^0.1.9" node-port-check "^2.0.1" promisify-child-process "^4.1.1" diff --git a/tsconfig.json b/tsconfig.json index f16f251a..5c55b069 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -27,5 +27,6 @@ "files": [ "src/index.ts", "src/build-tools/near-bindgen-exporter.js", + "src/build-tools/include-bytes.js", ] } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index b96e1c0c..dfb64ce7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -533,6 +533,11 @@ estree-walker "^1.0.1" picomatch "^2.2.2" +"@scure/base@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" + integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== + "@types/estree@*", "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz" @@ -591,6 +596,11 @@ balanced-match@^1.0.0: resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base-x@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.0.tgz#d0e3b7753450c73f8ad2389b5c018a4af7b2224a" + integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" @@ -610,6 +620,13 @@ browserslist@^4.20.2: node-releases "^2.0.3" picocolors "^1.0.0" +bs58@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-5.0.0.tgz#865575b4d13c09ea2a84622df6c8cbeb54ffc279" + integrity sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ== + dependencies: + base-x "^4.0.0" + builtin-modules@^3.0.0: version "3.3.0" resolved "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz" From 750249e815cb64a5918d7be62e492e8dbc8bc0e4 Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Mon, 26 Sep 2022 15:35:48 +0800 Subject: [PATCH 10/44] fix lint --- .../src/non_fungible_token/core/core_impl.ts | 50 +++++++++---------- .../src/non_fungible_token/utils.ts | 12 ++--- near-contract-standards/tsconfig.json | 8 +++ 3 files changed, 39 insertions(+), 31 deletions(-) create mode 100644 near-contract-standards/tsconfig.json diff --git a/near-contract-standards/src/non_fungible_token/core/core_impl.ts b/near-contract-standards/src/non_fungible_token/core/core_impl.ts index bd90d20b..9e69a229 100644 --- a/near-contract-standards/src/non_fungible_token/core/core_impl.ts +++ b/near-contract-standards/src/non_fungible_token/core/core_impl.ts @@ -35,7 +35,7 @@ export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenR let approvals_by_id: Option let next_approval_id_by_id: Option if (approval_prefix) { - let prefix = approval_prefix.into_storage_key() + const prefix = approval_prefix.into_storage_key() approvals_by_id = new LookupMap(prefix) next_approval_id_by_id = new LookupMap(prefix) } else { @@ -56,10 +56,10 @@ export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenR } measure_min_token_storage_cost() { - let initial_storage_usage = near.storageUsage() + const initial_storage_usage = near.storageUsage() // 64 Length because this is the max account id length - let tmp_token_id = repeat('a', 64) - let tmp_owner_id = repeat('a', 64) + const tmp_token_id = repeat('a', 64) + const tmp_owner_id = repeat('a', 64) // 1. set some dummy data this.owner_by_id.set(tmp_token_id, tmp_owner_id) @@ -83,19 +83,19 @@ export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenR ) } if (this.tokens_per_owner) { - let u = new UnorderedSet(new TokensPerOwner(near.sha256(tmp_owner_id)).into_storage_key()) + const u = new UnorderedSet(new TokensPerOwner(near.sha256(tmp_owner_id)).into_storage_key()) u.set(tmp_token_id) this.tokens_per_owner.set(tmp_owner_id, u) } if (this.approvals_by_id) { - let approvals = {} + const approvals = {} approvals[tmp_owner_id] = 1n this.approvals_by_id.set(tmp_token_id, approvals) } if (this.next_approval_id_by_id) { this.next_approval_id_by_id.set(tmp_token_id, 1n) } - let u = new UnorderedSet(new TokenPerOwnerInner(hash_account_id(tmp_owner_id)).into_storage_key()) + const u = new UnorderedSet(new TokenPerOwnerInner(hash_account_id(tmp_owner_id)).into_storage_key()) if (this.tokens_per_owner) { this.tokens_per_owner.set(tmp_owner_id, u) } @@ -125,11 +125,11 @@ export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenR this.owner_by_id.set(token_id, to) if (this.tokens_per_owner) { - let owner_tokens = this.tokens_per_owner.get(from) + const owner_tokens = this.tokens_per_owner.get(from) if (owner_tokens == null) { throw new Error('Unable to access tokens per owner in unguarded call.') } - let owner_tokens_set = UnorderedSet.deserialize(owner_tokens as UnorderedSet) + const owner_tokens_set = UnorderedSet.deserialize(owner_tokens as UnorderedSet) if (owner_tokens_set.isEmpty()) { this.tokens_per_owner.remove(from) } else { @@ -154,12 +154,12 @@ export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenR approval_id: Option, memo: Option ): [string, Map | null] { - let owner_id = this.owner_by_id.get(token_id) + const owner_id = this.owner_by_id.get(token_id) if (owner_id == null) { throw new Error('Token not found') } - let approved_account_ids = this.approvals_by_id?.remove(token_id) + const approved_account_ids = this.approvals_by_id?.remove(token_id) let sender_id_authorized: Option if (sender_id != owner_id) { @@ -167,7 +167,7 @@ export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenR throw new Error('Unauthorized') } - let actual_approval_id = (approved_account_ids as any)[sender_id] + const actual_approval_id = (approved_account_ids as any)[sender_id] if (!actual_approval_id) { throw new Error('Sender not approved') } @@ -203,7 +203,7 @@ export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenR } internal_mint(token_id: string, token_owner_id: string, token_metadata: Option): Token { - let token = this.internal_mint_with_refund(token_id, token_owner_id, token_metadata, near.predecessorAccountId()) + const token = this.internal_mint_with_refund(token_id, token_owner_id, token_metadata, near.predecessorAccountId()) new NftMint(token.owner_id, [token.token_id], null).emit() return token } @@ -225,7 +225,7 @@ export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenR throw new Error('token_id must be unique') } - let owner_id = token_owner_id + const owner_id = token_owner_id this.owner_by_id.set(token_id, owner_id) this.token_metadata_by_id?.set(token_id, token_metadata) if (this.tokens_per_owner) { @@ -235,9 +235,9 @@ export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenR this.tokens_per_owner.set(owner_id, token_ids) } - let approved_account_ids = this.approvals_by_id ? new Map() : null + const approved_account_ids = this.approvals_by_id ? new Map() : null if (initial_storage_usage) { - let [id, storage_usage] = initial_storage_usage + const [id, storage_usage] = initial_storage_usage refund_deposit_to_account(near.storageUsage() - storage_usage, id) } return new Token(token_id, owner_id, token_metadata, approved_account_ids) @@ -245,7 +245,7 @@ export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenR nft_transfer(receiver_id: string, token_id: string, approval_id: Option, memo: Option) { assertOneYocto() - let sender_id = near.predecessorAccountId() + const sender_id = near.predecessorAccountId() this.internal_transfer(sender_id, receiver_id, token_id, approval_id, memo) } @@ -257,18 +257,18 @@ export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenR msg: string ) { assertOneYocto() - let sender_id = near.predecessorAccountId() - let [old_owner, old_approvals] = this.internal_transfer(sender_id, receiver_id, token_id, approval_id, memo) + const sender_id = near.predecessorAccountId() + const [old_owner, old_approvals] = this.internal_transfer(sender_id, receiver_id, token_id, approval_id, memo) // TODO: ext_nft_receiver } nft_token(token_id: string): Option { - let owner_id = this.owner_by_id.get(token_id) as Option + const owner_id = this.owner_by_id.get(token_id) as Option if (owner_id == null) { return null } - let metadata = this.token_metadata_by_id?.get(token_id) as Option - let approved_account_ids = + const metadata = this.token_metadata_by_id?.get(token_id) as Option + const approved_account_ids = (this.approvals_by_id?.get(token_id) as Option>) || new Map() return new Token(token_id, owner_id, metadata, approved_account_ids) } @@ -280,14 +280,14 @@ export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenR approved_account_ids: Option> ): boolean { let must_revert: boolean - let p = near.promiseResult(0) + const p = near.promiseResult(0) if (p === PromiseResult.NotReady) { throw new Error() } else if (p === PromiseResult.Failed) { must_revert = true } else { try { - let yes_or_no = JSON.parse(p as Bytes) + const yes_or_no = JSON.parse(p as Bytes) if (typeof yes_or_no == 'boolean') { must_revert = yes_or_no } else { @@ -302,7 +302,7 @@ export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenR return true } - let current_owner = this.owner_by_id.get(token_id) as Option + const current_owner = this.owner_by_id.get(token_id) as Option if (current_owner) { if (current_owner != receiver_id) { return true diff --git a/near-contract-standards/src/non_fungible_token/utils.ts b/near-contract-standards/src/non_fungible_token/utils.ts index 38f2159f..951e60d6 100644 --- a/near-contract-standards/src/non_fungible_token/utils.ts +++ b/near-contract-standards/src/non_fungible_token/utils.ts @@ -7,8 +7,8 @@ export function bytes_for_approved_account_id(account_id: string): number { } export function refund_approved_account_ids_iter(account_id: string, approved_account_ids: string[]): void { - let storage_released = approved_account_ids.map(bytes_for_approved_account_id).reduce((a, b) => a + b) - let promise_id = near.promiseBatchCreate(account_id) + const storage_released = approved_account_ids.map(bytes_for_approved_account_id).reduce((a, b) => a + b) + const promise_id = near.promiseBatchCreate(account_id) near.promiseBatchActionTransfer(promise_id, BigInt(storage_released) * near.storageByteCost()) near.promiseReturn(promise_id) } @@ -18,14 +18,14 @@ export function refund_approved_account_ids(account_id: AccountId, approved_acco } export function refund_deposit_to_account(storage_used: bigint, account_id: string): void { - let required_cost = near.storageByteCost() * storage_used - let attached_deposit = near.attachedDeposit() + const required_cost = near.storageByteCost() * storage_used + const attached_deposit = near.attachedDeposit() assert(required_cost <= attached_deposit, `Must attach ${required_cost} yoctoNEAR to cover storage`) - let refund = attached_deposit - required_cost + const refund = attached_deposit - required_cost if (refund > 1n) { - let promise_id = near.promiseBatchCreate(account_id) + const promise_id = near.promiseBatchCreate(account_id) near.promiseBatchActionTransfer(promise_id, refund) near.promiseReturn(promise_id) } diff --git a/near-contract-standards/tsconfig.json b/near-contract-standards/tsconfig.json new file mode 100644 index 00000000..c68670ab --- /dev/null +++ b/near-contract-standards/tsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "experimentalDecorators": true, + "target": "es2020", + "noEmit": true + }, + "exclude": ["node_modules"] +} From fc27f3cc3b465d4acdf943ce88de6d228305a772 Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Thu, 29 Sep 2022 15:32:11 +0800 Subject: [PATCH 11/44] updates to nft standard --- examples/src/counter.ts | 2 +- examples/tsconfig.json | 3 +- .../example-contracts/my-nft.ts | 7 ++++ near-contract-standards/package.json | 2 +- near-contract-standards/src/index.ts | 3 ++ .../src/non_fungible_token/core/core_impl.ts | 39 ++++++++++++------- .../src/non_fungible_token/core/index.ts | 17 ++------ .../src/non_fungible_token/events.ts | 1 + .../src/non_fungible_token/index.ts | 3 ++ 9 files changed, 46 insertions(+), 31 deletions(-) create mode 100644 near-contract-standards/example-contracts/my-nft.ts diff --git a/examples/src/counter.ts b/examples/src/counter.ts index 4869cf71..d6f91385 100644 --- a/examples/src/counter.ts +++ b/examples/src/counter.ts @@ -1,4 +1,4 @@ -import { NearBindgen, near, call, view, initialize } from 'near-sdk-js' +import { NearBindgen, near, call, view, initialize } from 'near-sdk-js/lib/index' import { isUndefined } from 'lodash-es' import { log } from './log' diff --git a/examples/tsconfig.json b/examples/tsconfig.json index c68670ab..a5be9b56 100644 --- a/examples/tsconfig.json +++ b/examples/tsconfig.json @@ -2,7 +2,8 @@ "compilerOptions": { "experimentalDecorators": true, "target": "es2020", - "noEmit": true + "noEmit": true, + "moduleResolution": "node" }, "exclude": ["node_modules"] } diff --git a/near-contract-standards/example-contracts/my-nft.ts b/near-contract-standards/example-contracts/my-nft.ts new file mode 100644 index 00000000..d283143a --- /dev/null +++ b/near-contract-standards/example-contracts/my-nft.ts @@ -0,0 +1,7 @@ +import { NonFungibleToken } from "../src/index"; +import { NearBindgen } from "near-sdk-js/lib/index"; + +@NearBindgen({}) +class MyNFT extends NonFungibleToken { + +} \ No newline at end of file diff --git a/near-contract-standards/package.json b/near-contract-standards/package.json index dda12e82..58b16e79 100644 --- a/near-contract-standards/package.json +++ b/near-contract-standards/package.json @@ -7,7 +7,7 @@ "scripts": { "build": "yarn build:non-fungible-token", "rebuild": "cd .. && yarn build && cd near-contract-standards && rm -rf node_modules && rm -rf build && yarn && yarn build", - "build:non-fungible-token": "near-sdk build src/non-fungible-token-receiver.js build/non-fungible-token-receiver.wasm && near-sdk build src/non-fungible-token.js build/non-fungible-token.wasm", + "build:non-fungible-token": "near-sdk build example-contracts/my-nft.ts build/my-nft.wasm", "test": "ava", "test:non-fungible-token": "ava __tests__/test-non-fungible-token.ava.js" }, diff --git a/near-contract-standards/src/index.ts b/near-contract-standards/src/index.ts index e69de29b..944acbdf 100644 --- a/near-contract-standards/src/index.ts +++ b/near-contract-standards/src/index.ts @@ -0,0 +1,3 @@ +import { NonFungibleToken } from "./non_fungible_token/index"; + +export {NonFungibleToken} \ No newline at end of file diff --git a/near-contract-standards/src/non_fungible_token/core/core_impl.ts b/near-contract-standards/src/non_fungible_token/core/core_impl.ts index 9e69a229..343d219a 100644 --- a/near-contract-standards/src/non_fungible_token/core/core_impl.ts +++ b/near-contract-standards/src/non_fungible_token/core/core_impl.ts @@ -1,13 +1,24 @@ -import { UnorderedMap, LookupMap, Bytes, near, UnorderedSet, assert } from 'near-sdk-js' +import { UnorderedMap, LookupMap, Bytes, near, UnorderedSet, assert } from 'near-sdk-js/lib/index' +import { PromiseResult } from 'near-sdk-js/lib/types/index' import { assertOneYocto, IntoStorageKey, Option } from 'near-sdk-js/lib/utils' import { TokenMetadata } from '../metadata' import { hash_account_id, refund_approved_account_ids, refund_deposit, refund_deposit_to_account } from '../utils' import { NftMint, NftTransfer } from '../events' -import { Token } from '../token' -import { NonFungibleTokenCore } from '.' -import { AccountId } from 'near-sdk-js/lib/types' import { NonFungibleTokenResolver } from './resolver' -import { PromiseResult } from '../../../../lib/api' +import { AccountId } from 'near-sdk-js/lib/types/index' +import { Token, TokenId } from '../token' + +export interface NonFungibleTokenCore { + nft_transfer(receiver_id: AccountId, token_id: TokenId, approval_id: Option, memo: Option) + nft_transfer_call( + receiver_id: AccountId, + token_id: TokenId, + approval_id: Option, + memo: Option, + msg: string + ) + nft_token(token_id: TokenId): Option +} const GAS_FOR_RESOLVE_TRANSFER = 5_000_000_000_000n const GAS_FOR_NFT_TRANSFER_CALL = 25_000_000_000_000n + GAS_FOR_RESOLVE_TRANSFER @@ -19,11 +30,11 @@ function repeat(str: string, n: number) { export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenResolver { public owner_id: string public extra_storage_in_bytes_per_token: bigint - public owner_by_id: UnorderedMap - public token_metadata_by_id: Option - public tokens_per_owner: Option - public approvals_by_id: Option - public next_approval_id_by_id: Option + public owner_by_id: UnorderedMap + public token_metadata_by_id: Option> + public tokens_per_owner: Option>> + public approvals_by_id: Option> + public next_approval_id_by_id: Option> constructor( owner_by_id_prefix: IntoStorageKey, @@ -32,8 +43,8 @@ export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenR enumeration_prefix: Option, approval_prefix: Option ) { - let approvals_by_id: Option - let next_approval_id_by_id: Option + let approvals_by_id: Option> + let next_approval_id_by_id: Option> if (approval_prefix) { const prefix = approval_prefix.into_storage_key() approvals_by_id = new LookupMap(prefix) @@ -83,7 +94,7 @@ export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenR ) } if (this.tokens_per_owner) { - const u = new UnorderedSet(new TokensPerOwner(near.sha256(tmp_owner_id)).into_storage_key()) + const u = new UnorderedSet(new TokensPerOwner(near.sha256(tmp_owner_id)).into_storage_key()) u.set(tmp_token_id) this.tokens_per_owner.set(tmp_owner_id, u) } @@ -95,7 +106,7 @@ export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenR if (this.next_approval_id_by_id) { this.next_approval_id_by_id.set(tmp_token_id, 1n) } - const u = new UnorderedSet(new TokenPerOwnerInner(hash_account_id(tmp_owner_id)).into_storage_key()) + const u = new UnorderedSet(new TokenPerOwnerInner(hash_account_id(tmp_owner_id)).into_storage_key()) if (this.tokens_per_owner) { this.tokens_per_owner.set(tmp_owner_id, u) } diff --git a/near-contract-standards/src/non_fungible_token/core/index.ts b/near-contract-standards/src/non_fungible_token/core/index.ts index f0620e81..7f7ad257 100644 --- a/near-contract-standards/src/non_fungible_token/core/index.ts +++ b/near-contract-standards/src/non_fungible_token/core/index.ts @@ -1,15 +1,4 @@ -import { AccountId } from 'near-sdk-js/lib/types' -import { Token, TokenId } from '../token' -import { Option } from 'near-sdk-js/lib/utils' -export interface NonFungibleTokenCore { - nft_transfer(receiver_id: AccountId, token_id: TokenId, approval_id: Option, memo: Option) - nft_transfer_call( - receiver_id: AccountId, - token_id: TokenId, - approval_id: Option, - memo: Option, - msg: string - ) - nft_token(token_id: TokenId): Option -} +import { NonFungibleToken } from "./core_impl"; + +export {NonFungibleToken} \ No newline at end of file diff --git a/near-contract-standards/src/non_fungible_token/events.ts b/near-contract-standards/src/non_fungible_token/events.ts index fc6ff6d3..712b3f67 100644 --- a/near-contract-standards/src/non_fungible_token/events.ts +++ b/near-contract-standards/src/non_fungible_token/events.ts @@ -1,4 +1,5 @@ import { NearEvent } from '../event' +import {Option} from 'near-sdk-js/lib/utils' export type Nep171EventKind = NftMint[] | NftTransfer[] | NftBurn[] diff --git a/near-contract-standards/src/non_fungible_token/index.ts b/near-contract-standards/src/non_fungible_token/index.ts index e69de29b..69020669 100644 --- a/near-contract-standards/src/non_fungible_token/index.ts +++ b/near-contract-standards/src/non_fungible_token/index.ts @@ -0,0 +1,3 @@ +import { NonFungibleToken } from "./core/index"; + +export {NonFungibleToken} \ No newline at end of file From 6106ee4916a14d7781cde3858cb68614c1074ade Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Thu, 13 Oct 2022 11:07:12 +0800 Subject: [PATCH 12/44] format --- .eslintrc.cjs | 32 +- .github/workflows/build.yml | 2 +- .github/workflows/examples.yml | 2 +- .github/workflows/lint.yml | 2 +- .github/workflows/unit-test.yml | 2 +- README.md | 38 +- examples/__tests__/test-clean-state.ava.js | 40 +- examples/__tests__/test-counter.ava.js | 87 +++-- .../__tests__/test-cross-contract-call.ava.js | 76 ++-- .../test-fungible-token-lockable.ava.js | 244 ++++++------ examples/__tests__/test-fungible-token.ava.js | 107 +++--- .../__tests__/test-non-fungible-token.ava.js | 138 +++---- examples/__tests__/test-parking-lot.ava.js | 50 +-- .../test-status-message-collections.ava.js | 115 +++--- examples/__tests__/test-status-message.ava.js | 83 ++-- examples/ava.config.cjs | 10 +- examples/src/clean-state.js | 8 +- examples/src/counter-lowlevel.js | 54 +-- examples/src/counter.js | 14 +- examples/src/counter.ts | 12 +- examples/src/cross-contract-call.js | 40 +- examples/src/fungible-token-helper.js | 10 +- examples/src/fungible-token-lockable.js | 172 +++++---- examples/src/fungible-token.js | 34 +- examples/src/log.ts | 2 +- examples/src/non-fungible-token-receiver.js | 26 +- examples/src/non-fungible-token.js | 91 +++-- examples/src/parking-lot.ts | 60 +-- examples/src/status-message-collections.js | 29 +- examples/src/status-message.js | 14 +- lib/api.d.ts | 4 +- lib/api.js | 10 +- lib/collections/index.d.ts | 10 +- lib/collections/index.js | 10 +- lib/collections/unordered-set.js | 2 +- lib/index.d.ts | 8 +- lib/index.js | 8 +- lib/promise.js | 2 +- lib/types/index.d.ts | 2 +- lib/types/index.js | 2 +- lib/types/public_key.d.ts | 2 +- lib/types/public_key.js | 15 +- lib/utils.d.ts | 2 +- lib/utils.js | 7 +- .../example-contracts/my-nft.ts | 4 +- near-contract-standards/src/event.ts | 8 +- near-contract-standards/src/index.ts | 2 +- .../src/non_fungible_token/core/core_impl.ts | 361 +++++++++++------- .../src/non_fungible_token/core/index.ts | 3 +- .../src/non_fungible_token/events.ts | 38 +- .../src/non_fungible_token/index.ts | 2 +- .../src/non_fungible_token/metadata.ts | 34 +- .../src/non_fungible_token/token.ts | 8 +- .../src/non_fungible_token/utils.ts | 65 +++- src/api.ts | 148 +++---- src/build-tools/include-bytes.js | 36 +- src/build-tools/near-bindgen-exporter.js | 178 +++++---- src/collections/index.ts | 12 +- src/collections/lookup-map.ts | 18 +- src/collections/lookup-set.ts | 2 +- src/collections/unordered-map.ts | 62 +-- src/collections/unordered-set.ts | 74 ++-- src/collections/vector.ts | 66 ++-- src/index.ts | 16 +- src/near-bindgen.ts | 8 +- src/promise.ts | 116 +++--- src/types/index.ts | 4 +- src/types/public_key.ts | 27 +- src/utils.ts | 30 +- tests/__tests__/bytes.ava.js | 238 +++++++----- .../__tests__/decorators/near_bindgen.ava.js | 78 ++-- tests/__tests__/decorators/payable.ava.js | 101 ++--- tests/__tests__/decorators/private.ava.js | 66 ++-- tests/__tests__/function-params.ava.js | 50 +-- tests/__tests__/lookup-map.ava.js | 123 +++--- tests/__tests__/lookup-set.ava.js | 90 ++--- tests/__tests__/test-public-key.ava.js | 166 ++++---- tests/__tests__/test_context_api.ava.js | 164 ++++---- tests/__tests__/test_highlevel_promise.ava.js | 338 +++++++++------- tests/__tests__/test_log_panic_api.ava.js | 150 ++++---- tests/__tests__/test_math_api.ava.js | 114 +++--- tests/__tests__/test_promise_api.ava.js | 325 ++++++++++------ tests/__tests__/test_storage_api.ava.js | 95 ++--- tests/__tests__/typescript.ava.js | 34 +- tests/__tests__/unordered-map.ava.js | 209 +++++----- tests/__tests__/unordered-set.ava.js | 155 ++++---- tests/__tests__/vector.ava.js | 92 ++--- tests/ava.config.cjs | 10 +- tests/src/bytes.js | 56 +-- tests/src/context_api.js | 30 +- tests/src/decorators/payable.ts | 18 +- tests/src/decorators/private.ts | 18 +- tests/src/decorators/require_init_false.ts | 16 +- tests/src/decorators/require_init_true.ts | 16 +- tests/src/function-params.js | 18 +- tests/src/highlevel-promise.js | 89 +++-- tests/src/log_panic_api.js | 40 +- tests/src/lookup-map.js | 34 +- tests/src/lookup-set.js | 26 +- tests/src/math_api.js | 34 +- tests/src/model.js | 12 +- tests/src/promise_api.js | 74 ++-- tests/src/promise_batch_api.js | 100 +++-- tests/src/public-key.js | 60 +-- tests/src/storage_api.js | 18 +- tests/src/typescript.ts | 4 +- tests/src/unordered-map.js | 34 +- tests/src/unordered-set.js | 36 +- tests/src/vector.js | 35 +- 109 files changed, 3507 insertions(+), 2859 deletions(-) diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 6745f7c3..582a480a 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -7,23 +7,27 @@ module.exports = { }, overrides: [ { - files: ['./**/*.ts', './**/*.js'], - extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'prettier'], - parser: '@typescript-eslint/parser', + files: ["./**/*.ts", "./**/*.js"], + extends: [ + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "prettier", + ], + parser: "@typescript-eslint/parser", parserOptions: { - ecmaVersion: 'latest', - sourceType: 'module', - project: ['./{t,j}sconfig.json', './**/{t,j}sconfig.json'], + ecmaVersion: "latest", + sourceType: "module", + project: ["./{t,j}sconfig.json", "./**/{t,j}sconfig.json"], }, - plugins: ['@typescript-eslint'], + plugins: ["@typescript-eslint"], rules: { - '@typescript-eslint/no-unused-vars': [ - 'warn', + "@typescript-eslint/no-unused-vars": [ + "warn", { - varsIgnorePattern: '^_', - argsIgnorePattern: '^_', - destructuredArrayIgnorePattern: '^_', - caughtErrorsIgnorePattern: '^_', + varsIgnorePattern: "^_", + argsIgnorePattern: "^_", + destructuredArrayIgnorePattern: "^_", + caughtErrorsIgnorePattern: "^_", }, ], }, @@ -42,4 +46,4 @@ module.exports = { "cli/**/*.js", ], rules: {}, -} +}; diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d2d44774..c3debeb6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,7 +15,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: - node-version: '16' + node-version: "16" - name: Install modules run: yarn - name: Run build diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml index aaadbb35..b1236088 100644 --- a/.github/workflows/examples.yml +++ b/.github/workflows/examples.yml @@ -15,7 +15,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: - node-version: '16' + node-version: "16" - name: Install dependencies run: yarn && cd examples && yarn - name: clean-state diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index b781b5b4..a41b96ba 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -17,7 +17,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v2 with: - node-version: '16' + node-version: "16" - name: Install modules run: yarn - name: Run lint diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index bae2b7d9..bb7e0c78 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -15,7 +15,7 @@ jobs: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: - node-version: '16' + node-version: "16" - name: Install modules run: yarn - name: Run unit tests diff --git a/README.md b/README.md index 0dc67e90..0ab18225 100644 --- a/README.md +++ b/README.md @@ -52,10 +52,10 @@ When call host function with inappropriate type, means incorrect number of argum All NEAR blockchain provided functionality (host functions) are defined in `src/api.ts` and exported as `near`. You can use them by: ```js -import { near } from 'near-sdk-js' +import { near } from "near-sdk-js"; // near.. e.g.: -let signer = near.signerAccountId() +let signer = near.signerAccountId(); ``` To use nightly host functions, such as `altBn128G1Sum`, your contract need to be built with nightly enabled. Use: @@ -467,10 +467,10 @@ Usage: ```js // create new promise -import { NearPromise, near, includeBytes } from 'near-sdk-js' -import { PublicKey } from 'near-sdk-js/lib/types' +import { NearPromise, near, includeBytes } from "near-sdk-js"; +import { PublicKey } from "near-sdk-js/lib/types"; -let promise = NearPromise.new('account-to-run-promise') +let promise = NearPromise.new("account-to-run-promise"); // possible promise actions, choose and chain what you need: promise @@ -480,28 +480,28 @@ promise .addAccessKey( new PublicKey(near.signerAccountPk()), 250000000000000000000000n, // allowance - 'receiver_account_id', - 'allowed_function_names' + "receiver_account_id", + "allowed_function_names" ) .stake(100000000000000000000000000000n, new PublicKey(near.signerAccountPk())) - .deployContract(includeBytes('path/to/contract.wasm')) + .deployContract(includeBytes("path/to/contract.wasm")) .functionCall( - 'callee_contract_account_id', + "callee_contract_account_id", inputArgs, 0, // amount 2 * Math.pow(10, 13) // gas ) .functionCallWeight( - 'callee_contract_account_id', + "callee_contract_account_id", inputArgs, 0, // amount 2 * Math.pow(10, 13), // gas 1 // weight ) .deleteKey(new PublicKey(near.signerAccountPk())) - .deleteAccount('beneficial_account_id') + .deleteAccount("beneficial_account_id"); -return promise +return promise; ``` In the case of deploy contract, `includeBytes` is a helpful build-time util. You can include the content of a wasm contract, by using `includeBytes('path/to/contract.wasm')`. @@ -512,9 +512,9 @@ Besides above APIs to build something on top of an API, you can also chain promi ```js // assume promise, promise2 and promise3 are create with above APIs, with several actions added like above. -promise.and(promise2).then(promise3) // promiseAnd of [promise_id, promise2_id], then promiseThen(promise_and_id, promise3_id) +promise.and(promise2).then(promise3); // promiseAnd of [promise_id, promise2_id], then promiseThen(promise_and_id, promise3_id) -return promise +return promise; ``` ### Types @@ -528,13 +528,13 @@ Public Key is representing a NEAR account's public key in a JavaScript class. Yo The binary data is in the same format as nearcore, but encoded in bytes. That's one byte to represent the curve type of the public key, either ed25519 (`\x00`), or secp256k1 ('\x01'), follows by the curve-specific public key data in bytes. Examples: ```js -new PublicKey(near.signerAccountPk()) +new PublicKey(near.signerAccountPk()); new PublicKey( - '\x00\xeb\x7f\x5f\x11\xd1\x08\x1f\xe0\xd2\x24\xc5\x67\x36\x21\xad\xcb\x97\xd5\x13\xff\xa8\x5e\x55\xbc\x2b\x74\x4f\x0d\xb1\xe9\xf8\x1f' -) + "\x00\xeb\x7f\x5f\x11\xd1\x08\x1f\xe0\xd2\x24\xc5\x67\x36\x21\xad\xcb\x97\xd5\x13\xff\xa8\x5e\x55\xbc\x2b\x74\x4f\x0d\xb1\xe9\xf8\x1f" +); new PublicKey( - '\x01\xf2\x56\xc6\xe6\xc8\x0b\x21\x3f\x2a\xa0\xb0\x17\x44\x23\x5d\x51\x5c\x59\x44\x35\xbe\x65\x1b\x15\x88\x3a\x10\xdd\x47\x2f\xa6\x46\xce\x62\xea\xf3\x67\x0d\xc5\xcb\x91\x00\xa0\xca\x2a\x55\xb2\xc1\x47\xc1\xe9\xa3\x8c\xe4\x28\x87\x8e\x7d\x46\xe1\xfb\x71\x4a\x99' -) + "\x01\xf2\x56\xc6\xe6\xc8\x0b\x21\x3f\x2a\xa0\xb0\x17\x44\x23\x5d\x51\x5c\x59\x44\x35\xbe\x65\x1b\x15\x88\x3a\x10\xdd\x47\x2f\xa6\x46\xce\x62\xea\xf3\x67\x0d\xc5\xcb\x91\x00\xa0\xca\x2a\x55\xb2\xc1\x47\xc1\xe9\xa3\x8c\xe4\x28\x87\x8e\x7d\x46\xe1\xfb\x71\x4a\x99" +); ``` The human readable form is `ed25519:` or `secp256k1:` following base58-encoded public key. And initialize the Public Key with `PublicKey.fromString`: diff --git a/examples/__tests__/test-clean-state.ava.js b/examples/__tests__/test-clean-state.ava.js index 4015ee30..b46630f0 100644 --- a/examples/__tests__/test-clean-state.ava.js +++ b/examples/__tests__/test-clean-state.ava.js @@ -1,36 +1,36 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.beforeEach(async (t) => { // Init the worker and start a Sandbox server - const worker = await Worker.init() + const worker = await Worker.init(); // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount + const root = worker.rootAccount; // Deploy the clean-state contract. - const cleanState = await root.devDeploy('./build/clean-state.wasm') + const cleanState = await root.devDeploy("./build/clean-state.wasm"); // Save state for test runs, it is unique for each test - t.context.worker = worker + t.context.worker = worker; t.context.accounts = { root, cleanState, - } -}) + }; +}); test.afterEach.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed tear down the worker:', error) - }) -}) + console.log("Failed tear down the worker:", error); + }); +}); -test('Clean state after storing', async (t) => { - const { root, cleanState } = t.context.accounts - await root.call(cleanState, 'put', { key: '1', value: 1 }) - const value1 = await cleanState.view('get', { key: '1' }) - t.is(value1, '1') - await cleanState.call(cleanState, 'clean', { keys: ['1'] }) - const value2 = await cleanState.view('get', { key: '1' }) - t.is(value2, null) -}) +test("Clean state after storing", async (t) => { + const { root, cleanState } = t.context.accounts; + await root.call(cleanState, "put", { key: "1", value: 1 }); + const value1 = await cleanState.view("get", { key: "1" }); + t.is(value1, "1"); + await cleanState.call(cleanState, "clean", { keys: ["1"] }); + const value2 = await cleanState.view("get", { key: "1" }); + t.is(value2, null); +}); diff --git a/examples/__tests__/test-counter.ava.js b/examples/__tests__/test-counter.ava.js index afd9fa4c..b8a94a0f 100644 --- a/examples/__tests__/test-counter.ava.js +++ b/examples/__tests__/test-counter.ava.js @@ -1,66 +1,69 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.beforeEach(async (t) => { // Init the worker and start a Sandbox server - const worker = await Worker.init() + const worker = await Worker.init(); // Prepare sandbox for tests, create accounts, deploy contracts, etc. - const root = worker.rootAccount + const root = worker.rootAccount; // Deploy the counter contract. const counter = await root.devDeploy( - process.env['COUNTER_LOWLEVEL'] - ? './build/counter-lowlevel.wasm' - : process.env['COUNTER_TS'] - ? './build/counter-ts.wasm' - : './build/counter.wasm' - ) + process.env["COUNTER_LOWLEVEL"] + ? "./build/counter-lowlevel.wasm" + : process.env["COUNTER_TS"] + ? "./build/counter-ts.wasm" + : "./build/counter.wasm" + ); // Test users - const ali = await root.createSubAccount('ali') - const bob = await root.createSubAccount('bob') + const ali = await root.createSubAccount("ali"); + const bob = await root.createSubAccount("bob"); // Save state for test runs - t.context.worker = worker - t.context.accounts = { root, counter, ali, bob } -}) + t.context.worker = worker; + t.context.accounts = { root, counter, ali, bob }; +}); // If the environment is reused, use test.after to replace test.afterEach test.afterEach.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed to tear down the worker:', error) - }) -}) + console.log("Failed to tear down the worker:", error); + }); +}); -test('Initial count is 0', async (t) => { - const { counter } = t.context.accounts - const result = await counter.view('getCount', {}) - t.is(result, 0) -}) +test("Initial count is 0", async (t) => { + const { counter } = t.context.accounts; + const result = await counter.view("getCount", {}); + t.is(result, 0); +}); -test('Increase works', async (t) => { - const { counter, ali, bob } = t.context.accounts - await ali.call(counter, 'increase', {}) +test("Increase works", async (t) => { + const { counter, ali, bob } = t.context.accounts; + await ali.call(counter, "increase", {}); - let result = await counter.view('getCount', {}) - t.is(result, 1) + let result = await counter.view("getCount", {}); + t.is(result, 1); - await bob.call(counter, 'increase', { n: 4 }) - result = await counter.view('getCount', {}) - t.is(result, 5) -}) + await bob.call(counter, "increase", { n: 4 }); + result = await counter.view("getCount", {}); + t.is(result, 5); +}); -test('Decrease works', async (t) => { - const { counter, ali, bob } = t.context.accounts - await ali.call(counter, 'decrease', {}) +test("Decrease works", async (t) => { + const { counter, ali, bob } = t.context.accounts; + await ali.call(counter, "decrease", {}); - let result = await counter.view('getCount', {}) - t.is(result, -1) + let result = await counter.view("getCount", {}); + t.is(result, -1); - let dec = await bob.callRaw(counter, 'decrease', { n: 4 }) + let dec = await bob.callRaw(counter, "decrease", { n: 4 }); // ensure imported log does work, not silent failure - t.is(dec.result.receipts_outcome[0].outcome.logs[0], 'Counter decreased to -5') - result = await counter.view('getCount', {}) - t.is(result, -5) -}) + t.is( + dec.result.receipts_outcome[0].outcome.logs[0], + "Counter decreased to -5" + ); + result = await counter.view("getCount", {}); + t.is(result, -5); +}); diff --git a/examples/__tests__/test-cross-contract-call.ava.js b/examples/__tests__/test-cross-contract-call.ava.js index c7f5442f..55308c93 100644 --- a/examples/__tests__/test-cross-contract-call.ava.js +++ b/examples/__tests__/test-cross-contract-call.ava.js @@ -1,71 +1,81 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.beforeEach(async (t) => { // Init the worker and start a Sandbox server - const worker = await Worker.init() + const worker = await Worker.init(); // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount + const root = worker.rootAccount; // Deploy status-message the contract. - const statusMessage = await root.devDeploy('./build/status-message.wasm') + const statusMessage = await root.devDeploy("./build/status-message.wasm"); // Deploy the onCall contract. - const onCall = await root.devDeploy('./build/cross-contract-call.wasm') + const onCall = await root.devDeploy("./build/cross-contract-call.wasm"); // Init the contract - await onCall.call(onCall, 'init', { + await onCall.call(onCall, "init", { statusMessageContract: statusMessage.accountId, - }) + }); // Create test accounts - const ali = await root.createSubAccount('ali') - const bob = await root.createSubAccount('bob') + const ali = await root.createSubAccount("ali"); + const bob = await root.createSubAccount("bob"); // Save state for test runs, it is unique for each test - t.context.worker = worker + t.context.worker = worker; t.context.accounts = { root, statusMessage, onCall, ali, bob, - } -}) + }; +}); test.afterEach.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed tear down the worker:', error) - }) -}) + console.log("Failed tear down the worker:", error); + }); +}); -test('Nobody is on-call in the beginning', async (t) => { - const { onCall } = t.context.accounts - const result = await onCall.view('person_on_call', {}) - t.is(result, 'undefined') -}) +test("Nobody is on-call in the beginning", async (t) => { + const { onCall } = t.context.accounts; + const result = await onCall.view("person_on_call", {}); + t.is(result, "undefined"); +}); -test('Person can be set on-call if AVAILABLE', async (t) => { - const { ali, bob, onCall, statusMessage } = t.context.accounts +test("Person can be set on-call if AVAILABLE", async (t) => { + const { ali, bob, onCall, statusMessage } = t.context.accounts; // Ali set her status as AVAILABLE - await ali.call(statusMessage, 'set_status', { message: 'AVAILABLE' }) + await ali.call(statusMessage, "set_status", { message: "AVAILABLE" }); // Bob sets Ali on-call - await bob.call(onCall, 'set_person_on_call', { accountId: ali.accountId }, { gas: 120000000000000 }) + await bob.call( + onCall, + "set_person_on_call", + { accountId: ali.accountId }, + { gas: 120000000000000 } + ); // Check that Ali is on-call - t.is(await onCall.view('person_on_call', {}), ali.accountId) -}) + t.is(await onCall.view("person_on_call", {}), ali.accountId); +}); -test('Person can NOT be set on-call if UNAVAILABLE', async (t) => { - const { ali, bob, onCall, statusMessage } = t.context.accounts +test("Person can NOT be set on-call if UNAVAILABLE", async (t) => { + const { ali, bob, onCall, statusMessage } = t.context.accounts; // Ali set her status as AVAILABLE - await ali.call(statusMessage, 'set_status', { message: 'UNAVAILABLE' }) + await ali.call(statusMessage, "set_status", { message: "UNAVAILABLE" }); // Bob tries to sets Ali on-call - await bob.call(onCall, 'set_person_on_call', { accountId: ali.accountId }, { gas: 120000000000000 }) + await bob.call( + onCall, + "set_person_on_call", + { accountId: ali.accountId }, + { gas: 120000000000000 } + ); // Check that Ali is NOT on-call - t.not(await onCall.view('person_on_call', {}), ali.accountId) -}) + t.not(await onCall.view("person_on_call", {}), ali.accountId); +}); diff --git a/examples/__tests__/test-fungible-token-lockable.ava.js b/examples/__tests__/test-fungible-token-lockable.ava.js index b1f119e5..2caa29b3 100644 --- a/examples/__tests__/test-fungible-token-lockable.ava.js +++ b/examples/__tests__/test-fungible-token-lockable.ava.js @@ -1,215 +1,217 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.beforeEach(async (t) => { // Init the worker and start a Sandbox server - const worker = await Worker.init() + const worker = await Worker.init(); // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount + const root = worker.rootAccount; // Deploy the lockable-ft contract. - const lockableFt = await root.devDeploy('./build/fungible-token-lockable.wasm') + const lockableFt = await root.devDeploy( + "./build/fungible-token-lockable.wasm" + ); // Init the contract - await lockableFt.call(lockableFt, 'init', { - prefix: 'prefix', + await lockableFt.call(lockableFt, "init", { + prefix: "prefix", totalSupply: 10000, - }) + }); // Test users - const ali = await root.createSubAccount('ali') - const bob = await root.createSubAccount('bob') + const ali = await root.createSubAccount("ali"); + const bob = await root.createSubAccount("bob"); // Save state for test runs - t.context.worker = worker - t.context.accounts = { root, lockableFt, ali, bob } -}) + t.context.worker = worker; + t.context.accounts = { root, lockableFt, ali, bob }; +}); test.afterEach.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed to tear down the worker:', error) - }) -}) + console.log("Failed to tear down the worker:", error); + }); +}); -test('Owner initial details', async (t) => { - const { lockableFt } = t.context.accounts - const totalSupply = await lockableFt.view('getTotalSupply', {}) - t.is(totalSupply, 10000) - const totalBalance = await lockableFt.view('getTotalBalance', { +test("Owner initial details", async (t) => { + const { lockableFt } = t.context.accounts; + const totalSupply = await lockableFt.view("getTotalSupply", {}); + t.is(totalSupply, 10000); + const totalBalance = await lockableFt.view("getTotalBalance", { ownerId: lockableFt.accountId, - }) - t.is(totalBalance, 10000) - const unlockedBalance = await lockableFt.view('getUnlockedBalance', { + }); + t.is(totalBalance, 10000); + const unlockedBalance = await lockableFt.view("getUnlockedBalance", { ownerId: lockableFt.accountId, - }) - t.is(unlockedBalance, 10000) - const allowance = await lockableFt.view('getAllowance', { + }); + t.is(unlockedBalance, 10000); + const allowance = await lockableFt.view("getAllowance", { ownerId: lockableFt.accountId, escrowAccountId: lockableFt.accountId, - }) - t.is(allowance, 0) - const lockedBalance = await lockableFt.view('getLockedBalance', { + }); + t.is(allowance, 0); + const lockedBalance = await lockableFt.view("getLockedBalance", { ownerId: lockableFt.accountId, escrowAccountId: lockableFt.accountId, - }) - t.is(lockedBalance, 0) -}) + }); + t.is(lockedBalance, 0); +}); -test('Set allowance', async (t) => { - const { lockableFt, ali } = t.context.accounts - await lockableFt.call(lockableFt, 'setAllowance', { +test("Set allowance", async (t) => { + const { lockableFt, ali } = t.context.accounts; + await lockableFt.call(lockableFt, "setAllowance", { escrowAccountId: ali.accountId, allowance: 100, - }) - const aliAllowance = await lockableFt.view('getAllowance', { + }); + const aliAllowance = await lockableFt.view("getAllowance", { ownerId: lockableFt.accountId, escrowAccountId: ali.accountId, - }) - t.is(aliAllowance, 100) - const contractAllowance = await lockableFt.view('getAllowance', { + }); + t.is(aliAllowance, 100); + const contractAllowance = await lockableFt.view("getAllowance", { ownerId: lockableFt.accountId, escrowAccountId: lockableFt.accountId, - }) - t.is(contractAllowance, 0) -}) + }); + t.is(contractAllowance, 0); +}); -test('Fail to set allowance for oneself', async (t) => { - const { lockableFt } = t.context.accounts +test("Fail to set allowance for oneself", async (t) => { + const { lockableFt } = t.context.accounts; const error = await t.throwsAsync(() => - lockableFt.call(lockableFt, 'setAllowance', { + lockableFt.call(lockableFt, "setAllowance", { escrowAccountId: lockableFt.accountId, allowance: 100, }) - ) - t.assert(error.message.includes(`Can't set allowance for yourself`)) -}) + ); + t.assert(error.message.includes(`Can't set allowance for yourself`)); +}); -test('Lock owner', async (t) => { - const { lockableFt } = t.context.accounts - await lockableFt.call(lockableFt, 'lock', { +test("Lock owner", async (t) => { + const { lockableFt } = t.context.accounts; + await lockableFt.call(lockableFt, "lock", { ownerId: lockableFt.accountId, lockAmount: 100, - }) - const unlockedBalance = await lockableFt.view('getUnlockedBalance', { + }); + const unlockedBalance = await lockableFt.view("getUnlockedBalance", { ownerId: lockableFt.accountId, - }) - t.is(unlockedBalance, 9900) - const allowance = await lockableFt.view('getAllowance', { + }); + t.is(unlockedBalance, 9900); + const allowance = await lockableFt.view("getAllowance", { ownerId: lockableFt.accountId, escrowAccountId: lockableFt.accountId, - }) - t.is(allowance, 0) - const lockedBalance = await lockableFt.view('getLockedBalance', { + }); + t.is(allowance, 0); + const lockedBalance = await lockableFt.view("getLockedBalance", { ownerId: lockableFt.accountId, escrowAccountId: lockableFt.accountId, - }) - t.is(lockedBalance, 100) -}) + }); + t.is(lockedBalance, 100); +}); -test('Lock failures', async (t) => { - const { lockableFt, ali } = t.context.accounts +test("Lock failures", async (t) => { + const { lockableFt, ali } = t.context.accounts; const error1 = await t.throwsAsync(() => - lockableFt.call(lockableFt, 'lock', { + lockableFt.call(lockableFt, "lock", { ownerId: lockableFt.accountId, lockAmount: 0, }) - ) - t.assert(error1.message.includes(`Can't lock 0 or less tokens`)) + ); + t.assert(error1.message.includes(`Can't lock 0 or less tokens`)); const error2 = await t.throwsAsync(() => - lockableFt.call(lockableFt, 'lock', { + lockableFt.call(lockableFt, "lock", { ownerId: lockableFt.accountId, lockAmount: 10001, }) - ) - t.assert(error2.message.includes(`Not enough unlocked balance`)) + ); + t.assert(error2.message.includes(`Not enough unlocked balance`)); const error3 = await t.throwsAsync(() => - ali.call(lockableFt, 'lock', { + ali.call(lockableFt, "lock", { ownerId: lockableFt.accountId, lockAmount: 10, }) - ) - t.assert(error3.message.includes(`Not enough allowance`)) -}) + ); + t.assert(error3.message.includes(`Not enough allowance`)); +}); -test('Unlock owner', async (t) => { - const { lockableFt } = t.context.accounts - await lockableFt.call(lockableFt, 'lock', { +test("Unlock owner", async (t) => { + const { lockableFt } = t.context.accounts; + await lockableFt.call(lockableFt, "lock", { ownerId: lockableFt.accountId, lockAmount: 100, - }) - await lockableFt.call(lockableFt, 'unlock', { + }); + await lockableFt.call(lockableFt, "unlock", { ownerId: lockableFt.accountId, unlockAmount: 100, - }) - const unlockedBalance = await lockableFt.view('getUnlockedBalance', { + }); + const unlockedBalance = await lockableFt.view("getUnlockedBalance", { ownerId: lockableFt.accountId, - }) - t.is(unlockedBalance, 10000) - const allowance = await lockableFt.view('getAllowance', { + }); + t.is(unlockedBalance, 10000); + const allowance = await lockableFt.view("getAllowance", { ownerId: lockableFt.accountId, escrowAccountId: lockableFt.accountId, - }) - t.is(allowance, 0) - const lockedBalance = await lockableFt.view('getLockedBalance', { + }); + t.is(allowance, 0); + const lockedBalance = await lockableFt.view("getLockedBalance", { ownerId: lockableFt.accountId, escrowAccountId: lockableFt.accountId, - }) - t.is(lockedBalance, 0) -}) + }); + t.is(lockedBalance, 0); +}); -test('Unlock failures', async (t) => { - const { lockableFt } = t.context.accounts +test("Unlock failures", async (t) => { + const { lockableFt } = t.context.accounts; const error1 = await t.throwsAsync(() => - lockableFt.call(lockableFt, 'unlock', { + lockableFt.call(lockableFt, "unlock", { ownerId: lockableFt.accountId, unlockAmount: 0, }) - ) - t.assert(error1.message.includes(`Can't unlock 0 or less tokens`)) + ); + t.assert(error1.message.includes(`Can't unlock 0 or less tokens`)); const error2 = await t.throwsAsync(() => - lockableFt.call(lockableFt, 'unlock', { + lockableFt.call(lockableFt, "unlock", { ownerId: lockableFt.accountId, unlockAmount: 1, }) - ) - t.assert(error2.message.includes(`Not enough locked tokens`)) -}) + ); + t.assert(error2.message.includes(`Not enough locked tokens`)); +}); -test('Simple transfer', async (t) => { - const { lockableFt, ali } = t.context.accounts - await lockableFt.call(lockableFt, 'transfer', { +test("Simple transfer", async (t) => { + const { lockableFt, ali } = t.context.accounts; + await lockableFt.call(lockableFt, "transfer", { newOwnerId: ali.accountId, amount: 100, - }) - const ownerUnlockedBalance = await lockableFt.view('getUnlockedBalance', { + }); + const ownerUnlockedBalance = await lockableFt.view("getUnlockedBalance", { ownerId: lockableFt.accountId, - }) - t.is(ownerUnlockedBalance, 9900) - const aliUnlockedBalance = await lockableFt.view('getUnlockedBalance', { + }); + t.is(ownerUnlockedBalance, 9900); + const aliUnlockedBalance = await lockableFt.view("getUnlockedBalance", { ownerId: ali.accountId, - }) - t.is(aliUnlockedBalance, 100) -}) + }); + t.is(aliUnlockedBalance, 100); +}); -test('Transfer failures', async (t) => { - const { lockableFt, ali } = t.context.accounts +test("Transfer failures", async (t) => { + const { lockableFt, ali } = t.context.accounts; const error1 = await t.throwsAsync(() => - lockableFt.call(lockableFt, 'transfer', { + lockableFt.call(lockableFt, "transfer", { newOwnerId: ali.accountId, amount: 0, }) - ) - t.assert(error1.message.includes(`Can't transfer 0 or less tokens`)) + ); + t.assert(error1.message.includes(`Can't transfer 0 or less tokens`)); const error2 = await t.throwsAsync(() => - lockableFt.call(lockableFt, 'transfer', { + lockableFt.call(lockableFt, "transfer", { newOwnerId: ali.accountId, amount: 10001, }) - ) - t.assert(error2.message.includes(`Not enough unlocked balance`)) -}) + ); + t.assert(error2.message.includes(`Not enough unlocked balance`)); +}); diff --git a/examples/__tests__/test-fungible-token.ava.js b/examples/__tests__/test-fungible-token.ava.js index bdc9b23a..df56887b 100644 --- a/examples/__tests__/test-fungible-token.ava.js +++ b/examples/__tests__/test-fungible-token.ava.js @@ -1,81 +1,88 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.beforeEach(async (t) => { // Init the worker and start a Sandbox server - const worker = await Worker.init() + const worker = await Worker.init(); // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount + const root = worker.rootAccount; // Deploy the ft contract. - const ft = await root.devDeploy('./build/fungible-token.wasm') - const xcc = await root.devDeploy('./build/fungible-token-helper.wasm') + const ft = await root.devDeploy("./build/fungible-token.wasm"); + const xcc = await root.devDeploy("./build/fungible-token-helper.wasm"); // Init the contracts - await ft.call(ft, 'init', { prefix: 'a', totalSupply: '1000' }) + await ft.call(ft, "init", { prefix: "a", totalSupply: "1000" }); // Create test accounts - const ali = await root.createSubAccount('ali') - const bob = await root.createSubAccount('bob') + const ali = await root.createSubAccount("ali"); + const bob = await root.createSubAccount("bob"); // Save state for test runs, it is unique for each test - t.context.worker = worker - t.context.accounts = { root, ft, ali, bob, xcc } -}) + t.context.worker = worker; + t.context.accounts = { root, ft, ali, bob, xcc }; +}); test.afterEach.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed tear down the worker:', error) - }) -}) + console.log("Failed tear down the worker:", error); + }); +}); -test('Owner has all balance in the beginning', async (t) => { - const { ft } = t.context.accounts - const result = await ft.view('ftBalanceOf', { accountId: ft.accountId }) - t.is(result, '1000') -}) +test("Owner has all balance in the beginning", async (t) => { + const { ft } = t.context.accounts; + const result = await ft.view("ftBalanceOf", { accountId: ft.accountId }); + t.is(result, "1000"); +}); -test('Can transfer if balance is sufficient', async (t) => { - const { ali, ft } = t.context.accounts +test("Can transfer if balance is sufficient", async (t) => { + const { ali, ft } = t.context.accounts; - await ft.call(ft, 'ftTransfer', { receiverId: ali.accountId, amount: '100' }) - const aliBalance = await ft.view('ftBalanceOf', { accountId: ali.accountId }) - t.is(aliBalance, '100') - const ownerBalance = await ft.view('ftBalanceOf', { + await ft.call(ft, "ftTransfer", { receiverId: ali.accountId, amount: "100" }); + const aliBalance = await ft.view("ftBalanceOf", { accountId: ali.accountId }); + t.is(aliBalance, "100"); + const ownerBalance = await ft.view("ftBalanceOf", { accountId: ft.accountId, - }) - t.is(ownerBalance, '900') -}) + }); + t.is(ownerBalance, "900"); +}); -test('Cannot transfer if balance is not sufficient', async (t) => { - const { ali, bob, ft } = t.context.accounts +test("Cannot transfer if balance is not sufficient", async (t) => { + const { ali, bob, ft } = t.context.accounts; try { - await ali.call(ft, 'ftTransfer', { + await ali.call(ft, "ftTransfer", { receiverId: bob.accountId, - amount: '100', - }) + amount: "100", + }); } catch (e) { t.assert( - e.toString().indexOf("Smart contract panicked: assertion failed: The account doesn't have enough balance") >= 0 - ) + e + .toString() + .indexOf( + "Smart contract panicked: assertion failed: The account doesn't have enough balance" + ) >= 0 + ); } -}) +}); -test('Cross contract transfer', async (t) => { - const { xcc, ft } = t.context.accounts +test("Cross contract transfer", async (t) => { + const { xcc, ft } = t.context.accounts; await ft.call( ft, - 'ftTransferCall', - { receiverId: xcc.accountId, amount: '900', memo: null, msg: 'test msg' }, + "ftTransferCall", + { receiverId: xcc.accountId, amount: "900", memo: null, msg: "test msg" }, { gas: 200000000000000 } - ) - const aliBalance = await ft.view('ftBalanceOf', { accountId: xcc.accountId }) - t.is(aliBalance, '900') - const aliSubContractData = await xcc.view('getContractData') - t.is(aliSubContractData, `[900 from ${ft.accountId} to ${xcc.accountId}] test msg `) - const ownerBalance = await ft.view('ftBalanceOf', { + ); + const aliBalance = await ft.view("ftBalanceOf", { accountId: xcc.accountId }); + t.is(aliBalance, "900"); + const aliSubContractData = await xcc.view("getContractData"); + t.is( + aliSubContractData, + `[900 from ${ft.accountId} to ${xcc.accountId}] test msg ` + ); + const ownerBalance = await ft.view("ftBalanceOf", { accountId: ft.accountId, - }) - t.is(ownerBalance, '100') -}) + }); + t.is(ownerBalance, "100"); +}); diff --git a/examples/__tests__/test-non-fungible-token.ava.js b/examples/__tests__/test-non-fungible-token.ava.js index c6761481..4f215a67 100644 --- a/examples/__tests__/test-non-fungible-token.ava.js +++ b/examples/__tests__/test-non-fungible-token.ava.js @@ -1,127 +1,129 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.beforeEach(async (t) => { // Init the worker and start a Sandbox server - const worker = await Worker.init() + const worker = await Worker.init(); // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount + const root = worker.rootAccount; // Deploy the nft contract. - const nft = await root.devDeploy('./build/non-fungible-token.wasm') + const nft = await root.devDeploy("./build/non-fungible-token.wasm"); // Init the contract - await nft.call(nft, 'init', { + await nft.call(nft, "init", { owner_id: nft.accountId, - owner_by_id_prefix: 'a', - }) + owner_by_id_prefix: "a", + }); // Deploy the tokenReceiver contract. - const tokenReceiver = await root.devDeploy('./build/non-fungible-token-receiver.wasm') + const tokenReceiver = await root.devDeploy( + "./build/non-fungible-token-receiver.wasm" + ); // Init the contract - await tokenReceiver.call(tokenReceiver, 'init', { + await tokenReceiver.call(tokenReceiver, "init", { nonFungibleTokenAccountId: nft.accountId, - }) + }); // Mint an NFT - let tokenId = 'my-cool-nft' - await nft.call(nft, 'nftMint', { + let tokenId = "my-cool-nft"; + await nft.call(nft, "nftMint", { token_id: tokenId, token_owner_id: nft.accountId, - }) + }); // Create test accounts - const ali = await root.createSubAccount('ali') - const bob = await root.createSubAccount('bob') + const ali = await root.createSubAccount("ali"); + const bob = await root.createSubAccount("bob"); // Save state for test runs, it is unique for each test - t.context.worker = worker - t.context.accounts = { root, nft, tokenReceiver, tokenId, ali, bob } -}) + t.context.worker = worker; + t.context.accounts = { root, nft, tokenReceiver, tokenId, ali, bob }; +}); test.afterEach.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed tear down the worker:', error) - }) -}) - -test('Owner has the NFT in the beginning', async (t) => { - const { nft, tokenId } = t.context.accounts - const result = await nft.view('nftToken', { token_id: tokenId }) - t.deepEqual(result, { owner_id: nft.accountId, token_id: tokenId }) -}) - -test('Simple transfer', async (t) => { - const { nft, tokenId, ali } = t.context.accounts - await nft.call(nft, 'nftTransfer', { + console.log("Failed tear down the worker:", error); + }); +}); + +test("Owner has the NFT in the beginning", async (t) => { + const { nft, tokenId } = t.context.accounts; + const result = await nft.view("nftToken", { token_id: tokenId }); + t.deepEqual(result, { owner_id: nft.accountId, token_id: tokenId }); +}); + +test("Simple transfer", async (t) => { + const { nft, tokenId, ali } = t.context.accounts; + await nft.call(nft, "nftTransfer", { receiver_id: ali.accountId, token_id: tokenId, - }) - const result = await nft.view('nftToken', { token_id: tokenId }) - t.deepEqual(result, { owner_id: ali.accountId, token_id: tokenId }) -}) + }); + const result = await nft.view("nftToken", { token_id: tokenId }); + t.deepEqual(result, { owner_id: ali.accountId, token_id: tokenId }); +}); -test('Transfer failures', async (t) => { - const { nft, tokenId, ali } = t.context.accounts +test("Transfer failures", async (t) => { + const { nft, tokenId, ali } = t.context.accounts; const error1 = await t.throwsAsync(() => - ali.call(nft, 'nftTransfer', { + ali.call(nft, "nftTransfer", { receiver_id: nft.accountId, - token_id: 'non-existent-id', + token_id: "non-existent-id", }) - ) - t.assert(error1.message.includes(`Token not found`)) + ); + t.assert(error1.message.includes(`Token not found`)); const error2 = await t.throwsAsync(() => - ali.call(nft, 'nftTransfer', { + ali.call(nft, "nftTransfer", { receiver_id: nft.accountId, token_id: tokenId, }) - ) - t.assert(error2.message.includes(`Sender must be the current owner`)) + ); + t.assert(error2.message.includes(`Sender must be the current owner`)); const error3 = await t.throwsAsync(() => - nft.call(nft, 'nftTransfer', { + nft.call(nft, "nftTransfer", { receiver_id: nft.accountId, token_id: tokenId, }) - ) - t.assert(error3.message.includes(`Current and next owner must differ`)) -}) + ); + t.assert(error3.message.includes(`Current and next owner must differ`)); +}); -test('Transfer call where receiver returns the token', async (t) => { - const { nft, tokenReceiver, tokenId } = t.context.accounts +test("Transfer call where receiver returns the token", async (t) => { + const { nft, tokenReceiver, tokenId } = t.context.accounts; await nft.call( nft, - 'nftTransferCall', + "nftTransferCall", { receiver_id: tokenReceiver.accountId, token_id: tokenId, approval_id: null, memo: null, - msg: 'return-it-now', + msg: "return-it-now", }, - { gas: '120000000000000' } - ) - const result = await nft.view('nftToken', { token_id: tokenId }) - t.deepEqual(result, { owner_id: nft.accountId, token_id: tokenId }) -}) - -test('Transfer call where receiver keeps the token', async (t) => { - const { nft, tokenReceiver, tokenId } = t.context.accounts + { gas: "120000000000000" } + ); + const result = await nft.view("nftToken", { token_id: tokenId }); + t.deepEqual(result, { owner_id: nft.accountId, token_id: tokenId }); +}); + +test("Transfer call where receiver keeps the token", async (t) => { + const { nft, tokenReceiver, tokenId } = t.context.accounts; await nft.call( nft, - 'nftTransferCall', + "nftTransferCall", { receiver_id: tokenReceiver.accountId, token_id: tokenId, approval_id: null, memo: null, - msg: 'keep-it-now', + msg: "keep-it-now", }, - { gas: '120000000000000' } - ) - const result = await nft.view('nftToken', { token_id: tokenId }) - t.deepEqual(result, { owner_id: tokenReceiver.accountId, token_id: tokenId }) -}) + { gas: "120000000000000" } + ); + const result = await nft.view("nftToken", { token_id: tokenId }); + t.deepEqual(result, { owner_id: tokenReceiver.accountId, token_id: tokenId }); +}); diff --git a/examples/__tests__/test-parking-lot.ava.js b/examples/__tests__/test-parking-lot.ava.js index b507277b..acc86394 100644 --- a/examples/__tests__/test-parking-lot.ava.js +++ b/examples/__tests__/test-parking-lot.ava.js @@ -1,44 +1,44 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.beforeEach(async (t) => { - const worker = await Worker.init() - const root = worker.rootAccount + const worker = await Worker.init(); + const root = worker.rootAccount; - const parkingLot = await root.devDeploy('build/parking-lot.wasm') + const parkingLot = await root.devDeploy("build/parking-lot.wasm"); - const ali = await root.createSubAccount('ali') + const ali = await root.createSubAccount("ali"); - t.context.worker = worker - t.context.accounts = { root, parkingLot, ali } -}) + t.context.worker = worker; + t.context.accounts = { root, parkingLot, ali }; +}); test.afterEach.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed to tear down the worker:', error) - }) -}) + console.log("Failed to tear down the worker:", error); + }); +}); -test('No BMW in the beginning', async (t) => { - const { parkingLot } = t.context.accounts +test("No BMW in the beginning", async (t) => { + const { parkingLot } = t.context.accounts; - t.is(await parkingLot.view('getCarSpecs', { name: 'BMW' }), null) -}) + t.is(await parkingLot.view("getCarSpecs", { name: "BMW" }), null); +}); -test('Can run the car after adding it', async (t) => { - const { ali, parkingLot } = t.context.accounts +test("Can run the car after adding it", async (t) => { + const { ali, parkingLot } = t.context.accounts; const bmwSpecs = { id: 1, - color: 'Black', + color: "Black", price: 100500, engineHp: 500, - } + }; - await ali.call(parkingLot, 'addCar', { - name: 'BMW', + await ali.call(parkingLot, "addCar", { + name: "BMW", ...bmwSpecs, - }) + }); - t.is(await parkingLot.view('runCar', { name: 'BMW' }), 'boom') -}) + t.is(await parkingLot.view("runCar", { name: "BMW" }), "boom"); +}); diff --git a/examples/__tests__/test-status-message-collections.ava.js b/examples/__tests__/test-status-message-collections.ava.js index 9ef157a1..e50f2814 100644 --- a/examples/__tests__/test-status-message-collections.ava.js +++ b/examples/__tests__/test-status-message-collections.ava.js @@ -1,79 +1,84 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.beforeEach(async (t) => { // Init the worker and start a Sandbox server - const worker = await Worker.init() + const worker = await Worker.init(); // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount + const root = worker.rootAccount; // Deploy the statis-message contract. - const statusMessage = await root.devDeploy('./build/status-message-collections.wasm') + const statusMessage = await root.devDeploy( + "./build/status-message-collections.wasm" + ); // Test users - const ali = await root.createSubAccount('ali') - const bob = await root.createSubAccount('bob') - const carl = await root.createSubAccount('carl') + const ali = await root.createSubAccount("ali"); + const bob = await root.createSubAccount("bob"); + const carl = await root.createSubAccount("carl"); // Save state for test runs - t.context.worker = worker - t.context.accounts = { root, statusMessage, ali, bob, carl } -}) + t.context.worker = worker; + t.context.accounts = { root, statusMessage, ali, bob, carl }; +}); test.afterEach.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed to tear down the worker:', error) - }) -}) + console.log("Failed to tear down the worker:", error); + }); +}); -test('Root gets null status', async (t) => { - const { root, statusMessage } = t.context.accounts - const result = await statusMessage.view('get_status', { +test("Root gets null status", async (t) => { + const { root, statusMessage } = t.context.accounts; + const result = await statusMessage.view("get_status", { account_id: root.accountId, - }) - t.is(result, null) -}) - -test('Ali sets then gets status', async (t) => { - const { ali, statusMessage } = t.context.accounts - await ali.call(statusMessage, 'set_status', { message: 'hello' }) - - t.is(await statusMessage.view('get_status', { account_id: ali.accountId }), 'hello') -}) - -test('Bob and Carl have different statuses', async (t) => { - const { statusMessage, bob, carl } = t.context.accounts - await bob.call(statusMessage, 'set_status', { message: 'hello' }) - await carl.call(statusMessage, 'set_status', { message: 'world' }) - - const bobStatus = await statusMessage.view('get_status', { + }); + t.is(result, null); +}); + +test("Ali sets then gets status", async (t) => { + const { ali, statusMessage } = t.context.accounts; + await ali.call(statusMessage, "set_status", { message: "hello" }); + + t.is( + await statusMessage.view("get_status", { account_id: ali.accountId }), + "hello" + ); +}); + +test("Bob and Carl have different statuses", async (t) => { + const { statusMessage, bob, carl } = t.context.accounts; + await bob.call(statusMessage, "set_status", { message: "hello" }); + await carl.call(statusMessage, "set_status", { message: "world" }); + + const bobStatus = await statusMessage.view("get_status", { account_id: bob.accountId, - }) - const carlStatus = await statusMessage.view('get_status', { + }); + const carlStatus = await statusMessage.view("get_status", { account_id: carl.accountId, - }) - t.is(bobStatus, 'hello') - t.is(carlStatus, 'world') -}) + }); + t.is(bobStatus, "hello"); + t.is(carlStatus, "world"); +}); -test('Get statuses from the contract', async (t) => { - const { statusMessage, bob, carl } = t.context.accounts - await bob.call(statusMessage, 'set_status', { message: 'hello' }) - await carl.call(statusMessage, 'set_status', { message: 'world' }) +test("Get statuses from the contract", async (t) => { + const { statusMessage, bob, carl } = t.context.accounts; + await bob.call(statusMessage, "set_status", { message: "hello" }); + await carl.call(statusMessage, "set_status", { message: "world" }); - const statuses = await statusMessage.view('get_all_statuses', {}) + const statuses = await statusMessage.view("get_all_statuses", {}); t.deepEqual(statuses, [ - [bob.accountId, 'hello'], - [carl.accountId, 'world'], - ]) -}) + [bob.accountId, "hello"], + [carl.accountId, "world"], + ]); +}); -test('message has stored by someone', async (t) => { - const { ali, statusMessage } = t.context.accounts - await ali.call(statusMessage, 'set_status', { message: 'hello' }) +test("message has stored by someone", async (t) => { + const { ali, statusMessage } = t.context.accounts; + await ali.call(statusMessage, "set_status", { message: "hello" }); - t.is(await statusMessage.view('has_status', { message: 'hello' }), true) + t.is(await statusMessage.view("has_status", { message: "hello" }), true); - t.is(await statusMessage.view('has_status', { message: 'world' }), false) -}) + t.is(await statusMessage.view("has_status", { message: "world" }), false); +}); diff --git a/examples/__tests__/test-status-message.ava.js b/examples/__tests__/test-status-message.ava.js index 22958dd6..618a9734 100644 --- a/examples/__tests__/test-status-message.ava.js +++ b/examples/__tests__/test-status-message.ava.js @@ -1,58 +1,61 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.before(async (t) => { // Init the worker and start a Sandbox server - const worker = await Worker.init() + const worker = await Worker.init(); // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount + const root = worker.rootAccount; // Deploy the contract. - const statusMessage = await root.devDeploy('./build/status-message.wasm') + const statusMessage = await root.devDeploy("./build/status-message.wasm"); // Create test users - const ali = await root.createSubAccount('ali') - const bob = await root.createSubAccount('bob') - const carl = await root.createSubAccount('carl') + const ali = await root.createSubAccount("ali"); + const bob = await root.createSubAccount("bob"); + const carl = await root.createSubAccount("carl"); // Save state for test runs - t.context.worker = worker - t.context.accounts = { root, statusMessage, ali, bob, carl } -}) + t.context.worker = worker; + t.context.accounts = { root, statusMessage, ali, bob, carl }; +}); test.after.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed to tear down the worker:', error) - }) -}) + console.log("Failed to tear down the worker:", error); + }); +}); -test('Root gets null status', async (t) => { - const { statusMessage, root } = t.context.accounts - const result = await statusMessage.view('get_status', { +test("Root gets null status", async (t) => { + const { statusMessage, root } = t.context.accounts; + const result = await statusMessage.view("get_status", { account_id: root.accountId, - }) - t.is(result, null) -}) - -test('Ali sets then gets status', async (t) => { - const { ali, statusMessage } = t.context.accounts - await ali.call(statusMessage, 'set_status', { message: 'hello' }) - - t.is(await statusMessage.view('get_status', { account_id: ali.accountId }), 'hello') -}) - -test('Bob and Carl have different statuses', async (t) => { - const { statusMessage, bob, carl } = t.context.accounts - await bob.call(statusMessage, 'set_status', { message: 'hello' }) - await carl.call(statusMessage, 'set_status', { message: 'world' }) - - const bobStatus = await statusMessage.view('get_status', { + }); + t.is(result, null); +}); + +test("Ali sets then gets status", async (t) => { + const { ali, statusMessage } = t.context.accounts; + await ali.call(statusMessage, "set_status", { message: "hello" }); + + t.is( + await statusMessage.view("get_status", { account_id: ali.accountId }), + "hello" + ); +}); + +test("Bob and Carl have different statuses", async (t) => { + const { statusMessage, bob, carl } = t.context.accounts; + await bob.call(statusMessage, "set_status", { message: "hello" }); + await carl.call(statusMessage, "set_status", { message: "world" }); + + const bobStatus = await statusMessage.view("get_status", { account_id: bob.accountId, - }) - const carlStatus = await statusMessage.view('get_status', { + }); + const carlStatus = await statusMessage.view("get_status", { account_id: carl.accountId, - }) - t.is(bobStatus, 'hello') - t.is(carlStatus, 'world') -}) + }); + t.is(bobStatus, "hello"); + t.is(carlStatus, "world"); +}); diff --git a/examples/ava.config.cjs b/examples/ava.config.cjs index d2f4aa9a..d5a8c029 100644 --- a/examples/ava.config.cjs +++ b/examples/ava.config.cjs @@ -1,8 +1,8 @@ -require('util').inspect.defaultOptions.depth = 5 // Increase AVA's printing depth +require("util").inspect.defaultOptions.depth = 5; // Increase AVA's printing depth module.exports = { - timeout: '300000', - files: ['**/*.ava.js'], + timeout: "300000", + files: ["**/*.ava.js"], failWithoutAssertions: false, - extensions: ['js'], -} + extensions: ["js"], +}; diff --git a/examples/src/clean-state.js b/examples/src/clean-state.js index e812af9c..7021a609 100644 --- a/examples/src/clean-state.js +++ b/examples/src/clean-state.js @@ -1,19 +1,19 @@ -import { NearBindgen, call, view, near } from 'near-sdk-js' +import { NearBindgen, call, view, near } from "near-sdk-js"; @NearBindgen({}) export class CleanState { @call({}) clean({ keys }) { - keys.forEach((key) => near.storageRemove(key)) + keys.forEach((key) => near.storageRemove(key)); } @call({}) put({ key, value }) { - near.storageWrite(key, value) + near.storageWrite(key, value); } @view({}) get({ key }) { - return near.storageRead(key) + return near.storageRead(key); } } diff --git a/examples/src/counter-lowlevel.js b/examples/src/counter-lowlevel.js index c203c4f8..f01249ad 100644 --- a/examples/src/counter-lowlevel.js +++ b/examples/src/counter-lowlevel.js @@ -1,46 +1,46 @@ // This contract implements exact same functionality as counter.js, but only use low level APIs -import { near } from 'near-sdk-js' +import { near } from "near-sdk-js"; export function init() { - let argsRaw = near.input() - let args = JSON.parse(argsRaw || '{}') - let initial = args.initial || 0 - let count = initial - let state = JSON.stringify({ count }) - near.storageWrite('STATE', state) + let argsRaw = near.input(); + let args = JSON.parse(argsRaw || "{}"); + let initial = args.initial || 0; + let count = initial; + let state = JSON.stringify({ count }); + near.storageWrite("STATE", state); } function deserialize() { - let state = near.storageRead('STATE') + let state = near.storageRead("STATE"); if (state) { - return JSON.parse(state) + return JSON.parse(state); } else { - return { count: 0 } + return { count: 0 }; } } export function getCount() { - let state = deserialize() - let count = state.count - near.valueReturn(JSON.stringify(count)) + let state = deserialize(); + let count = state.count; + near.valueReturn(JSON.stringify(count)); } export function increase() { - let argsRaw = near.input() - let args = JSON.parse(argsRaw || '{}') - let n = args.n || 1 - let state = deserialize() - state.count += n - near.log(`Counter increased to ${state.count}`) - near.storageWrite('STATE', JSON.stringify(state)) + let argsRaw = near.input(); + let args = JSON.parse(argsRaw || "{}"); + let n = args.n || 1; + let state = deserialize(); + state.count += n; + near.log(`Counter increased to ${state.count}`); + near.storageWrite("STATE", JSON.stringify(state)); } export function decrease() { - let argsRaw = near.input() - let args = JSON.parse(argsRaw || '{}') - let n = args.n || 1 - let state = deserialize() - state.count -= n - near.log(`Counter decreased to ${state.count}`) - near.storageWrite('STATE', JSON.stringify(state)) + let argsRaw = near.input(); + let args = JSON.parse(argsRaw || "{}"); + let n = args.n || 1; + let state = deserialize(); + state.count -= n; + near.log(`Counter decreased to ${state.count}`); + near.storageWrite("STATE", JSON.stringify(state)); } diff --git a/examples/src/counter.js b/examples/src/counter.js index c5522821..6b9de29f 100644 --- a/examples/src/counter.js +++ b/examples/src/counter.js @@ -4,13 +4,13 @@ import { isUndefined } from "lodash-es"; @NearBindgen({}) export class Counter { constructor() { - this.count = 0 + this.count = 0; } @call({}) increase({ n = 1 }) { - this.count += n - near.log(`Counter increased to ${this.count}`) + this.count += n; + near.log(`Counter increased to ${this.count}`); } @call({}) @@ -18,15 +18,15 @@ export class Counter { // you can use default argument `n=1` too // this is to illustrate a npm dependency: lodash can be used if (isUndefined(n)) { - this.count -= 1 + this.count -= 1; } else { - this.count -= n + this.count -= n; } - near.log(`Counter decreased to ${this.count}`) + near.log(`Counter decreased to ${this.count}`); } @view({}) getCount() { - return this.count + return this.count; } } diff --git a/examples/src/counter.ts b/examples/src/counter.ts index 52ecb790..1a656ecd 100644 --- a/examples/src/counter.ts +++ b/examples/src/counter.ts @@ -8,8 +8,8 @@ export class Counter { @call({}) increase({ n = 1 }: { n: number }) { - this.count += n - near.log(`Counter increased to ${this.count}`) + this.count += n; + near.log(`Counter increased to ${this.count}`); } @call({}) @@ -17,16 +17,16 @@ export class Counter { // you can use default argument `n=1` too // this is to illustrate a npm dependency: lodash can be used if (isUndefined(n)) { - this.count -= 1 + this.count -= 1; } else { - this.count -= n + this.count -= n; } // this is to illustrate import a local ts module - log(`Counter decreased to ${this.count}`) + log(`Counter decreased to ${this.count}`); } @view({}) getCount(): number { - return this.count + return this.count; } } diff --git a/examples/src/cross-contract-call.js b/examples/src/cross-contract-call.js index e332d680..2272e81f 100644 --- a/examples/src/cross-contract-call.js +++ b/examples/src/cross-contract-call.js @@ -1,55 +1,55 @@ -import { NearBindgen, call, view, initialize, near, bytes } from 'near-sdk-js' +import { NearBindgen, call, view, initialize, near, bytes } from "near-sdk-js"; @NearBindgen({ requireInit: true }) export class OnCall { constructor() { - this.personOnCall = '' - this.statusMessageContract = '' + this.personOnCall = ""; + this.statusMessageContract = ""; } @initialize({}) init({ statusMessageContract }) { - this.personOnCall = 'undefined' - this.statusMessageContract = statusMessageContract + this.personOnCall = "undefined"; + this.statusMessageContract = statusMessageContract; } @call({}) set_person_on_call({ accountId }) { - near.log(`Trying to set ${accountId} on-call`) - const promise = near.promiseBatchCreate(this.statusMessageContract) + near.log(`Trying to set ${accountId} on-call`); + const promise = near.promiseBatchCreate(this.statusMessageContract); near.promiseBatchActionFunctionCall( promise, - 'get_status', + "get_status", bytes(JSON.stringify({ account_id: accountId })), 0, 30000000000000 - ) + ); near.promiseThen( promise, near.currentAccountId(), - '_set_person_on_call_private', + "_set_person_on_call_private", bytes(JSON.stringify({ accountId: accountId })), 0, 30000000000000 - ) + ); } @call({ privateFunction: true }) _set_person_on_call_private({ accountId }) { - near.log(`_set_person_on_call_private called, accountId ${accountId}`) - const status = JSON.parse(near.promiseResult(0)) - near.log(`${accountId} status is ${status}`) - if (status === 'AVAILABLE') { - this.personOnCall = accountId - near.log(`${accountId} set on-call`) + near.log(`_set_person_on_call_private called, accountId ${accountId}`); + const status = JSON.parse(near.promiseResult(0)); + near.log(`${accountId} status is ${status}`); + if (status === "AVAILABLE") { + this.personOnCall = accountId; + near.log(`${accountId} set on-call`); } else { - near.log(`${accountId} can not be set on-call`) + near.log(`${accountId} can not be set on-call`); } } @view({}) person_on_call() { - near.log(`Returning person on-call: ${this.personOnCall}`) - return this.personOnCall + near.log(`Returning person on-call: ${this.personOnCall}`); + return this.personOnCall; } } diff --git a/examples/src/fungible-token-helper.js b/examples/src/fungible-token-helper.js index 12aef317..e0a6dbf1 100644 --- a/examples/src/fungible-token-helper.js +++ b/examples/src/fungible-token-helper.js @@ -1,19 +1,19 @@ -import { NearBindgen, call, view } from 'near-sdk-js' +import { NearBindgen, call, view } from "near-sdk-js"; @NearBindgen({}) export class FungibleTokenHelper { constructor() { - this.data = '' + this.data = ""; } @call({}) ftOnTransfer({ senderId, amount, msg, receiverId }) { - const concatString = `[${amount} from ${senderId} to ${receiverId}] ${msg} ` - this.data = this.data.concat('', concatString) + const concatString = `[${amount} from ${senderId} to ${receiverId}] ${msg} `; + this.data = this.data.concat("", concatString); } @view({}) getContractData() { - return this.data + return this.data; } } diff --git a/examples/src/fungible-token-lockable.js b/examples/src/fungible-token-lockable.js index 267b7bc0..1ecf3276 100644 --- a/examples/src/fungible-token-lockable.js +++ b/examples/src/fungible-token-lockable.js @@ -1,192 +1,208 @@ -import { NearBindgen, call, view, initialize, near, LookupMap } from 'near-sdk-js' +import { + NearBindgen, + call, + view, + initialize, + near, + LookupMap, +} from "near-sdk-js"; class Account { constructor(balance, allowances, lockedBalances) { - this.balance = balance // Current unlocked balance - this.allowances = allowances // Allowed account to the allowance amount - this.lockedBalances = lockedBalances // Allowed account to locked balance + this.balance = balance; // Current unlocked balance + this.allowances = allowances; // Allowed account to the allowance amount + this.lockedBalances = lockedBalances; // Allowed account to locked balance } setAllowance(escrowAccountId, allowance) { if (allowance > 0) { - this.allowances[escrowAccountId] = allowance + this.allowances[escrowAccountId] = allowance; } else if (allowance === 0) { - delete this.allowances[escrowAccountId] + delete this.allowances[escrowAccountId]; } else { - throw Error("Allowance can't be negative") + throw Error("Allowance can't be negative"); } } getAllowance(escrowAccountId) { - return this.allowances[escrowAccountId] || 0 + return this.allowances[escrowAccountId] || 0; } setLockedBalance(escrowAccountId, lockedBalance) { if (lockedBalance > 0) { - this.lockedBalances[escrowAccountId] = lockedBalance + this.lockedBalances[escrowAccountId] = lockedBalance; } else if (lockedBalance === 0) { - delete this.lockedBalances[escrowAccountId] + delete this.lockedBalances[escrowAccountId]; } else { - throw Error('Locked balance cannot be negative') + throw Error("Locked balance cannot be negative"); } } getLockedBalance(escrowAccountId) { - return this.lockedBalances[escrowAccountId] || 0 + return this.lockedBalances[escrowAccountId] || 0; } totalBalance() { - let totalLockedBalance = Object.values(this.lockedBalances).reduce((acc, val) => acc + val, 0) - return this.balance + totalLockedBalance + let totalLockedBalance = Object.values(this.lockedBalances).reduce( + (acc, val) => acc + val, + 0 + ); + return this.balance + totalLockedBalance; } } @NearBindgen({ initRequired: true }) export class LockableFungibleToken { constructor() { - this.accounts = new LookupMap('a') // Account ID -> Account mapping - this.totalSupply = 0 // Total supply of the all tokens + this.accounts = new LookupMap("a"); // Account ID -> Account mapping + this.totalSupply = 0; // Total supply of the all tokens } @initialize({}) init({ prefix, totalSupply }) { - this.accounts = new LookupMap(prefix) - this.totalSupply = totalSupply - let ownerId = near.signerAccountId() - let ownerAccount = this.getAccount(ownerId) - ownerAccount.balance = this.totalSupply - this.setAccount(ownerId, ownerAccount) + this.accounts = new LookupMap(prefix); + this.totalSupply = totalSupply; + let ownerId = near.signerAccountId(); + let ownerAccount = this.getAccount(ownerId); + ownerAccount.balance = this.totalSupply; + this.setAccount(ownerId, ownerAccount); } getAccount(ownerId) { - let account = this.accounts.get(ownerId) + let account = this.accounts.get(ownerId); if (account === null) { - return new Account(0, {}, {}) + return new Account(0, {}, {}); } - return new Account(account.balance, account.allowances, account.lockedBalances) + return new Account( + account.balance, + account.allowances, + account.lockedBalances + ); } setAccount(accountId, account) { - this.accounts.set(accountId, account) + this.accounts.set(accountId, account); } @call({}) setAllowance({ escrowAccountId, allowance }) { - let ownerId = near.predecessorAccountId() + let ownerId = near.predecessorAccountId(); if (escrowAccountId === ownerId) { - throw Error("Can't set allowance for yourself") + throw Error("Can't set allowance for yourself"); } - let account = this.getAccount(ownerId) - let lockedBalance = account.getLockedBalance(escrowAccountId) + let account = this.getAccount(ownerId); + let lockedBalance = account.getLockedBalance(escrowAccountId); if (lockedBalance > allowance) { - throw Error("The new allowance can't be less than the amount of locked tokens") + throw Error( + "The new allowance can't be less than the amount of locked tokens" + ); } - account.setAllowance(escrowAccountId, allowance - lockedBalance) - this.setAccount(ownerId, account) + account.setAllowance(escrowAccountId, allowance - lockedBalance); + this.setAccount(ownerId, account); } @call({}) lock({ ownerId, lockAmount }) { if (lockAmount <= 0) { - throw Error("Can't lock 0 or less tokens") + throw Error("Can't lock 0 or less tokens"); } - let escrowAccountId = near.predecessorAccountId() - let account = this.getAccount(ownerId) + let escrowAccountId = near.predecessorAccountId(); + let account = this.getAccount(ownerId); // Checking and updating unlocked balance if (account.balance < lockAmount) { - throw Error('Not enough unlocked balance') + throw Error("Not enough unlocked balance"); } - account.balance -= lockAmount + account.balance -= lockAmount; // If locking by escrow, need to check and update the allowance. if (escrowAccountId !== ownerId) { - let allowance = account.getAllowance(escrowAccountId) + let allowance = account.getAllowance(escrowAccountId); if (allowance < lockAmount) { - throw Error('Not enough allowance') + throw Error("Not enough allowance"); } - account.setAllowance(escrowAccountId, allowance - lockAmount) + account.setAllowance(escrowAccountId, allowance - lockAmount); } // Updating total lock balance - let lockedBalance = account.getLockedBalance(escrowAccountId) - account.setLockedBalance(escrowAccountId, lockedBalance + lockAmount) + let lockedBalance = account.getLockedBalance(escrowAccountId); + account.setLockedBalance(escrowAccountId, lockedBalance + lockAmount); - this.setAccount(ownerId, account) + this.setAccount(ownerId, account); } @call({}) unlock({ ownerId, unlockAmount }) { if (unlockAmount <= 0) { - throw Error("Can't unlock 0 or less tokens") + throw Error("Can't unlock 0 or less tokens"); } - let escrowAccountId = near.predecessorAccountId() - let account = this.getAccount(ownerId) + let escrowAccountId = near.predecessorAccountId(); + let account = this.getAccount(ownerId); // Checking and updating locked balance - let lockedBalance = account.getLockedBalance(escrowAccountId) + let lockedBalance = account.getLockedBalance(escrowAccountId); if (lockedBalance < unlockAmount) { - throw Error('Not enough locked tokens') + throw Error("Not enough locked tokens"); } - account.setLockedBalance(escrowAccountId, lockedBalance - unlockAmount) + account.setLockedBalance(escrowAccountId, lockedBalance - unlockAmount); // If unlocking by escrow, need to update allowance. if (escrowAccountId !== ownerId) { - let allowance = account.getAllowance(escrowAccountId) - account.setAllowance(escrowAccountId, allowance + unlockAmount) + let allowance = account.getAllowance(escrowAccountId); + account.setAllowance(escrowAccountId, allowance + unlockAmount); } // Updating unlocked balance - account.balance += unlockAmount + account.balance += unlockAmount; - this.setAccount(ownerId, account) + this.setAccount(ownerId, account); } @call({}) transferFrom({ ownerId, newOwnerId, amount }) { if (amount <= 0) { - throw Error("Can't transfer 0 or less tokens") + throw Error("Can't transfer 0 or less tokens"); } - let escrowAccountId = near.predecessorAccountId() - let account = this.getAccount(ownerId) + let escrowAccountId = near.predecessorAccountId(); + let account = this.getAccount(ownerId); // Checking and updating locked balance - let lockedBalance = account.getLockedBalance(escrowAccountId) - var remainingAmount + let lockedBalance = account.getLockedBalance(escrowAccountId); + var remainingAmount; if (lockedBalance >= amount) { - account.setLockedBalance(escrowAccountId, lockedBalance - amount) - remainingAmount = 0 + account.setLockedBalance(escrowAccountId, lockedBalance - amount); + remainingAmount = 0; } else { - account.setLockedBalance(escrowAccountId, 0) - remainingAmount = amount - lockedBalance + account.setLockedBalance(escrowAccountId, 0); + remainingAmount = amount - lockedBalance; } // If there is remaining balance after the locked balance, we try to use unlocked tokens. if (remainingAmount > 0) { // Checking and updating unlocked balance if (account.balance < remainingAmount) { - throw Error('Not enough unlocked balance') + throw Error("Not enough unlocked balance"); } - account.balance -= remainingAmount + account.balance -= remainingAmount; // If transferring by escrow, need to check and update allowance. if (escrowAccountId !== ownerId) { - let allowance = account.getAllowance(escrowAccountId) + let allowance = account.getAllowance(escrowAccountId); // Checking and updating unlocked balance if (allowance < remainingAmount) { - throw Error('Not enough allowance') + throw Error("Not enough allowance"); } - account.setAllowance(escrowAccountId, allowance - remainingAmount) + account.setAllowance(escrowAccountId, allowance - remainingAmount); } } - this.setAccount(ownerId, account) + this.setAccount(ownerId, account); // Deposit amount to the new owner - let newAccount = this.getAccount(newOwnerId) - newAccount.balance += amount - this.setAccount(newOwnerId, newAccount) + let newAccount = this.getAccount(newOwnerId); + newAccount.balance += amount; + this.setAccount(newOwnerId, newAccount); } @call({}) @@ -195,31 +211,31 @@ export class LockableFungibleToken { ownerId: near.predecessorAccountId(), newOwnerId, amount, - }) + }); } @view({}) getTotalSupply() { - return this.totalSupply + return this.totalSupply; } @view({}) getTotalBalance({ ownerId }) { - return this.getAccount(ownerId).totalBalance() + return this.getAccount(ownerId).totalBalance(); } @view({}) getUnlockedBalance({ ownerId }) { - return this.getAccount(ownerId).balance + return this.getAccount(ownerId).balance; } @view({}) getAllowance({ ownerId, escrowAccountId }) { - return this.getAccount(ownerId).getAllowance(escrowAccountId) + return this.getAccount(ownerId).getAllowance(escrowAccountId); } @view({}) getLockedBalance({ ownerId, escrowAccountId }) { - return this.getAccount(ownerId).getLockedBalance(escrowAccountId) + return this.getAccount(ownerId).getLockedBalance(escrowAccountId); } } diff --git a/examples/src/fungible-token.js b/examples/src/fungible-token.js index d2671cb9..c4462c4a 100644 --- a/examples/src/fungible-token.js +++ b/examples/src/fungible-token.js @@ -1,4 +1,12 @@ -import { NearBindgen, call, view, initialize, near, LookupMap, assert } from 'near-sdk-js' +import { + NearBindgen, + call, + view, + initialize, + near, + LookupMap, + assert, +} from "near-sdk-js"; @NearBindgen({ initRequired: true }) export class FungibleToken { @@ -42,28 +50,34 @@ export class FungibleToken { @call({}) ftTransfer({ receiverId, amount, memo }) { - let senderId = near.predecessorAccountId() - this.internalTransfer({ senderId, receiverId, amount, memo }) + let senderId = near.predecessorAccountId(); + this.internalTransfer({ senderId, receiverId, amount, memo }); } @call({}) ftTransferCall({ receiverId, amount, memo, msg }) { - let senderId = near.predecessorAccountId() - this.internalTransfer({ senderId, receiverId, amount, memo }) - const promise = near.promiseBatchCreate(receiverId) + let senderId = near.predecessorAccountId(); + this.internalTransfer({ senderId, receiverId, amount, memo }); + const promise = near.promiseBatchCreate(receiverId); const params = { senderId: senderId, amount: amount, msg: msg, receiverId: receiverId, - } - near.promiseBatchActionFunctionCall(promise, 'ftOnTransfer', JSON.stringify(params), 0, 30000000000000) - return near.promiseReturn() + }; + near.promiseBatchActionFunctionCall( + promise, + "ftOnTransfer", + JSON.stringify(params), + 0, + 30000000000000 + ); + return near.promiseReturn(); } @view({}) ftTotalSupply() { - return this.totalSupply + return this.totalSupply; } @view({}) diff --git a/examples/src/log.ts b/examples/src/log.ts index 6721625d..ec301208 100644 --- a/examples/src/log.ts +++ b/examples/src/log.ts @@ -1,4 +1,4 @@ -import { near } from 'near-sdk-js' +import { near } from "near-sdk-js"; export function log(msg: unknown) { near.log(msg); diff --git a/examples/src/non-fungible-token-receiver.js b/examples/src/non-fungible-token-receiver.js index df4b457b..b752e87f 100644 --- a/examples/src/non-fungible-token-receiver.js +++ b/examples/src/non-fungible-token-receiver.js @@ -1,33 +1,33 @@ -import { NearBindgen, call, near, assert, initialize } from 'near-sdk-js' +import { NearBindgen, call, near, assert, initialize } from "near-sdk-js"; @NearBindgen({ requireInit: true }) export class NftContract { constructor() { - this.nonFungibleTokenAccountId = '' + this.nonFungibleTokenAccountId = ""; } @initialize({}) init({ nonFungibleTokenAccountId }) { - this.nonFungibleTokenAccountId = nonFungibleTokenAccountId + this.nonFungibleTokenAccountId = nonFungibleTokenAccountId; } @call({}) nftOnTransfer({ senderId, previousOwnerId, tokenId, msg }) { near.log( `nftOnTransfer called, params: senderId: ${senderId}, previousOwnerId: ${previousOwnerId}, tokenId: ${tokenId}, msg: ${msg}` - ) + ); assert( near.predecessorAccountId() === this.nonFungibleTokenAccountId, - 'Only supports the one non-fungible token contract' - ) - if (msg === 'return-it-now') { - near.log(`Returning ${tokenId} to ${senderId}`) - return false - } else if (msg === 'keep-it-now') { - near.log(`Keep ${tokenId}`) - return true + "Only supports the one non-fungible token contract" + ); + if (msg === "return-it-now") { + near.log(`Returning ${tokenId} to ${senderId}`); + return false; + } else if (msg === "keep-it-now") { + near.log(`Keep ${tokenId}`); + return true; } else { - throw Error('unsupported msg') + throw Error("unsupported msg"); } } } diff --git a/examples/src/non-fungible-token.js b/examples/src/non-fungible-token.js index 8d0b4eae..c81637d1 100644 --- a/examples/src/non-fungible-token.js +++ b/examples/src/non-fungible-token.js @@ -1,23 +1,32 @@ -import { NearBindgen, call, view, initialize, near, LookupMap, bytes, assert } from 'near-sdk-js' +import { + NearBindgen, + call, + view, + initialize, + near, + LookupMap, + bytes, + assert, +} from "near-sdk-js"; class Token { constructor(token_id, owner_id) { - this.token_id = token_id - this.owner_id = owner_id + this.token_id = token_id; + this.owner_id = owner_id; } } @NearBindgen({ requireInit: true }) export class NftContract { constructor() { - this.owner_id = '' - this.owner_by_id = new LookupMap('a') + this.owner_id = ""; + this.owner_by_id = new LookupMap("a"); } @initialize({}) init({ owner_id, owner_by_id_prefix }) { - this.owner_id = owner_id - this.owner_by_id = new LookupMap(owner_by_id_prefix) + this.owner_id = owner_id; + this.owner_by_id = new LookupMap(owner_by_id_prefix); } internalTransfer({ @@ -29,43 +38,45 @@ export class NftContract { }) { let owner_id = this.owner_by_id.get(token_id); - assert(owner_id !== null, 'Token not found') - assert(sender_id === owner_id, 'Sender must be the current owner') - assert(owner_id !== receiver_id, 'Current and next owner must differ') + assert(owner_id !== null, "Token not found"); + assert(sender_id === owner_id, "Sender must be the current owner"); + assert(owner_id !== receiver_id, "Current and next owner must differ"); - this.owner_by_id.set(token_id, receiver_id) + this.owner_by_id.set(token_id, receiver_id); - return owner_id + return owner_id; } @call({}) nftTransfer({ receiver_id, token_id, approval_id, memo }) { - let sender_id = near.predecessorAccountId() + let sender_id = near.predecessorAccountId(); this.internalTransfer({ sender_id, receiver_id, token_id, approval_id, memo, - }) + }); } @call({}) nftTransferCall({ receiver_id, token_id, approval_id, memo, msg }) { - near.log(`nftTransferCall called, receiver_id ${receiver_id}, token_id ${token_id}`) - let sender_id = near.predecessorAccountId() + near.log( + `nftTransferCall called, receiver_id ${receiver_id}, token_id ${token_id}` + ); + let sender_id = near.predecessorAccountId(); let old_owner_id = this.internalTransfer({ sender_id, receiver_id, token_id, approval_id, memo, - }) + }); - const promise = near.promiseBatchCreate(receiver_id) + const promise = near.promiseBatchCreate(receiver_id); near.promiseBatchActionFunctionCall( promise, - 'nftOnTransfer', + "nftOnTransfer", bytes( JSON.stringify({ senderId: sender_id, @@ -76,26 +87,32 @@ export class NftContract { ), 0, 30000000000000 - ) + ); near.promiseThen( promise, near.currentAccountId(), - '_nftResolveTransfer', + "_nftResolveTransfer", bytes(JSON.stringify({ sender_id, receiver_id, token_id })), 0, 30000000000000 - ) + ); } @call({ privateFunction: true }) _nftResolveTransfer({ sender_id, receiver_id, token_id }) { - near.log(`_nftResolveTransfer called, receiver_id ${receiver_id}, token_id ${token_id}`) - const isTokenTransfered = JSON.parse(near.promiseResult(0)) - near.log(`${token_id} ${isTokenTransfered ? 'was transfered' : 'was NOT transfered'}`) + near.log( + `_nftResolveTransfer called, receiver_id ${receiver_id}, token_id ${token_id}` + ); + const isTokenTransfered = JSON.parse(near.promiseResult(0)); + near.log( + `${token_id} ${ + isTokenTransfered ? "was transfered" : "was NOT transfered" + }` + ); if (!isTokenTransfered) { - near.log(`Returning ${token_id} to ${receiver_id}`) - const currentOwner = this.owner_by_id.get(token_id) + near.log(`Returning ${token_id} to ${receiver_id}`); + const currentOwner = this.owner_by_id.get(token_id); if (currentOwner === receiver_id) { this.internalTransfer({ sender_id: receiver_id, @@ -103,11 +120,13 @@ export class NftContract { token_id: token_id, approval_id: null, memo: null, - }) - near.log(`${token_id} returned to ${sender_id}`) - return + }); + near.log(`${token_id} returned to ${sender_id}`); + return; } - near.log(`Failed to return ${token_id}. It was burned or not owned by ${receiver_id} now.`) + near.log( + `Failed to return ${token_id}. It was burned or not owned by ${receiver_id} now.` + ); } } @@ -117,18 +136,18 @@ export class NftContract { assert(sender_id === this.owner_id, "Unauthorized"); assert(this.owner_by_id.get(token_id) === null, "Token ID must be unique"); - this.owner_by_id.set(token_id, token_owner_id) + this.owner_by_id.set(token_id, token_owner_id); - return new Token(token_id, token_owner_id) + return new Token(token_id, token_owner_id); } @view({}) nftToken({ token_id }) { - let owner_id = this.owner_by_id.get(token_id) + let owner_id = this.owner_by_id.get(token_id); if (owner_id === null) { - return null + return null; } - return new Token(token_id, owner_id) + return new Token(token_id, owner_id); } } diff --git a/examples/src/parking-lot.ts b/examples/src/parking-lot.ts index 27ab54c0..aa632b27 100644 --- a/examples/src/parking-lot.ts +++ b/examples/src/parking-lot.ts @@ -1,31 +1,31 @@ -import { NearBindgen, near, call, view, LookupMap } from 'near-sdk-js' +import { NearBindgen, near, call, view, LookupMap } from "near-sdk-js"; class CarSpecs { - id: number - color: string - price: number - engine: Engine + id: number; + color: string; + price: number; + engine: Engine; constructor(id: number, color: string, price: number, engine: Engine) { - this.id = id - this.color = color - this.price = price - this.engine = engine + this.id = id; + this.color = color; + this.price = price; + this.engine = engine; } } class Engine { - hp: number + hp: number; constructor(hp: number) { - this.hp = hp + this.hp = hp; } run(): string { if (this.hp > 400) { - return 'boom' + return "boom"; } else { - return 'zoom' + return "zoom"; } } } @@ -35,7 +35,7 @@ export class ParkingLot { cars: LookupMap; constructor() { - this.cars = new LookupMap('a') + this.cars = new LookupMap("a"); } @call({}) @@ -46,38 +46,38 @@ export class ParkingLot { price, engineHp, }: { - name: string - id: number - color: string - price: number - engineHp: number + name: string; + id: number; + color: string; + price: number; + engineHp: number; }) { // args can be json arguments only, they cannot be of a JS/TS class like following, unless override NearContract.deserializeArgs method. // addCar({ name, specs }: { name: string, specs: CarSpecs }) { - const engine = new Engine(engineHp) - const car = new CarSpecs(id, color, price, engine) - near.log(`addCar() called, name: ${name}, specs: ${JSON.stringify(car)}`) - this.cars.set(name, car) + const engine = new Engine(engineHp); + const car = new CarSpecs(id, color, price, engine); + near.log(`addCar() called, name: ${name}, specs: ${JSON.stringify(car)}`); + this.cars.set(name, car); } @call({}) removeCar({ name }: { name: string }) { - near.log(`removeCar() called, name: ${name}`) - this.cars.remove(name) + near.log(`removeCar() called, name: ${name}`); + this.cars.remove(name); } @view({}) getCarSpecs({ name }: { name: string }) { - near.log(`getCarSpecs() called, name: ${name}`) - return this.cars.get(name) + near.log(`getCarSpecs() called, name: ${name}`); + return this.cars.get(name); } @view({}) runCar({ name }: { name: string }) { /* We are getting plain carSpecs object from the storage. It needs to be converted to the class object in order to execute engine.run() function.*/ - const carSpecs = this.cars.get(name) as CarSpecs - const engine = new Engine(carSpecs.engine.hp) - return engine.run() + const carSpecs = this.cars.get(name) as CarSpecs; + const engine = new Engine(carSpecs.engine.hp); + return engine.run(); } } diff --git a/examples/src/status-message-collections.js b/examples/src/status-message-collections.js index 4802c31f..4a28cf6e 100644 --- a/examples/src/status-message-collections.js +++ b/examples/src/status-message-collections.js @@ -1,35 +1,42 @@ -import { NearBindgen, call, view, near, LookupSet, UnorderedMap } from 'near-sdk-js' +import { + NearBindgen, + call, + view, + near, + LookupSet, + UnorderedMap, +} from "near-sdk-js"; @NearBindgen({}) export class StatusMessage { constructor() { - this.records = new UnorderedMap('a') - this.uniqueValues = new LookupSet('b') + this.records = new UnorderedMap("a"); + this.uniqueValues = new LookupSet("b"); } @call({}) set_status({ message }) { - let account_id = near.signerAccountId() - near.log(`${account_id} set_status with message ${message}`) - this.records.set(account_id, message) - this.uniqueValues.set(message) + let account_id = near.signerAccountId(); + near.log(`${account_id} set_status with message ${message}`); + this.records.set(account_id, message); + this.uniqueValues.set(message); } @view({}) get_status({ account_id }) { - near.log(`get_status for account_id ${account_id}`) - return this.records.get(account_id) + near.log(`get_status for account_id ${account_id}`); + return this.records.get(account_id); } @view({}) has_status({ message }) { // used for test LookupMap - return this.uniqueValues.contains(message) + return this.uniqueValues.contains(message); } @view({}) get_all_statuses() { // used for test UnorderedMap - return this.records.toArray() + return this.records.toArray(); } } diff --git a/examples/src/status-message.js b/examples/src/status-message.js index 12aa95ae..db77c0f0 100644 --- a/examples/src/status-message.js +++ b/examples/src/status-message.js @@ -1,21 +1,21 @@ -import { NearBindgen, call, view, near } from 'near-sdk-js' +import { NearBindgen, call, view, near } from "near-sdk-js"; @NearBindgen({}) export class StatusMessage { constructor() { - this.records = {} + this.records = {}; } @call({}) set_status({ message }) { - let account_id = near.signerAccountId() - near.log(`${account_id} set_status with message ${message}`) - this.records[account_id] = message + let account_id = near.signerAccountId(); + near.log(`${account_id} set_status with message ${message}`); + this.records[account_id] = message; } @view({}) get_status({ account_id }) { - near.log(`get_status for account_id ${account_id}`) - return this.records[account_id] || null + near.log(`get_status for account_id ${account_id}`); + return this.records[account_id] || null; } } diff --git a/lib/api.d.ts b/lib/api.d.ts index b8a342f4..f8eff3c6 100644 --- a/lib/api.d.ts +++ b/lib/api.d.ts @@ -1,5 +1,5 @@ -import { Bytes, NearAmount, PromiseIndex } from './utils'; -import { GasWeight } from './types'; +import { Bytes, NearAmount, PromiseIndex } from "./utils"; +import { GasWeight } from "./types"; /** * Logs parameters in the NEAR WASM virtual machine. * diff --git a/lib/api.js b/lib/api.js index 53e96187..ff051a55 100644 --- a/lib/api.js +++ b/lib/api.js @@ -1,5 +1,5 @@ -import { assert } from './utils'; -import { PromiseResult } from './types'; +import { assert } from "./utils"; +import { PromiseResult } from "./types"; const U64_MAX = 2n ** 64n - 1n; const EVICTED_REGISTER = U64_MAX - 1n; /** @@ -347,7 +347,11 @@ export function promiseResultsCount() { */ export function promiseResult(promiseIndex) { const status = env.promise_result(promiseIndex, 0); - assert(Number(status) === PromiseResult.Successful, `Promise result ${status == PromiseResult.Failed ? 'Failed' : status == PromiseResult.NotReady ? 'NotReady' : status}`); + assert(Number(status) === PromiseResult.Successful, `Promise result ${status == PromiseResult.Failed + ? "Failed" + : status == PromiseResult.NotReady + ? "NotReady" + : status}`); return env.read_register(0); } /** diff --git a/lib/collections/index.d.ts b/lib/collections/index.d.ts index 8774823c..b360eb1f 100644 --- a/lib/collections/index.d.ts +++ b/lib/collections/index.d.ts @@ -1,6 +1,6 @@ -import { LookupMap } from './lookup-map'; -import { Vector } from './vector'; -import { LookupSet } from './lookup-set'; -import { UnorderedMap } from './unordered-map'; -import { UnorderedSet } from './unordered-set'; +import { LookupMap } from "./lookup-map"; +import { Vector } from "./vector"; +import { LookupSet } from "./lookup-set"; +import { UnorderedMap } from "./unordered-map"; +import { UnorderedSet } from "./unordered-set"; export { LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet }; diff --git a/lib/collections/index.js b/lib/collections/index.js index 8774823c..b360eb1f 100644 --- a/lib/collections/index.js +++ b/lib/collections/index.js @@ -1,6 +1,6 @@ -import { LookupMap } from './lookup-map'; -import { Vector } from './vector'; -import { LookupSet } from './lookup-set'; -import { UnorderedMap } from './unordered-map'; -import { UnorderedSet } from './unordered-set'; +import { LookupMap } from "./lookup-map"; +import { Vector } from "./vector"; +import { LookupSet } from "./lookup-set"; +import { UnorderedMap } from "./unordered-map"; +import { UnorderedSet } from "./unordered-set"; export { LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet }; diff --git a/lib/collections/unordered-set.js b/lib/collections/unordered-set.js index fb10d56f..e9ccdedb 100644 --- a/lib/collections/unordered-set.js +++ b/lib/collections/unordered-set.js @@ -161,7 +161,7 @@ export class UnorderedSet { static reconstruct(data) { const set = new UnorderedSet(data.prefix); // reconstruct Vector - const elementsPrefix = data.prefix + 'e'; + const elementsPrefix = data.prefix + "e"; set.elements = new Vector(elementsPrefix); set.elements.length = data.elements.length; return set; diff --git a/lib/index.d.ts b/lib/index.d.ts index 7866c309..bbe7a805 100644 --- a/lib/index.d.ts +++ b/lib/index.d.ts @@ -1,6 +1,6 @@ -import { call, view, initialize, NearBindgen } from './near-bindgen'; -import * as near from './api'; -import { LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet } from './collections'; +import { call, view, initialize, NearBindgen } from "./near-bindgen"; +import * as near from "./api"; +import { LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet } from "./collections"; import { bytes, Bytes, assert, validateAccountId } from "./utils"; -import { NearPromise, PromiseOrValue } from './promise'; +import { NearPromise, PromiseOrValue } from "./promise"; export { call, view, initialize, NearBindgen, near, LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet, bytes, Bytes, assert, validateAccountId, NearPromise, PromiseOrValue, }; diff --git a/lib/index.js b/lib/index.js index fc4e8d67..0d48ceea 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,6 +1,6 @@ -import { call, view, initialize, NearBindgen } from './near-bindgen'; -import * as near from './api'; -import { LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet } from './collections'; +import { call, view, initialize, NearBindgen } from "./near-bindgen"; +import * as near from "./api"; +import { LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet, } from "./collections"; import { bytes, assert, validateAccountId } from "./utils"; -import { NearPromise } from './promise'; +import { NearPromise } from "./promise"; export { call, view, initialize, NearBindgen, near, LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet, bytes, assert, validateAccountId, NearPromise, }; diff --git a/lib/promise.js b/lib/promise.js index 1e31bd43..18661178 100644 --- a/lib/promise.js +++ b/lib/promise.js @@ -251,7 +251,7 @@ export class NearPromise { } addAction(action) { if (this.subtype instanceof PromiseJoint) { - throw new Error('Cannot add action to a joint promise.'); + throw new Error("Cannot add action to a joint promise."); } this.subtype.actions.push(action); return this; diff --git a/lib/types/index.d.ts b/lib/types/index.d.ts index de461df1..db3de564 100644 --- a/lib/types/index.d.ts +++ b/lib/types/index.d.ts @@ -2,7 +2,7 @@ import { AccountId } from "./account_id"; import { BlockHeight, EpochHeight, Balance, StorageUsage } from "./primitives"; import { PromiseResult, PromiseError, ReceiptIndex, IteratorIndex } from "./vm_types"; import { Gas, ONE_TERA_GAS } from "./gas"; -import { PublicKey, CurveType, curveTypeFromStr, ParsePublicKeyError, InvalidLengthError, Base58Error, UnknownCurve } from './public_key'; +import { PublicKey, CurveType, curveTypeFromStr, ParsePublicKeyError, InvalidLengthError, Base58Error, UnknownCurve } from "./public_key"; export { AccountId, BlockHeight, EpochHeight, Balance, StorageUsage, PromiseResult, PromiseError, ReceiptIndex, IteratorIndex, Gas, ONE_TERA_GAS, PublicKey, CurveType, curveTypeFromStr, ParsePublicKeyError, InvalidLengthError, Base58Error, UnknownCurve, }; /** * The amount of Gas Weight in integers - whole numbers. diff --git a/lib/types/index.js b/lib/types/index.js index 92f840c8..4a8ab029 100644 --- a/lib/types/index.js +++ b/lib/types/index.js @@ -1,6 +1,6 @@ import { PromiseResult, PromiseError, } from "./vm_types"; import { ONE_TERA_GAS } from "./gas"; -import { PublicKey, CurveType, curveTypeFromStr, ParsePublicKeyError, InvalidLengthError, Base58Error, UnknownCurve, } from './public_key'; +import { PublicKey, CurveType, curveTypeFromStr, ParsePublicKeyError, InvalidLengthError, Base58Error, UnknownCurve, } from "./public_key"; export { PromiseResult, PromiseError, ONE_TERA_GAS, PublicKey, CurveType, curveTypeFromStr, ParsePublicKeyError, InvalidLengthError, Base58Error, UnknownCurve, }; /** * One yoctoNEAR. 10^-24 NEAR. diff --git a/lib/types/public_key.d.ts b/lib/types/public_key.d.ts index d1406904..095729d4 100644 --- a/lib/types/public_key.d.ts +++ b/lib/types/public_key.d.ts @@ -1,4 +1,4 @@ -import { Bytes } from '../utils'; +import { Bytes } from "../utils"; export declare enum CurveType { ED25519 = 0, SECP256K1 = 1 diff --git a/lib/types/public_key.js b/lib/types/public_key.js index 320caffa..4fdaad34 100644 --- a/lib/types/public_key.js +++ b/lib/types/public_key.js @@ -1,5 +1,5 @@ -import { bytes } from '../utils'; -import { base58 } from '@scure/base'; +import { bytes } from "../utils"; +import { base58 } from "@scure/base"; export var CurveType; (function (CurveType) { CurveType[CurveType["ED25519"] = 0] = "ED25519"; @@ -34,7 +34,10 @@ function dataLength(curveType) { function splitKeyTypeData(value) { const idx = value.indexOf(":"); if (idx >= 0) { - return [curveTypeFromStr(value.substring(0, idx)), value.substring(idx + 1)]; + return [ + curveTypeFromStr(value.substring(0, idx)), + value.substring(idx + 1), + ]; } else { return [CurveType.ED25519, value]; @@ -42,9 +45,9 @@ function splitKeyTypeData(value) { } export function curveTypeFromStr(value) { switch (value) { - case 'ed25519': + case "ed25519": return CurveType.ED25519; - case 'secp256k1': + case "secp256k1": return CurveType.SECP256K1; default: throw new UnknownCurve(); @@ -67,7 +70,7 @@ export class Base58Error extends ParsePublicKeyError { } export class UnknownCurve extends ParsePublicKeyError { constructor() { - super('Unknown curve'); + super("Unknown curve"); } } /** diff --git a/lib/utils.d.ts b/lib/utils.d.ts index bbb9b8a6..21e2dd87 100644 --- a/lib/utils.d.ts +++ b/lib/utils.d.ts @@ -1,4 +1,4 @@ -import { GetOptions } from './types/collections'; +import { GetOptions } from "./types/collections"; /** * A string containing byte characters. Can be safely used in NEAR calls. */ diff --git a/lib/utils.js b/lib/utils.js index abc8d353..c20240d1 100644 --- a/lib/utils.js +++ b/lib/utils.js @@ -13,7 +13,7 @@ export const ERR_INCONSISTENT_STATE = "The collection is an inconsistent state. export const ERR_INDEX_OUT_OF_BOUNDS = "Index out of bounds"; const ACCOUNT_ID_REGEX = /^(([a-z\d]+[-_])*[a-z\d]+\.)*([a-z\d]+[-_])*[a-z\d]+$/; export function u8ArrayToBytes(array) { - return array.reduce((result, value) => `${result}${String.fromCharCode(value)}`, ''); + return array.reduce((result, value) => `${result}${String.fromCharCode(value)}`, ""); } // TODO this function is a bit broken and the type can't be string // TODO for more info: https://github.com/near/near-sdk-js/issues/78 @@ -27,16 +27,15 @@ export function bytesToU8Array(bytes) { * @returns Safe Bytes to be used in NEAR calls. */ export function bytes(stringOrU8Array) { - if (typeof stringOrU8Array === 'string') { + if (typeof stringOrU8Array === "string") { return checkStringIsBytes(stringOrU8Array); } if (stringOrU8Array instanceof Uint8Array) { return u8ArrayToBytes(stringOrU8Array); } - throw new Error('bytes: expected string or Uint8Array'); + throw new Error("bytes: expected string or Uint8Array"); } function checkStringIsBytes(value) { - ; [...value].forEach((character, index) => { assert(character.charCodeAt(0) <= 255, `string ${value} at index ${index}: ${character} is not a valid byte`); }); diff --git a/near-contract-standards/example-contracts/my-nft.ts b/near-contract-standards/example-contracts/my-nft.ts index d283143a..d8844f4e 100644 --- a/near-contract-standards/example-contracts/my-nft.ts +++ b/near-contract-standards/example-contracts/my-nft.ts @@ -2,6 +2,4 @@ import { NonFungibleToken } from "../src/index"; import { NearBindgen } from "near-sdk-js/lib/index"; @NearBindgen({}) -class MyNFT extends NonFungibleToken { - -} \ No newline at end of file +class MyNFT extends NonFungibleToken {} diff --git a/near-contract-standards/src/event.ts b/near-contract-standards/src/event.ts index 09df8bde..4ca0f563 100644 --- a/near-contract-standards/src/event.ts +++ b/near-contract-standards/src/event.ts @@ -1,15 +1,15 @@ -import { near } from 'near-sdk-js' +import { near } from "near-sdk-js"; export class NearEvent { internal_to_json_string(): string { - return JSON.stringify(this) + return JSON.stringify(this); } internal_to_json_event_string(): string { - return `EVENT_JSON: ${this.internal_to_json_string()}` + return `EVENT_JSON: ${this.internal_to_json_string()}`; } emit(): void { - near.log(this.internal_to_json_event_string()) + near.log(this.internal_to_json_event_string()); } } diff --git a/near-contract-standards/src/index.ts b/near-contract-standards/src/index.ts index 944acbdf..5a3faed5 100644 --- a/near-contract-standards/src/index.ts +++ b/near-contract-standards/src/index.ts @@ -1,3 +1,3 @@ import { NonFungibleToken } from "./non_fungible_token/index"; -export {NonFungibleToken} \ No newline at end of file +export { NonFungibleToken }; diff --git a/near-contract-standards/src/non_fungible_token/core/core_impl.ts b/near-contract-standards/src/non_fungible_token/core/core_impl.ts index 343d219a..eec171f0 100644 --- a/near-contract-standards/src/non_fungible_token/core/core_impl.ts +++ b/near-contract-standards/src/non_fungible_token/core/core_impl.ts @@ -1,40 +1,60 @@ -import { UnorderedMap, LookupMap, Bytes, near, UnorderedSet, assert } from 'near-sdk-js/lib/index' -import { PromiseResult } from 'near-sdk-js/lib/types/index' -import { assertOneYocto, IntoStorageKey, Option } from 'near-sdk-js/lib/utils' -import { TokenMetadata } from '../metadata' -import { hash_account_id, refund_approved_account_ids, refund_deposit, refund_deposit_to_account } from '../utils' -import { NftMint, NftTransfer } from '../events' -import { NonFungibleTokenResolver } from './resolver' -import { AccountId } from 'near-sdk-js/lib/types/index' -import { Token, TokenId } from '../token' +import { + UnorderedMap, + LookupMap, + Bytes, + near, + UnorderedSet, + assert, +} from "near-sdk-js/lib/index"; +import { PromiseResult } from "near-sdk-js/lib/types/index"; +import { assertOneYocto, IntoStorageKey, Option } from "near-sdk-js/lib/utils"; +import { TokenMetadata } from "../metadata"; +import { + hash_account_id, + refund_approved_account_ids, + refund_deposit, + refund_deposit_to_account, +} from "../utils"; +import { NftMint, NftTransfer } from "../events"; +import { NonFungibleTokenResolver } from "./resolver"; +import { AccountId } from "near-sdk-js/lib/types/index"; +import { Token, TokenId } from "../token"; export interface NonFungibleTokenCore { - nft_transfer(receiver_id: AccountId, token_id: TokenId, approval_id: Option, memo: Option) + nft_transfer( + receiver_id: AccountId, + token_id: TokenId, + approval_id: Option, + memo: Option + ); nft_transfer_call( receiver_id: AccountId, token_id: TokenId, approval_id: Option, memo: Option, msg: string - ) - nft_token(token_id: TokenId): Option + ); + nft_token(token_id: TokenId): Option; } -const GAS_FOR_RESOLVE_TRANSFER = 5_000_000_000_000n -const GAS_FOR_NFT_TRANSFER_CALL = 25_000_000_000_000n + GAS_FOR_RESOLVE_TRANSFER +const GAS_FOR_RESOLVE_TRANSFER = 5_000_000_000_000n; +const GAS_FOR_NFT_TRANSFER_CALL = + 25_000_000_000_000n + GAS_FOR_RESOLVE_TRANSFER; function repeat(str: string, n: number) { - return Array(n + 1).join(str) + return Array(n + 1).join(str); } -export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenResolver { - public owner_id: string - public extra_storage_in_bytes_per_token: bigint - public owner_by_id: UnorderedMap - public token_metadata_by_id: Option> - public tokens_per_owner: Option>> - public approvals_by_id: Option> - public next_approval_id_by_id: Option> +export class NonFungibleToken + implements NonFungibleTokenCore, NonFungibleTokenResolver +{ + public owner_id: string; + public extra_storage_in_bytes_per_token: bigint; + public owner_by_id: UnorderedMap; + public token_metadata_by_id: Option>; + public tokens_per_owner: Option>>; + public approvals_by_id: Option>; + public next_approval_id_by_id: Option>; constructor( owner_by_id_prefix: IntoStorageKey, @@ -43,45 +63,47 @@ export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenR enumeration_prefix: Option, approval_prefix: Option ) { - let approvals_by_id: Option> - let next_approval_id_by_id: Option> + let approvals_by_id: Option>; + let next_approval_id_by_id: Option>; if (approval_prefix) { - const prefix = approval_prefix.into_storage_key() - approvals_by_id = new LookupMap(prefix) - next_approval_id_by_id = new LookupMap(prefix) + const prefix = approval_prefix.into_storage_key(); + approvals_by_id = new LookupMap(prefix); + next_approval_id_by_id = new LookupMap(prefix); } else { - approvals_by_id = null - next_approval_id_by_id = null + approvals_by_id = null; + next_approval_id_by_id = null; } - this.owner_id = owner_id - this.extra_storage_in_bytes_per_token = 0n - this.owner_by_id = new UnorderedMap(owner_by_id_prefix.into_storage_key()) - this.token_metadata_by_id = token_metadata_prefix ? new LookupMap(token_metadata_prefix.into_storage_key()) : null - this.approvals_by_id = approvals_by_id - this.next_approval_id_by_id = next_approval_id_by_id + this.owner_id = owner_id; + this.extra_storage_in_bytes_per_token = 0n; + this.owner_by_id = new UnorderedMap(owner_by_id_prefix.into_storage_key()); + this.token_metadata_by_id = token_metadata_prefix + ? new LookupMap(token_metadata_prefix.into_storage_key()) + : null; + this.approvals_by_id = approvals_by_id; + this.next_approval_id_by_id = next_approval_id_by_id; } init() { - this.measure_min_token_storage_cost() + this.measure_min_token_storage_cost(); } measure_min_token_storage_cost() { - const initial_storage_usage = near.storageUsage() + const initial_storage_usage = near.storageUsage(); // 64 Length because this is the max account id length - const tmp_token_id = repeat('a', 64) - const tmp_owner_id = repeat('a', 64) + const tmp_token_id = repeat("a", 64); + const tmp_owner_id = repeat("a", 64); // 1. set some dummy data - this.owner_by_id.set(tmp_token_id, tmp_owner_id) + this.owner_by_id.set(tmp_token_id, tmp_owner_id); if (this.token_metadata_by_id) { this.token_metadata_by_id.set( tmp_token_id, new TokenMetadata( - repeat('a', 64), - repeat('a', 64), - repeat('a', 64), - repeat('a', 64), + repeat("a", 64), + repeat("a", 64), + repeat("a", 64), + repeat("a", 64), 1n, null, null, @@ -91,70 +113,81 @@ export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenR null, null ) - ) + ); } if (this.tokens_per_owner) { - const u = new UnorderedSet(new TokensPerOwner(near.sha256(tmp_owner_id)).into_storage_key()) - u.set(tmp_token_id) - this.tokens_per_owner.set(tmp_owner_id, u) + const u = new UnorderedSet( + new TokensPerOwner(near.sha256(tmp_owner_id)).into_storage_key() + ); + u.set(tmp_token_id); + this.tokens_per_owner.set(tmp_owner_id, u); } if (this.approvals_by_id) { - const approvals = {} - approvals[tmp_owner_id] = 1n - this.approvals_by_id.set(tmp_token_id, approvals) + const approvals = {}; + approvals[tmp_owner_id] = 1n; + this.approvals_by_id.set(tmp_token_id, approvals); } if (this.next_approval_id_by_id) { - this.next_approval_id_by_id.set(tmp_token_id, 1n) + this.next_approval_id_by_id.set(tmp_token_id, 1n); } - const u = new UnorderedSet(new TokenPerOwnerInner(hash_account_id(tmp_owner_id)).into_storage_key()) + const u = new UnorderedSet( + new TokenPerOwnerInner(hash_account_id(tmp_owner_id)).into_storage_key() + ); if (this.tokens_per_owner) { - this.tokens_per_owner.set(tmp_owner_id, u) + this.tokens_per_owner.set(tmp_owner_id, u); } // 2. see how much space it took - this.extra_storage_in_bytes_per_token = near.storageUsage() - initial_storage_usage + this.extra_storage_in_bytes_per_token = + near.storageUsage() - initial_storage_usage; // 3. roll it all back if (this.next_approval_id_by_id) { - this.next_approval_id_by_id.remove(tmp_token_id) + this.next_approval_id_by_id.remove(tmp_token_id); } if (this.approvals_by_id) { - this.approvals_by_id.remove(tmp_token_id) + this.approvals_by_id.remove(tmp_token_id); } if (this.tokens_per_owner) { - this.tokens_per_owner.remove(tmp_owner_id) + this.tokens_per_owner.remove(tmp_owner_id); } if (this.token_metadata_by_id) { - this.token_metadata_by_id.remove(tmp_token_id) + this.token_metadata_by_id.remove(tmp_token_id); } if (this.tokens_per_owner) { - this.tokens_per_owner.remove(tmp_owner_id) + this.tokens_per_owner.remove(tmp_owner_id); } } internal_transfer_unguarded(token_id: string, from: string, to: string) { - this.owner_by_id.set(token_id, to) + this.owner_by_id.set(token_id, to); if (this.tokens_per_owner) { - const owner_tokens = this.tokens_per_owner.get(from) + const owner_tokens = this.tokens_per_owner.get(from); if (owner_tokens == null) { - throw new Error('Unable to access tokens per owner in unguarded call.') + throw new Error("Unable to access tokens per owner in unguarded call."); } - const owner_tokens_set = UnorderedSet.deserialize(owner_tokens as UnorderedSet) + const owner_tokens_set = UnorderedSet.deserialize( + owner_tokens as UnorderedSet + ); if (owner_tokens_set.isEmpty()) { - this.tokens_per_owner.remove(from) + this.tokens_per_owner.remove(from); } else { - this.tokens_per_owner.set(from, owner_tokens_set) + this.tokens_per_owner.set(from, owner_tokens_set); } - let receiver_tokens = this.tokens_per_owner.get(to) + let receiver_tokens = this.tokens_per_owner.get(to); if (receiver_tokens == null) { - receiver_tokens = new UnorderedSet(new TokensPerOwner(near.sha256(to)).into_storage_key()) + receiver_tokens = new UnorderedSet( + new TokensPerOwner(near.sha256(to)).into_storage_key() + ); } else { - receiver_tokens = UnorderedSet.deserialize(receiver_tokens as UnorderedSet) + receiver_tokens = UnorderedSet.deserialize( + receiver_tokens as UnorderedSet + ); } - ;(receiver_tokens as UnorderedSet).set(token_id) - this.tokens_per_owner.set(to, receiver_tokens) + (receiver_tokens as UnorderedSet).set(token_id); + this.tokens_per_owner.set(to, receiver_tokens); } } @@ -165,36 +198,47 @@ export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenR approval_id: Option, memo: Option ): [string, Map | null] { - const owner_id = this.owner_by_id.get(token_id) + const owner_id = this.owner_by_id.get(token_id); if (owner_id == null) { - throw new Error('Token not found') + throw new Error("Token not found"); } - const approved_account_ids = this.approvals_by_id?.remove(token_id) + const approved_account_ids = this.approvals_by_id?.remove(token_id); - let sender_id_authorized: Option + let sender_id_authorized: Option; if (sender_id != owner_id) { if (!approved_account_ids) { - throw new Error('Unauthorized') + throw new Error("Unauthorized"); } - const actual_approval_id = (approved_account_ids as any)[sender_id] + const actual_approval_id = (approved_account_ids as any)[sender_id]; if (!actual_approval_id) { - throw new Error('Sender not approved') + throw new Error("Sender not approved"); } assert( approval_id == null || approval_id == actual_approval_id, `The actual approval_id ${actual_approval_id} is different from the given ${approval_id}` - ) - sender_id_authorized = sender_id + ); + sender_id_authorized = sender_id; } else { - sender_id_authorized = null + sender_id_authorized = null; } - assert(owner_id != receiver_id, 'Current and next owner must differ') - this.internal_transfer_unguarded(token_id, owner_id as string, receiver_id) - NonFungibleToken.emit_transfer(owner_id as string, receiver_id, token_id, sender_id_authorized, memo) - return [owner_id as string, approved_account_ids == null ? null : (approved_account_ids as Map)] + assert(owner_id != receiver_id, "Current and next owner must differ"); + this.internal_transfer_unguarded(token_id, owner_id as string, receiver_id); + NonFungibleToken.emit_transfer( + owner_id as string, + receiver_id, + token_id, + sender_id_authorized, + memo + ); + return [ + owner_id as string, + approved_account_ids == null + ? null + : (approved_account_ids as Map), + ]; } static emit_transfer( @@ -210,13 +254,22 @@ export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenR [token_id], sender_id && sender_id == owner_id ? sender_id : null, memo - ).emit() + ).emit(); } - internal_mint(token_id: string, token_owner_id: string, token_metadata: Option): Token { - const token = this.internal_mint_with_refund(token_id, token_owner_id, token_metadata, near.predecessorAccountId()) - new NftMint(token.owner_id, [token.token_id], null).emit() - return token + internal_mint( + token_id: string, + token_owner_id: string, + token_metadata: Option + ): Token { + const token = this.internal_mint_with_refund( + token_id, + token_owner_id, + token_metadata, + near.predecessorAccountId() + ); + new NftMint(token.owner_id, [token.token_id], null).emit(); + return token; } internal_mint_with_refund( @@ -225,39 +278,46 @@ export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenR token_metadata: Option, refund_id: Option ): Token { - let initial_storage_usage: Option<[string, bigint]> = null + let initial_storage_usage: Option<[string, bigint]> = null; if (refund_id) { - initial_storage_usage = [refund_id, near.storageUsage()] + initial_storage_usage = [refund_id, near.storageUsage()]; } if (this.token_metadata_by_id && token_metadata == null) { - throw new Error('Must provide metadata') + throw new Error("Must provide metadata"); } if (this.owner_by_id.get(token_id)) { - throw new Error('token_id must be unique') + throw new Error("token_id must be unique"); } - const owner_id = token_owner_id - this.owner_by_id.set(token_id, owner_id) - this.token_metadata_by_id?.set(token_id, token_metadata) + const owner_id = token_owner_id; + this.owner_by_id.set(token_id, owner_id); + this.token_metadata_by_id?.set(token_id, token_metadata); if (this.tokens_per_owner) { - let token_ids = this.tokens_per_owner.get(owner_id) as UnorderedSet - token_ids = UnorderedSet.deserialize(token_ids) - token_ids.set(token_id) - this.tokens_per_owner.set(owner_id, token_ids) + let token_ids = this.tokens_per_owner.get(owner_id) as UnorderedSet; + token_ids = UnorderedSet.deserialize(token_ids); + token_ids.set(token_id); + this.tokens_per_owner.set(owner_id, token_ids); } - const approved_account_ids = this.approvals_by_id ? new Map() : null + const approved_account_ids = this.approvals_by_id + ? new Map() + : null; if (initial_storage_usage) { - const [id, storage_usage] = initial_storage_usage - refund_deposit_to_account(near.storageUsage() - storage_usage, id) + const [id, storage_usage] = initial_storage_usage; + refund_deposit_to_account(near.storageUsage() - storage_usage, id); } - return new Token(token_id, owner_id, token_metadata, approved_account_ids) + return new Token(token_id, owner_id, token_metadata, approved_account_ids); } - nft_transfer(receiver_id: string, token_id: string, approval_id: Option, memo: Option) { - assertOneYocto() - const sender_id = near.predecessorAccountId() - this.internal_transfer(sender_id, receiver_id, token_id, approval_id, memo) + nft_transfer( + receiver_id: string, + token_id: string, + approval_id: Option, + memo: Option + ) { + assertOneYocto(); + const sender_id = near.predecessorAccountId(); + this.internal_transfer(sender_id, receiver_id, token_id, approval_id, memo); } nft_transfer_call( @@ -267,21 +327,30 @@ export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenR memo: Option, msg: string ) { - assertOneYocto() - const sender_id = near.predecessorAccountId() - const [old_owner, old_approvals] = this.internal_transfer(sender_id, receiver_id, token_id, approval_id, memo) + assertOneYocto(); + const sender_id = near.predecessorAccountId(); + const [old_owner, old_approvals] = this.internal_transfer( + sender_id, + receiver_id, + token_id, + approval_id, + memo + ); // TODO: ext_nft_receiver } nft_token(token_id: string): Option { - const owner_id = this.owner_by_id.get(token_id) as Option + const owner_id = this.owner_by_id.get(token_id) as Option; if (owner_id == null) { - return null + return null; } - const metadata = this.token_metadata_by_id?.get(token_id) as Option + const metadata = this.token_metadata_by_id?.get( + token_id + ) as Option; const approved_account_ids = - (this.approvals_by_id?.get(token_id) as Option>) || new Map() - return new Token(token_id, owner_id, metadata, approved_account_ids) + (this.approvals_by_id?.get(token_id) as Option>) || + new Map(); + return new Token(token_id, owner_id, metadata, approved_account_ids); } nft_resolve_transfer( @@ -290,65 +359,73 @@ export class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenR token_id: string, approved_account_ids: Option> ): boolean { - let must_revert: boolean - const p = near.promiseResult(0) + let must_revert: boolean; + const p = near.promiseResult(0); if (p === PromiseResult.NotReady) { - throw new Error() + throw new Error(); } else if (p === PromiseResult.Failed) { - must_revert = true + must_revert = true; } else { try { - const yes_or_no = JSON.parse(p as Bytes) - if (typeof yes_or_no == 'boolean') { - must_revert = yes_or_no + const yes_or_no = JSON.parse(p as Bytes); + if (typeof yes_or_no == "boolean") { + must_revert = yes_or_no; } else { - must_revert = true + must_revert = true; } } catch (_e) { - must_revert = true + must_revert = true; } } if (!must_revert) { - return true + return true; } - const current_owner = this.owner_by_id.get(token_id) as Option + const current_owner = this.owner_by_id.get(token_id) as Option; if (current_owner) { if (current_owner != receiver_id) { - return true + return true; } } else { if (approved_account_ids) { - refund_approved_account_ids(previous_owner_id, approved_account_ids) + refund_approved_account_ids(previous_owner_id, approved_account_ids); } - return true + return true; } - this.internal_transfer_unguarded(token_id, receiver_id, previous_owner_id) + this.internal_transfer_unguarded(token_id, receiver_id, previous_owner_id); if (this.approvals_by_id) { - let receiver_approvals = this.approvals_by_id.get(token_id) as Option> + let receiver_approvals = this.approvals_by_id.get(token_id) as Option< + Map + >; if (receiver_approvals) { - receiver_approvals = new Map(Object.entries(receiver_approvals)) - refund_approved_account_ids(receiver_id, receiver_approvals) + receiver_approvals = new Map(Object.entries(receiver_approvals)); + refund_approved_account_ids(receiver_id, receiver_approvals); } if (approved_account_ids) { - this.approvals_by_id.set(token_id, approved_account_ids) + this.approvals_by_id.set(token_id, approved_account_ids); } } - NonFungibleToken.emit_transfer(receiver_id, previous_owner_id, token_id, null, null) - return false + NonFungibleToken.emit_transfer( + receiver_id, + previous_owner_id, + token_id, + null, + null + ); + return false; } } -export type StorageKey = TokensPerOwner | TokenPerOwnerInner +export type StorageKey = TokensPerOwner | TokenPerOwnerInner; export class TokensPerOwner implements IntoStorageKey { constructor(public account_hash: Bytes) {} into_storage_key(): Bytes { - return '\x00' + this.account_hash + return "\x00" + this.account_hash; } } @@ -356,6 +433,6 @@ export class TokenPerOwnerInner implements IntoStorageKey { constructor(public account_id_hash: Bytes) {} into_storage_key(): Bytes { - return '\x01' + this.account_id_hash + return "\x01" + this.account_id_hash; } } diff --git a/near-contract-standards/src/non_fungible_token/core/index.ts b/near-contract-standards/src/non_fungible_token/core/index.ts index 7f7ad257..f09d5eff 100644 --- a/near-contract-standards/src/non_fungible_token/core/index.ts +++ b/near-contract-standards/src/non_fungible_token/core/index.ts @@ -1,4 +1,3 @@ - import { NonFungibleToken } from "./core_impl"; -export {NonFungibleToken} \ No newline at end of file +export { NonFungibleToken }; diff --git a/near-contract-standards/src/non_fungible_token/events.ts b/near-contract-standards/src/non_fungible_token/events.ts index 712b3f67..0a5f1bb5 100644 --- a/near-contract-standards/src/non_fungible_token/events.ts +++ b/near-contract-standards/src/non_fungible_token/events.ts @@ -1,28 +1,32 @@ -import { NearEvent } from '../event' -import {Option} from 'near-sdk-js/lib/utils' +import { NearEvent } from "../event"; +import { Option } from "near-sdk-js/lib/utils"; -export type Nep171EventKind = NftMint[] | NftTransfer[] | NftBurn[] +export type Nep171EventKind = NftMint[] | NftTransfer[] | NftBurn[]; export class Nep171Event extends NearEvent { - version: string - event_kind: Nep171EventKind + version: string; + event_kind: Nep171EventKind; constructor(version: string, event_kind: Nep171EventKind) { - super() - this.version = version - this.event_kind = event_kind + super(); + this.version = version; + this.event_kind = event_kind; } } export class NftMint { - constructor(public owner_id: string, public token_ids: string[], public memo: Option) {} + constructor( + public owner_id: string, + public token_ids: string[], + public memo: Option + ) {} emit() { - NftMint.emit_many([this]) + NftMint.emit_many([this]); } static emit_many(data: NftMint[]) { - new_171_v1(data).emit() + new_171_v1(data).emit(); } } @@ -36,11 +40,11 @@ export class NftTransfer { ) {} emit() { - NftTransfer.emit_many([this]) + NftTransfer.emit_many([this]); } static emit_many(data: NftTransfer[]) { - new_171_v1(data).emit() + new_171_v1(data).emit(); } } @@ -53,18 +57,18 @@ export class NftBurn { ) {} emit() { - NftBurn.emit_many([this]) + NftBurn.emit_many([this]); } static emit_many(data: NftBurn[]) { - new_171_v1(data).emit() + new_171_v1(data).emit(); } } function new_171(version: string, event_kind: Nep171EventKind): NearEvent { - return new Nep171Event(version, event_kind) + return new Nep171Event(version, event_kind); } function new_171_v1(event_kind: Nep171EventKind): NearEvent { - return new_171('1.0.0', event_kind) + return new_171("1.0.0", event_kind); } diff --git a/near-contract-standards/src/non_fungible_token/index.ts b/near-contract-standards/src/non_fungible_token/index.ts index 69020669..1fff9dd5 100644 --- a/near-contract-standards/src/non_fungible_token/index.ts +++ b/near-contract-standards/src/non_fungible_token/index.ts @@ -1,3 +1,3 @@ import { NonFungibleToken } from "./core/index"; -export {NonFungibleToken} \ No newline at end of file +export { NonFungibleToken }; diff --git a/near-contract-standards/src/non_fungible_token/metadata.ts b/near-contract-standards/src/non_fungible_token/metadata.ts index 8983c23b..d81d4bb5 100644 --- a/near-contract-standards/src/non_fungible_token/metadata.ts +++ b/near-contract-standards/src/non_fungible_token/metadata.ts @@ -1,8 +1,8 @@ -import { Bytes } from 'near-sdk-js' -import { near, assert } from 'near-sdk-js' -import { Option } from 'near-sdk-js/lib/utils' +import { Bytes } from "near-sdk-js"; +import { near, assert } from "near-sdk-js"; +import { Option } from "near-sdk-js/lib/utils"; -export const NFT_METADATA_SPEC = 'nft-1.0.0' +export const NFT_METADATA_SPEC = "nft-1.0.0"; export class NFTContractMetadata { constructor( @@ -16,10 +16,13 @@ export class NFTContractMetadata { ) {} assert_valid() { - assert(this.spec == NFT_METADATA_SPEC, 'Spec is not NFT metadata') - assert((this.reference != null) == (this.reference_hash != null), 'Reference and reference hash must be present') + assert(this.spec == NFT_METADATA_SPEC, "Spec is not NFT metadata"); + assert( + (this.reference != null) == (this.reference_hash != null), + "Reference and reference hash must be present" + ); if (this.reference_hash != null) { - assert(this.reference_hash.length == 32, 'Hash has to be 32 bytes') + assert(this.reference_hash.length == 32, "Hash has to be 32 bytes"); } } } @@ -41,14 +44,23 @@ export class TokenMetadata { ) {} assert_valid() { - assert((this.media != null) == (this.media_hash != null), 'Media and media hash must be present') + assert( + (this.media != null) == (this.media_hash != null), + "Media and media hash must be present" + ); if (this.media_hash != null) { - assert(this.media_hash.length == 32, 'Media hash has to be 32 bytes') + assert(this.media_hash.length == 32, "Media hash has to be 32 bytes"); } - assert((this.reference != null) == (this.reference_hash != null), 'Reference and reference hash must be present') + assert( + (this.reference != null) == (this.reference_hash != null), + "Reference and reference hash must be present" + ); if (this.reference_hash != null) { - assert(this.reference_hash.length == 32, 'Reference hash has to be 32 bytes') + assert( + this.reference_hash.length == 32, + "Reference hash has to be 32 bytes" + ); } } } diff --git a/near-contract-standards/src/non_fungible_token/token.ts b/near-contract-standards/src/non_fungible_token/token.ts index 65c55872..c89d7d4e 100644 --- a/near-contract-standards/src/non_fungible_token/token.ts +++ b/near-contract-standards/src/non_fungible_token/token.ts @@ -1,8 +1,8 @@ -import { TokenMetadata } from './metadata' -import { AccountId } from 'near-sdk-js/lib/types' -import { Option } from 'near-sdk-js/lib/utils' +import { TokenMetadata } from "./metadata"; +import { AccountId } from "near-sdk-js/lib/types"; +import { Option } from "near-sdk-js/lib/utils"; -export type TokenId = string +export type TokenId = string; export class Token { constructor( public token_id: TokenId, diff --git a/near-contract-standards/src/non_fungible_token/utils.ts b/near-contract-standards/src/non_fungible_token/utils.ts index 951e60d6..d09ad7f4 100644 --- a/near-contract-standards/src/non_fungible_token/utils.ts +++ b/near-contract-standards/src/non_fungible_token/utils.ts @@ -1,44 +1,67 @@ -import { near, assert, Bytes } from 'near-sdk-js' -import { AccountId } from 'near-sdk-js/lib/types' +import { near, assert, Bytes } from "near-sdk-js"; +import { AccountId } from "near-sdk-js/lib/types"; export function bytes_for_approved_account_id(account_id: string): number { // The extra 4 bytes are coming from Borsh serialization to store the length of the string. - return account_id.length + 4 + 8 + return account_id.length + 4 + 8; } -export function refund_approved_account_ids_iter(account_id: string, approved_account_ids: string[]): void { - const storage_released = approved_account_ids.map(bytes_for_approved_account_id).reduce((a, b) => a + b) - const promise_id = near.promiseBatchCreate(account_id) - near.promiseBatchActionTransfer(promise_id, BigInt(storage_released) * near.storageByteCost()) - near.promiseReturn(promise_id) +export function refund_approved_account_ids_iter( + account_id: string, + approved_account_ids: string[] +): void { + const storage_released = approved_account_ids + .map(bytes_for_approved_account_id) + .reduce((a, b) => a + b); + const promise_id = near.promiseBatchCreate(account_id); + near.promiseBatchActionTransfer( + promise_id, + BigInt(storage_released) * near.storageByteCost() + ); + near.promiseReturn(promise_id); } -export function refund_approved_account_ids(account_id: AccountId, approved_account_ids: Map) { - refund_approved_account_ids_iter(account_id, Array.from(approved_account_ids.keys())) +export function refund_approved_account_ids( + account_id: AccountId, + approved_account_ids: Map +) { + refund_approved_account_ids_iter( + account_id, + Array.from(approved_account_ids.keys()) + ); } -export function refund_deposit_to_account(storage_used: bigint, account_id: string): void { - const required_cost = near.storageByteCost() * storage_used - const attached_deposit = near.attachedDeposit() +export function refund_deposit_to_account( + storage_used: bigint, + account_id: string +): void { + const required_cost = near.storageByteCost() * storage_used; + const attached_deposit = near.attachedDeposit(); - assert(required_cost <= attached_deposit, `Must attach ${required_cost} yoctoNEAR to cover storage`) + assert( + required_cost <= attached_deposit, + `Must attach ${required_cost} yoctoNEAR to cover storage` + ); - const refund = attached_deposit - required_cost + const refund = attached_deposit - required_cost; if (refund > 1n) { - const promise_id = near.promiseBatchCreate(account_id) - near.promiseBatchActionTransfer(promise_id, refund) - near.promiseReturn(promise_id) + const promise_id = near.promiseBatchCreate(account_id); + near.promiseBatchActionTransfer(promise_id, refund); + near.promiseReturn(promise_id); } } export function refund_deposit(storage_used: bigint): void { - refund_deposit_to_account(storage_used, near.predecessorAccountId()) + refund_deposit_to_account(storage_used, near.predecessorAccountId()); } export function hash_account_id(account_id: string): Bytes { - return near.sha256(account_id) + return near.sha256(account_id); } export function assert_at_least_one_yocto(): void { - assert(near.attachedDeposit() >= 1n, 'Requires attached deposit of at least 1 yoctoNEAR') + assert( + near.attachedDeposit() >= 1n, + "Requires attached deposit of at least 1 yoctoNEAR" + ); } diff --git a/src/api.ts b/src/api.ts index 35fe651c..0ee34bfb 100644 --- a/src/api.ts +++ b/src/api.ts @@ -1,66 +1,78 @@ -import { assert, Bytes, NearAmount, PromiseIndex, Register } from './utils' -import { PromiseResult, GasWeight } from './types' +import { assert, Bytes, NearAmount, PromiseIndex, Register } from "./utils"; +import { PromiseResult, GasWeight } from "./types"; -const U64_MAX = 2n ** 64n - 1n -const EVICTED_REGISTER = U64_MAX - 1n +const U64_MAX = 2n ** 64n - 1n; +const EVICTED_REGISTER = U64_MAX - 1n; // Interface available in QuickJS interface Env { // Panic - panic_utf8(message: Bytes): never + panic_utf8(message: Bytes): never; // Logging - log(message: Bytes): void - log_utf8(message: Bytes): void - log_utf16(message: Bytes): void + log(message: Bytes): void; + log_utf8(message: Bytes): void; + log_utf16(message: Bytes): void; // Read from register - read_register(register: Register): string + read_register(register: Register): string; // Storage - storage_read(key: Bytes, register: Register): bigint - storage_has_key(key: Bytes): bigint - storage_write(key: Bytes, value: Bytes, register: Register): bigint - storage_remove(key: Bytes, register: Register): bigint - storage_usage(): bigint + storage_read(key: Bytes, register: Register): bigint; + storage_has_key(key: Bytes): bigint; + storage_write(key: Bytes, value: Bytes, register: Register): bigint; + storage_remove(key: Bytes, register: Register): bigint; + storage_usage(): bigint; // Caller methods - signer_account_id(register: Register): void - signer_account_pk(register: Register): void - attached_deposit(): bigint - predecessor_account_id(register: Register): void - input(register: Register): void + signer_account_id(register: Register): void; + signer_account_pk(register: Register): void; + attached_deposit(): bigint; + predecessor_account_id(register: Register): void; + input(register: Register): void; // Account data - account_balance(): bigint - account_locked_balance(): bigint - current_account_id(register: Register): void - validator_stake(accountId: Bytes): bigint - validator_total_stake(): bigint + account_balance(): bigint; + account_locked_balance(): bigint; + current_account_id(register: Register): void; + validator_stake(accountId: Bytes): bigint; + validator_total_stake(): bigint; // Blockchain info - block_index(): bigint - block_timestamp(): bigint - epoch_height(): bigint + block_index(): bigint; + block_timestamp(): bigint; + epoch_height(): bigint; // Gas - prepaid_gas(): bigint - used_gas(): bigint + prepaid_gas(): bigint; + used_gas(): bigint; // Helper methods and cryptography - value_return(value: Bytes): void - random_seed(register: Register): void - sha256(value: Bytes, register: Register): void - keccak256(value: Bytes, register: Register): void - keccak512(value: Bytes, register: Register): void - ripemd160(value: Bytes, register: Register): void - ecrecover(hash: Bytes, sig: Bytes, v: number, malleabilityFlag: number, register: Register): bigint - alt_bn128_g1_multiexp(value: Bytes, register: Register): void - alt_bn128_g1_sum(value: Bytes, register: Register): void - alt_bn128_pairing_check(value: Bytes): bigint + value_return(value: Bytes): void; + random_seed(register: Register): void; + sha256(value: Bytes, register: Register): void; + keccak256(value: Bytes, register: Register): void; + keccak512(value: Bytes, register: Register): void; + ripemd160(value: Bytes, register: Register): void; + ecrecover( + hash: Bytes, + sig: Bytes, + v: number, + malleabilityFlag: number, + register: Register + ): bigint; + alt_bn128_g1_multiexp(value: Bytes, register: Register): void; + alt_bn128_g1_sum(value: Bytes, register: Register): void; + alt_bn128_pairing_check(value: Bytes): bigint; // Promises - promise_create(accountId: Bytes, methodName: Bytes, args: Bytes, amount: NearAmount, gas: NearAmount): bigint + promise_create( + accountId: Bytes, + methodName: Bytes, + args: Bytes, + amount: NearAmount, + gas: NearAmount + ): bigint; promise_then( promiseIndex: bigint, accountId: Bytes, @@ -91,7 +103,7 @@ interface Env { promiseIndex: bigint, publicKey: Bytes, nonce: number | bigint - ): void + ): void; promise_batch_action_add_key_with_function_call( promiseIndex: bigint, publicKey: Bytes, @@ -148,8 +160,8 @@ export function log(...params: unknown[]): void { * Can only be called in a call or initialize function. */ export function signerAccountId(): Bytes { - env.signer_account_id(0) - return env.read_register(0) + env.signer_account_id(0); + return env.read_register(0); } /** @@ -157,8 +169,8 @@ export function signerAccountId(): Bytes { * Can only be called in a call or initialize function. */ export function signerAccountPk(): Bytes { - env.signer_account_pk(0) - return env.read_register(0) + env.signer_account_pk(0); + return env.read_register(0); } /** @@ -166,8 +178,8 @@ export function signerAccountPk(): Bytes { * Can only be called in a call or initialize function. */ export function predecessorAccountId(): Bytes { - env.predecessor_account_id(0) - return env.read_register(0) + env.predecessor_account_id(0); + return env.read_register(0); } /** @@ -182,28 +194,28 @@ export function currentAccountId(): Bytes { * Returns the current block index. */ export function blockIndex(): bigint { - return env.block_index() + return env.block_index(); } /** * Returns the current block height. */ export function blockHeight(): bigint { - return blockIndex() + return blockIndex(); } /** * Returns the current block timestamp. */ export function blockTimestamp(): bigint { - return env.block_timestamp() + return env.block_timestamp(); } /** * Returns the current epoch height. */ export function epochHeight(): bigint { - return env.epoch_height() + return env.epoch_height(); } /** @@ -211,21 +223,21 @@ export function epochHeight(): bigint { * Can only be called in payable functions. */ export function attachedDeposit(): bigint { - return env.attached_deposit() + return env.attached_deposit(); } /** * Returns the amount of Gas that was attached to this function call. */ export function prepaidGas(): bigint { - return env.prepaid_gas() + return env.prepaid_gas(); } /** * Returns the amount of Gas that has been used by this function call until now. */ export function usedGas(): bigint { - return env.used_gas() + return env.used_gas(); } /** @@ -248,13 +260,13 @@ export function accountLockedBalance(): bigint { * @param key - The key to read from storage. */ export function storageRead(key: Bytes): Bytes | null { - const returnValue = env.storage_read(key, 0) + const returnValue = env.storage_read(key, 0); if (returnValue !== 1n) { - return null + return null; } - return env.read_register(0) + return env.read_register(0); } /** @@ -263,7 +275,7 @@ export function storageRead(key: Bytes): Bytes | null { * @param key - The key to check for in storage. */ export function storageHasKey(key: Bytes): boolean { - return env.storage_has_key(key) === 1n + return env.storage_has_key(key) === 1n; } /** @@ -310,8 +322,8 @@ export function storageByteCost(): bigint { * Returns the arguments passed to the current smart contract call. */ export function input(): Bytes { - env.input(0) - return env.read_register(0) + env.input(0); + return env.read_register(0); } /** @@ -320,7 +332,7 @@ export function input(): Bytes { * @param value - The value to return. */ export function valueReturn(value: Bytes): void { - env.value_return(value) + env.value_return(value); } /** @@ -548,7 +560,7 @@ export function promiseBatchActionAddKeyWithFunctionCall( allowance, receiverId, methodNames - ) + ); } /** @@ -615,7 +627,7 @@ export function promiseBatchActionFunctionCallWeight( * The number of promise results available. */ export function promiseResultsCount(): bigint { - return env.promise_results_count() + return env.promise_results_count(); } /** @@ -629,11 +641,15 @@ export function promiseResult(promiseIndex: PromiseIndex): Bytes { assert( Number(status) === PromiseResult.Successful, `Promise result ${ - status == PromiseResult.Failed ? 'Failed' : status == PromiseResult.NotReady ? 'NotReady' : status + status == PromiseResult.Failed + ? "Failed" + : status == PromiseResult.NotReady + ? "NotReady" + : status }` - ) + ); - return env.read_register(0) + return env.read_register(0); } /** diff --git a/src/build-tools/include-bytes.js b/src/build-tools/include-bytes.js index 890b5117..1010a180 100644 --- a/src/build-tools/include-bytes.js +++ b/src/build-tools/include-bytes.js @@ -1,39 +1,41 @@ -import * as t from '@babel/types' -import fs from 'fs' -import path from 'path' +import * as t from "@babel/types"; +import fs from "fs"; +import path from "path"; export default function () { return { visitor: { CallExpression(p, state) { - const name = p.node.callee.name - const args = p.node.arguments + const name = p.node.callee.name; + const args = p.node.arguments; - if (name === 'includeBytes') { + if (name === "includeBytes") { // Get the path of file - const filename = this.file.opts.filename + const filename = this.file.opts.filename; // User settings - const root = state.opts.root || path.dirname(filename) + const root = state.opts.root || path.dirname(filename); // Read binary file into bytes, so encoding is 'latin1' (each byte is 0-255, become one character) - const encoding = 'latin1' + const encoding = "latin1"; // Require first arg to be string - t.assertStringLiteral(args[0]) + t.assertStringLiteral(args[0]); // Error if filename is not found - if (filename === undefined || filename === 'unknown') - throw new Error('`includeBytes` function called outside of file') + if (filename === undefined || filename === "unknown") + throw new Error("`includeBytes` function called outside of file"); // Generate and locate the file - const fileRelPath = args[0].value // Get literal string value - const filePath = path.join(root, fileRelPath) - const fileSrc = fs.readFileSync(filePath, { encoding }).toString(encoding) + const fileRelPath = args[0].value; // Get literal string value + const filePath = path.join(root, fileRelPath); + const fileSrc = fs + .readFileSync(filePath, { encoding }) + .toString(encoding); - p.replaceWith(t.stringLiteral(fileSrc)) + p.replaceWith(t.stringLiteral(fileSrc)); } }, }, - } + }; } diff --git a/src/build-tools/near-bindgen-exporter.js b/src/build-tools/near-bindgen-exporter.js index 0b4404b6..7770831a 100644 --- a/src/build-tools/near-bindgen-exporter.js +++ b/src/build-tools/near-bindgen-exporter.js @@ -1,145 +1,193 @@ -import * as t from '@babel/types' +import * as t from "@babel/types"; -const methodTypes = ['call', 'view', 'initialize'] +const methodTypes = ["call", "view", "initialize"]; function throwError(message) { - return t.blockStatement([t.throwStatement(t.newExpression(t.identifier('Error'), [t.stringLiteral(message)]))]) + return t.blockStatement([ + t.throwStatement( + t.newExpression(t.identifier("Error"), [t.stringLiteral(message)]) + ), + ]); } function readState(classId) { - return t.variableDeclaration('const', [ + return t.variableDeclaration("const", [ t.variableDeclarator( - t.identifier('_state'), - t.callExpression(t.memberExpression(classId, t.identifier('_getState')), []) + t.identifier("_state"), + t.callExpression( + t.memberExpression(classId, t.identifier("_getState")), + [] + ) ), - ]) + ]); } function preventDoubleInit(methodType) { - if (methodType !== 'initialize') { - return t.emptyStatement() + if (methodType !== "initialize") { + return t.emptyStatement(); } - return t.ifStatement(t.identifier('_state'), throwError('Contract already initialized')) + return t.ifStatement( + t.identifier("_state"), + throwError("Contract already initialized") + ); } function ensureInitBeforeCall(classId, methodType) { - if (!['call', 'view'].includes(methodType)) { - return t.emptyStatement() + if (!["call", "view"].includes(methodType)) { + return t.emptyStatement(); } return t.ifStatement( t.logicalExpression( - '&&', - t.unaryExpression('!', t.identifier('_state')), - t.callExpression(t.memberExpression(classId, t.identifier('_requireInit')), []) + "&&", + t.unaryExpression("!", t.identifier("_state")), + t.callExpression( + t.memberExpression(classId, t.identifier("_requireInit")), + [] + ) ), - throwError('Contract must be initialized') - ) + throwError("Contract must be initialized") + ); } function initializeContractClass(classId) { - return t.variableDeclaration('const', [ + return t.variableDeclaration("const", [ t.variableDeclarator( - t.identifier('_contract'), - t.callExpression(t.memberExpression(classId, t.identifier('_create')), []) + t.identifier("_contract"), + t.callExpression(t.memberExpression(classId, t.identifier("_create")), []) ), - ]) + ]); } function reconstructState(classId, methodType) { - if (!['call', 'view'].includes(methodType)) { - return t.emptyStatement() + if (!["call", "view"].includes(methodType)) { + return t.emptyStatement(); } return t.ifStatement( - t.identifier('_state'), + t.identifier("_state"), t.blockStatement([ t.expressionStatement( - t.callExpression(t.memberExpression(classId, t.identifier('_reconstruct')), [ - t.identifier('_contract'), - t.identifier('_state'), - ]) + t.callExpression( + t.memberExpression(classId, t.identifier("_reconstruct")), + [t.identifier("_contract"), t.identifier("_state")] + ) ), ]) - ) + ); } function collectArguments(classId) { - return t.variableDeclaration('const', [ + return t.variableDeclaration("const", [ t.variableDeclarator( - t.identifier('_args'), - t.callExpression(t.memberExpression(classId, t.identifier('_getArgs')), []) + t.identifier("_args"), + t.callExpression( + t.memberExpression(classId, t.identifier("_getArgs")), + [] + ) ), - ]) + ]); } function callContractMethod(methodName) { - return t.variableDeclaration('const', [ + return t.variableDeclaration("const", [ t.variableDeclarator( - t.identifier('_result'), - t.callExpression(t.memberExpression(t.identifier('_contract'), t.identifier(methodName)), [t.identifier('_args')]) + t.identifier("_result"), + t.callExpression( + t.memberExpression(t.identifier("_contract"), t.identifier(methodName)), + [t.identifier("_args")] + ) ), - ]) + ]); } function saveToStorage(classId, methodType) { - if (!['initialize', 'call'].includes(methodType)) { - return t.emptyStatement() + if (!["initialize", "call"].includes(methodType)) { + return t.emptyStatement(); } return t.expressionStatement( - t.callExpression(t.memberExpression(classId, t.identifier('_saveToStorage')), [t.identifier('_contract')]) - ) + t.callExpression( + t.memberExpression(classId, t.identifier("_saveToStorage")), + [t.identifier("_contract")] + ) + ); } function executePromise(classId) { return t.ifStatement( - t.binaryExpression('!==', t.identifier('_result'), t.identifier('undefined')), + t.binaryExpression( + "!==", + t.identifier("_result"), + t.identifier("undefined") + ), t.ifStatement( t.logicalExpression( - '&&', + "&&", t.logicalExpression( - '&&', - t.identifier('_result'), - t.memberExpression(t.identifier('_result'), t.identifier('constructor')) + "&&", + t.identifier("_result"), + t.memberExpression( + t.identifier("_result"), + t.identifier("constructor") + ) ), t.binaryExpression( - '===', + "===", t.memberExpression( - t.memberExpression(t.identifier('_result'), t.identifier('constructor')), - t.identifier('name') + t.memberExpression( + t.identifier("_result"), + t.identifier("constructor") + ), + t.identifier("name") ), - t.stringLiteral('NearPromise') + t.stringLiteral("NearPromise") ) ), t.expressionStatement( - t.callExpression(t.memberExpression(t.identifier('_result'), t.identifier('onReturn')), []) + t.callExpression( + t.memberExpression(t.identifier("_result"), t.identifier("onReturn")), + [] + ) ), t.expressionStatement( - t.callExpression(t.memberExpression(t.identifier('env'), t.identifier('value_return')), [ - t.callExpression(t.memberExpression(classId, t.identifier('_serialize')), [t.identifier('_result')]), - ]) + t.callExpression( + t.memberExpression(t.identifier("env"), t.identifier("value_return")), + [ + t.callExpression( + t.memberExpression(classId, t.identifier("_serialize")), + [t.identifier("_result")] + ), + ] + ) ) ) - ) + ); } export default function () { return { visitor: { ClassDeclaration(path) { - const classNode = path.node + const classNode = path.node; - if (classNode.decorators && classNode.decorators[0].expression.callee.name === 'NearBindgen') { - const classId = classNode.id - const contractMethods = {} + if ( + classNode.decorators && + classNode.decorators[0].expression.callee.name === "NearBindgen" + ) { + const classId = classNode.id; + const contractMethods = {}; for (let child of classNode.body.body) { - if (child.type === 'ClassMethod' && child.kind === 'method' && child.decorators) { - const methodType = child.decorators[0].expression.callee.name + if ( + child.type === "ClassMethod" && + child.kind === "method" && + child.decorators + ) { + const methodType = child.decorators[0].expression.callee.name; if (methodTypes.includes(methodType)) { - contractMethods[child.key.name] = methodType + contractMethods[child.key.name] = methodType; } } } @@ -185,11 +233,11 @@ export default function () { ]) ) ) - ) - console.log(`Babel ${methodName} method export done`) + ); + console.log(`Babel ${methodName} method export done`); } } }, }, - } + }; } diff --git a/src/collections/index.ts b/src/collections/index.ts index da1edbe4..732429d6 100644 --- a/src/collections/index.ts +++ b/src/collections/index.ts @@ -1,7 +1,7 @@ -import { LookupMap } from './lookup-map' -import { Vector } from './vector' -import { LookupSet } from './lookup-set' -import { UnorderedMap } from './unordered-map' -import { UnorderedSet } from './unordered-set' +import { LookupMap } from "./lookup-map"; +import { Vector } from "./vector"; +import { LookupSet } from "./lookup-set"; +import { UnorderedMap } from "./unordered-map"; +import { UnorderedSet } from "./unordered-set"; -export { LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet } +export { LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet }; diff --git a/src/collections/lookup-map.ts b/src/collections/lookup-map.ts index a06f2aa5..6f38bc5d 100644 --- a/src/collections/lookup-map.ts +++ b/src/collections/lookup-map.ts @@ -21,8 +21,8 @@ export class LookupMap { * @param key - The value for which to check the presence. */ containsKey(key: Bytes): boolean { - const storageKey = this.keyPrefix + key - return near.storageHasKey(storageKey) + const storageKey = this.keyPrefix + key; + return near.storageHasKey(storageKey); } /** @@ -38,7 +38,7 @@ export class LookupMap { const storageKey = this.keyPrefix + key; const value = near.storageRead(storageKey); - return getValueWithOptions(value, options) + return getValueWithOptions(value, options); } /** @@ -54,12 +54,12 @@ export class LookupMap { const storageKey = this.keyPrefix + key; if (!near.storageRemove(storageKey)) { - return options?.defaultValue ?? null + return options?.defaultValue ?? null; } const value = near.storageGetEvicted(); - return getValueWithOptions(value, options) + return getValueWithOptions(value, options); } /** @@ -78,12 +78,12 @@ export class LookupMap { const storageValue = serializeValueWithOptions(newValue, options); if (!near.storageWrite(storageKey, storageValue)) { - return options?.defaultValue ?? null + return options?.defaultValue ?? null; } const value = near.storageGetEvicted(); - return getValueWithOptions(value, options) + return getValueWithOptions(value, options); } /** @@ -97,7 +97,7 @@ export class LookupMap { options?: GetOptions ): void { for (const [key, value] of keyValuePairs) { - this.set(key, value, options) + this.set(key, value, options); } } @@ -116,6 +116,6 @@ export class LookupMap { * @param data - The deserialized data to create an instance from. */ static reconstruct(data: LookupMap): LookupMap { - return new LookupMap(data.keyPrefix) + return new LookupMap(data.keyPrefix); } } diff --git a/src/collections/lookup-set.ts b/src/collections/lookup-set.ts index 54f9df81..5014a0b6 100644 --- a/src/collections/lookup-set.ts +++ b/src/collections/lookup-set.ts @@ -82,6 +82,6 @@ export class LookupSet { * @param data - The deserialized data to create an instance from. */ static reconstruct(data: LookupSet): LookupSet { - return new LookupSet(data.keyPrefix) + return new LookupSet(data.keyPrefix); } } diff --git a/src/collections/unordered-map.ts b/src/collections/unordered-map.ts index 2e279109..61d60161 100644 --- a/src/collections/unordered-map.ts +++ b/src/collections/unordered-map.ts @@ -31,14 +31,14 @@ export class UnorderedMap { * The number of elements stored in the collection. */ get length() { - return this.keys.length + return this.keys.length; } /** * Checks whether the collection is empty. */ isEmpty(): boolean { - return this.keys.isEmpty() + return this.keys.isEmpty(); } /** @@ -54,12 +54,12 @@ export class UnorderedMap { const valueAndIndex = this.values.get(key); if (valueAndIndex === null) { - return options?.defaultValue ?? null + return options?.defaultValue ?? null; } - const [value] = valueAndIndex + const [value] = valueAndIndex; - return getValueWithOptions(value, options) + return getValueWithOptions(value, options); } /** @@ -83,13 +83,13 @@ export class UnorderedMap { this.keys.push(key); this.values.set(key, [serialized, newElementIndex]); - return null + return null; } const [oldValue, oldIndex] = valueAndIndex; this.values.set(key, [serialized, oldIndex]); - return getValueWithOptions(oldValue, options) + return getValueWithOptions(oldValue, options); } /** @@ -105,25 +105,25 @@ export class UnorderedMap { const oldValueAndIndex = this.values.remove(key); if (oldValueAndIndex === null) { - return options?.defaultValue ?? null + return options?.defaultValue ?? null; } - const [value, index] = oldValueAndIndex + const [value, index] = oldValueAndIndex; - assert(this.keys.swapRemove(index) !== null, ERR_INCONSISTENT_STATE) + assert(this.keys.swapRemove(index) !== null, ERR_INCONSISTENT_STATE); // the last key is swapped to key[index], the corresponding [value, index] need update if (!this.keys.isEmpty() && index !== this.keys.length) { // if there is still elements and it was not the last element - const swappedKey = this.keys.get(index) - const swappedValueAndIndex = this.values.get(swappedKey) + const swappedKey = this.keys.get(index); + const swappedValueAndIndex = this.values.get(swappedKey); - assert(swappedValueAndIndex !== null, ERR_INCONSISTENT_STATE) + assert(swappedValueAndIndex !== null, ERR_INCONSISTENT_STATE); this.values.set(swappedKey, [swappedValueAndIndex[0], index]); } - return getValueWithOptions(value, options) + return getValueWithOptions(value, options); } /** @@ -132,14 +132,14 @@ export class UnorderedMap { clear(): void { for (const key of this.keys) { // Set instead of remove to avoid loading the value from storage. - this.values.set(key, null) + this.values.set(key, null); } - this.keys.clear() + this.keys.clear(); } [Symbol.iterator](): UnorderedMapIterator { - return new UnorderedMapIterator(this) + return new UnorderedMapIterator(this); } /** @@ -148,11 +148,11 @@ export class UnorderedMap { * @param options - Options for retrieving and storing the data. */ private createIteratorWithOptions(options?: GetOptions): { - [Symbol.iterator](): UnorderedMapIterator + [Symbol.iterator](): UnorderedMapIterator; } { return { [Symbol.iterator]: () => new UnorderedMapIterator(this, options), - } + }; } /** @@ -161,15 +161,15 @@ export class UnorderedMap { * @param options - Options for retrieving and storing the data. */ toArray(options?: GetOptions): [Bytes, DataType][] { - const array = [] + const array = []; - const iterator = options ? this.createIteratorWithOptions(options) : this + const iterator = options ? this.createIteratorWithOptions(options) : this; for (const value of iterator) { - array.push(value) + array.push(value); } - return array + return array; } /** @@ -179,7 +179,7 @@ export class UnorderedMap { */ extend(keyValuePairs: [Bytes, DataType][]) { for (const [key, value] of keyValuePairs) { - this.set(key, value) + this.set(key, value); } } @@ -201,16 +201,16 @@ export class UnorderedMap { data: UnorderedMap ): UnorderedMap { // removing readonly modifier - type MutableUnorderedMap = Mutable> - const map = new UnorderedMap(data.prefix) as MutableUnorderedMap + type MutableUnorderedMap = Mutable>; + const map = new UnorderedMap(data.prefix) as MutableUnorderedMap; // reconstruct keys Vector - map.keys = new Vector(`${data.prefix}u`) - map.keys.length = data.keys.length + map.keys = new Vector(`${data.prefix}u`); + map.keys.length = data.keys.length; // reconstruct values LookupMap - map.values = new LookupMap(`${data.prefix}m`) + map.values = new LookupMap(`${data.prefix}m`); - return map as UnorderedMap + return map as UnorderedMap; } } @@ -237,7 +237,7 @@ class UnorderedMapIterator { const key = this.keys.next(); if (key.done) { - return { value: [key.value, null], done: key.done } + return { value: [key.value, null], done: key.done }; } const valueAndIndex = this.map.get(key.value); diff --git a/src/collections/unordered-set.ts b/src/collections/unordered-set.ts index 0e7d0fc0..4516f071 100644 --- a/src/collections/unordered-set.ts +++ b/src/collections/unordered-set.ts @@ -12,46 +12,46 @@ import { Mutable } from "../utils"; import { GetOptions } from "../types/collections"; function serializeIndex(index: number) { - const data = new Uint32Array([index]) - const array = new Uint8Array(data.buffer) + const data = new Uint32Array([index]); + const array = new Uint8Array(data.buffer); - return u8ArrayToBytes(array) + return u8ArrayToBytes(array); } function deserializeIndex(rawIndex: Bytes): number { - const array = bytesToU8Array(rawIndex) - const [data] = new Uint32Array(array.buffer) + const array = bytesToU8Array(rawIndex); + const [data] = new Uint32Array(array.buffer); - return data + return data; } /** * An unordered set that stores data in NEAR storage. */ export class UnorderedSet { - readonly elementIndexPrefix: Bytes - readonly elements: Vector + readonly elementIndexPrefix: Bytes; + readonly elements: Vector; /** * @param prefix - The byte prefix to use when storing elements inside this collection. */ constructor(readonly prefix: Bytes) { - this.elementIndexPrefix = `${prefix}i` - this.elements = new Vector(`${prefix}e`) + this.elementIndexPrefix = `${prefix}i`; + this.elements = new Vector(`${prefix}e`); } /** * The number of elements stored in the collection. */ get length(): number { - return this.elements.length + return this.elements.length; } /** * Checks whether the collection is empty. */ isEmpty(): boolean { - return this.elements.isEmpty() + return this.elements.isEmpty(); } /** @@ -107,27 +107,27 @@ export class UnorderedSet { const indexRaw = near.storageRead(indexLookup); if (!indexRaw) { - return false + return false; } // If there is only one element then swap remove simply removes it without // swapping with the last element. if (this.length === 1) { - near.storageRemove(indexLookup) + near.storageRemove(indexLookup); - const index = deserializeIndex(indexRaw) - this.elements.swapRemove(index) + const index = deserializeIndex(indexRaw); + this.elements.swapRemove(index); - return true + return true; } // If there is more than one element then swap remove swaps it with the last // element. const lastElement = this.elements.get(this.length - 1, options); - assert(!!lastElement, ERR_INCONSISTENT_STATE) + assert(!!lastElement, ERR_INCONSISTENT_STATE); - near.storageRemove(indexLookup) + near.storageRemove(indexLookup); // If the removed element was the last element from keys, then we don't need to // reinsert the lookup back. @@ -138,10 +138,10 @@ export class UnorderedSet { near.storageWrite(lastLookupElement, indexRaw); } - const index = deserializeIndex(indexRaw) - this.elements.swapRemove(index) + const index = deserializeIndex(indexRaw); + this.elements.swapRemove(index); - return true + return true; } /** @@ -154,11 +154,11 @@ export class UnorderedSet { near.storageRemove(indexLookup); } - this.elements.clear() + this.elements.clear(); } [Symbol.iterator](): VectorIterator { - return this.elements[Symbol.iterator]() + return this.elements[Symbol.iterator](); } /** @@ -167,11 +167,11 @@ export class UnorderedSet { * @param options - Options for retrieving and storing the data. */ private createIteratorWithOptions(options?: GetOptions): { - [Symbol.iterator](): VectorIterator + [Symbol.iterator](): VectorIterator; } { return { [Symbol.iterator]: () => new VectorIterator(this.elements, options), - } + }; } /** @@ -180,15 +180,15 @@ export class UnorderedSet { * @param options - Options for retrieving and storing the data. */ toArray(options?: GetOptions): DataType[] { - const array = [] + const array = []; - const iterator = options ? this.createIteratorWithOptions(options) : this + const iterator = options ? this.createIteratorWithOptions(options) : this; for (const value of iterator) { - array.push(value) + array.push(value); } - return array + return array; } /** @@ -198,7 +198,7 @@ export class UnorderedSet { */ extend(elements: DataType[]): void { for (const element of elements) { - this.set(element) + this.set(element); } } @@ -220,13 +220,13 @@ export class UnorderedSet { data: UnorderedSet ): UnorderedSet { // removing readonly modifier - type MutableUnorderedSet = Mutable> - const set = new UnorderedSet(data.prefix) as MutableUnorderedSet + type MutableUnorderedSet = Mutable>; + const set = new UnorderedSet(data.prefix) as MutableUnorderedSet; // reconstruct Vector - const elementsPrefix = data.prefix + 'e' - set.elements = new Vector(elementsPrefix) - set.elements.length = data.elements.length + const elementsPrefix = data.prefix + "e"; + set.elements = new Vector(elementsPrefix); + set.elements.length = data.elements.length; - return set as UnorderedSet + return set as UnorderedSet; } } diff --git a/src/collections/vector.ts b/src/collections/vector.ts index 412e9116..3765763d 100644 --- a/src/collections/vector.ts +++ b/src/collections/vector.ts @@ -11,11 +11,11 @@ import { import { GetOptions } from "../types/collections"; function indexToKey(prefix: Bytes, index: number): Bytes { - const data = new Uint32Array([index]) - const array = new Uint8Array(data.buffer) - const key = u8ArrayToBytes(array) + const data = new Uint32Array([index]); + const array = new Uint8Array(data.buffer); + const key = u8ArrayToBytes(array); - return prefix + key + return prefix + key; } /** @@ -33,7 +33,7 @@ export class Vector { * Checks whether the collection is empty. */ isEmpty(): boolean { - return this.length === 0 + return this.length === 0; } /** @@ -53,7 +53,7 @@ export class Vector { const storageKey = indexToKey(this.prefix, index); const value = near.storageRead(storageKey); - return getValueWithOptions(value, options) + return getValueWithOptions(value, options); } /** @@ -65,10 +65,10 @@ export class Vector { * @param options - Options for retrieving and storing the data. */ swapRemove(index: number, options?: GetOptions): DataType | null { - assert(index < this.length, ERR_INDEX_OUT_OF_BOUNDS) + assert(index < this.length, ERR_INDEX_OUT_OF_BOUNDS); if (index + 1 === this.length) { - return this.pop(options) + return this.pop(options); } const key = indexToKey(this.prefix, index); @@ -81,7 +81,7 @@ export class Vector { const value = near.storageGetEvicted(); - return getValueWithOptions(value, options) + return getValueWithOptions(value, options); } /** @@ -107,18 +107,18 @@ export class Vector { */ pop(options?: Omit, "serializer">): DataType | null { if (this.isEmpty()) { - return options?.defaultValue ?? null + return options?.defaultValue ?? null; } - const lastIndex = this.length - 1 - const lastKey = indexToKey(this.prefix, lastIndex) - this.length -= 1 + const lastIndex = this.length - 1; + const lastKey = indexToKey(this.prefix, lastIndex); + this.length -= 1; - assert(near.storageRemove(lastKey), ERR_INCONSISTENT_STATE) + assert(near.storageRemove(lastKey), ERR_INCONSISTENT_STATE); const value = near.storageGetEvicted(); - return getValueWithOptions(value, options) + return getValueWithOptions(value, options); } /** @@ -143,7 +143,7 @@ export class Vector { const value = near.storageGetEvicted(); - return getValueWithOptions(value, options) + return getValueWithOptions(value, options); } /** @@ -153,12 +153,12 @@ export class Vector { */ extend(elements: DataType[]): void { for (const element of elements) { - this.push(element) + this.push(element); } } [Symbol.iterator](): VectorIterator { - return new VectorIterator(this) + return new VectorIterator(this); } /** @@ -167,11 +167,11 @@ export class Vector { * @param options - Options for retrieving and storing the data. */ private createIteratorWithOptions(options?: GetOptions): { - [Symbol.iterator](): VectorIterator + [Symbol.iterator](): VectorIterator; } { return { [Symbol.iterator]: () => new VectorIterator(this, options), - } + }; } /** @@ -180,15 +180,15 @@ export class Vector { * @param options - Options for retrieving and storing the data. */ toArray(options?: GetOptions): DataType[] { - const array = [] + const array = []; - const iterator = options ? this.createIteratorWithOptions(options) : this + const iterator = options ? this.createIteratorWithOptions(options) : this; for (const value of iterator) { array.push(value); } - return array + return array; } /** @@ -196,11 +196,11 @@ export class Vector { */ clear(): void { for (let index = 0; index < this.length; index++) { - const key = indexToKey(this.prefix, index) - near.storageRemove(key) + const key = indexToKey(this.prefix, index); + near.storageRemove(key); } - this.length = 0 + this.length = 0; } /** @@ -220,7 +220,7 @@ export class Vector { static reconstruct(data: Vector): Vector { const vector = new Vector(data.prefix, data.length); - return vector + return vector; } } @@ -240,16 +240,16 @@ export class VectorIterator { ) {} next(): { - value: DataType | null - done: boolean + value: DataType | null; + done: boolean; } { if (this.current >= this.vector.length) { - return { value: null, done: true } + return { value: null, done: true }; } - const value = this.vector.get(this.current, this.options) - this.current += 1 + const value = this.vector.get(this.current, this.options); + this.current += 1; - return { value, done: false } + return { value, done: false }; } } diff --git a/src/index.ts b/src/index.ts index 5fd578f9..54f875b8 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,11 +1,17 @@ -import { call, view, initialize, NearBindgen } from './near-bindgen' +import { call, view, initialize, NearBindgen } from "./near-bindgen"; -import * as near from './api' -import { LookupMap, Vector, LookupSet, UnorderedMap, UnorderedSet } from './collections' +import * as near from "./api"; +import { + LookupMap, + Vector, + LookupSet, + UnorderedMap, + UnorderedSet, +} from "./collections"; import { bytes, Bytes, assert, validateAccountId } from "./utils"; -import { NearPromise, PromiseOrValue } from './promise' +import { NearPromise, PromiseOrValue } from "./promise"; export { call, @@ -24,4 +30,4 @@ export { validateAccountId, NearPromise, PromiseOrValue, -} +}; diff --git a/src/near-bindgen.ts b/src/near-bindgen.ts index 3227509f..fab5df0e 100644 --- a/src/near-bindgen.ts +++ b/src/near-bindgen.ts @@ -118,7 +118,7 @@ export function NearBindgen({ return (target: T) => { return class extends target { static _create() { - return new target() + return new target(); } static _getState(): unknown | null { @@ -161,10 +161,10 @@ export function NearBindgen({ } static _requireInit(): boolean { - return requireInit + return requireInit; } - } - } + }; + }; } declare module "./" { diff --git a/src/promise.ts b/src/promise.ts index 706dd9fd..2cf33327 100644 --- a/src/promise.ts +++ b/src/promise.ts @@ -22,7 +22,7 @@ export abstract class PromiseAction { */ export class CreateAccount extends PromiseAction { add(promiseIndex: PromiseIndex) { - near.promiseBatchActionCreateAccount(promiseIndex) + near.promiseBatchActionCreateAccount(promiseIndex); } } @@ -36,11 +36,11 @@ export class DeployContract extends PromiseAction { * @param code - The code of the contract to be deployed. */ constructor(public code: Bytes) { - super() + super(); } add(promiseIndex: PromiseIndex) { - near.promiseBatchActionDeployContract(promiseIndex, this.code) + near.promiseBatchActionDeployContract(promiseIndex, this.code); } } @@ -66,7 +66,13 @@ export class FunctionCall extends PromiseAction { } add(promiseIndex: PromiseIndex) { - near.promiseBatchActionFunctionCall(promiseIndex, this.functionName, this.args, this.amount, this.gas) + near.promiseBatchActionFunctionCall( + promiseIndex, + this.functionName, + this.args, + this.amount, + this.gas + ); } } @@ -90,7 +96,7 @@ export class FunctionCallWeight extends PromiseAction { public gas: Gas, public weight: GasWeight ) { - super() + super(); } add(promiseIndex: PromiseIndex) { @@ -101,7 +107,7 @@ export class FunctionCallWeight extends PromiseAction { this.amount, this.gas, this.weight - ) + ); } } @@ -115,11 +121,11 @@ export class Transfer extends PromiseAction { * @param amount - The amount of NEAR to tranfer. */ constructor(public amount: Balance) { - super() + super(); } add(promiseIndex: PromiseIndex) { - near.promiseBatchActionTransfer(promiseIndex, this.amount) + near.promiseBatchActionTransfer(promiseIndex, this.amount); } } @@ -134,11 +140,15 @@ export class Stake extends PromiseAction { * @param publicKey - The public key to use for staking. */ constructor(public amount: Balance, public publicKey: PublicKey) { - super() + super(); } add(promiseIndex: PromiseIndex) { - near.promiseBatchActionStake(promiseIndex, this.amount, this.publicKey.data) + near.promiseBatchActionStake( + promiseIndex, + this.amount, + this.publicKey.data + ); } } @@ -153,11 +163,15 @@ export class AddFullAccessKey extends PromiseAction { * @param nonce - The nonce to use. */ constructor(public publicKey: PublicKey, public nonce: Nonce) { - super() + super(); } add(promiseIndex: PromiseIndex) { - near.promiseBatchActionAddKeyWithFullAccess(promiseIndex, this.publicKey.data, this.nonce) + near.promiseBatchActionAddKeyWithFullAccess( + promiseIndex, + this.publicKey.data, + this.nonce + ); } } @@ -181,7 +195,7 @@ export class AddAccessKey extends PromiseAction { public functionNames: string, public nonce: Nonce ) { - super() + super(); } add(promiseIndex: PromiseIndex) { @@ -192,7 +206,7 @@ export class AddAccessKey extends PromiseAction { this.allowance, this.receiverId, this.functionNames - ) + ); } } @@ -206,11 +220,11 @@ export class DeleteKey extends PromiseAction { * @param publicKey - The public key to delete from the account. */ constructor(public publicKey: PublicKey) { - super() + super(); } add(promiseIndex: PromiseIndex) { - near.promiseBatchActionDeleteKey(promiseIndex, this.publicKey.data) + near.promiseBatchActionDeleteKey(promiseIndex, this.publicKey.data); } } /** @@ -223,11 +237,11 @@ export class DeleteAccount extends PromiseAction { * @param beneficiaryId - The beneficiary of the account deletion - the account to recieve all of the remaining funds of the deleted account. */ constructor(public beneficiaryId: AccountId) { - super() + super(); } add(promiseIndex: PromiseIndex) { - near.promiseBatchActionDeleteAccount(promiseIndex, this.beneficiaryId) + near.promiseBatchActionDeleteAccount(promiseIndex, this.beneficiaryId); } } @@ -241,7 +255,7 @@ class PromiseSingle { constructRecursively(): PromiseIndex { if (this.promiseIndex !== null) { - return this.promiseIndex + return this.promiseIndex; } const promiseIndex = this.after @@ -250,18 +264,22 @@ class PromiseSingle { this.actions.forEach((action) => action.add(promiseIndex)); - this.promiseIndex = promiseIndex + this.promiseIndex = promiseIndex; - return promiseIndex + return promiseIndex; } } export class PromiseJoint { - constructor(public promiseA: NearPromise, public promiseB: NearPromise, public promiseIndex: PromiseIndex | null) {} + constructor( + public promiseA: NearPromise, + public promiseB: NearPromise, + public promiseIndex: PromiseIndex | null + ) {} constructRecursively(): PromiseIndex { if (this.promiseIndex !== null) { - return this.promiseIndex + return this.promiseIndex; } const result = near.promiseAnd( @@ -270,11 +288,11 @@ export class PromiseJoint { ); this.promiseIndex = result; - return result + return result; } } -type PromiseSubtype = PromiseSingle | PromiseJoint +type PromiseSubtype = PromiseSingle | PromiseJoint; /** * A high level class to construct and work with NEAR promises. @@ -292,25 +310,25 @@ export class NearPromise { * @param accountId - The account ID on which to call the promise. */ static new(accountId: AccountId): NearPromise { - const subtype = new PromiseSingle(accountId, [], null, null) - return new NearPromise(subtype, false) + const subtype = new PromiseSingle(accountId, [], null, null); + return new NearPromise(subtype, false); } private addAction(action: PromiseAction): NearPromise { if (this.subtype instanceof PromiseJoint) { - throw new Error('Cannot add action to a joint promise.') + throw new Error("Cannot add action to a joint promise."); } - this.subtype.actions.push(action) + this.subtype.actions.push(action); - return this + return this; } /** * Creates a create account promise action and adds it to the current promise. */ createAccount(): NearPromise { - return this.addAction(new CreateAccount()) + return this.addAction(new CreateAccount()); } /** @@ -319,7 +337,7 @@ export class NearPromise { * @param code - The code of the contract to be deployed. */ deployContract(code: Bytes): NearPromise { - return this.addAction(new DeployContract(code)) + return this.addAction(new DeployContract(code)); } /** @@ -366,7 +384,7 @@ export class NearPromise { * @param amount - The amount of NEAR to tranfer. */ transfer(amount: Balance): NearPromise { - return this.addAction(new Transfer(amount)) + return this.addAction(new Transfer(amount)); } /** @@ -376,7 +394,7 @@ export class NearPromise { * @param publicKey - The public key to use for staking. */ stake(amount: Balance, publicKey: PublicKey): NearPromise { - return this.addAction(new Stake(amount, publicKey)) + return this.addAction(new Stake(amount, publicKey)); } /** @@ -386,7 +404,7 @@ export class NearPromise { * @param publicKey - The public key to add as a full access key. */ addFullAccessKey(publicKey: PublicKey): NearPromise { - return this.addFullAccessKeyWithNonce(publicKey, 0n) + return this.addFullAccessKeyWithNonce(publicKey, 0n); } /** @@ -397,7 +415,7 @@ export class NearPromise { * @param nonce - The nonce to use. */ addFullAccessKeyWithNonce(publicKey: PublicKey, nonce: Nonce): NearPromise { - return this.addAction(new AddFullAccessKey(publicKey, nonce)) + return this.addAction(new AddFullAccessKey(publicKey, nonce)); } /** @@ -452,7 +470,7 @@ export class NearPromise { * @param publicKey - The public key to delete from the account. */ deleteKey(publicKey: PublicKey): NearPromise { - return this.addAction(new DeleteKey(publicKey)) + return this.addAction(new DeleteKey(publicKey)); } /** @@ -461,7 +479,7 @@ export class NearPromise { * @param beneficiaryId - The beneficiary of the account deletion - the account to recieve all of the remaining funds of the deleted account. */ deleteAccount(beneficiaryId: AccountId): NearPromise { - return this.addAction(new DeleteAccount(beneficiaryId)) + return this.addAction(new DeleteAccount(beneficiaryId)); } /** @@ -470,8 +488,8 @@ export class NearPromise { * @param other - The promise to join with the current promise. */ and(other: NearPromise): NearPromise { - const subtype = new PromiseJoint(this, other, null) - return new NearPromise(subtype, false) + const subtype = new PromiseJoint(this, other, null); + return new NearPromise(subtype, false); } /** @@ -490,38 +508,38 @@ export class NearPromise { "Cannot callback promise which is already scheduled after another" ); - other.subtype.after = this + other.subtype.after = this; - return other + return other; } /** * Sets the shouldReturn field to true. */ asReturn(): NearPromise { - this.shouldReturn = true - return this + this.shouldReturn = true; + return this; } /** * Recursively goes through the current promise to get the promise index. */ constructRecursively(): PromiseIndex { - const result = this.subtype.constructRecursively() + const result = this.subtype.constructRecursively(); if (this.shouldReturn) { - near.promiseReturn(result) + near.promiseReturn(result); } - return result + return result; } /** * Called by NearBindgen, when return object is a NearPromise instance. */ onReturn() { - this.asReturn().constructRecursively() + this.asReturn().constructRecursively(); } } -export type PromiseOrValue = NearPromise | T +export type PromiseOrValue = NearPromise | T; diff --git a/src/types/index.ts b/src/types/index.ts index 61b2efc3..907ee47c 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -15,7 +15,7 @@ import { InvalidLengthError, Base58Error, UnknownCurve, -} from './public_key' +} from "./public_key"; export { AccountId, @@ -36,7 +36,7 @@ export { InvalidLengthError, Base58Error, UnknownCurve, -} +}; /** * The amount of Gas Weight in integers - whole numbers. diff --git a/src/types/public_key.ts b/src/types/public_key.ts index 776abb01..40d45873 100644 --- a/src/types/public_key.ts +++ b/src/types/public_key.ts @@ -1,5 +1,5 @@ -import { Bytes, bytes } from '../utils' -import { base58 } from '@scure/base' +import { Bytes, bytes } from "../utils"; +import { base58 } from "@scure/base"; export enum CurveType { ED25519 = 0, @@ -17,7 +17,7 @@ function getCurveType(curveType: CurveType | number): CurveType { case CurveType.SECP256K1: return curveType; default: - throw new UnknownCurve() + throw new UnknownCurve(); } } @@ -37,20 +37,23 @@ function dataLength(curveType: CurveType | number): DataLength { function splitKeyTypeData(value: string): [CurveType, string] { const idx = value.indexOf(":"); if (idx >= 0) { - return [curveTypeFromStr(value.substring(0, idx)), value.substring(idx + 1)] + return [ + curveTypeFromStr(value.substring(0, idx)), + value.substring(idx + 1), + ]; } else { - return [CurveType.ED25519, value] + return [CurveType.ED25519, value]; } } export function curveTypeFromStr(value: string): CurveType { switch (value) { - case 'ed25519': - return CurveType.ED25519 - case 'secp256k1': - return CurveType.SECP256K1 + case "ed25519": + return CurveType.ED25519; + case "secp256k1": + return CurveType.SECP256K1; default: - throw new UnknownCurve() + throw new UnknownCurve(); } } @@ -63,12 +66,12 @@ export class InvalidLengthError extends ParsePublicKeyError { } export class Base58Error extends ParsePublicKeyError { constructor(public error: string) { - super(`Base58 error: ${error}`) + super(`Base58 error: ${error}`); } } export class UnknownCurve extends ParsePublicKeyError { constructor() { - super('Unknown curve') + super("Unknown curve"); } } diff --git a/src/utils.ts b/src/utils.ts index d33337b7..49256caa 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,4 +1,4 @@ -import { GetOptions } from './types/collections' +import { GetOptions } from "./types/collections"; /** * A string containing byte characters. Can be safely used in NEAR calls. @@ -36,13 +36,16 @@ const ACCOUNT_ID_REGEX = /^(([a-z\d]+[-_])*[a-z\d]+\.)*([a-z\d]+[-_])*[a-z\d]+$/; export function u8ArrayToBytes(array: Uint8Array): Bytes { - return array.reduce((result, value) => `${result}${String.fromCharCode(value)}`, '') + return array.reduce( + (result, value) => `${result}${String.fromCharCode(value)}`, + "" + ); } // TODO this function is a bit broken and the type can't be string // TODO for more info: https://github.com/near/near-sdk-js/issues/78 export function bytesToU8Array(bytes: Bytes): Uint8Array { - return Uint8Array.from([...bytes].map((byte) => byte.charCodeAt(0))) + return Uint8Array.from([...bytes].map((byte) => byte.charCodeAt(0))); } /** @@ -52,23 +55,26 @@ export function bytesToU8Array(bytes: Bytes): Uint8Array { * @returns Safe Bytes to be used in NEAR calls. */ export function bytes(stringOrU8Array: string | Uint8Array): Bytes { - if (typeof stringOrU8Array === 'string') { - return checkStringIsBytes(stringOrU8Array) + if (typeof stringOrU8Array === "string") { + return checkStringIsBytes(stringOrU8Array); } if (stringOrU8Array instanceof Uint8Array) { - return u8ArrayToBytes(stringOrU8Array) + return u8ArrayToBytes(stringOrU8Array); } - throw new Error('bytes: expected string or Uint8Array') + throw new Error("bytes: expected string or Uint8Array"); } function checkStringIsBytes(value: string): string { - ;[...value].forEach((character, index) => { - assert(character.charCodeAt(0) <= 255, `string ${value} at index ${index}: ${character} is not a valid byte`) - }) + [...value].forEach((character, index) => { + assert( + character.charCodeAt(0) <= 255, + `string ${value} at index ${index}: ${character} is not a valid byte` + ); + }); - return value + return value; } /** @@ -86,7 +92,7 @@ export function assert( } } -export type Mutable = { -readonly [P in keyof T]: T[P] } +export type Mutable = { -readonly [P in keyof T]: T[P] }; export function getValueWithOptions( value: string, diff --git a/tests/__tests__/bytes.ava.js b/tests/__tests__/bytes.ava.js index 0d8984ba..be711b71 100644 --- a/tests/__tests__/bytes.ava.js +++ b/tests/__tests__/bytes.ava.js @@ -1,183 +1,209 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.beforeEach(async (t) => { // Init the worker and start a Sandbox server - const worker = await Worker.init() + const worker = await Worker.init(); // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount + const root = worker.rootAccount; // Deploy the test contract. - const bytesContract = await root.devDeploy('build/bytes.wasm') + const bytesContract = await root.devDeploy("build/bytes.wasm"); // Test users - const ali = await root.createSubAccount('ali') + const ali = await root.createSubAccount("ali"); // Save state for test runs - t.context.worker = worker - t.context.accounts = { root, bytesContract, ali } -}) + t.context.worker = worker; + t.context.accounts = { root, bytesContract, ali }; +}); test.afterEach.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed to tear down the worker:', error) - }) -}) + console.log("Failed to tear down the worker:", error); + }); +}); -test('Log expected types work', async (t) => { - const { ali, bytesContract } = t.context.accounts +test("Log expected types work", async (t) => { + const { ali, bytesContract } = t.context.accounts; - let r = await ali.callRaw(bytesContract, 'log_expected_input_tests', '') + let r = await ali.callRaw(bytesContract, "log_expected_input_tests", ""); t.deepEqual(r.result.receipts_outcome[0].outcome.logs, [ - 'abc', - 'æ°´', - '333', - '\x00\x01\xff', - '\xe6\xb0\xb4', - 'æ°´', - 'æ°´', - ]) -}) - -test('Log unexpected types not logging', async (t) => { - const { ali, bytesContract } = t.context.accounts - - let r = await ali.callRaw(bytesContract, 'log_unexpected_input_tests', '') + "abc", + "æ°´", + "333", + "\x00\x01\xff", + "\xe6\xb0\xb4", + "æ°´", + "æ°´", + ]); +}); + +test("Log unexpected types not logging", async (t) => { + const { ali, bytesContract } = t.context.accounts; + + let r = await ali.callRaw(bytesContract, "log_unexpected_input_tests", ""); // logUtf8 and logUtf16 only works with bytes, trying to log it with string is unexpected and behavior is undefined // in this specific case, it logs nothing - t.deepEqual(r.result.receipts_outcome[0].outcome.logs, ['', '']) -}) + t.deepEqual(r.result.receipts_outcome[0].outcome.logs, ["", ""]); +}); -test('Log invalid utf-8 sequence panic', async (t) => { - const { ali, bytesContract } = t.context.accounts +test("Log invalid utf-8 sequence panic", async (t) => { + const { ali, bytesContract } = t.context.accounts; - let r = await ali.callRaw(bytesContract, 'log_invalid_utf8_sequence_test', '') + let r = await ali.callRaw( + bytesContract, + "log_invalid_utf8_sequence_test", + "" + ); // console.log(JSON.stringify(r, null, 2)) t.deepEqual( - r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError, - 'String encoding is bad UTF-8 sequence.' - ) -}) - -test('Log invalid utf-16 sequence panic', async (t) => { - const { ali, bytesContract } = t.context.accounts - - let r = await ali.callRaw(bytesContract, 'log_invalid_utf16_sequence_test', '') + r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind + .FunctionCallError.ExecutionError, + "String encoding is bad UTF-8 sequence." + ); +}); + +test("Log invalid utf-16 sequence panic", async (t) => { + const { ali, bytesContract } = t.context.accounts; + + let r = await ali.callRaw( + bytesContract, + "log_invalid_utf16_sequence_test", + "" + ); t.deepEqual( - r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError, - 'String encoding is bad UTF-16 sequence.' - ) -}) + r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind + .FunctionCallError.ExecutionError, + "String encoding is bad UTF-16 sequence." + ); +}); function encodeStateKey(k) { - return Buffer.from(k).toString('base64') + return Buffer.from(k).toString("base64"); } -test('storage write bytes tests', async (t) => { - const { ali, bytesContract } = t.context.accounts +test("storage write bytes tests", async (t) => { + const { ali, bytesContract } = t.context.accounts; - await ali.call(bytesContract, 'storage_write_bytes', '') - let stateMap = new Map() + await ali.call(bytesContract, "storage_write_bytes", ""); + let stateMap = new Map(); // viewState doesn't work, because it tries to convert key to utf-8 string, which is not. So we use viewStateRaw - let state = await bytesContract.viewStateRaw() + let state = await bytesContract.viewStateRaw(); for (let { key, value } of state) { - stateMap.set(key, value) + stateMap.set(key, value); } - t.deepEqual(stateMap.get(encodeStateKey('abc')), Buffer.from('def').toString('base64')) - t.deepEqual(stateMap.get(encodeStateKey([0x00, 0x01, 0xff])), Buffer.from([0xe6, 0xb0, 0xb4]).toString('base64')) + t.deepEqual( + stateMap.get(encodeStateKey("abc")), + Buffer.from("def").toString("base64") + ); + t.deepEqual( + stateMap.get(encodeStateKey([0x00, 0x01, 0xff])), + Buffer.from([0xe6, 0xb0, 0xb4]).toString("base64") + ); t.deepEqual( stateMap.get(encodeStateKey([0xe6, 0xb0, 0xb4])), - Buffer.from([0x00, 'a'.charCodeAt(0), 'b'.charCodeAt(0)]).toString('base64') - ) -}) + Buffer.from([0x00, "a".charCodeAt(0), "b".charCodeAt(0)]).toString("base64") + ); +}); -test('storage write unexpected types tests', async (t) => { - const { ali, bytesContract } = t.context.accounts +test("storage write unexpected types tests", async (t) => { + const { ali, bytesContract } = t.context.accounts; - await ali.call(bytesContract, 'storage_write_unexpected_input', '') - let stateMap = new Map() + await ali.call(bytesContract, "storage_write_unexpected_input", ""); + let stateMap = new Map(); // viewState doesn't work, because it tries to convert key to utf-8 string, which is not - let state = await bytesContract.viewStateRaw() + let state = await bytesContract.viewStateRaw(); for (let { key, value } of state) { - stateMap.set(key, value) + stateMap.set(key, value); } - t.deepEqual(stateMap.get(encodeStateKey('123')), Buffer.from('456').toString('base64')) + t.deepEqual( + stateMap.get(encodeStateKey("123")), + Buffer.from("456").toString("base64") + ); // pass in utf-8 string instead of bytes, key and value become empty - t.deepEqual(stateMap.get(encodeStateKey([0xe6, 0xb0, 0xb4])), undefined) - t.deepEqual(stateMap.get(encodeStateKey([])), '') -}) - -test('Storage read bytes tests', async (t) => { - const { ali, bytesContract } = t.context.accounts - - await ali.call(bytesContract, 'storage_write_bytes', '') - let r = await bytesContract.viewRaw('storage_read_ascii_bytes', '') - console.log(r) - t.deepEqual(r.result, [100, 101, 102]) - - r = await bytesContract.viewRaw('storage_read_arbitrary_bytes_key_utf8_sequence_bytes_value', '') - t.deepEqual(r.result, [0xe6, 0xb0, 0xb4]) - - r = await bytesContract.viewRaw('storage_read_utf8_sequence_bytes_key_arbitrary_bytes_value', '') - t.deepEqual(r.result, [0x00, 'a'.charCodeAt(0), 'b'.charCodeAt(0)]) -}) - -test('panic tests', async (t) => { - const { ali, bytesContract } = t.context.accounts - let r = await ali.callRaw(bytesContract, 'panic_test', '') + t.deepEqual(stateMap.get(encodeStateKey([0xe6, 0xb0, 0xb4])), undefined); + t.deepEqual(stateMap.get(encodeStateKey([])), ""); +}); + +test("Storage read bytes tests", async (t) => { + const { ali, bytesContract } = t.context.accounts; + + await ali.call(bytesContract, "storage_write_bytes", ""); + let r = await bytesContract.viewRaw("storage_read_ascii_bytes", ""); + console.log(r); + t.deepEqual(r.result, [100, 101, 102]); + + r = await bytesContract.viewRaw( + "storage_read_arbitrary_bytes_key_utf8_sequence_bytes_value", + "" + ); + t.deepEqual(r.result, [0xe6, 0xb0, 0xb4]); + + r = await bytesContract.viewRaw( + "storage_read_utf8_sequence_bytes_key_arbitrary_bytes_value", + "" + ); + t.deepEqual(r.result, [0x00, "a".charCodeAt(0), "b".charCodeAt(0)]); +}); + +test("panic tests", async (t) => { + const { ali, bytesContract } = t.context.accounts; + let r = await ali.callRaw(bytesContract, "panic_test", ""); t.assert( r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.match( /Smart contract panicked:*/ ) - ) + ); - r = await ali.callRaw(bytesContract, 'panic_ascii_test', '') + r = await ali.callRaw(bytesContract, "panic_ascii_test", ""); t.assert( r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.match( /Smart contract panicked: abc*/ ) - ) + ); - r = await ali.callRaw(bytesContract, 'panic_js_number', '') + r = await ali.callRaw(bytesContract, "panic_js_number", ""); t.assert( r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.match( /Smart contract panicked: 356*/ ) - ) + ); - r = await ali.callRaw(bytesContract, 'panic_js_undefined', '') + r = await ali.callRaw(bytesContract, "panic_js_undefined", ""); t.assert( r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.match( /Smart contract panicked:*/ ) - ) + ); - r = await ali.callRaw(bytesContract, 'panic_js_null', '') + r = await ali.callRaw(bytesContract, "panic_js_null", ""); t.assert( r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.match( /Smart contract panicked: null*/ ) - ) + ); - r = await ali.callRaw(bytesContract, 'panic_utf8_test', '') + r = await ali.callRaw(bytesContract, "panic_utf8_test", ""); t.assert( r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.match( /Smart contract panicked: æ°´*/ ) - ) + ); - r = await ali.callRaw(bytesContract, 'panicUtf8_valid_utf8_sequence', '') + r = await ali.callRaw(bytesContract, "panicUtf8_valid_utf8_sequence", ""); t.assert( r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.match( /Smart contract panicked: æ°´*/ ) - ) + ); - r = await ali.callRaw(bytesContract, 'panicUtf8_invalid_utf8_sequence', '') + r = await ali.callRaw(bytesContract, "panicUtf8_invalid_utf8_sequence", ""); t.deepEqual( - r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError, - 'String encoding is bad UTF-8 sequence.' - ) -}) + r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind + .FunctionCallError.ExecutionError, + "String encoding is bad UTF-8 sequence." + ); +}); diff --git a/tests/__tests__/decorators/near_bindgen.ava.js b/tests/__tests__/decorators/near_bindgen.ava.js index 721f44a0..be4dc2f0 100644 --- a/tests/__tests__/decorators/near_bindgen.ava.js +++ b/tests/__tests__/decorators/near_bindgen.ava.js @@ -1,70 +1,70 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.beforeEach(async (t) => { - const worker = await Worker.init() - const root = worker.rootAccount + const worker = await Worker.init(); + const root = worker.rootAccount; - const reqireInitFalse = await root.devDeploy('build/require_init_false.wasm') - const reqireInitTrue = await root.devDeploy('build/require_init_true.wasm') + const reqireInitFalse = await root.devDeploy("build/require_init_false.wasm"); + const reqireInitTrue = await root.devDeploy("build/require_init_true.wasm"); - const ali = await root.createSubAccount('ali') + const ali = await root.createSubAccount("ali"); - t.context.worker = worker + t.context.worker = worker; t.context.accounts = { root, reqireInitFalse, reqireInitTrue, ali, - } -}) + }; +}); test.afterEach.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed to tear down the worker:', error) - }) -}) + console.log("Failed to tear down the worker:", error); + }); +}); -test('Uninitialized contract throw error if requireInit = true', async (t) => { - const { ali, reqireInitTrue } = t.context.accounts +test("Uninitialized contract throw error if requireInit = true", async (t) => { + const { ali, reqireInitTrue } = t.context.accounts; - const callResult = await ali.callRaw(reqireInitTrue, 'setStatus', { - status: 'hello', - }) + const callResult = await ali.callRaw(reqireInitTrue, "setStatus", { + status: "hello", + }); t.assert( callResult.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.includes( - 'Contract must be initialized' + "Contract must be initialized" ) - ) + ); - const err = await t.throwsAsync(() => reqireInitTrue.view('getStatus', {})) - t.assert(err.message.includes('Contract must be initialized')) -}) + const err = await t.throwsAsync(() => reqireInitTrue.view("getStatus", {})); + t.assert(err.message.includes("Contract must be initialized")); +}); -test('Uninitialized contract does not throw error if requireInit = false', async (t) => { - const { ali, reqireInitFalse } = t.context.accounts +test("Uninitialized contract does not throw error if requireInit = false", async (t) => { + const { ali, reqireInitFalse } = t.context.accounts; - await ali.callRaw(reqireInitFalse, 'setStatus', { status: 'hello' }) + await ali.callRaw(reqireInitFalse, "setStatus", { status: "hello" }); - t.is(await reqireInitFalse.view('getStatus', {}), 'hello') -}) + t.is(await reqireInitFalse.view("getStatus", {}), "hello"); +}); -test('Init function panics if called more then once', async (t) => { - const { ali, reqireInitTrue, reqireInitFalse } = t.context.accounts +test("Init function panics if called more then once", async (t) => { + const { ali, reqireInitTrue, reqireInitFalse } = t.context.accounts; - await ali.call(reqireInitTrue, 'init', { status: 'hello' }) - const res1 = await ali.callRaw(reqireInitTrue, 'init', { status: 'hello' }) + await ali.call(reqireInitTrue, "init", { status: "hello" }); + const res1 = await ali.callRaw(reqireInitTrue, "init", { status: "hello" }); t.assert( res1.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.includes( - 'Contract already initialized' + "Contract already initialized" ) - ) + ); - await ali.call(reqireInitFalse, 'init', { status: 'hello' }) - const res2 = await ali.callRaw(reqireInitFalse, 'init', { status: 'hello' }) + await ali.call(reqireInitFalse, "init", { status: "hello" }); + const res2 = await ali.callRaw(reqireInitFalse, "init", { status: "hello" }); t.assert( res2.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.includes( - 'Contract already initialized' + "Contract already initialized" ) - ) -}) + ); +}); diff --git a/tests/__tests__/decorators/payable.ava.js b/tests/__tests__/decorators/payable.ava.js index b0dd2436..f111cd53 100644 --- a/tests/__tests__/decorators/payable.ava.js +++ b/tests/__tests__/decorators/payable.ava.js @@ -1,78 +1,89 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; -const DEPOSIT = 1_000_000_000 +const DEPOSIT = 1_000_000_000; test.beforeEach(async (t) => { - const worker = await Worker.init() - const root = worker.rootAccount + const worker = await Worker.init(); + const root = worker.rootAccount; - const payableContract = await root.devDeploy('build/payable.wasm') - const ali = await root.createSubAccount('ali') + const payableContract = await root.devDeploy("build/payable.wasm"); + const ali = await root.createSubAccount("ali"); - t.context.worker = worker + t.context.worker = worker; t.context.accounts = { root, payableContract, ali, - } -}) + }; +}); test.afterEach.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed to tear down the worker:', error) - }) -}) + console.log("Failed to tear down the worker:", error); + }); +}); -test('payable: true functions works with deposit', async (t) => { - const { ali, payableContract } = t.context.accounts +test("payable: true functions works with deposit", async (t) => { + const { ali, payableContract } = t.context.accounts; await t.notThrowsAsync( - ali.call(payableContract, 'setValueWithPayableFunction', { value: 'hello' }, { attachedDeposit: DEPOSIT }) - ) -}) + ali.call( + payableContract, + "setValueWithPayableFunction", + { value: "hello" }, + { attachedDeposit: DEPOSIT } + ) + ); +}); + +test("payable: true functions works without deposit", async (t) => { + const { ali, payableContract } = t.context.accounts; -test('payable: true functions works without deposit', async (t) => { - const { ali, payableContract } = t.context.accounts - - await t.notThrowsAsync(ali.call(payableContract, 'setValueWithPayableFunction', { value: 'hello' })) -}) + await t.notThrowsAsync( + ali.call(payableContract, "setValueWithPayableFunction", { value: "hello" }) + ); +}); -test('payable: false throws if atach deposit', async (t) => { - const { ali, payableContract } = t.context.accounts +test("payable: false throws if atach deposit", async (t) => { + const { ali, payableContract } = t.context.accounts; const result = await ali.callRaw( payableContract, - 'setValueWithNotPayableFunction', - { value: 'hello' }, + "setValueWithNotPayableFunction", + { value: "hello" }, { attachedDeposit: DEPOSIT } - ) + ); t.assert( - result.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.includes('Function is not payable') - ) -}) + result.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.includes( + "Function is not payable" + ) + ); +}); -test('payable default throws if atach deposit', async (t) => { - const { ali, payableContract } = t.context.accounts +test("payable default throws if atach deposit", async (t) => { + const { ali, payableContract } = t.context.accounts; const result = await ali.callRaw( payableContract, - 'setValueWithNotPayableFunctionByDefault', - { value: 'hello' }, + "setValueWithNotPayableFunctionByDefault", + { value: "hello" }, { attachedDeposit: DEPOSIT } - ) + ); t.assert( - result.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.includes('Function is not payable') - ) -}) + result.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.includes( + "Function is not payable" + ) + ); +}); -test('payable default works without deposit', async (t) => { - const { ali, payableContract } = t.context.accounts +test("payable default works without deposit", async (t) => { + const { ali, payableContract } = t.context.accounts; await t.notThrowsAsync( - ali.call(payableContract, 'setValueWithNotPayableFunctionByDefault', { - value: 'hello', + ali.call(payableContract, "setValueWithNotPayableFunctionByDefault", { + value: "hello", }) - ) -}) + ); +}); diff --git a/tests/__tests__/decorators/private.ava.js b/tests/__tests__/decorators/private.ava.js index c283491b..7e8c4dd4 100644 --- a/tests/__tests__/decorators/private.ava.js +++ b/tests/__tests__/decorators/private.ava.js @@ -1,55 +1,57 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.beforeEach(async (t) => { - const worker = await Worker.init() - const root = worker.rootAccount + const worker = await Worker.init(); + const root = worker.rootAccount; - const contract = await root.devDeploy('build/private.wasm') - const ali = await root.createSubAccount('ali') + const contract = await root.devDeploy("build/private.wasm"); + const ali = await root.createSubAccount("ali"); - t.context.worker = worker + t.context.worker = worker; t.context.accounts = { root, contract, ali, - } -}) + }; +}); test.afterEach.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed to tear down the worker:', error) - }) -}) + console.log("Failed to tear down the worker:", error); + }); +}); -test('private: true throws if called from another acc', async (t) => { - const { ali, contract } = t.context.accounts +test("private: true throws if called from another acc", async (t) => { + const { ali, contract } = t.context.accounts; - const result = await ali.callRaw(contract, 'setValueWithPrivateFunction', { - value: 'hello', - }) + const result = await ali.callRaw(contract, "setValueWithPrivateFunction", { + value: "hello", + }); t.assert( - result.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.includes('Function is private') - ) -}) + result.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.includes( + "Function is private" + ) + ); +}); -test('private: true not throws if called from owner acc', async (t) => { - const { contract } = t.context.accounts +test("private: true not throws if called from owner acc", async (t) => { + const { contract } = t.context.accounts; await t.notThrowsAsync( - contract.call(contract, 'setValueWithNotPrivateFunction', { - value: 'hello', + contract.call(contract, "setValueWithNotPrivateFunction", { + value: "hello", }) - ) -}) + ); +}); -test('private: default not throws from another acc', async (t) => { - const { ali, contract } = t.context.accounts +test("private: default not throws from another acc", async (t) => { + const { ali, contract } = t.context.accounts; await t.notThrowsAsync( - ali.call(contract, 'setValueWithNotPrivateFunctionByDefault', { - value: 'hello', + ali.call(contract, "setValueWithNotPrivateFunctionByDefault", { + value: "hello", }) - ) -}) + ); +}); diff --git a/tests/__tests__/function-params.ava.js b/tests/__tests__/function-params.ava.js index 6137c88f..72dfe9d3 100644 --- a/tests/__tests__/function-params.ava.js +++ b/tests/__tests__/function-params.ava.js @@ -1,39 +1,41 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.before(async (t) => { // Init the worker and start a Sandbox server - const worker = await Worker.init() + const worker = await Worker.init(); // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount + const root = worker.rootAccount; // Deploy the test contract. - const functionParamsContract = await root.devDeploy('build/function-params.wasm') + const functionParamsContract = await root.devDeploy( + "build/function-params.wasm" + ); // Test users - const ali = await root.createSubAccount('ali') - const bob = await root.createSubAccount('bob') - const carl = await root.createSubAccount('carl') + const ali = await root.createSubAccount("ali"); + const bob = await root.createSubAccount("bob"); + const carl = await root.createSubAccount("carl"); // Save state for test runs - t.context.worker = worker - t.context.accounts = { root, functionParamsContract, ali, bob, carl } -}) + t.context.worker = worker; + t.context.accounts = { root, functionParamsContract, ali, bob, carl }; +}); test.after.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed to tear down the worker:', error) - }) -}) + console.log("Failed to tear down the worker:", error); + }); +}); -test('get current account id correct', async (t) => { - const { ali, functionParamsContract } = t.context.accounts - await ali.call(functionParamsContract, 'set_values', { - param1: 'newVal1', - param2: 'newVal2', - param3: 'newVal3', - }) - let values = await functionParamsContract.view('get_values', '') - t.deepEqual(values, { val3: 'newVal3', val2: 'newVal2', val1: 'newVal1' }) -}) +test("get current account id correct", async (t) => { + const { ali, functionParamsContract } = t.context.accounts; + await ali.call(functionParamsContract, "set_values", { + param1: "newVal1", + param2: "newVal2", + param3: "newVal3", + }); + let values = await functionParamsContract.view("get_values", ""); + t.deepEqual(values, { val3: "newVal3", val2: "newVal2", val1: "newVal1" }); +}); diff --git a/tests/__tests__/lookup-map.ava.js b/tests/__tests__/lookup-map.ava.js index 1a10a9ed..824f674b 100644 --- a/tests/__tests__/lookup-map.ava.js +++ b/tests/__tests__/lookup-map.ava.js @@ -1,91 +1,94 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.beforeEach(async (t) => { // Init the worker and start a Sandbox server - const worker = await Worker.init() + const worker = await Worker.init(); // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount + const root = worker.rootAccount; // Deploy the test contract. - const lookupMapContract = await root.devDeploy('build/lookup-map.wasm') + const lookupMapContract = await root.devDeploy("build/lookup-map.wasm"); // Test users - const ali = await root.createSubAccount('ali') - const bob = await root.createSubAccount('bob') - const carl = await root.createSubAccount('carl') + const ali = await root.createSubAccount("ali"); + const bob = await root.createSubAccount("bob"); + const carl = await root.createSubAccount("carl"); // Save state for test runs - t.context.worker = worker - t.context.accounts = { root, lookupMapContract, ali, bob, carl } -}) + t.context.worker = worker; + t.context.accounts = { root, lookupMapContract, ali, bob, carl }; +}); test.afterEach.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed to tear down the worker:', error) - }) -}) + console.log("Failed to tear down the worker:", error); + }); +}); -test('LookupMap set() get()', async (t) => { - const { ali, lookupMapContract } = t.context.accounts +test("LookupMap set() get()", async (t) => { + const { ali, lookupMapContract } = t.context.accounts; - t.is(await lookupMapContract.view('get', { key: 'hello' }), null) - t.is(await lookupMapContract.view('containsKey', { key: 'hello' }), false) + t.is(await lookupMapContract.view("get", { key: "hello" }), null); + t.is(await lookupMapContract.view("containsKey", { key: "hello" }), false); - await ali.call(lookupMapContract, 'set', { key: 'hello', value: 'world' }) + await ali.call(lookupMapContract, "set", { key: "hello", value: "world" }); - t.is(await lookupMapContract.view('get', { key: 'hello' }), 'world') - t.is(await lookupMapContract.view('containsKey', { key: 'hello' }), true) -}) + t.is(await lookupMapContract.view("get", { key: "hello" }), "world"); + t.is(await lookupMapContract.view("containsKey", { key: "hello" }), true); +}); -test('LookupMap update, remove', async (t) => { - const { ali, lookupMapContract } = t.context.accounts +test("LookupMap update, remove", async (t) => { + const { ali, lookupMapContract } = t.context.accounts; - await ali.call(lookupMapContract, 'set', { key: 'hello', value: 'world' }) - await ali.call(lookupMapContract, 'set', { key: 'hello1', value: 'world0' }) + await ali.call(lookupMapContract, "set", { key: "hello", value: "world" }); + await ali.call(lookupMapContract, "set", { key: "hello1", value: "world0" }); // update a value, len shouldn't change - await ali.call(lookupMapContract, 'set', { key: 'hello1', value: 'world1' }) + await ali.call(lookupMapContract, "set", { key: "hello1", value: "world1" }); // update should have effect - t.is(await lookupMapContract.view('get', { key: 'hello1' }), 'world1') + t.is(await lookupMapContract.view("get", { key: "hello1" }), "world1"); // not update key should not changed - t.is(await lookupMapContract.view('get', { key: 'hello' }), 'world') + t.is(await lookupMapContract.view("get", { key: "hello" }), "world"); // remove non existing element should not error - await ali.call(lookupMapContract, 'remove_key', { key: 'hello3' }) + await ali.call(lookupMapContract, "remove_key", { key: "hello3" }); // remove existing key should work - await ali.call(lookupMapContract, 'remove_key', { key: 'hello1' }) - t.is(await lookupMapContract.view('containsKey', { key: 'hello1' }), false) + await ali.call(lookupMapContract, "remove_key", { key: "hello1" }); + t.is(await lookupMapContract.view("containsKey", { key: "hello1" }), false); // not removed key should not affected - t.is(await lookupMapContract.view('get', { key: 'hello' }), 'world') -}) + t.is(await lookupMapContract.view("get", { key: "hello" }), "world"); +}); -test('LookupMap extend', async (t) => { - const { ali, lookupMapContract } = t.context.accounts +test("LookupMap extend", async (t) => { + const { ali, lookupMapContract } = t.context.accounts; - await ali.call(lookupMapContract, 'extend', { + await ali.call(lookupMapContract, "extend", { kvs: [ - ['hello', 'world'], - ['hello1', 'world1'], - ['hello2', 'world2'], + ["hello", "world"], + ["hello1", "world1"], + ["hello2", "world2"], ], - }) - t.is(await lookupMapContract.view('get', { key: 'hello' }), 'world') - t.is(await lookupMapContract.view('get', { key: 'hello1' }), 'world1') - t.is(await lookupMapContract.view('get', { key: 'hello2' }), 'world2') -}) - -test('LookupMap set get object', async (t) => { - const { ali, lookupMapContract } = t.context.accounts - await ali.call(lookupMapContract, 'add_house', {}) - t.is(await lookupMapContract.view('get_house', {}), 'house house1 has 2 rooms. room room1 is 200sqft.') -}) - -test('LookupMap allows you to use the same key for the second time', async (t) => { - const { ali, lookupMapContract } = t.context.accounts - - await ali.call(lookupMapContract, 'set', { key: 'hello', value: 'world' }) - await ali.call(lookupMapContract, 'set', { key: 'hello', value: 'world' }) - - t.is(await lookupMapContract.view('get', { key: 'hello' }), 'world') -}) + }); + t.is(await lookupMapContract.view("get", { key: "hello" }), "world"); + t.is(await lookupMapContract.view("get", { key: "hello1" }), "world1"); + t.is(await lookupMapContract.view("get", { key: "hello2" }), "world2"); +}); + +test("LookupMap set get object", async (t) => { + const { ali, lookupMapContract } = t.context.accounts; + await ali.call(lookupMapContract, "add_house", {}); + t.is( + await lookupMapContract.view("get_house", {}), + "house house1 has 2 rooms. room room1 is 200sqft." + ); +}); + +test("LookupMap allows you to use the same key for the second time", async (t) => { + const { ali, lookupMapContract } = t.context.accounts; + + await ali.call(lookupMapContract, "set", { key: "hello", value: "world" }); + await ali.call(lookupMapContract, "set", { key: "hello", value: "world" }); + + t.is(await lookupMapContract.view("get", { key: "hello" }), "world"); +}); diff --git a/tests/__tests__/lookup-set.ava.js b/tests/__tests__/lookup-set.ava.js index 04f84945..3ba227e8 100644 --- a/tests/__tests__/lookup-set.ava.js +++ b/tests/__tests__/lookup-set.ava.js @@ -1,70 +1,70 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.beforeEach(async (t) => { // Init the worker and start a Sandbox server - const worker = await Worker.init() + const worker = await Worker.init(); // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount + const root = worker.rootAccount; // Deploy the test contract. - const lookupSetContract = await root.devDeploy('build/lookup-set.wasm') + const lookupSetContract = await root.devDeploy("build/lookup-set.wasm"); // Test users - const ali = await root.createSubAccount('ali') - const bob = await root.createSubAccount('bob') - const carl = await root.createSubAccount('carl') + const ali = await root.createSubAccount("ali"); + const bob = await root.createSubAccount("bob"); + const carl = await root.createSubAccount("carl"); // Save state for test runs - t.context.worker = worker - t.context.accounts = { root, lookupSetContract, ali, bob, carl } -}) + t.context.worker = worker; + t.context.accounts = { root, lookupSetContract, ali, bob, carl }; +}); test.afterEach.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed to tear down the worker:', error) - }) -}) + console.log("Failed to tear down the worker:", error); + }); +}); -test('LookupSet set() contains()', async (t) => { - const { ali, lookupSetContract } = t.context.accounts - t.is(await lookupSetContract.view('contains', { key: 'hello' }), false) +test("LookupSet set() contains()", async (t) => { + const { ali, lookupSetContract } = t.context.accounts; + t.is(await lookupSetContract.view("contains", { key: "hello" }), false); - await ali.call(lookupSetContract, 'set', { key: 'hello' }) + await ali.call(lookupSetContract, "set", { key: "hello" }); - t.is(await lookupSetContract.view('contains', { key: 'hello' }), true) -}) + t.is(await lookupSetContract.view("contains", { key: "hello" }), true); +}); -test('LookupSet remove', async (t) => { - const { ali, lookupSetContract } = t.context.accounts +test("LookupSet remove", async (t) => { + const { ali, lookupSetContract } = t.context.accounts; - await ali.call(lookupSetContract, 'set', { key: 'hello' }) - await ali.call(lookupSetContract, 'set', { key: 'hello1' }) + await ali.call(lookupSetContract, "set", { key: "hello" }); + await ali.call(lookupSetContract, "set", { key: "hello1" }); // remove non existing element should not error - await ali.call(lookupSetContract, 'remove_key', { key: 'hello3' }) + await ali.call(lookupSetContract, "remove_key", { key: "hello3" }); // remove existing key should work - await ali.call(lookupSetContract, 'remove_key', { key: 'hello1' }) - t.is(await lookupSetContract.view('contains', { key: 'hello1' }), false) + await ali.call(lookupSetContract, "remove_key", { key: "hello1" }); + t.is(await lookupSetContract.view("contains", { key: "hello1" }), false); // not removed key should not affected - t.is(await lookupSetContract.view('contains', { key: 'hello' }), true) -}) + t.is(await lookupSetContract.view("contains", { key: "hello" }), true); +}); -test('LookupSet extend', async (t) => { - const { ali, lookupSetContract } = t.context.accounts +test("LookupSet extend", async (t) => { + const { ali, lookupSetContract } = t.context.accounts; - await ali.call(lookupSetContract, 'extend', { - keys: ['hello', 'world', 'hello1'], - }) - t.is(await lookupSetContract.view('contains', { key: 'hello' }), true) - t.is(await lookupSetContract.view('contains', { key: 'hello1' }), true) - t.is(await lookupSetContract.view('contains', { key: 'world' }), true) -}) + await ali.call(lookupSetContract, "extend", { + keys: ["hello", "world", "hello1"], + }); + t.is(await lookupSetContract.view("contains", { key: "hello" }), true); + t.is(await lookupSetContract.view("contains", { key: "hello1" }), true); + t.is(await lookupSetContract.view("contains", { key: "world" }), true); +}); -test('Add and check exist of object', async (t) => { - const { ali, lookupSetContract } = t.context.accounts - let houseSpec = { name: 'a', rooms: [{ name: 'bedroom', size: '300sqft' }] } - t.is(await lookupSetContract.view('house_exist', houseSpec), false) - await ali.call(lookupSetContract, 'add_house', houseSpec) - t.is(await lookupSetContract.view('house_exist', houseSpec), true) -}) +test("Add and check exist of object", async (t) => { + const { ali, lookupSetContract } = t.context.accounts; + let houseSpec = { name: "a", rooms: [{ name: "bedroom", size: "300sqft" }] }; + t.is(await lookupSetContract.view("house_exist", houseSpec), false); + await ali.call(lookupSetContract, "add_house", houseSpec); + t.is(await lookupSetContract.view("house_exist", houseSpec), true); +}); diff --git a/tests/__tests__/test-public-key.ava.js b/tests/__tests__/test-public-key.ava.js index d16335f9..198a8a4d 100644 --- a/tests/__tests__/test-public-key.ava.js +++ b/tests/__tests__/test-public-key.ava.js @@ -1,110 +1,110 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.before(async (t) => { // Init the worker and start a Sandbox server - const worker = await Worker.init() + const worker = await Worker.init(); // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount + const root = worker.rootAccount; // Create and deploy test contract - const pkContract = await root.createSubAccount('pk') - await pkContract.deploy('build/public-key.wasm') + const pkContract = await root.createSubAccount("pk"); + await pkContract.deploy("build/public-key.wasm"); // Test users - const ali = await root.createSubAccount('ali') - const bob = await root.createSubAccount('bob') - const carl = await root.createSubAccount('carl') + const ali = await root.createSubAccount("ali"); + const bob = await root.createSubAccount("bob"); + const carl = await root.createSubAccount("carl"); // Save state for test runs - t.context.worker = worker - t.context.accounts = { root, pkContract, ali, bob, carl } -}) + t.context.worker = worker; + t.context.accounts = { root, pkContract, ali, bob, carl }; +}); test.after.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed to tear down the worker:', error) - }) -}) - -test('add signer key should success', async (t) => { - const { ali, pkContract } = t.context.accounts - let r = await ali.callRaw(pkContract, 'test_add_signer_key', '') - t.is(r.result.status.SuccessValue, '') -}) - -test('add ed25519 key bytes should success', async (t) => { - const { ali, pkContract } = t.context.accounts - let r = await ali.callRaw(pkContract, 'test_add_ed25519_key_bytes', '') - t.is(r.result.status.SuccessValue, '') -}) - -test('add ed25519 key string should success', async (t) => { - const { ali, pkContract } = t.context.accounts - let r = await ali.callRaw(pkContract, 'test_add_ed25519_key_string', '') - t.is(r.result.status.SuccessValue, '') -}) - -test('add secp256k1 key bytes should success', async (t) => { - const { bob, pkContract } = t.context.accounts - let r = await bob.callRaw(pkContract, 'test_add_secp256k1_key_bytes', '') - t.is(r.result.status.SuccessValue, '') -}) - -test('add secp256k1 key string should success', async (t) => { - const { bob, pkContract } = t.context.accounts - let r = await bob.callRaw(pkContract, 'test_add_secp256k1_key_string', '', { - gas: '100 Tgas', - }) - t.is(r.result.status.SuccessValue, '') -}) - -test('add invalid key should error', async (t) => { - const { bob, pkContract } = t.context.accounts - let r = await bob.callRaw(pkContract, 'add_invalid_public_key', '') - t.is(r.result.status.SuccessValue, undefined) + console.log("Failed to tear down the worker:", error); + }); +}); + +test("add signer key should success", async (t) => { + const { ali, pkContract } = t.context.accounts; + let r = await ali.callRaw(pkContract, "test_add_signer_key", ""); + t.is(r.result.status.SuccessValue, ""); +}); + +test("add ed25519 key bytes should success", async (t) => { + const { ali, pkContract } = t.context.accounts; + let r = await ali.callRaw(pkContract, "test_add_ed25519_key_bytes", ""); + t.is(r.result.status.SuccessValue, ""); +}); + +test("add ed25519 key string should success", async (t) => { + const { ali, pkContract } = t.context.accounts; + let r = await ali.callRaw(pkContract, "test_add_ed25519_key_string", ""); + t.is(r.result.status.SuccessValue, ""); +}); + +test("add secp256k1 key bytes should success", async (t) => { + const { bob, pkContract } = t.context.accounts; + let r = await bob.callRaw(pkContract, "test_add_secp256k1_key_bytes", ""); + t.is(r.result.status.SuccessValue, ""); +}); + +test("add secp256k1 key string should success", async (t) => { + const { bob, pkContract } = t.context.accounts; + let r = await bob.callRaw(pkContract, "test_add_secp256k1_key_string", "", { + gas: "100 Tgas", + }); + t.is(r.result.status.SuccessValue, ""); +}); + +test("add invalid key should error", async (t) => { + const { bob, pkContract } = t.context.accounts; + let r = await bob.callRaw(pkContract, "add_invalid_public_key", ""); + t.is(r.result.status.SuccessValue, undefined); t.is( r.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError, - 'VM Logic provided an invalid public key' - ) -}) - -test('curve type check should success', async (t) => { - const { carl, pkContract } = t.context.accounts - let r = await carl.callRaw(pkContract, 'curve_type', '') - t.is(r.result.status.SuccessValue, '') -}) - -test('create invalid curve type should fail', async (t) => { - const { carl, pkContract } = t.context.accounts - let r = await carl.callRaw(pkContract, 'create_invalid_curve_type', '') - t.is(r.result.status.SuccessValue, undefined) + "VM Logic provided an invalid public key" + ); +}); + +test("curve type check should success", async (t) => { + const { carl, pkContract } = t.context.accounts; + let r = await carl.callRaw(pkContract, "curve_type", ""); + t.is(r.result.status.SuccessValue, ""); +}); + +test("create invalid curve type should fail", async (t) => { + const { carl, pkContract } = t.context.accounts; + let r = await carl.callRaw(pkContract, "create_invalid_curve_type", ""); + t.is(r.result.status.SuccessValue, undefined); t.assert( r.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.startsWith( - 'Smart contract panicked: Unknown curve' + "Smart contract panicked: Unknown curve" ) - ) -}) + ); +}); -test('create invalid length should fail', async (t) => { - const { carl, pkContract } = t.context.accounts - let r = await carl.callRaw(pkContract, 'create_invalid_length', '') - t.is(r.result.status.SuccessValue, undefined) +test("create invalid length should fail", async (t) => { + const { carl, pkContract } = t.context.accounts; + let r = await carl.callRaw(pkContract, "create_invalid_length", ""); + t.is(r.result.status.SuccessValue, undefined); t.assert( r.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.startsWith( - 'Smart contract panicked: Invalid length' + "Smart contract panicked: Invalid length" ) - ) -}) + ); +}); -test('create invalid base58 should fail', async (t) => { - const { carl, pkContract } = t.context.accounts - let r = await carl.callRaw(pkContract, 'create_from_invalid_base58', '') - t.is(r.result.status.SuccessValue, undefined) +test("create invalid base58 should fail", async (t) => { + const { carl, pkContract } = t.context.accounts; + let r = await carl.callRaw(pkContract, "create_from_invalid_base58", ""); + t.is(r.result.status.SuccessValue, undefined); t.assert( r.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.startsWith( - 'Smart contract panicked: Base58 error' + "Smart contract panicked: Base58 error" ) - ) -}) + ); +}); diff --git a/tests/__tests__/test_context_api.ava.js b/tests/__tests__/test_context_api.ava.js index eef24623..ee49173f 100644 --- a/tests/__tests__/test_context_api.ava.js +++ b/tests/__tests__/test_context_api.ava.js @@ -1,96 +1,106 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.before(async (t) => { // Init the worker and start a Sandbox server - const worker = await Worker.init() + const worker = await Worker.init(); // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount + const root = worker.rootAccount; // Deploy the test contract. - const contextApiContract = await root.devDeploy('build/context_api.wasm') + const contextApiContract = await root.devDeploy("build/context_api.wasm"); // Test users - const ali = await root.createSubAccount('ali') - const bob = await root.createSubAccount('bob') - const carl = await root.createSubAccount('carl') + const ali = await root.createSubAccount("ali"); + const bob = await root.createSubAccount("bob"); + const carl = await root.createSubAccount("carl"); // Save state for test runs - t.context.worker = worker - t.context.accounts = { root, contextApiContract, ali, bob, carl } -}) + t.context.worker = worker; + t.context.accounts = { root, contextApiContract, ali, bob, carl }; +}); test.after.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed to tear down the worker:', error) - }) -}) - -test('get current account id correct', async (t) => { - const { ali, contextApiContract } = t.context.accounts - let r = await ali.call(contextApiContract, 'get_current_account_id', '') - t.is(r, contextApiContract.accountId) -}) - -test('get signer account id correct', async (t) => { - const { ali, contextApiContract } = t.context.accounts - let r = await ali.call(contextApiContract, 'get_signer_account_id', '') - t.is(r, ali.accountId) -}) - -test('get predecessor account id correct', async (t) => { - const { ali, contextApiContract } = t.context.accounts - let r = await ali.call(contextApiContract, 'get_predecessor_account_id', '') - t.is(r, ali.accountId) -}) - -test('get signer account pk correct', async (t) => { - const { ali, contextApiContract } = t.context.accounts - let r = await ali.callRaw(contextApiContract, 'get_signer_account_pk', '') + console.log("Failed to tear down the worker:", error); + }); +}); + +test("get current account id correct", async (t) => { + const { ali, contextApiContract } = t.context.accounts; + let r = await ali.call(contextApiContract, "get_current_account_id", ""); + t.is(r, contextApiContract.accountId); +}); + +test("get signer account id correct", async (t) => { + const { ali, contextApiContract } = t.context.accounts; + let r = await ali.call(contextApiContract, "get_signer_account_id", ""); + t.is(r, ali.accountId); +}); + +test("get predecessor account id correct", async (t) => { + const { ali, contextApiContract } = t.context.accounts; + let r = await ali.call(contextApiContract, "get_predecessor_account_id", ""); + t.is(r, ali.accountId); +}); + +test("get signer account pk correct", async (t) => { + const { ali, contextApiContract } = t.context.accounts; + let r = await ali.callRaw(contextApiContract, "get_signer_account_pk", ""); // the prefixing byte 0 indicates it's a ED25519 PublicKey, see how PublicKey is serialized in nearcore t.deepEqual( - Buffer.from(r.result.status.SuccessValue, 'base64'), - Buffer.concat([Buffer.from([0]), Buffer.from((await ali.getKey(ali.accountId)).getPublicKey().data)]) - ) -}) - -test('get input correct', async (t) => { - const { bob, contextApiContract } = t.context.accounts - let r = await bob.callRaw(contextApiContract, 'get_input', new Uint8Array([0, 1, 255])) - t.is(r.result.status.SuccessValue, Buffer.from(new Uint8Array([0, 1, 255])).toString('base64')) -}) - -test('get storage usage', async (t) => { - const { carl, contextApiContract } = t.context.accounts - let r = await carl.call(contextApiContract, 'get_storage_usage', '', { - gas: '10 TGas', - }) - t.is(r > 0, true) -}) - -test('get block height', async (t) => { - const { bob, contextApiContract } = t.context.accounts - let r = await bob.call(contextApiContract, 'get_block_height', '') - t.is(r > 0, true) -}) - -test('get block timestamp', async (t) => { - let time = new Date().getTime() * 1e6 - const { bob, contextApiContract } = t.context.accounts - let r = await bob.call(contextApiContract, 'get_block_timestamp', '') - t.is(r > time, true) -}) - -test('get epoch height', async (t) => { - const { bob, contextApiContract } = t.context.accounts - let r = await bob.call(contextApiContract, 'get_epoch_height', '') - t.is(r, 1) -}) - -test('get attached deposit', async (t) => { - const { carl, contextApiContract } = t.context.accounts - let r = await carl.call(contextApiContract, 'get_attached_deposit', '', { + Buffer.from(r.result.status.SuccessValue, "base64"), + Buffer.concat([ + Buffer.from([0]), + Buffer.from((await ali.getKey(ali.accountId)).getPublicKey().data), + ]) + ); +}); + +test("get input correct", async (t) => { + const { bob, contextApiContract } = t.context.accounts; + let r = await bob.callRaw( + contextApiContract, + "get_input", + new Uint8Array([0, 1, 255]) + ); + t.is( + r.result.status.SuccessValue, + Buffer.from(new Uint8Array([0, 1, 255])).toString("base64") + ); +}); + +test("get storage usage", async (t) => { + const { carl, contextApiContract } = t.context.accounts; + let r = await carl.call(contextApiContract, "get_storage_usage", "", { + gas: "10 TGas", + }); + t.is(r > 0, true); +}); + +test("get block height", async (t) => { + const { bob, contextApiContract } = t.context.accounts; + let r = await bob.call(contextApiContract, "get_block_height", ""); + t.is(r > 0, true); +}); + +test("get block timestamp", async (t) => { + let time = new Date().getTime() * 1e6; + const { bob, contextApiContract } = t.context.accounts; + let r = await bob.call(contextApiContract, "get_block_timestamp", ""); + t.is(r > time, true); +}); + +test("get epoch height", async (t) => { + const { bob, contextApiContract } = t.context.accounts; + let r = await bob.call(contextApiContract, "get_epoch_height", ""); + t.is(r, 1); +}); + +test("get attached deposit", async (t) => { + const { carl, contextApiContract } = t.context.accounts; + let r = await carl.call(contextApiContract, "get_attached_deposit", "", { attachedDeposit: 3, }); t.is(r, "3"); diff --git a/tests/__tests__/test_highlevel_promise.ava.js b/tests/__tests__/test_highlevel_promise.ava.js index 9e00a581..fa350180 100644 --- a/tests/__tests__/test_highlevel_promise.ava.js +++ b/tests/__tests__/test_highlevel_promise.ava.js @@ -1,155 +1,233 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.before(async (t) => { // Init the worker and start a Sandbox server - const worker = await Worker.init() + const worker = await Worker.init(); // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount + const root = worker.rootAccount; - const highlevelPromise = await root.createSubAccount('highlevel-promise', { - initialBalance: '100100N', - }) - await highlevelPromise.deploy('build/highlevel-promise.wasm') + const highlevelPromise = await root.createSubAccount("highlevel-promise", { + initialBalance: "100100N", + }); + await highlevelPromise.deploy("build/highlevel-promise.wasm"); // Create and deploy callee contract - const calleeContract = await root.createSubAccount('callee-contract') - await calleeContract.deploy('build/promise_api.wasm') + const calleeContract = await root.createSubAccount("callee-contract"); + await calleeContract.deploy("build/promise_api.wasm"); // Test users - const ali = await root.createSubAccount('ali') - const bob = await root.createSubAccount('bob') + const ali = await root.createSubAccount("ali"); + const bob = await root.createSubAccount("bob"); // Save state for test runs - t.context.worker = worker - t.context.accounts = { root, highlevelPromise, ali, bob, calleeContract } -}) + t.context.worker = worker; + t.context.accounts = { root, highlevelPromise, ali, bob, calleeContract }; +}); test.after.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed to tear down the worker:', error) - }) -}) - -test('highlevel promise create account, transfer', async (t) => { - const { bob, highlevelPromise } = t.context.accounts - - let r = await bob.callRaw(highlevelPromise, 'test_promise_batch_create_transfer', '', { gas: '100 Tgas' }) - t.is(r.result.receipts_outcome[1].outcome.executor_id, highlevelPromise.getSubAccount('a').accountId) - t.is(r.result.receipts_outcome[1].outcome.status.SuccessValue, '') - - let balance = await highlevelPromise.getSubAccount('a').balance() - t.is(balance.total.toString(), '10000000000000000000000000') -}) - -test('highlevel promise stake', async (t) => { - const { highlevelPromise } = t.context.accounts - await highlevelPromise.callRaw(highlevelPromise, 'test_promise_batch_stake', '', { gas: '100 Tgas' }) - let balance = await highlevelPromise.balance() - t.is(balance.staked.toString(), '100000000000000000000000000000') -}) - -test('highlevel promise add full access key', async (t) => { - const { bob, highlevelPromise } = t.context.accounts - let r = await bob.callRaw(highlevelPromise, 'test_promise_add_full_access_key', '', { gas: '100 Tgas' }) - t.is(r.result.status.SuccessValue, '') -}) - -test('highlevel promise add function call key', async (t) => { - const { bob, highlevelPromise } = t.context.accounts - let r = await bob.callRaw(highlevelPromise, 'test_promise_add_function_call_access_key', '', { gas: '100 Tgas' }) - t.is(r.result.status.SuccessValue, '') -}) - -test('highlevel promise delete account', async (t) => { - const { bob, highlevelPromise } = t.context.accounts - let r = await bob.callRaw(highlevelPromise, 'test_delete_account', '', { - gas: '100 Tgas', - }) - t.is(r.result.status.SuccessValue, '') - t.is(await highlevelPromise.getSubAccount('e').exists(), false) -}) - -test('highlevel promise then', async (t) => { - const { ali, highlevelPromise, calleeContract } = t.context.accounts - let r = await ali.callRaw(highlevelPromise, 'test_promise_then', '', { - gas: '70 Tgas', - }) + console.log("Failed to tear down the worker:", error); + }); +}); + +test("highlevel promise create account, transfer", async (t) => { + const { bob, highlevelPromise } = t.context.accounts; + + let r = await bob.callRaw( + highlevelPromise, + "test_promise_batch_create_transfer", + "", + { gas: "100 Tgas" } + ); + t.is( + r.result.receipts_outcome[1].outcome.executor_id, + highlevelPromise.getSubAccount("a").accountId + ); + t.is(r.result.receipts_outcome[1].outcome.status.SuccessValue, ""); + + let balance = await highlevelPromise.getSubAccount("a").balance(); + t.is(balance.total.toString(), "10000000000000000000000000"); +}); + +test("highlevel promise stake", async (t) => { + const { highlevelPromise } = t.context.accounts; + await highlevelPromise.callRaw( + highlevelPromise, + "test_promise_batch_stake", + "", + { gas: "100 Tgas" } + ); + let balance = await highlevelPromise.balance(); + t.is(balance.staked.toString(), "100000000000000000000000000000"); +}); + +test("highlevel promise add full access key", async (t) => { + const { bob, highlevelPromise } = t.context.accounts; + let r = await bob.callRaw( + highlevelPromise, + "test_promise_add_full_access_key", + "", + { gas: "100 Tgas" } + ); + t.is(r.result.status.SuccessValue, ""); +}); + +test("highlevel promise add function call key", async (t) => { + const { bob, highlevelPromise } = t.context.accounts; + let r = await bob.callRaw( + highlevelPromise, + "test_promise_add_function_call_access_key", + "", + { gas: "100 Tgas" } + ); + t.is(r.result.status.SuccessValue, ""); +}); + +test("highlevel promise delete account", async (t) => { + const { bob, highlevelPromise } = t.context.accounts; + let r = await bob.callRaw(highlevelPromise, "test_delete_account", "", { + gas: "100 Tgas", + }); + t.is(r.result.status.SuccessValue, ""); + t.is(await highlevelPromise.getSubAccount("e").exists(), false); +}); + +test("highlevel promise then", async (t) => { + const { ali, highlevelPromise, calleeContract } = t.context.accounts; + let r = await ali.callRaw(highlevelPromise, "test_promise_then", "", { + gas: "70 Tgas", + }); // call the callee - t.is(r.result.receipts_outcome[1].outcome.executor_id, calleeContract.accountId) - t.deepEqual(JSON.parse(Buffer.from(r.result.receipts_outcome[1].outcome.status.SuccessValue, 'base64')), { - currentAccountId: calleeContract.accountId, - signerAccountId: ali.accountId, - predecessorAccountId: highlevelPromise.accountId, - input: 'abc', - }) + t.is( + r.result.receipts_outcome[1].outcome.executor_id, + calleeContract.accountId + ); + t.deepEqual( + JSON.parse( + Buffer.from( + r.result.receipts_outcome[1].outcome.status.SuccessValue, + "base64" + ) + ), + { + currentAccountId: calleeContract.accountId, + signerAccountId: ali.accountId, + predecessorAccountId: highlevelPromise.accountId, + input: "abc", + } + ); // the callback scheduled by promise_then - t.is(r.result.receipts_outcome[3].outcome.executor_id, highlevelPromise.accountId) - t.deepEqual(JSON.parse(Buffer.from(r.result.receipts_outcome[3].outcome.status.SuccessValue, 'base64')), { - currentAccountId: highlevelPromise.accountId, - signerAccountId: ali.accountId, - predecessorAccountId: highlevelPromise.accountId, - input: '{"callbackArg1":"def"}', - promiseResults: [ - JSON.stringify({ - currentAccountId: calleeContract.accountId, - signerAccountId: ali.accountId, - predecessorAccountId: highlevelPromise.accountId, - input: 'abc', - }), - ], - callbackArg1: 'def', - }) -}) - -test('highlevel promise and', async (t) => { - const { ali, highlevelPromise, calleeContract } = t.context.accounts - let r = await ali.callRaw(highlevelPromise, 'test_promise_and', '', { - gas: '150 Tgas', - }) + t.is( + r.result.receipts_outcome[3].outcome.executor_id, + highlevelPromise.accountId + ); + t.deepEqual( + JSON.parse( + Buffer.from( + r.result.receipts_outcome[3].outcome.status.SuccessValue, + "base64" + ) + ), + { + currentAccountId: highlevelPromise.accountId, + signerAccountId: ali.accountId, + predecessorAccountId: highlevelPromise.accountId, + input: '{"callbackArg1":"def"}', + promiseResults: [ + JSON.stringify({ + currentAccountId: calleeContract.accountId, + signerAccountId: ali.accountId, + predecessorAccountId: highlevelPromise.accountId, + input: "abc", + }), + ], + callbackArg1: "def", + } + ); +}); + +test("highlevel promise and", async (t) => { + const { ali, highlevelPromise, calleeContract } = t.context.accounts; + let r = await ali.callRaw(highlevelPromise, "test_promise_and", "", { + gas: "150 Tgas", + }); // console.log(JSON.stringify(r, null, 2)) // promise and schedule to call the callee - t.is(r.result.receipts_outcome[1].outcome.executor_id, calleeContract.accountId) - t.deepEqual(JSON.parse(Buffer.from(r.result.receipts_outcome[1].outcome.status.SuccessValue, 'base64')), { - currentAccountId: calleeContract.accountId, - signerAccountId: ali.accountId, - predecessorAccountId: highlevelPromise.accountId, - input: 'abc', - }) + t.is( + r.result.receipts_outcome[1].outcome.executor_id, + calleeContract.accountId + ); + t.deepEqual( + JSON.parse( + Buffer.from( + r.result.receipts_outcome[1].outcome.status.SuccessValue, + "base64" + ) + ), + { + currentAccountId: calleeContract.accountId, + signerAccountId: ali.accountId, + predecessorAccountId: highlevelPromise.accountId, + input: "abc", + } + ); // promise and schedule to call the callee, with different args - t.is(r.result.receipts_outcome[3].outcome.executor_id, calleeContract.accountId) - t.deepEqual(JSON.parse(Buffer.from(r.result.receipts_outcome[3].outcome.status.SuccessValue, 'base64')), { - currentAccountId: calleeContract.accountId, - signerAccountId: ali.accountId, - predecessorAccountId: highlevelPromise.accountId, - input: 'def', - }) + t.is( + r.result.receipts_outcome[3].outcome.executor_id, + calleeContract.accountId + ); + t.deepEqual( + JSON.parse( + Buffer.from( + r.result.receipts_outcome[3].outcome.status.SuccessValue, + "base64" + ) + ), + { + currentAccountId: calleeContract.accountId, + signerAccountId: ali.accountId, + predecessorAccountId: highlevelPromise.accountId, + input: "def", + } + ); // the callback scheduled by promise_then on the promise created by promise_and - t.is(r.result.receipts_outcome[5].outcome.executor_id, highlevelPromise.accountId) - t.deepEqual(JSON.parse(Buffer.from(r.result.receipts_outcome[5].outcome.status.SuccessValue, 'base64')), { - currentAccountId: highlevelPromise.accountId, - signerAccountId: ali.accountId, - predecessorAccountId: highlevelPromise.accountId, - input: '{"callbackArg1":"ghi"}', - promiseResults: [ - JSON.stringify({ - currentAccountId: calleeContract.accountId, - signerAccountId: ali.accountId, - predecessorAccountId: highlevelPromise.accountId, - input: 'abc', - }), - JSON.stringify({ - currentAccountId: calleeContract.accountId, - signerAccountId: ali.accountId, - predecessorAccountId: highlevelPromise.accountId, - input: 'def', - }), - ], - callbackArg1: 'ghi', - }) -}) + t.is( + r.result.receipts_outcome[5].outcome.executor_id, + highlevelPromise.accountId + ); + t.deepEqual( + JSON.parse( + Buffer.from( + r.result.receipts_outcome[5].outcome.status.SuccessValue, + "base64" + ) + ), + { + currentAccountId: highlevelPromise.accountId, + signerAccountId: ali.accountId, + predecessorAccountId: highlevelPromise.accountId, + input: '{"callbackArg1":"ghi"}', + promiseResults: [ + JSON.stringify({ + currentAccountId: calleeContract.accountId, + signerAccountId: ali.accountId, + predecessorAccountId: highlevelPromise.accountId, + input: "abc", + }), + JSON.stringify({ + currentAccountId: calleeContract.accountId, + signerAccountId: ali.accountId, + predecessorAccountId: highlevelPromise.accountId, + input: "def", + }), + ], + callbackArg1: "ghi", + } + ); +}); diff --git a/tests/__tests__/test_log_panic_api.ava.js b/tests/__tests__/test_log_panic_api.ava.js index a9f36e5d..70e9f9cb 100644 --- a/tests/__tests__/test_log_panic_api.ava.js +++ b/tests/__tests__/test_log_panic_api.ava.js @@ -1,128 +1,136 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.before(async (t) => { // Init the worker and start a Sandbox server - const worker = await Worker.init() + const worker = await Worker.init(); // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount + const root = worker.rootAccount; // Deploy the test contract. - const testContract = await root.devDeploy('build/log_panic_api.wasm') + const testContract = await root.devDeploy("build/log_panic_api.wasm"); // Test users - const ali = await root.createSubAccount('ali') + const ali = await root.createSubAccount("ali"); // Save state for test runs - t.context.worker = worker - t.context.accounts = { root, testContract, ali } -}) + t.context.worker = worker; + t.context.accounts = { root, testContract, ali }; +}); test.after.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed to tear down the worker:', error) - }) -}) + console.log("Failed to tear down the worker:", error); + }); +}); -test('Log expected types work', async (t) => { - const { ali, testContract } = t.context.accounts +test("Log expected types work", async (t) => { + const { ali, testContract } = t.context.accounts; - let r = await ali.callRaw(testContract, 'log_expected_input_tests', '') + let r = await ali.callRaw(testContract, "log_expected_input_tests", ""); t.deepEqual(r.result.receipts_outcome[0].outcome.logs, [ - 'abc', - 'æ°´', - '333', - '\x00\x01\xff', - '\xe6\xb0\xb4', - 'æ°´', - 'æ°´', - ]) -}) - -test('Log unexpected types not logging', async (t) => { - const { ali, testContract } = t.context.accounts - - let r = await ali.callRaw(testContract, 'log_unexpected_input_tests', '') + "abc", + "æ°´", + "333", + "\x00\x01\xff", + "\xe6\xb0\xb4", + "æ°´", + "æ°´", + ]); +}); + +test("Log unexpected types not logging", async (t) => { + const { ali, testContract } = t.context.accounts; + + let r = await ali.callRaw(testContract, "log_unexpected_input_tests", ""); // logUtf8 and logUtf16 only works with bytes, trying to log it with string is unexpected and behavior is undefined // in this specific case, it logs nothing - t.deepEqual(r.result.receipts_outcome[0].outcome.logs, ['', '']) -}) + t.deepEqual(r.result.receipts_outcome[0].outcome.logs, ["", ""]); +}); -test('Log invalid utf-8 sequence panic', async (t) => { - const { ali, testContract } = t.context.accounts +test("Log invalid utf-8 sequence panic", async (t) => { + const { ali, testContract } = t.context.accounts; - let r = await ali.callRaw(testContract, 'log_invalid_utf8_sequence_test', '') + let r = await ali.callRaw(testContract, "log_invalid_utf8_sequence_test", ""); // console.log(JSON.stringify(r, null, 2)) t.deepEqual( - r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError, - 'String encoding is bad UTF-8 sequence.' - ) -}) - -test('Log invalid utf-16 sequence panic', async (t) => { - const { ali, testContract } = t.context.accounts - - let r = await ali.callRaw(testContract, 'log_invalid_utf16_sequence_test', '') + r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind + .FunctionCallError.ExecutionError, + "String encoding is bad UTF-8 sequence." + ); +}); + +test("Log invalid utf-16 sequence panic", async (t) => { + const { ali, testContract } = t.context.accounts; + + let r = await ali.callRaw( + testContract, + "log_invalid_utf16_sequence_test", + "" + ); t.deepEqual( - r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError, - 'String encoding is bad UTF-16 sequence.' - ) -}) - -test('panic tests', async (t) => { - const { ali, testContract } = t.context.accounts - let r = await ali.callRaw(testContract, 'panic_test', '') + r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind + .FunctionCallError.ExecutionError, + "String encoding is bad UTF-16 sequence." + ); +}); + +test("panic tests", async (t) => { + const { ali, testContract } = t.context.accounts; + let r = await ali.callRaw(testContract, "panic_test", ""); t.assert( r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.match( /^Smart contract panicked:*/ ) - ) + ); - r = await ali.callRaw(testContract, 'panic_ascii_test', '') + r = await ali.callRaw(testContract, "panic_ascii_test", ""); t.assert( r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.match( /^Smart contract panicked: abc*/ ) - ) + ); - r = await ali.callRaw(testContract, 'panic_js_number', '') + r = await ali.callRaw(testContract, "panic_js_number", ""); t.assert( r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.match( /^Smart contract panicked: 356*/ ) - ) + ); - r = await ali.callRaw(testContract, 'panic_js_undefined', '') + r = await ali.callRaw(testContract, "panic_js_undefined", ""); t.assert( r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.match( /^Smart contract panicked:*/ ) - ) + ); - r = await ali.callRaw(testContract, 'panic_js_null', '') + r = await ali.callRaw(testContract, "panic_js_null", ""); t.assert( r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.match( /^Smart contract panicked: null*/ ) - ) + ); - r = await ali.callRaw(testContract, 'panic_utf8_test', '') + r = await ali.callRaw(testContract, "panic_utf8_test", ""); t.assert( r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.match( /Smart contract panicked: æ°´*/ ) - ) + ); - r = await ali.callRaw(testContract, 'panicUtf8_valid_utf8_sequence', '') + r = await ali.callRaw(testContract, "panicUtf8_valid_utf8_sequence", ""); t.deepEqual( - r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError, - 'Smart contract panicked: æ°´' - ) + r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind + .FunctionCallError.ExecutionError, + "Smart contract panicked: æ°´" + ); - r = await ali.callRaw(testContract, 'panicUtf8_invalid_utf8_sequence', '') + r = await ali.callRaw(testContract, "panicUtf8_invalid_utf8_sequence", ""); t.deepEqual( - r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind.FunctionCallError.ExecutionError, - 'String encoding is bad UTF-8 sequence.' - ) -}) + r.result.receipts_outcome[0].outcome.status.Failure.ActionError.kind + .FunctionCallError.ExecutionError, + "String encoding is bad UTF-8 sequence." + ); +}); diff --git a/tests/__tests__/test_math_api.ava.js b/tests/__tests__/test_math_api.ava.js index a60fb9a3..3c287e36 100644 --- a/tests/__tests__/test_math_api.ava.js +++ b/tests/__tests__/test_math_api.ava.js @@ -1,88 +1,96 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.before(async (t) => { // Init the worker and start a Sandbox server - const worker = await Worker.init() + const worker = await Worker.init(); // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount + const root = worker.rootAccount; // Deploy the test contract. - const mathApiContract = await root.devDeploy('build/math_api.wasm') + const mathApiContract = await root.devDeploy("build/math_api.wasm"); // Test users - const ali = await root.createSubAccount('ali') + const ali = await root.createSubAccount("ali"); // Save state for test runs - t.context.worker = worker - t.context.accounts = { root, mathApiContract, ali } -}) + t.context.worker = worker; + t.context.accounts = { root, mathApiContract, ali }; +}); test.after.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed to tear down the worker:', error) - }) -}) + console.log("Failed to tear down the worker:", error); + }); +}); -test('sha256', async (t) => { - const { ali, mathApiContract } = t.context.accounts - let r = await ali.callRaw(mathApiContract, 'test_sha256', '') +test("sha256", async (t) => { + const { ali, mathApiContract } = t.context.accounts; + let r = await ali.callRaw(mathApiContract, "test_sha256", ""); t.deepEqual( - Buffer.from(r.result.status.SuccessValue, 'base64'), + Buffer.from(r.result.status.SuccessValue, "base64"), Buffer.from([ - 18, 176, 115, 156, 45, 100, 241, 132, 180, 134, 77, 42, 105, 111, 199, 127, 118, 112, 92, 255, 88, 43, 83, 147, - 122, 55, 26, 36, 42, 156, 160, 158, + 18, 176, 115, 156, 45, 100, 241, 132, 180, 134, 77, 42, 105, 111, 199, + 127, 118, 112, 92, 255, 88, 43, 83, 147, 122, 55, 26, 36, 42, 156, 160, + 158, ]) - ) -}) + ); +}); -test('keccak256', async (t) => { - const { ali, mathApiContract } = t.context.accounts - let r = await ali.callRaw(mathApiContract, 'test_keccak256', '') +test("keccak256", async (t) => { + const { ali, mathApiContract } = t.context.accounts; + let r = await ali.callRaw(mathApiContract, "test_keccak256", ""); t.deepEqual( - Buffer.from(r.result.status.SuccessValue, 'base64'), + Buffer.from(r.result.status.SuccessValue, "base64"), Buffer.from([ - 104, 110, 58, 122, 230, 181, 215, 145, 231, 229, 49, 162, 123, 167, 177, 58, 26, 142, 129, 173, 7, 37, 9, 26, 233, - 115, 64, 102, 61, 85, 10, 159, + 104, 110, 58, 122, 230, 181, 215, 145, 231, 229, 49, 162, 123, 167, 177, + 58, 26, 142, 129, 173, 7, 37, 9, 26, 233, 115, 64, 102, 61, 85, 10, 159, ]) - ) -}) + ); +}); -test('keccak512', async (t) => { - const { ali, mathApiContract } = t.context.accounts - let r = await ali.callRaw(mathApiContract, 'test_keccak512', '') +test("keccak512", async (t) => { + const { ali, mathApiContract } = t.context.accounts; + let r = await ali.callRaw(mathApiContract, "test_keccak512", ""); t.deepEqual( - Buffer.from(r.result.status.SuccessValue, 'base64'), + Buffer.from(r.result.status.SuccessValue, "base64"), Buffer.from([ - 55, 134, 96, 137, 168, 122, 187, 95, 67, 76, 18, 122, 146, 11, 225, 106, 117, 194, 154, 157, 48, 160, 90, 146, - 104, 209, 118, 126, 222, 230, 200, 125, 48, 73, 197, 236, 123, 173, 192, 197, 90, 153, 167, 121, 100, 88, 209, - 240, 137, 86, 239, 41, 87, 128, 219, 249, 136, 203, 220, 109, 46, 168, 234, 190, + 55, 134, 96, 137, 168, 122, 187, 95, 67, 76, 18, 122, 146, 11, 225, 106, + 117, 194, 154, 157, 48, 160, 90, 146, 104, 209, 118, 126, 222, 230, 200, + 125, 48, 73, 197, 236, 123, 173, 192, 197, 90, 153, 167, 121, 100, 88, + 209, 240, 137, 86, 239, 41, 87, 128, 219, 249, 136, 203, 220, 109, 46, + 168, 234, 190, ]) - ) -}) + ); +}); -test('ripemd160', async (t) => { - const { ali, mathApiContract } = t.context.accounts - let r = await ali.callRaw(mathApiContract, 'test_ripemd160', '') +test("ripemd160", async (t) => { + const { ali, mathApiContract } = t.context.accounts; + let r = await ali.callRaw(mathApiContract, "test_ripemd160", ""); t.deepEqual( - Buffer.from(r.result.status.SuccessValue, 'base64'), - Buffer.from([21, 102, 156, 115, 232, 3, 58, 215, 35, 84, 129, 30, 143, 86, 212, 104, 70, 97, 14, 225]) - ) -}) + Buffer.from(r.result.status.SuccessValue, "base64"), + Buffer.from([ + 21, 102, 156, 115, 232, 3, 58, 215, 35, 84, 129, 30, 143, 86, 212, 104, + 70, 97, 14, 225, + ]) + ); +}); -test('ecrecover', async (t) => { - const { ali, mathApiContract } = t.context.accounts - let r = await ali.callRaw(mathApiContract, 'test_ecrecover', '') +test("ecrecover", async (t) => { + const { ali, mathApiContract } = t.context.accounts; + let r = await ali.callRaw(mathApiContract, "test_ecrecover", ""); t.deepEqual( - Buffer.from(r.result.status.SuccessValue, 'base64'), + Buffer.from(r.result.status.SuccessValue, "base64"), Buffer.from([ - 227, 45, 244, 40, 101, 233, 113, 53, 172, 251, 101, 243, 186, 231, 27, 220, 134, 244, 212, 145, 80, 173, 106, 68, - 11, 111, 21, 135, 129, 9, 136, 10, 10, 43, 38, 103, 247, 231, 37, 206, 234, 112, 198, 115, 9, 59, 246, 118, 99, - 224, 49, 38, 35, 200, 224, 145, 177, 60, 242, 192, 241, 30, 246, 82, + 227, 45, 244, 40, 101, 233, 113, 53, 172, 251, 101, 243, 186, 231, 27, + 220, 134, 244, 212, 145, 80, 173, 106, 68, 11, 111, 21, 135, 129, 9, 136, + 10, 10, 43, 38, 103, 247, 231, 37, 206, 234, 112, 198, 115, 9, 59, 246, + 118, 99, 224, 49, 38, 35, 200, 224, 145, 177, 60, 242, 192, 241, 30, 246, + 82, ]) - ) -}) + ); +}); // As of Jun 24, 2022, near-sandbox is using 97c0410de519ecaca369aaee26f0ca5eb9e7de06, in which alt_bn256 is still // under nightly protocol feature. As near-sandbox is built without nightly protocol feature, alt_bn256 operations diff --git a/tests/__tests__/test_promise_api.ava.js b/tests/__tests__/test_promise_api.ava.js index a0b3911c..1cfb4202 100644 --- a/tests/__tests__/test_promise_api.ava.js +++ b/tests/__tests__/test_promise_api.ava.js @@ -1,33 +1,33 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.before(async (t) => { // Init the worker and start a Sandbox server - const worker = await Worker.init() + const worker = await Worker.init(); // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount + const root = worker.rootAccount; // Create and deploy caller contract - const callerContract = await root.createSubAccount('caller-contract') - await callerContract.deploy('build/promise_api.wasm') + const callerContract = await root.createSubAccount("caller-contract"); + await callerContract.deploy("build/promise_api.wasm"); // Create and deploy callee contract - const calleeContract = await root.createSubAccount('callee-contract') - await calleeContract.deploy('build/promise_api.wasm') + const calleeContract = await root.createSubAccount("callee-contract"); + await calleeContract.deploy("build/promise_api.wasm"); // Create and deploy caller2 contract - const caller2Contract = await root.createSubAccount('caller2', { - initialBalance: '100100N', - }) - await caller2Contract.deploy('build/promise_batch_api.wasm') + const caller2Contract = await root.createSubAccount("caller2", { + initialBalance: "100100N", + }); + await caller2Contract.deploy("build/promise_batch_api.wasm"); // Test users - const ali = await root.createSubAccount('ali') - const bob = await root.createSubAccount('bob') + const ali = await root.createSubAccount("ali"); + const bob = await root.createSubAccount("bob"); // Save state for test runs - t.context.worker = worker + t.context.worker = worker; t.context.accounts = { root, callerContract, @@ -35,133 +35,207 @@ test.before(async (t) => { ali, bob, caller2Contract, - } -}) + }; +}); test.after.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed to tear down the worker:', error) - }) -}) + console.log("Failed to tear down the worker:", error); + }); +}); -test('promise create', async (t) => { - const { ali, callerContract, calleeContract } = t.context.accounts +test("promise create", async (t) => { + const { ali, callerContract, calleeContract } = t.context.accounts; // default is 30 TGas, sufficient when the callee contract method is trivial - let r = await ali.callRaw(callerContract, 'test_promise_create', '', { - gas: '40 Tgas', - }) - t.is(r.result.receipts_outcome[1].outcome.executor_id, calleeContract.accountId) + let r = await ali.callRaw(callerContract, "test_promise_create", "", { + gas: "40 Tgas", + }); + t.is( + r.result.receipts_outcome[1].outcome.executor_id, + calleeContract.accountId + ); t.deepEqual( - Buffer.from(r.result.receipts_outcome[1].outcome.status.SuccessValue, 'base64'), + Buffer.from( + r.result.receipts_outcome[1].outcome.status.SuccessValue, + "base64" + ), Buffer.from( JSON.stringify({ currentAccountId: calleeContract.accountId, signerAccountId: ali.accountId, predecessorAccountId: callerContract.accountId, - input: 'abc', + input: "abc", }) ) - ) -}) - -test('promise then', async (t) => { - const { ali, callerContract, calleeContract } = t.context.accounts - let r = await ali.callRaw(callerContract, 'test_promise_then', '', { - gas: '70 Tgas', - }) + ); +}); + +test("promise then", async (t) => { + const { ali, callerContract, calleeContract } = t.context.accounts; + let r = await ali.callRaw(callerContract, "test_promise_then", "", { + gas: "70 Tgas", + }); // console.log(JSON.stringify(r, null, 2)) // call the callee - t.is(r.result.receipts_outcome[1].outcome.executor_id, calleeContract.accountId) - t.deepEqual(JSON.parse(Buffer.from(r.result.receipts_outcome[1].outcome.status.SuccessValue, 'base64')), { - currentAccountId: calleeContract.accountId, - signerAccountId: ali.accountId, - predecessorAccountId: callerContract.accountId, - input: 'abc', - }) + t.is( + r.result.receipts_outcome[1].outcome.executor_id, + calleeContract.accountId + ); + t.deepEqual( + JSON.parse( + Buffer.from( + r.result.receipts_outcome[1].outcome.status.SuccessValue, + "base64" + ) + ), + { + currentAccountId: calleeContract.accountId, + signerAccountId: ali.accountId, + predecessorAccountId: callerContract.accountId, + input: "abc", + } + ); // the callback scheduled by promise_then - t.is(r.result.receipts_outcome[3].outcome.executor_id, callerContract.accountId) - t.deepEqual(JSON.parse(Buffer.from(r.result.receipts_outcome[3].outcome.status.SuccessValue, 'base64')), { - currentAccountId: callerContract.accountId, - signerAccountId: ali.accountId, - predecessorAccountId: callerContract.accountId, - input: 'def', - promiseResults: [ - JSON.stringify({ - currentAccountId: calleeContract.accountId, - signerAccountId: ali.accountId, - predecessorAccountId: callerContract.accountId, - input: 'abc', - }), - ], - }) -}) - -test('promise and', async (t) => { - const { ali, callerContract, calleeContract } = t.context.accounts - let r = await ali.callRaw(callerContract, 'test_promise_and', '', { - gas: '150 Tgas', - }) + t.is( + r.result.receipts_outcome[3].outcome.executor_id, + callerContract.accountId + ); + t.deepEqual( + JSON.parse( + Buffer.from( + r.result.receipts_outcome[3].outcome.status.SuccessValue, + "base64" + ) + ), + { + currentAccountId: callerContract.accountId, + signerAccountId: ali.accountId, + predecessorAccountId: callerContract.accountId, + input: "def", + promiseResults: [ + JSON.stringify({ + currentAccountId: calleeContract.accountId, + signerAccountId: ali.accountId, + predecessorAccountId: callerContract.accountId, + input: "abc", + }), + ], + } + ); +}); + +test("promise and", async (t) => { + const { ali, callerContract, calleeContract } = t.context.accounts; + let r = await ali.callRaw(callerContract, "test_promise_and", "", { + gas: "150 Tgas", + }); // console.log(JSON.stringify(r, null, 2)) // promise and schedule to call the callee - t.is(r.result.receipts_outcome[1].outcome.executor_id, calleeContract.accountId) - t.deepEqual(JSON.parse(Buffer.from(r.result.receipts_outcome[1].outcome.status.SuccessValue, 'base64')), { - currentAccountId: calleeContract.accountId, - signerAccountId: ali.accountId, - predecessorAccountId: callerContract.accountId, - input: 'abc', - }) + t.is( + r.result.receipts_outcome[1].outcome.executor_id, + calleeContract.accountId + ); + t.deepEqual( + JSON.parse( + Buffer.from( + r.result.receipts_outcome[1].outcome.status.SuccessValue, + "base64" + ) + ), + { + currentAccountId: calleeContract.accountId, + signerAccountId: ali.accountId, + predecessorAccountId: callerContract.accountId, + input: "abc", + } + ); // promise and schedule to call the callee, with different args - t.is(r.result.receipts_outcome[3].outcome.executor_id, calleeContract.accountId) - t.deepEqual(JSON.parse(Buffer.from(r.result.receipts_outcome[3].outcome.status.SuccessValue, 'base64')), { - currentAccountId: calleeContract.accountId, - signerAccountId: ali.accountId, - predecessorAccountId: callerContract.accountId, - input: 'def', - }) + t.is( + r.result.receipts_outcome[3].outcome.executor_id, + calleeContract.accountId + ); + t.deepEqual( + JSON.parse( + Buffer.from( + r.result.receipts_outcome[3].outcome.status.SuccessValue, + "base64" + ) + ), + { + currentAccountId: calleeContract.accountId, + signerAccountId: ali.accountId, + predecessorAccountId: callerContract.accountId, + input: "def", + } + ); // the callback scheduled by promise_then on the promise created by promise_and - t.is(r.result.receipts_outcome[5].outcome.executor_id, callerContract.accountId) - t.deepEqual(JSON.parse(Buffer.from(r.result.receipts_outcome[5].outcome.status.SuccessValue, 'base64')), { - currentAccountId: callerContract.accountId, - signerAccountId: ali.accountId, - predecessorAccountId: callerContract.accountId, - input: 'ghi', - promiseResults: [ - JSON.stringify({ - currentAccountId: calleeContract.accountId, - signerAccountId: ali.accountId, - predecessorAccountId: callerContract.accountId, - input: 'abc', - }), - JSON.stringify({ - currentAccountId: calleeContract.accountId, - signerAccountId: ali.accountId, - predecessorAccountId: callerContract.accountId, - input: 'def', - }), - ], - }) -}) + t.is( + r.result.receipts_outcome[5].outcome.executor_id, + callerContract.accountId + ); + t.deepEqual( + JSON.parse( + Buffer.from( + r.result.receipts_outcome[5].outcome.status.SuccessValue, + "base64" + ) + ), + { + currentAccountId: callerContract.accountId, + signerAccountId: ali.accountId, + predecessorAccountId: callerContract.accountId, + input: "ghi", + promiseResults: [ + JSON.stringify({ + currentAccountId: calleeContract.accountId, + signerAccountId: ali.accountId, + predecessorAccountId: callerContract.accountId, + input: "abc", + }), + JSON.stringify({ + currentAccountId: calleeContract.accountId, + signerAccountId: ali.accountId, + predecessorAccountId: callerContract.accountId, + input: "def", + }), + ], + } + ); +}); -test('promise batch create account, transfer', async (t) => { - const { bob, caller2Contract } = t.context.accounts +test("promise batch create account, transfer", async (t) => { + const { bob, caller2Contract } = t.context.accounts; - let r = await bob.callRaw(caller2Contract, 'test_promise_batch_create_transfer', '', { gas: '100 Tgas' }) - t.is(r.result.receipts_outcome[1].outcome.executor_id, caller2Contract.getSubAccount('a').accountId) - t.is(r.result.receipts_outcome[1].outcome.status.SuccessValue, '') + let r = await bob.callRaw( + caller2Contract, + "test_promise_batch_create_transfer", + "", + { gas: "100 Tgas" } + ); + t.is( + r.result.receipts_outcome[1].outcome.executor_id, + caller2Contract.getSubAccount("a").accountId + ); + t.is(r.result.receipts_outcome[1].outcome.status.SuccessValue, ""); - let balance = await caller2Contract.getSubAccount('a').balance() - t.is(balance.total.toString(), '10000000000000000000000000') -}) + let balance = await caller2Contract.getSubAccount("a").balance(); + t.is(balance.total.toString(), "10000000000000000000000000"); +}); -test('promise batch deploy contract and call', async (t) => { - const { bob, caller2Contract } = t.context.accounts +test("promise batch deploy contract and call", async (t) => { + const { bob, caller2Contract } = t.context.accounts; - let r = await bob.callRaw(caller2Contract, 'test_promise_batch_deploy_call', '', { gas: '200 Tgas' }) - let deployed = caller2Contract.getSubAccount('b') - t.deepEqual(JSON.parse(Buffer.from(r.result.status.SuccessValue, 'base64')), { + let r = await bob.callRaw( + caller2Contract, + "test_promise_batch_deploy_call", + "", + { gas: "200 Tgas" } + ); + let deployed = caller2Contract.getSubAccount("b"); + t.deepEqual(JSON.parse(Buffer.from(r.result.status.SuccessValue, "base64")), { currentAccountId: deployed.accountId, signerAccountId: bob.accountId, predecessorAccountId: caller2Contract.accountId, @@ -230,17 +304,22 @@ test("promise batch transfer overflow", async (t) => { }); t.assert( r.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.startsWith( - 'Smart contract panicked: Expect Uint128 for amount' + "Smart contract panicked: Expect Uint128 for amount" ) - ) -}) + ); +}); -test('promise create gas overflow', async (t) => { - const { ali, callerContract } = t.context.accounts - let r = await ali.callRaw(callerContract, 'test_promise_create_gas_overflow', '', { gas: '100 Tgas' }) +test("promise create gas overflow", async (t) => { + const { ali, callerContract } = t.context.accounts; + let r = await ali.callRaw( + callerContract, + "test_promise_create_gas_overflow", + "", + { gas: "100 Tgas" } + ); t.assert( r.result.status.Failure.ActionError.kind.FunctionCallError.ExecutionError.startsWith( - 'Smart contract panicked: Expect Uint64 for gas' + "Smart contract panicked: Expect Uint64 for gas" ) - ) -}) + ); +}); diff --git a/tests/__tests__/test_storage_api.ava.js b/tests/__tests__/test_storage_api.ava.js index 28a2bfa1..c743db25 100644 --- a/tests/__tests__/test_storage_api.ava.js +++ b/tests/__tests__/test_storage_api.ava.js @@ -1,61 +1,64 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.beforeEach(async (t) => { // Use beforeEach instead of before to start from scratch state for each test // Init the worker and start a Sandbox server - const worker = await Worker.init() + const worker = await Worker.init(); // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount + const root = worker.rootAccount; // Deploy the test contract. - const storageApiContract = await root.devDeploy('build/storage_api.wasm') + const storageApiContract = await root.devDeploy("build/storage_api.wasm"); // Test users - const ali = await root.createSubAccount('ali') + const ali = await root.createSubAccount("ali"); // Save state for test runs - t.context.worker = worker - t.context.accounts = { root, storageApiContract, ali } -}) + t.context.worker = worker; + t.context.accounts = { root, storageApiContract, ali }; +}); test.afterEach.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed to tear down the worker:', error) - }) -}) - -test('storage read write', async (t) => { - const { ali, storageApiContract } = t.context.accounts - - let exist = await ali.call(storageApiContract, 'test_storage_write', '') - t.is(exist, false) - let r = await storageApiContract.viewRaw('test_storage_read', '') - t.deepEqual(r.result, [0, 1, 255]) - exist = await ali.call(storageApiContract, 'test_storage_write', '') - t.is(exist, true) -}) - -test('storage remove', async (t) => { - const { ali, storageApiContract } = t.context.accounts - let hasKey = await storageApiContract.view('test_storage_has_key', '') - t.is(hasKey, false) - let exist = await ali.call(storageApiContract, 'test_storage_remove', '') - t.is(exist, false) - - await ali.call(storageApiContract, 'test_storage_write', '') - - hasKey = await storageApiContract.view('test_storage_has_key', '') - t.is(hasKey, true) - exist = await ali.call(storageApiContract, 'test_storage_remove', '') - t.is(exist, true) -}) - -test('storage get evicted', async (t) => { - const { ali, storageApiContract } = t.context.accounts - - let r = await ali.callRaw(storageApiContract, 'test_storage_get_evicted', '') - console.log(JSON.stringify(r, null, 2)) - t.deepEqual(Buffer.from(r.result.status.SuccessValue, 'base64'), Buffer.from([0, 1, 255])) -}) + console.log("Failed to tear down the worker:", error); + }); +}); + +test("storage read write", async (t) => { + const { ali, storageApiContract } = t.context.accounts; + + let exist = await ali.call(storageApiContract, "test_storage_write", ""); + t.is(exist, false); + let r = await storageApiContract.viewRaw("test_storage_read", ""); + t.deepEqual(r.result, [0, 1, 255]); + exist = await ali.call(storageApiContract, "test_storage_write", ""); + t.is(exist, true); +}); + +test("storage remove", async (t) => { + const { ali, storageApiContract } = t.context.accounts; + let hasKey = await storageApiContract.view("test_storage_has_key", ""); + t.is(hasKey, false); + let exist = await ali.call(storageApiContract, "test_storage_remove", ""); + t.is(exist, false); + + await ali.call(storageApiContract, "test_storage_write", ""); + + hasKey = await storageApiContract.view("test_storage_has_key", ""); + t.is(hasKey, true); + exist = await ali.call(storageApiContract, "test_storage_remove", ""); + t.is(exist, true); +}); + +test("storage get evicted", async (t) => { + const { ali, storageApiContract } = t.context.accounts; + + let r = await ali.callRaw(storageApiContract, "test_storage_get_evicted", ""); + console.log(JSON.stringify(r, null, 2)); + t.deepEqual( + Buffer.from(r.result.status.SuccessValue, "base64"), + Buffer.from([0, 1, 255]) + ); +}); diff --git a/tests/__tests__/typescript.ava.js b/tests/__tests__/typescript.ava.js index 1323c7a6..8c42842e 100644 --- a/tests/__tests__/typescript.ava.js +++ b/tests/__tests__/typescript.ava.js @@ -1,31 +1,31 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.before(async (t) => { // Init the worker and start a Sandbox server - const worker = await Worker.init() + const worker = await Worker.init(); // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount + const root = worker.rootAccount; // Deploy the test contract. - const typescriptContract = await root.devDeploy('build/typescript.wasm') + const typescriptContract = await root.devDeploy("build/typescript.wasm"); // Test users - const ali = await root.createSubAccount('ali') + const ali = await root.createSubAccount("ali"); // Save state for test runs - t.context.worker = worker - t.context.accounts = { root, typescriptContract, ali } -}) + t.context.worker = worker; + t.context.accounts = { root, typescriptContract, ali }; +}); test.after.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed to tear down the worker:', error) - }) -}) + console.log("Failed to tear down the worker:", error); + }); +}); -test('bigint', async (t) => { - const { typescriptContract } = t.context.accounts - let r = await typescriptContract.view('bigint', '') - t.is(r, '3') -}) +test("bigint", async (t) => { + const { typescriptContract } = t.context.accounts; + let r = await typescriptContract.view("bigint", ""); + t.is(r, "3"); +}); diff --git a/tests/__tests__/unordered-map.ava.js b/tests/__tests__/unordered-map.ava.js index 8af035d1..24015e33 100644 --- a/tests/__tests__/unordered-map.ava.js +++ b/tests/__tests__/unordered-map.ava.js @@ -1,30 +1,30 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.beforeEach(async (t) => { // Init the worker and start a Sandbox server - const worker = await Worker.init() + const worker = await Worker.init(); // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount + const root = worker.rootAccount; // Deploy the test contract. - const unorderedMapContract = await root.devDeploy('build/unordered-map.wasm') + const unorderedMapContract = await root.devDeploy("build/unordered-map.wasm"); // Test users - const ali = await root.createSubAccount('ali') - const bob = await root.createSubAccount('bob') - const carl = await root.createSubAccount('carl') + const ali = await root.createSubAccount("ali"); + const bob = await root.createSubAccount("bob"); + const carl = await root.createSubAccount("carl"); // Save state for test runs - t.context.worker = worker - t.context.accounts = { root, unorderedMapContract, ali, bob, carl } -}) + t.context.worker = worker; + t.context.accounts = { root, unorderedMapContract, ali, bob, carl }; +}); test.afterEach.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed to tear down the worker:', error) - }) -}) + console.log("Failed to tear down the worker:", error); + }); +}); test("UnorderedMap is empty by default", async (t) => { const { unorderedMapContract } = t.context.accounts; @@ -32,116 +32,121 @@ test("UnorderedMap is empty by default", async (t) => { t.is(result, 0); }); -test('UnorderedMap set() get()', async (t) => { - const { ali, unorderedMapContract } = t.context.accounts - t.is(await unorderedMapContract.view('get', { key: 'hello' }), null) +test("UnorderedMap set() get()", async (t) => { + const { ali, unorderedMapContract } = t.context.accounts; + t.is(await unorderedMapContract.view("get", { key: "hello" }), null); - await ali.call(unorderedMapContract, 'set', { key: 'hello', value: 'world' }) + await ali.call(unorderedMapContract, "set", { key: "hello", value: "world" }); - t.is(await unorderedMapContract.view('get', { key: 'hello' }), 'world') -}) + t.is(await unorderedMapContract.view("get", { key: "hello" }), "world"); +}); -test('UnorderedMap insert, update, len and iterate', async (t) => { - const { ali, unorderedMapContract } = t.context.accounts +test("UnorderedMap insert, update, len and iterate", async (t) => { + const { ali, unorderedMapContract } = t.context.accounts; - t.is(await unorderedMapContract.view('len', {}), 0) - t.deepEqual(await unorderedMapContract.view('toArray', {}), []) + t.is(await unorderedMapContract.view("len", {}), 0); + t.deepEqual(await unorderedMapContract.view("toArray", {}), []); - await ali.call(unorderedMapContract, 'set', { key: 'hello', value: 'world' }) - await ali.call(unorderedMapContract, 'set', { - key: 'hello1', - value: 'world0', - }) - t.is(await unorderedMapContract.view('len', {}), 2) + await ali.call(unorderedMapContract, "set", { key: "hello", value: "world" }); + await ali.call(unorderedMapContract, "set", { + key: "hello1", + value: "world0", + }); + t.is(await unorderedMapContract.view("len", {}), 2); // update a value, len shouldn't change - await ali.call(unorderedMapContract, 'set', { - key: 'hello1', - value: 'world1', - }) - t.is(await unorderedMapContract.view('len', {}), 2) + await ali.call(unorderedMapContract, "set", { + key: "hello1", + value: "world1", + }); + t.is(await unorderedMapContract.view("len", {}), 2); // update should have effect - t.is(await unorderedMapContract.view('get', { key: 'hello1' }), 'world1') + t.is(await unorderedMapContract.view("get", { key: "hello1" }), "world1"); - await ali.call(unorderedMapContract, 'set', { - key: 'hello2', - value: 'world2', - }) - t.is(await unorderedMapContract.view('len', {}), 3) + await ali.call(unorderedMapContract, "set", { + key: "hello2", + value: "world2", + }); + t.is(await unorderedMapContract.view("len", {}), 3); // Try to set a key with same value, len shouldn't change - await ali.call(unorderedMapContract, 'set', { - key: 'hello2', - value: 'world2', - }) - t.is(await unorderedMapContract.view('len', {}), 3) - - t.deepEqual(await unorderedMapContract.view('toArray', {}), [ - ['hello', 'world'], - ['hello1', 'world1'], - ['hello2', 'world2'], - ]) -}) - -test('UnorderedMap extend, remove, clear', async (t) => { - const { ali, unorderedMapContract } = t.context.accounts - - await ali.call(unorderedMapContract, 'extend', { + await ali.call(unorderedMapContract, "set", { + key: "hello2", + value: "world2", + }); + t.is(await unorderedMapContract.view("len", {}), 3); + + t.deepEqual(await unorderedMapContract.view("toArray", {}), [ + ["hello", "world"], + ["hello1", "world1"], + ["hello2", "world2"], + ]); +}); + +test("UnorderedMap extend, remove, clear", async (t) => { + const { ali, unorderedMapContract } = t.context.accounts; + + await ali.call(unorderedMapContract, "extend", { kvs: [ - ['hello', 'world'], - ['hello1', 'world1'], - ['hello2', 'world2'], + ["hello", "world"], + ["hello1", "world1"], + ["hello2", "world2"], ], - }) + }); - t.deepEqual(await unorderedMapContract.view('toArray', {}), [ - ['hello', 'world'], - ['hello1', 'world1'], - ['hello2', 'world2'], - ]) + t.deepEqual(await unorderedMapContract.view("toArray", {}), [ + ["hello", "world"], + ["hello1", "world1"], + ["hello2", "world2"], + ]); // remove non existing element should not error - await ali.call(unorderedMapContract, 'remove_key', { key: 'hello3' }) - t.deepEqual(await unorderedMapContract.view('toArray', {}), [ - ['hello', 'world'], - ['hello1', 'world1'], - ['hello2', 'world2'], - ]) + await ali.call(unorderedMapContract, "remove_key", { key: "hello3" }); + t.deepEqual(await unorderedMapContract.view("toArray", {}), [ + ["hello", "world"], + ["hello1", "world1"], + ["hello2", "world2"], + ]); // remove not the last one should work - await ali.call(unorderedMapContract, 'remove_key', { key: 'hello' }) - t.deepEqual(await unorderedMapContract.view('toArray', {}), [ - ['hello2', 'world2'], - ['hello1', 'world1'], - ]) + await ali.call(unorderedMapContract, "remove_key", { key: "hello" }); + t.deepEqual(await unorderedMapContract.view("toArray", {}), [ + ["hello2", "world2"], + ["hello1", "world1"], + ]); // remove the last one should work - await ali.call(unorderedMapContract, 'remove_key', { key: 'hello1' }) - t.deepEqual(await unorderedMapContract.view('toArray', {}), [['hello2', 'world2']]) + await ali.call(unorderedMapContract, "remove_key", { key: "hello1" }); + t.deepEqual(await unorderedMapContract.view("toArray", {}), [ + ["hello2", "world2"], + ]); // remove when length is 1 should work - t.is(await unorderedMapContract.view('len', {}), 1) - t.is(await unorderedMapContract.view('isEmpty', {}), false) - await ali.call(unorderedMapContract, 'remove_key', { key: 'hello2' }) - t.deepEqual(await unorderedMapContract.view('toArray', {}), []) - t.is(await unorderedMapContract.view('isEmpty', {}), true) + t.is(await unorderedMapContract.view("len", {}), 1); + t.is(await unorderedMapContract.view("isEmpty", {}), false); + await ali.call(unorderedMapContract, "remove_key", { key: "hello2" }); + t.deepEqual(await unorderedMapContract.view("toArray", {}), []); + t.is(await unorderedMapContract.view("isEmpty", {}), true); - await ali.call(unorderedMapContract, 'extend', { + await ali.call(unorderedMapContract, "extend", { kvs: [ - ['hello', 'world'], - ['hello1', 'world1'], - ['hello2', 'world2'], + ["hello", "world"], + ["hello1", "world1"], + ["hello2", "world2"], ], - }) - t.is(await unorderedMapContract.view('isEmpty', {}), false) - await ali.call(unorderedMapContract, 'clear', {}) - - t.deepEqual(await unorderedMapContract.view('toArray', {}), []) - t.is(await unorderedMapContract.view('isEmpty', {}), true) -}) - -test('UnorderedMap set get object', async (t) => { - const { ali, unorderedMapContract } = t.context.accounts - await ali.call(unorderedMapContract, 'add_house', {}) - t.is(await unorderedMapContract.view('get_house', {}), 'house house1 has 2 rooms. room room1 is 200sqft.') -}) + }); + t.is(await unorderedMapContract.view("isEmpty", {}), false); + await ali.call(unorderedMapContract, "clear", {}); + + t.deepEqual(await unorderedMapContract.view("toArray", {}), []); + t.is(await unorderedMapContract.view("isEmpty", {}), true); +}); + +test("UnorderedMap set get object", async (t) => { + const { ali, unorderedMapContract } = t.context.accounts; + await ali.call(unorderedMapContract, "add_house", {}); + t.is( + await unorderedMapContract.view("get_house", {}), + "house house1 has 2 rooms. room room1 is 200sqft." + ); +}); diff --git a/tests/__tests__/unordered-set.ava.js b/tests/__tests__/unordered-set.ava.js index 0584c8b8..5f19a51e 100644 --- a/tests/__tests__/unordered-set.ava.js +++ b/tests/__tests__/unordered-set.ava.js @@ -1,31 +1,31 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.beforeEach(async (t) => { // Init the worker and start a Sandbox server - const worker = await Worker.init() + const worker = await Worker.init(); // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount + const root = worker.rootAccount; // Deploy the test contract. - const unorderedSetContract = await root.devDeploy('build/unordered-set.wasm') + const unorderedSetContract = await root.devDeploy("build/unordered-set.wasm"); // Test users - const ali = await root.createSubAccount('ali') - const bob = await root.createSubAccount('bob') - const carl = await root.createSubAccount('carl') + const ali = await root.createSubAccount("ali"); + const bob = await root.createSubAccount("bob"); + const carl = await root.createSubAccount("carl"); // Save state for test runs - t.context.worker = worker - t.context.accounts = { root, unorderedSetContract, ali, bob, carl } -}) + t.context.worker = worker; + t.context.accounts = { root, unorderedSetContract, ali, bob, carl }; +}); test.afterEach.always(async (t) => { await t.context.worker.tearDown().catch((error) => { - console.log('Failed to tear down the worker:', error) - }) -}) + console.log("Failed to tear down the worker:", error); + }); +}); test("UnorderedSet is empty by default", async (t) => { const { unorderedSetContract } = t.context.accounts; @@ -34,76 +34,97 @@ test("UnorderedSet is empty by default", async (t) => { t.is(await unorderedSetContract.view("isEmpty", {}), true); }); -test('UnorderedSet set() contains()', async (t) => { - const { ali, unorderedSetContract } = t.context.accounts - t.is(await unorderedSetContract.view('contains', { element: 'hello' }), false) +test("UnorderedSet set() contains()", async (t) => { + const { ali, unorderedSetContract } = t.context.accounts; + t.is( + await unorderedSetContract.view("contains", { element: "hello" }), + false + ); - await ali.call(unorderedSetContract, 'set', { element: 'hello' }) + await ali.call(unorderedSetContract, "set", { element: "hello" }); - t.is(await unorderedSetContract.view('contains', { element: 'hello' }), true) -}) + t.is(await unorderedSetContract.view("contains", { element: "hello" }), true); +}); -test('UnorderedSet insert, len and iterate', async (t) => { - const { ali, unorderedSetContract } = t.context.accounts +test("UnorderedSet insert, len and iterate", async (t) => { + const { ali, unorderedSetContract } = t.context.accounts; - t.is(await unorderedSetContract.view('len', {}), 0) - t.deepEqual(await unorderedSetContract.view('toArray', {}), []) + t.is(await unorderedSetContract.view("len", {}), 0); + t.deepEqual(await unorderedSetContract.view("toArray", {}), []); - await ali.call(unorderedSetContract, 'set', { element: 'hello' }) - t.is(await unorderedSetContract.view('len', {}), 1) - await ali.call(unorderedSetContract, 'set', { element: 'hello1' }) - t.is(await unorderedSetContract.view('len', {}), 2) + await ali.call(unorderedSetContract, "set", { element: "hello" }); + t.is(await unorderedSetContract.view("len", {}), 1); + await ali.call(unorderedSetContract, "set", { element: "hello1" }); + t.is(await unorderedSetContract.view("len", {}), 2); // insert the same value, len shouldn't change - await ali.call(unorderedSetContract, 'set', { element: 'hello1' }) - t.is(await unorderedSetContract.view('len', {}), 2) + await ali.call(unorderedSetContract, "set", { element: "hello1" }); + t.is(await unorderedSetContract.view("len", {}), 2); - t.deepEqual(await unorderedSetContract.view('toArray', {}), ['hello', 'hello1']) -}) + t.deepEqual(await unorderedSetContract.view("toArray", {}), [ + "hello", + "hello1", + ]); +}); -test('UnorderedSet extend, remove, clear', async (t) => { - const { ali, unorderedSetContract } = t.context.accounts +test("UnorderedSet extend, remove, clear", async (t) => { + const { ali, unorderedSetContract } = t.context.accounts; - await ali.callRaw(unorderedSetContract, 'extend', { - elements: ['hello', 'world', 'hello1'], - }) + await ali.callRaw(unorderedSetContract, "extend", { + elements: ["hello", "world", "hello1"], + }); - t.deepEqual(await unorderedSetContract.view('toArray', {}), ['hello', 'world', 'hello1']) + t.deepEqual(await unorderedSetContract.view("toArray", {}), [ + "hello", + "world", + "hello1", + ]); // remove non existing element should not error - await ali.call(unorderedSetContract, 'remove_key', { element: 'hello3' }) - t.deepEqual(await unorderedSetContract.view('toArray', {}), ['hello', 'world', 'hello1']) + await ali.call(unorderedSetContract, "remove_key", { element: "hello3" }); + t.deepEqual(await unorderedSetContract.view("toArray", {}), [ + "hello", + "world", + "hello1", + ]); // remove not the last one should work - await ali.call(unorderedSetContract, 'remove_key', { element: 'hello' }) - t.deepEqual(await unorderedSetContract.view('toArray', {}), ['hello1', 'world']) + await ali.call(unorderedSetContract, "remove_key", { element: "hello" }); + t.deepEqual(await unorderedSetContract.view("toArray", {}), [ + "hello1", + "world", + ]); // remove the last one should work - await ali.call(unorderedSetContract, 'remove_key', { element: 'world' }) - t.deepEqual(await unorderedSetContract.view('toArray', {}), ['hello1']) + await ali.call(unorderedSetContract, "remove_key", { element: "world" }); + t.deepEqual(await unorderedSetContract.view("toArray", {}), ["hello1"]); // remove when length is 1 should work - t.is(await unorderedSetContract.view('len', {}), 1) - t.is(await unorderedSetContract.view('isEmpty', {}), false) - await ali.call(unorderedSetContract, 'remove_key', { element: 'hello1' }) - t.deepEqual(await unorderedSetContract.view('toArray', {}), []) - t.is(await unorderedSetContract.view('isEmpty', {}), true) - - await ali.call(unorderedSetContract, 'extend', { - elements: ['hello', 'world', 'hello1'], - }) - t.deepEqual(await unorderedSetContract.view('toArray', {}), ['hello', 'world', 'hello1']) - t.is(await unorderedSetContract.view('isEmpty', {}), false) + t.is(await unorderedSetContract.view("len", {}), 1); + t.is(await unorderedSetContract.view("isEmpty", {}), false); + await ali.call(unorderedSetContract, "remove_key", { element: "hello1" }); + t.deepEqual(await unorderedSetContract.view("toArray", {}), []); + t.is(await unorderedSetContract.view("isEmpty", {}), true); + + await ali.call(unorderedSetContract, "extend", { + elements: ["hello", "world", "hello1"], + }); + t.deepEqual(await unorderedSetContract.view("toArray", {}), [ + "hello", + "world", + "hello1", + ]); + t.is(await unorderedSetContract.view("isEmpty", {}), false); // clear should work - await ali.call(unorderedSetContract, 'clear', {}) - t.deepEqual(await unorderedSetContract.view('toArray', {}), []) - t.is(await unorderedSetContract.view('isEmpty', {}), true) -}) - -test('Add and check exist of object', async (t) => { - const { ali, unorderedSetContract } = t.context.accounts - let houseSpec = { name: 'a', rooms: [{ name: 'bedroom', size: '300sqft' }] } - t.is(await unorderedSetContract.view('house_exist', houseSpec), false) - await ali.call(unorderedSetContract, 'add_house', houseSpec) - t.is(await unorderedSetContract.view('house_exist', houseSpec), true) -}) + await ali.call(unorderedSetContract, "clear", {}); + t.deepEqual(await unorderedSetContract.view("toArray", {}), []); + t.is(await unorderedSetContract.view("isEmpty", {}), true); +}); + +test("Add and check exist of object", async (t) => { + const { ali, unorderedSetContract } = t.context.accounts; + let houseSpec = { name: "a", rooms: [{ name: "bedroom", size: "300sqft" }] }; + t.is(await unorderedSetContract.view("house_exist", houseSpec), false); + await ali.call(unorderedSetContract, "add_house", houseSpec); + t.is(await unorderedSetContract.view("house_exist", houseSpec), true); +}); diff --git a/tests/__tests__/vector.ava.js b/tests/__tests__/vector.ava.js index 9c3a3913..48613077 100644 --- a/tests/__tests__/vector.ava.js +++ b/tests/__tests__/vector.ava.js @@ -1,25 +1,25 @@ -import { Worker } from 'near-workspaces' -import test from 'ava' +import { Worker } from "near-workspaces"; +import test from "ava"; test.beforeEach(async (t) => { // Init the worker and start a Sandbox server - const worker = await Worker.init() + const worker = await Worker.init(); // Prepare sandbox for tests, create accounts, deploy contracts, etx. - const root = worker.rootAccount + const root = worker.rootAccount; // Deploy the test contract. - const vectorContract = await root.devDeploy('build/vector.wasm') + const vectorContract = await root.devDeploy("build/vector.wasm"); // Test users - const ali = await root.createSubAccount('ali') - const bob = await root.createSubAccount('bob') - const carl = await root.createSubAccount('carl') + const ali = await root.createSubAccount("ali"); + const bob = await root.createSubAccount("bob"); + const carl = await root.createSubAccount("carl"); // Save state for test runs - t.context.worker = worker - t.context.accounts = { root, vectorContract, ali, bob, carl } -}) + t.context.worker = worker; + t.context.accounts = { root, vectorContract, ali, bob, carl }; +}); test.afterEach.always(async (t) => { await t.context.worker.tearDown().catch((error) => { @@ -65,48 +65,54 @@ test("Vector extend, toArray, swapRemove, clear", async (t) => { ]); // swapRemove non existing element should error - const error1 = await t.throwsAsync(() => ali.call(vectorContract, 'swapRemove', { index: 3 })) - t.assert(error1.message.includes(`Index out of bounds`)) - t.deepEqual(await vectorContract.view('toArray', {}), ['hello', 'world', 'aaa']) + const error1 = await t.throwsAsync(() => + ali.call(vectorContract, "swapRemove", { index: 3 }) + ); + t.assert(error1.message.includes(`Index out of bounds`)); + t.deepEqual(await vectorContract.view("toArray", {}), [ + "hello", + "world", + "aaa", + ]); // swapRemove not the last one should work - await ali.call(vectorContract, 'swapRemove', { index: 0 }) - t.deepEqual(await vectorContract.view('toArray', {}), ['aaa', 'world']) + await ali.call(vectorContract, "swapRemove", { index: 0 }); + t.deepEqual(await vectorContract.view("toArray", {}), ["aaa", "world"]); // swapRemove the last one should work - await ali.call(vectorContract, 'swapRemove', { index: 1 }) - t.deepEqual(await vectorContract.view('toArray', {}), ['aaa']) + await ali.call(vectorContract, "swapRemove", { index: 1 }); + t.deepEqual(await vectorContract.view("toArray", {}), ["aaa"]); // swapRemove when length is 1 should work - t.is(await vectorContract.view('len', {}), 1) - t.is(await vectorContract.view('isEmpty', {}), false) - await ali.call(vectorContract, 'swapRemove', { index: 0 }) - t.deepEqual(await vectorContract.view('toArray', {}), []) - t.is(await vectorContract.view('isEmpty', {}), true) - - await ali.call(vectorContract, 'extend', { kvs: ['hello', 'world', 'aaa'] }) - t.is(await vectorContract.view('isEmpty', {}), false) - await ali.call(vectorContract, 'clear', {}) - - t.deepEqual(await vectorContract.view('toArray', {}), []) - t.is(await vectorContract.view('isEmpty', {}), true) -}) - -test('Vector add and get object', async (t) => { - const { ali, vectorContract } = t.context.accounts - await ali.call(vectorContract, 'add_house', {}) - let result = await vectorContract.view('get_house', {}) + t.is(await vectorContract.view("len", {}), 1); + t.is(await vectorContract.view("isEmpty", {}), false); + await ali.call(vectorContract, "swapRemove", { index: 0 }); + t.deepEqual(await vectorContract.view("toArray", {}), []); + t.is(await vectorContract.view("isEmpty", {}), true); + + await ali.call(vectorContract, "extend", { kvs: ["hello", "world", "aaa"] }); + t.is(await vectorContract.view("isEmpty", {}), false); + await ali.call(vectorContract, "clear", {}); + + t.deepEqual(await vectorContract.view("toArray", {}), []); + t.is(await vectorContract.view("isEmpty", {}), true); +}); + +test("Vector add and get object", async (t) => { + const { ali, vectorContract } = t.context.accounts; + await ali.call(vectorContract, "add_house", {}); + let result = await vectorContract.view("get_house", {}); t.deepEqual(result, { - name: 'house1', + name: "house1", rooms: [ { - name: 'room1', - size: '200sqft', + name: "room1", + size: "200sqft", }, { - name: 'room2', - size: '300sqft', + name: "room2", + size: "300sqft", }, ], - }) -}) + }); +}); diff --git a/tests/ava.config.cjs b/tests/ava.config.cjs index d2f4aa9a..d5a8c029 100644 --- a/tests/ava.config.cjs +++ b/tests/ava.config.cjs @@ -1,8 +1,8 @@ -require('util').inspect.defaultOptions.depth = 5 // Increase AVA's printing depth +require("util").inspect.defaultOptions.depth = 5; // Increase AVA's printing depth module.exports = { - timeout: '300000', - files: ['**/*.ava.js'], + timeout: "300000", + files: ["**/*.ava.js"], failWithoutAssertions: false, - extensions: ['js'], -} + extensions: ["js"], +}; diff --git a/tests/src/bytes.js b/tests/src/bytes.js index 3a375292..dcfe2389 100644 --- a/tests/src/bytes.js +++ b/tests/src/bytes.js @@ -1,89 +1,89 @@ -import { near, bytes } from 'near-sdk-js' +import { near, bytes } from "near-sdk-js"; export function log_expected_input_tests() { // log ascii string - near.log('abc') + near.log("abc"); // log string with utf-8 chars - near.log('æ°´') // Buffer([0xe6, 0xb0, 0xb4]) + near.log("æ°´"); // Buffer([0xe6, 0xb0, 0xb4]) // log number - near.log(333) + near.log(333); // log aribrary byte sequence - near.log(bytes('\x00\x01\xff')) + near.log(bytes("\x00\x01\xff")); // log valid utf8 seqence - near.log(bytes('\xe6\xb0\xb4')) + near.log(bytes("\xe6\xb0\xb4")); // log valid utf8 sequence - near.logUtf8(bytes('\xe6\xb0\xb4')) + near.logUtf8(bytes("\xe6\xb0\xb4")); // log valid utf16 sequence - near.logUtf16(bytes('\x34\x6c')) + near.logUtf16(bytes("\x34\x6c")); } export function log_unexpected_input_tests() { // log non-bytes with logUtf8 - near.logUtf8('æ°´') + near.logUtf8("æ°´"); // log non-bytes with logUtf16 - near.logUtf16('æ°´') + near.logUtf16("æ°´"); } export function log_invalid_utf8_sequence_test() { - near.logUtf8(bytes('\x00\x01\xff')) + near.logUtf8(bytes("\x00\x01\xff")); } export function log_invalid_utf16_sequence_test() { - near.logUtf16(bytes('\x00\x01\xff')) + near.logUtf16(bytes("\x00\x01\xff")); } export function storage_write_bytes() { - near.storageWrite(bytes('abc'), bytes('def')) - near.storageWrite(bytes('\x00\x01\xff'), bytes('\xe6\xb0\xb4')) - near.storageWrite(bytes('\xe6\xb0\xb4'), bytes('\x00ab')) + near.storageWrite(bytes("abc"), bytes("def")); + near.storageWrite(bytes("\x00\x01\xff"), bytes("\xe6\xb0\xb4")); + near.storageWrite(bytes("\xe6\xb0\xb4"), bytes("\x00ab")); } export function storage_write_unexpected_input() { - near.storageWrite('æ°´', 'æ°´') - near.storageWrite(123, 456) + near.storageWrite("æ°´", "æ°´"); + near.storageWrite(123, 456); } export function storage_read_ascii_bytes() { - near.valueReturn(near.storageRead(bytes('abc'))) + near.valueReturn(near.storageRead(bytes("abc"))); } export function storage_read_arbitrary_bytes_key_utf8_sequence_bytes_value() { - near.valueReturn(near.storageRead(bytes('\x00\x01\xff'))) + near.valueReturn(near.storageRead(bytes("\x00\x01\xff"))); } export function storage_read_utf8_sequence_bytes_key_arbitrary_bytes_value() { - near.valueReturn(near.storageRead(bytes('\xe6\xb0\xb4'))) + near.valueReturn(near.storageRead(bytes("\xe6\xb0\xb4"))); } export function panic_test() { - throw Error() + throw Error(); } export function panic_ascii_test() { - throw Error('abc') + throw Error("abc"); } export function panic_js_number() { - throw Error(356) + throw Error(356); } export function panic_js_undefined() { - throw Error(undefined) + throw Error(undefined); } export function panic_js_null() { - throw Error(null) + throw Error(null); } export function panic_utf8_test() { - throw Error('æ°´') + throw Error("æ°´"); } export function panicUtf8_valid_utf8_sequence() { - near.panicUtf8(bytes('\xe6\xb0\xb4')) + near.panicUtf8(bytes("\xe6\xb0\xb4")); } export function panicUtf8_invalid_utf8_sequence() { - near.panicUtf8(bytes('\x00\x01\xff')) + near.panicUtf8(bytes("\x00\x01\xff")); } diff --git a/tests/src/context_api.js b/tests/src/context_api.js index ff1c9887..9560fcdd 100644 --- a/tests/src/context_api.js +++ b/tests/src/context_api.js @@ -1,39 +1,39 @@ -import { near } from 'near-sdk-js' +import { near } from "near-sdk-js"; export function get_current_account_id() { - near.valueReturn(near.currentAccountId()) + near.valueReturn(near.currentAccountId()); } export function get_signer_account_id() { - near.valueReturn(near.signerAccountId()) + near.valueReturn(near.signerAccountId()); } export function get_predecessor_account_id() { - near.valueReturn(near.predecessorAccountId()) + near.valueReturn(near.predecessorAccountId()); } export function get_signer_account_pk() { - near.valueReturn(near.signerAccountPk()) + near.valueReturn(near.signerAccountPk()); } export function get_input() { - near.valueReturn(near.input()) + near.valueReturn(near.input()); } export function get_storage_usage() { - near.valueReturn(near.storageUsage()) + near.valueReturn(near.storageUsage()); } export function get_block_height() { - near.valueReturn(near.blockHeight()) + near.valueReturn(near.blockHeight()); } export function get_block_timestamp() { - near.valueReturn(near.blockTimestamp()) + near.valueReturn(near.blockTimestamp()); } export function get_epoch_height() { - near.valueReturn(near.epochHeight()) + near.valueReturn(near.epochHeight()); } export function get_attached_deposit() { @@ -41,21 +41,21 @@ export function get_attached_deposit() { } export function get_prepaid_gas() { - near.valueReturn(near.prepaidGas()) + near.valueReturn(near.prepaidGas()); } export function get_used_gas() { - near.valueReturn(near.usedGas()) + near.valueReturn(near.usedGas()); } export function get_random_seed() { - near.valueReturn(near.randomSeed()) + near.valueReturn(near.randomSeed()); } export function get_validator_stake() { - near.valueReturn(near.validatorStake(near.signerAccountId())) + near.valueReturn(near.validatorStake(near.signerAccountId())); } export function get_total_stake() { - near.valueReturn(near.validatorTotalStake()) + near.valueReturn(near.validatorTotalStake()); } diff --git a/tests/src/decorators/payable.ts b/tests/src/decorators/payable.ts index 374f2ca4..5400aaf4 100644 --- a/tests/src/decorators/payable.ts +++ b/tests/src/decorators/payable.ts @@ -1,33 +1,33 @@ -import { near, NearBindgen, call, view } from 'near-sdk-js' +import { near, NearBindgen, call, view } from "near-sdk-js"; @NearBindgen({}) export class PayableTest { value: string; constructor() { - this.value = '' + this.value = ""; } @call({ payableFunction: true }) setValueWithPayableFunction({ value }: { value: string }): void { - near.log(`payableFunction: ${value}`) - this.value = value + near.log(`payableFunction: ${value}`); + this.value = value; } @call({ payableFunction: false }) setValueWithNotPayableFunction({ value }: { value: string }): void { - near.log(`notPayableFunction: ${value}`) - this.value = value + near.log(`notPayableFunction: ${value}`); + this.value = value; } @call({}) setValueWithNotPayableFunctionByDefault({ value }: { value: string }): void { - near.log(`notPayableFunctionDefault: ${value}`) - this.value = value + near.log(`notPayableFunctionDefault: ${value}`); + this.value = value; } @view({}) getValue(): string { - return this.value + return this.value; } } diff --git a/tests/src/decorators/private.ts b/tests/src/decorators/private.ts index a1d0dcbb..cad023db 100644 --- a/tests/src/decorators/private.ts +++ b/tests/src/decorators/private.ts @@ -1,33 +1,33 @@ -import { near, NearBindgen, call, view } from 'near-sdk-js' +import { near, NearBindgen, call, view } from "near-sdk-js"; @NearBindgen({}) export class PrivateTest { value: string; constructor() { - this.value = '' + this.value = ""; } @call({ privateFunction: true }) setValueWithPrivateFunction({ value }: { value: string }): void { - near.log(`setValueWithPrivateFunction: ${value}`) - this.value = value + near.log(`setValueWithPrivateFunction: ${value}`); + this.value = value; } @call({ privateFunction: false }) setValueWithNotPrivateFunction({ value }: { value: string }): void { - near.log(`setValueWithNotPrivateFunction: ${value}`) - this.value = value + near.log(`setValueWithNotPrivateFunction: ${value}`); + this.value = value; } @call({}) setValueWithNotPrivateFunctionByDefault({ value }: { value: string }): void { - near.log(`setValueWithNotPrivateFunctionByDefault: ${value}`) - this.value = value + near.log(`setValueWithNotPrivateFunctionByDefault: ${value}`); + this.value = value; } @view({}) getValue(): string { - return this.value + return this.value; } } diff --git a/tests/src/decorators/require_init_false.ts b/tests/src/decorators/require_init_false.ts index e221982e..5c24c597 100644 --- a/tests/src/decorators/require_init_false.ts +++ b/tests/src/decorators/require_init_false.ts @@ -1,28 +1,28 @@ -import { near, NearBindgen, call, view, initialize } from 'near-sdk-js' +import { near, NearBindgen, call, view, initialize } from "near-sdk-js"; @NearBindgen({ requireInit: false }) export class NBTest { status: string; constructor() { - this.status = '' + this.status = ""; } @initialize({}) init({ status }: { status: string }): void { - near.log(`init: ${status}`) - this.status = status + near.log(`init: ${status}`); + this.status = status; } @view({}) getStatus(): string { - near.log(`getStatus: ${this.status}`) - return this.status + near.log(`getStatus: ${this.status}`); + return this.status; } @call({}) setStatus({ status }: { status: string }): void { - near.log(`setStatus: ${status}`) - this.status = status + near.log(`setStatus: ${status}`); + this.status = status; } } diff --git a/tests/src/decorators/require_init_true.ts b/tests/src/decorators/require_init_true.ts index ea29d7aa..6d813619 100644 --- a/tests/src/decorators/require_init_true.ts +++ b/tests/src/decorators/require_init_true.ts @@ -1,28 +1,28 @@ -import { near, NearBindgen, call, view, initialize } from 'near-sdk-js' +import { near, NearBindgen, call, view, initialize } from "near-sdk-js"; @NearBindgen({ requireInit: true }) export class NBTest { status: string; constructor() { - this.status = '' + this.status = ""; } @initialize({}) init({ status }: { status: string }): void { - near.log(`init: ${status}`) - this.status = status + near.log(`init: ${status}`); + this.status = status; } @view({}) getStatus(): string { - near.log(`getStatus: ${this.status}`) - return this.status + near.log(`getStatus: ${this.status}`); + return this.status; } @call({}) setStatus({ status }: { status: string }): void { - near.log(`setStatus: ${status}`) - this.status = status + near.log(`setStatus: ${status}`); + this.status = status; } } diff --git a/tests/src/function-params.js b/tests/src/function-params.js index 98bf026f..18253ea1 100644 --- a/tests/src/function-params.js +++ b/tests/src/function-params.js @@ -1,4 +1,4 @@ -import { NearBindgen, call, view, near } from 'near-sdk-js' +import { NearBindgen, call, view, near } from "near-sdk-js"; /** * Simple contract to test function parameters @@ -6,21 +6,21 @@ import { NearBindgen, call, view, near } from 'near-sdk-js' @NearBindgen({}) export class FunctionParamsTestContract { constructor() { - this.val1 = 'default1' - this.val2 = 'default2' - this.val3 = 'default3' + this.val1 = "default1"; + this.val2 = "default2"; + this.val3 = "default3"; } @call({}) set_values({ param1, param2, param3 }) { - near.log(JSON.stringify({ param1, param2, param3 })) - this.val1 = param1 - this.val2 = param2 - this.val3 = param3 + near.log(JSON.stringify({ param1, param2, param3 })); + this.val1 = param1; + this.val2 = param2; + this.val3 = param3; } @view({}) get_values() { - return { val3: this.val3, val2: this.val2, val1: this.val1 } + return { val3: this.val3, val2: this.val2, val1: this.val1 }; } } diff --git a/tests/src/highlevel-promise.js b/tests/src/highlevel-promise.js index ce57c381..0743a0c4 100644 --- a/tests/src/highlevel-promise.js +++ b/tests/src/highlevel-promise.js @@ -7,112 +7,121 @@ function callingData() { signerAccountId: near.signerAccountId(), predecessorAccountId: near.predecessorAccountId(), input: near.input(), - } + }; } function arrayN(n) { - return [...Array(Number(n)).keys()] + return [...Array(Number(n)).keys()]; } @NearBindgen({}) export class HighlevelPromiseContract { @call({}) test_promise_batch_stake() { - let promise = NearPromise.new('highlevel-promise.test.near').stake( + let promise = NearPromise.new("highlevel-promise.test.near").stake( 100000000000000000000000000000n, new PublicKey(near.signerAccountPk()) - ) + ); - return promise + return promise; } @call({}) test_promise_batch_create_transfer() { - let promise = NearPromise.new('a.highlevel-promise.test.near').createAccount().transfer(10000000000000000000000000n) - return promise + let promise = NearPromise.new("a.highlevel-promise.test.near") + .createAccount() + .transfer(10000000000000000000000000n); + return promise; } @call({}) test_promise_add_full_access_key() { - let promise = NearPromise.new('c.highlevel-promise.test.near') + let promise = NearPromise.new("c.highlevel-promise.test.near") .createAccount() .transfer(10000000000000000000000000n) - .addFullAccessKey(new PublicKey(near.signerAccountPk())) - return promise + .addFullAccessKey(new PublicKey(near.signerAccountPk())); + return promise; } @call({}) test_promise_add_function_call_access_key() { - let promise = NearPromise.new('d.highlevel-promise.test.near') + let promise = NearPromise.new("d.highlevel-promise.test.near") .createAccount() .transfer(10000000000000000000000000n) .addAccessKey( new PublicKey(near.signerAccountPk()), 250000000000000000000000n, - 'highlevel-promise.test.near', - 'test_promise_batch_create_transfer' - ) - return promise + "highlevel-promise.test.near", + "test_promise_batch_create_transfer" + ); + return promise; } @call({}) test_delete_account() { - let promise = NearPromise.new('e.highlevel-promise.test.near') + let promise = NearPromise.new("e.highlevel-promise.test.near") .createAccount() .transfer(10000000000000000000000000n) - .deleteAccount(near.signerAccountId()) - return promise + .deleteAccount(near.signerAccountId()); + return promise; } @call({}) test_promise_then() { - let promise = NearPromise.new('callee-contract.test.near') - .functionCall('cross_contract_callee', bytes('abc'), 0, 2 * Math.pow(10, 13)) + let promise = NearPromise.new("callee-contract.test.near") + .functionCall( + "cross_contract_callee", + bytes("abc"), + 0, + 2 * Math.pow(10, 13) + ) .then( - NearPromise.new('highlevel-promise.test.near').functionCall( - 'cross_contract_callback', - bytes(JSON.stringify({ callbackArg1: 'def' })), + NearPromise.new("highlevel-promise.test.near").functionCall( + "cross_contract_callback", + bytes(JSON.stringify({ callbackArg1: "def" })), 0, 2 * Math.pow(10, 13) ) - ) - return promise + ); + return promise; } @call({}) test_promise_and() { - let promise = NearPromise.new('callee-contract.test.near').functionCall( - 'cross_contract_callee', - bytes('abc'), + let promise = NearPromise.new("callee-contract.test.near").functionCall( + "cross_contract_callee", + bytes("abc"), 0, 2 * Math.pow(10, 13) - ) - let promise2 = NearPromise.new('callee-contract.test.near').functionCall( - 'cross_contract_callee', - bytes('def'), + ); + let promise2 = NearPromise.new("callee-contract.test.near").functionCall( + "cross_contract_callee", + bytes("def"), 0, 2 * Math.pow(10, 13) - ) + ); let retPromise = promise .and(promise2) .then( - NearPromise.new('highlevel-promise.test.near').functionCall( - 'cross_contract_callback', - bytes(JSON.stringify({ callbackArg1: 'ghi' })), + NearPromise.new("highlevel-promise.test.near").functionCall( + "cross_contract_callback", + bytes(JSON.stringify({ callbackArg1: "ghi" })), 0, 3 * Math.pow(10, 13) ) - ) + ); - return retPromise + return retPromise; } @call({}) cross_contract_callback({ callbackArg1 }) { return { ...callingData(), - promiseResults: arrayN(near.promiseResultsCount()).map((i) => near.promiseResult(i)), + promiseResults: arrayN(near.promiseResultsCount()).map((i) => + near.promiseResult(i) + ), callbackArg1, - } + }; } } diff --git a/tests/src/log_panic_api.js b/tests/src/log_panic_api.js index 4a8ce9d1..868ccd48 100644 --- a/tests/src/log_panic_api.js +++ b/tests/src/log_panic_api.js @@ -1,66 +1,66 @@ -import { near, bytes } from 'near-sdk-js' +import { near, bytes } from "near-sdk-js"; export function log_expected_input_tests() { // log ascii string - near.log('abc') + near.log("abc"); // log string with utf-8 chars - near.log('æ°´') + near.log("æ°´"); // log number - near.log(333) + near.log(333); // log aribrary byte sequence - near.log(bytes('\x00\x01\xff')) + near.log(bytes("\x00\x01\xff")); // log valid utf8 seqence - near.log(bytes('\xe6\xb0\xb4')) + near.log(bytes("\xe6\xb0\xb4")); // log valid utf8 sequence - near.logUtf8(bytes('\xe6\xb0\xb4')) + near.logUtf8(bytes("\xe6\xb0\xb4")); // log valid utf16 sequence - near.logUtf16(bytes('\x34\x6c')) + near.logUtf16(bytes("\x34\x6c")); } export function log_unexpected_input_tests() { // log non-bytes with logUtf8 - near.logUtf8('æ°´') + near.logUtf8("æ°´"); // log non-bytes with logUtf16 - near.logUtf16('æ°´') + near.logUtf16("æ°´"); } export function log_invalid_utf8_sequence_test() { - near.logUtf8(bytes('\x00\x01\xff')) + near.logUtf8(bytes("\x00\x01\xff")); } export function log_invalid_utf16_sequence_test() { - near.logUtf16(bytes('\x00\x01\xff')) + near.logUtf16(bytes("\x00\x01\xff")); } export function panic_test() { - throw Error() + throw Error(); } export function panic_ascii_test() { - throw Error('abc') + throw Error("abc"); } export function panic_js_number() { - throw Error(356) + throw Error(356); } export function panic_js_undefined() { - throw Error(undefined) + throw Error(undefined); } export function panic_js_null() { - throw Error(null) + throw Error(null); } export function panic_utf8_test() { - throw Error('æ°´') + throw Error("æ°´"); } export function panicUtf8_valid_utf8_sequence() { - near.panicUtf8(bytes('\xe6\xb0\xb4')) + near.panicUtf8(bytes("\xe6\xb0\xb4")); } export function panicUtf8_invalid_utf8_sequence() { - near.panicUtf8(bytes('\x00\x01\xff')) + near.panicUtf8(bytes("\x00\x01\xff")); } diff --git a/tests/src/lookup-map.js b/tests/src/lookup-map.js index 20998fe7..2f7cc382 100644 --- a/tests/src/lookup-map.js +++ b/tests/src/lookup-map.js @@ -1,49 +1,55 @@ -import { NearBindgen, call, view, LookupMap } from 'near-sdk-js' -import { House, Room } from './model.js' +import { NearBindgen, call, view, LookupMap } from "near-sdk-js"; +import { House, Room } from "./model.js"; @NearBindgen({}) export class LookupMapTestContract { constructor() { - this.lookupMap = new LookupMap('a') + this.lookupMap = new LookupMap("a"); } @view({}) get({ key }) { - return this.lookupMap.get(key) + return this.lookupMap.get(key); } @view({}) containsKey({ key }) { - return this.lookupMap.containsKey(key) + return this.lookupMap.containsKey(key); } @call({}) set({ key, value }) { - this.lookupMap.set(key, value) + this.lookupMap.set(key, value); } @call({}) remove_key({ key }) { - this.lookupMap.remove(key) + this.lookupMap.remove(key); } @call({}) extend({ kvs }) { - this.lookupMap.extend(kvs) + this.lookupMap.extend(kvs); } @call({}) add_house() { - this.lookupMap.set('house1', new House('house1', [new Room('room1', '200sqft'), new Room('room2', '300sqft')])) + this.lookupMap.set( + "house1", + new House("house1", [ + new Room("room1", "200sqft"), + new Room("room2", "300sqft"), + ]) + ); } @view({}) get_house() { - const houseObject = this.lookupMap.get('house1') + const houseObject = this.lookupMap.get("house1"); // restore class object from serialized data - const house = new House(houseObject.name, houseObject.rooms) - const roomObject = house.rooms[0] - const room = new Room(roomObject.name, roomObject.size) - return house.describe() + room.describe() + const house = new House(houseObject.name, houseObject.rooms); + const roomObject = house.rooms[0]; + const room = new Room(roomObject.name, roomObject.size); + return house.describe() + room.describe(); } } diff --git a/tests/src/lookup-set.js b/tests/src/lookup-set.js index eab2ff0a..f5dc9d2a 100644 --- a/tests/src/lookup-set.js +++ b/tests/src/lookup-set.js @@ -1,47 +1,47 @@ -import { NearBindgen, call, view, LookupSet } from 'near-sdk-js' -import { House, Room } from './model.js' +import { NearBindgen, call, view, LookupSet } from "near-sdk-js"; +import { House, Room } from "./model.js"; @NearBindgen({}) export class LookupSetTestContract { constructor() { - this.lookupSet = new LookupSet('a') + this.lookupSet = new LookupSet("a"); } @view({}) contains({ key }) { - return this.lookupSet.contains(key) + return this.lookupSet.contains(key); } @call({}) set({ key }) { - this.lookupSet.set(key) + this.lookupSet.set(key); } @call({}) remove_key({ key }) { - this.lookupSet.remove(key) + this.lookupSet.remove(key); } @call({}) extend({ keys }) { - this.lookupSet.extend(keys) + this.lookupSet.extend(keys); } @call({}) add_house({ name, rooms }) { - let house = new House(name, []) + let house = new House(name, []); for (let r of rooms) { - house.rooms.push(new Room(r.name, r.size)) + house.rooms.push(new Room(r.name, r.size)); } - this.lookupSet.set(house) + this.lookupSet.set(house); } @view({}) house_exist({ name, rooms }) { - let house = new House(name, []) + let house = new House(name, []); for (let r of rooms) { - house.rooms.push(new Room(r.name, r.size)) + house.rooms.push(new Room(r.name, r.size)); } - return this.lookupSet.contains(house) + return this.lookupSet.contains(house); } } diff --git a/tests/src/math_api.js b/tests/src/math_api.js index 0e3a7f6f..93d2d72d 100644 --- a/tests/src/math_api.js +++ b/tests/src/math_api.js @@ -1,37 +1,39 @@ -import { near, bytes } from 'near-sdk-js' +import { near, bytes } from "near-sdk-js"; export function test_sha256() { - near.valueReturn(near.sha256(bytes('tesdsst'))) + near.valueReturn(near.sha256(bytes("tesdsst"))); } export function test_keccak256() { - near.valueReturn(near.keccak256(bytes('tesdsst'))) + near.valueReturn(near.keccak256(bytes("tesdsst"))); } export function test_keccak512() { - near.valueReturn(near.keccak512(bytes('tesdsst'))) + near.valueReturn(near.keccak512(bytes("tesdsst"))); } export function test_ripemd160() { - near.valueReturn(near.ripemd160(bytes('tesdsst'))) + near.valueReturn(near.ripemd160(bytes("tesdsst"))); } export function test_ecrecover() { let hash = bytes( new Uint8Array([ - 206, 6, 119, 187, 48, 186, 168, 207, 6, 124, 136, 219, 152, 17, 244, 51, 61, 19, 27, 248, 188, 241, 47, 231, 6, - 93, 33, 29, 206, 151, 16, 8, + 206, 6, 119, 187, 48, 186, 168, 207, 6, 124, 136, 219, 152, 17, 244, 51, + 61, 19, 27, 248, 188, 241, 47, 231, 6, 93, 33, 29, 206, 151, 16, 8, ]) - ) + ); let sign = bytes( new Uint8Array([ - 144, 242, 123, 139, 72, 141, 176, 11, 0, 96, 103, 150, 210, 152, 127, 106, 95, 89, 174, 98, 234, 5, 239, 254, 132, - 254, 245, 184, 176, 229, 73, 152, 74, 105, 17, 57, 173, 87, 163, 240, 185, 6, 99, 118, 115, 170, 47, 99, 209, 245, - 92, 177, 166, 145, 153, 212, 0, 158, 234, 35, 206, 173, 220, 147, + 144, 242, 123, 139, 72, 141, 176, 11, 0, 96, 103, 150, 210, 152, 127, 106, + 95, 89, 174, 98, 234, 5, 239, 254, 132, 254, 245, 184, 176, 229, 73, 152, + 74, 105, 17, 57, 173, 87, 163, 240, 185, 6, 99, 118, 115, 170, 47, 99, + 209, 245, 92, 177, 166, 145, 153, 212, 0, 158, 234, 35, 206, 173, 220, + 147, ]) - ) - let v = 1 - let malleabilityFlag = 1 - let ret = near.ecrecover(hash, sign, v, malleabilityFlag) - near.valueReturn(ret) + ); + let v = 1; + let malleabilityFlag = 1; + let ret = near.ecrecover(hash, sign, v, malleabilityFlag); + near.valueReturn(ret); } diff --git a/tests/src/model.js b/tests/src/model.js index 7fd4593b..28e4e72d 100644 --- a/tests/src/model.js +++ b/tests/src/model.js @@ -1,21 +1,21 @@ export class House { constructor(name, rooms) { - this.name = name - this.rooms = rooms + this.name = name; + this.rooms = rooms; } describe() { - return `house ${this.name} has ${this.rooms.length} rooms. ` + return `house ${this.name} has ${this.rooms.length} rooms. `; } } export class Room { constructor(name, size) { - this.name = name - this.size = size + this.name = name; + this.size = size; } describe() { - return `room ${this.name} is ${this.size}.` + return `room ${this.name} is ${this.size}.`; } } diff --git a/tests/src/promise_api.js b/tests/src/promise_api.js index 928d3c80..fadc6721 100644 --- a/tests/src/promise_api.js +++ b/tests/src/promise_api.js @@ -1,7 +1,7 @@ -import { near, bytes } from 'near-sdk-js' +import { near, bytes } from "near-sdk-js"; function arrayN(n) { - return [...Array(Number(n)).keys()] + return [...Array(Number(n)).keys()]; } function callingData() { @@ -10,15 +10,15 @@ function callingData() { signerAccountId: near.signerAccountId(), predecessorAccountId: near.predecessorAccountId(), input: near.input(), - } + }; } export function cross_contract_callee() { - near.valueReturn(bytes(JSON.stringify(callingData()))) + near.valueReturn(bytes(JSON.stringify(callingData()))); } export function cross_contract_call_gas() { - near.valueReturn(bytes(near.prepaidGas().toString())) + near.valueReturn(bytes(near.prepaidGas().toString())); } export function cross_contract_callback() { @@ -26,60 +26,74 @@ export function cross_contract_callback() { bytes( JSON.stringify({ ...callingData(), - promiseResults: arrayN(near.promiseResultsCount()).map((i) => near.promiseResult(i)), + promiseResults: arrayN(near.promiseResultsCount()).map((i) => + near.promiseResult(i) + ), }) ) - ) + ); } export function test_promise_create() { - near.promiseCreate('callee-contract.test.near', 'cross_contract_callee', bytes('abc'), 0, 2 * Math.pow(10, 13)) + near.promiseCreate( + "callee-contract.test.near", + "cross_contract_callee", + bytes("abc"), + 0, + 2 * Math.pow(10, 13) + ); } export function test_promise_create_gas_overflow() { - near.promiseCreate('callee-contract.test.near', 'cross_contract_callee', bytes('abc'), 0, BigInt(2) ** BigInt(64)) + near.promiseCreate( + "callee-contract.test.near", + "cross_contract_callee", + bytes("abc"), + 0, + BigInt(2) ** BigInt(64) + ); } export function test_promise_then() { let promiseId = near.promiseCreate( - 'callee-contract.test.near', - 'cross_contract_callee', - bytes('abc'), + "callee-contract.test.near", + "cross_contract_callee", + bytes("abc"), 0, 2 * Math.pow(10, 13) - ) + ); near.promiseThen( promiseId, - 'caller-contract.test.near', - 'cross_contract_callback', - bytes('def'), + "caller-contract.test.near", + "cross_contract_callback", + bytes("def"), 0, 2 * Math.pow(10, 13) - ) + ); } export function test_promise_and() { let promiseId = near.promiseCreate( - 'callee-contract.test.near', - 'cross_contract_callee', - bytes('abc'), + "callee-contract.test.near", + "cross_contract_callee", + bytes("abc"), 0, 2 * Math.pow(10, 13) - ) + ); let promiseId2 = near.promiseCreate( - 'callee-contract.test.near', - 'cross_contract_callee', - bytes('def'), + "callee-contract.test.near", + "cross_contract_callee", + bytes("def"), 0, 2 * Math.pow(10, 13) - ) - let promiseIdAnd = near.promiseAnd(promiseId, promiseId2) + ); + let promiseIdAnd = near.promiseAnd(promiseId, promiseId2); near.promiseThen( promiseIdAnd, - 'caller-contract.test.near', - 'cross_contract_callback', - bytes('ghi'), + "caller-contract.test.near", + "cross_contract_callback", + bytes("ghi"), 0, 3 * Math.pow(10, 13) - ) + ); } diff --git a/tests/src/promise_batch_api.js b/tests/src/promise_batch_api.js index c51326ac..fe95d8ee 100644 --- a/tests/src/promise_batch_api.js +++ b/tests/src/promise_batch_api.js @@ -1,69 +1,93 @@ -import { near, bytes, includeBytes } from 'near-sdk-js' +import { near, bytes, includeBytes } from "near-sdk-js"; export function test_promise_batch_stake() { - let promiseId = near.promiseBatchCreate('caller2.test.near') - near.promiseBatchActionStake(promiseId, 100000000000000000000000000000n, near.signerAccountPk()) - near.promiseReturn(promiseId) + let promiseId = near.promiseBatchCreate("caller2.test.near"); + near.promiseBatchActionStake( + promiseId, + 100000000000000000000000000000n, + near.signerAccountPk() + ); + near.promiseReturn(promiseId); } export function test_transfer_overflow() { - let promiseId = near.promiseBatchCreate('c.caller2.test.near') - near.promiseBatchActionCreateAccount(promiseId) - near.promiseBatchActionTransfer(promiseId, BigInt(2) ** BigInt(128)) - near.promiseReturn(promiseId) + let promiseId = near.promiseBatchCreate("c.caller2.test.near"); + near.promiseBatchActionCreateAccount(promiseId); + near.promiseBatchActionTransfer(promiseId, BigInt(2) ** BigInt(128)); + near.promiseReturn(promiseId); } export function test_promise_add_full_access_key() { - let promiseId = near.promiseBatchCreate('c.caller2.test.near') - near.promiseBatchActionCreateAccount(promiseId) - near.promiseBatchActionTransfer(promiseId, 10000000000000000000000000n) - near.promiseBatchActionAddKeyWithFullAccess(promiseId, near.signerAccountPk(), 1n) - near.promiseReturn(promiseId) + let promiseId = near.promiseBatchCreate("c.caller2.test.near"); + near.promiseBatchActionCreateAccount(promiseId); + near.promiseBatchActionTransfer(promiseId, 10000000000000000000000000n); + near.promiseBatchActionAddKeyWithFullAccess( + promiseId, + near.signerAccountPk(), + 1n + ); + near.promiseReturn(promiseId); } export function test_delete_account() { - let promiseId = near.promiseBatchCreate('e.caller2.test.near') - near.promiseBatchActionCreateAccount(promiseId) - near.promiseBatchActionTransfer(promiseId, 10000000000000000000000000n) - near.promiseBatchActionDeleteAccount(promiseId, near.signerAccountId()) - near.promiseReturn(promiseId) + let promiseId = near.promiseBatchCreate("e.caller2.test.near"); + near.promiseBatchActionCreateAccount(promiseId); + near.promiseBatchActionTransfer(promiseId, 10000000000000000000000000n); + near.promiseBatchActionDeleteAccount(promiseId, near.signerAccountId()); + near.promiseReturn(promiseId); } export function test_promise_add_function_call_access_key() { - let promiseId = near.promiseBatchCreate('d.caller2.test.near') - near.promiseBatchActionCreateAccount(promiseId) - near.promiseBatchActionTransfer(promiseId, 10000000000000000000000000n) + let promiseId = near.promiseBatchCreate("d.caller2.test.near"); + near.promiseBatchActionCreateAccount(promiseId); + near.promiseBatchActionTransfer(promiseId, 10000000000000000000000000n); near.promiseBatchActionAddKeyWithFunctionCall( promiseId, near.signerAccountPk(), 1n, 250000000000000000000000n, - 'caller2.test.near', - 'test_promise_batch_create_transfer' - ) - near.promiseReturn(promiseId) + "caller2.test.near", + "test_promise_batch_create_transfer" + ); + near.promiseReturn(promiseId); } export function test_promise_batch_create_transfer() { - let promiseId = near.promiseBatchCreate('a.caller2.test.near') - near.promiseBatchActionCreateAccount(promiseId) - near.promiseBatchActionTransfer(promiseId, 10000000000000000000000000n) - near.promiseReturn(promiseId) + let promiseId = near.promiseBatchCreate("a.caller2.test.near"); + near.promiseBatchActionCreateAccount(promiseId); + near.promiseBatchActionTransfer(promiseId, 10000000000000000000000000n); + near.promiseReturn(promiseId); } export function test_promise_batch_call_weight() { - let promiseId = near.promiseBatchCreate('callee-contract.test.near') - near.promiseBatchActionFunctionCallWeight(promiseId, 'cross_contract_call_gas', bytes('abc'), 0, 0, 1) - near.promiseReturn(promiseId) + let promiseId = near.promiseBatchCreate("callee-contract.test.near"); + near.promiseBatchActionFunctionCallWeight( + promiseId, + "cross_contract_call_gas", + bytes("abc"), + 0, + 0, + 1 + ); + near.promiseReturn(promiseId); } export function test_promise_batch_deploy_call() { - let promiseId = near.promiseBatchCreate('b.caller2.test.near') - near.promiseBatchActionCreateAccount(promiseId) - near.promiseBatchActionTransfer(promiseId, 10000000000000000000000000n) + let promiseId = near.promiseBatchCreate("b.caller2.test.near"); + near.promiseBatchActionCreateAccount(promiseId); + near.promiseBatchActionTransfer(promiseId, 10000000000000000000000000n); // deploy content of promise_api.wasm to `b.caller2.test.near` // Note, we do not use `bytes()`, it's too expensive for long bytes and exceed gas limit - near.promiseBatchActionDeployContract(promiseId, includeBytes('../build/promise_api.wasm')) - near.promiseBatchActionFunctionCall(promiseId, 'cross_contract_callee', bytes('abc'), 0, 2 * Math.pow(10, 13)) - near.promiseReturn(promiseId) + near.promiseBatchActionDeployContract( + promiseId, + includeBytes("../build/promise_api.wasm") + ); + near.promiseBatchActionFunctionCall( + promiseId, + "cross_contract_callee", + bytes("abc"), + 0, + 2 * Math.pow(10, 13) + ); + near.promiseReturn(promiseId); } diff --git a/tests/src/public-key.js b/tests/src/public-key.js index 12856701..a62a6480 100644 --- a/tests/src/public-key.js +++ b/tests/src/public-key.js @@ -3,15 +3,15 @@ import { CurveType, PublicKey } from "near-sdk-js/lib/types"; import { assert } from "near-sdk-js/lib/utils"; function runtime_validate_public_key(prefix, public_key) { - let promiseId = near.promiseBatchCreate(prefix + '.pk.test.near') - near.promiseBatchActionCreateAccount(promiseId) - near.promiseBatchActionTransfer(promiseId, 10000000000000000000000000n) - near.promiseBatchActionAddKeyWithFullAccess(promiseId, public_key, 1n) - near.promiseReturn(promiseId) + let promiseId = near.promiseBatchCreate(prefix + ".pk.test.near"); + near.promiseBatchActionCreateAccount(promiseId); + near.promiseBatchActionTransfer(promiseId, 10000000000000000000000000n); + near.promiseBatchActionAddKeyWithFullAccess(promiseId, public_key, 1n); + near.promiseReturn(promiseId); } export function test_add_signer_key() { - runtime_validate_public_key('aa', near.signerAccountPk()) + runtime_validate_public_key("aa", near.signerAccountPk()); } export function test_add_ed25519_key_bytes() { @@ -21,18 +21,18 @@ export function test_add_ed25519_key_bytes() { // CurveType.ED25519 = 0 0, // ED25519 PublicKey data - 186, 44, 216, 49, 157, 48, 151, 47, 23, 244, 137, 69, 78, 150, 54, 42, 30, 248, 110, 26, 205, 18, 137, 154, 10, - 208, 26, 183, 65, 166, 223, 18, + 186, 44, 216, 49, 157, 48, 151, 47, 23, 244, 137, 69, 78, 150, 54, 42, + 30, 248, 110, 26, 205, 18, 137, 154, 10, 208, 26, 183, 65, 166, 223, 18, ]) ) - ) - runtime_validate_public_key('a', pk.data) + ); + runtime_validate_public_key("a", pk.data); } export function test_add_ed25519_key_string() { - let k = 'ed25519:DXkVZkHd7WUUejCK7i74uAoZWy1w9AZqshhTHxhmqHuB' - let pk = PublicKey.fromString(k) - runtime_validate_public_key('b', pk.data) + let k = "ed25519:DXkVZkHd7WUUejCK7i74uAoZWy1w9AZqshhTHxhmqHuB"; + let pk = PublicKey.fromString(k); + runtime_validate_public_key("b", pk.data); } export function test_add_secp256k1_key_bytes() { @@ -42,37 +42,45 @@ export function test_add_secp256k1_key_bytes() { // CurveType.SECP256K1 = 1 1, // SECP256K1 PublicKey data - 242, 86, 198, 230, 200, 11, 33, 63, 42, 160, 176, 23, 68, 35, 93, 81, 92, 89, 68, 53, 190, 101, 27, 21, 136, 58, - 16, 221, 71, 47, 166, 70, 206, 98, 234, 243, 103, 13, 197, 203, 145, 0, 160, 202, 42, 85, 178, 193, 71, 193, - 233, 163, 140, 228, 40, 135, 142, 125, 70, 225, 251, 113, 74, 153, + 242, 86, 198, 230, 200, 11, 33, 63, 42, 160, 176, 23, 68, 35, 93, 81, + 92, 89, 68, 53, 190, 101, 27, 21, 136, 58, 16, 221, 71, 47, 166, 70, + 206, 98, 234, 243, 103, 13, 197, 203, 145, 0, 160, 202, 42, 85, 178, + 193, 71, 193, 233, 163, 140, 228, 40, 135, 142, 125, 70, 225, 251, 113, + 74, 153, ]) ) - ) - runtime_validate_public_key('c', pk.data) + ); + runtime_validate_public_key("c", pk.data); } export function test_add_secp256k1_key_string() { - let k = 'secp256k1:5r22SrjrDvgY3wdQsnjgxkeAbU1VcM71FYvALEQWihjM3Xk4Be1CpETTqFccChQr4iJwDroSDVmgaWZv2AcXvYeL' - let pk = PublicKey.fromString(k) - runtime_validate_public_key('d', pk.data) + let k = + "secp256k1:5r22SrjrDvgY3wdQsnjgxkeAbU1VcM71FYvALEQWihjM3Xk4Be1CpETTqFccChQr4iJwDroSDVmgaWZv2AcXvYeL"; + let pk = PublicKey.fromString(k); + runtime_validate_public_key("d", pk.data); } export function add_invalid_public_key() { - runtime_validate_public_key('e', bytes(new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]))) + runtime_validate_public_key( + "e", + bytes(new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])) + ); } export function curve_type() { - assert(new PublicKey(near.signerAccountPk()).curveType() == CurveType.ED25519) + assert( + new PublicKey(near.signerAccountPk()).curveType() == CurveType.ED25519 + ); } export function create_invalid_curve_type() { - new PublicKey(bytes(new Uint8Array([2, 1]))) + new PublicKey(bytes(new Uint8Array([2, 1]))); } export function create_invalid_length() { - new PublicKey(bytes(new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]))) + new PublicKey(bytes(new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]))); } export function create_from_invalid_base58() { - PublicKey.fromString('ed25519:!@#$%^&*') + PublicKey.fromString("ed25519:!@#$%^&*"); } diff --git a/tests/src/storage_api.js b/tests/src/storage_api.js index 09136d5d..238257e8 100644 --- a/tests/src/storage_api.js +++ b/tests/src/storage_api.js @@ -1,23 +1,25 @@ -import { near, bytes } from 'near-sdk-js' +import { near, bytes } from "near-sdk-js"; export function test_storage_write() { - near.valueReturn(near.storageWrite(bytes('\x00tesdsst\xff'), bytes('\x00\x01\xff'))) + near.valueReturn( + near.storageWrite(bytes("\x00tesdsst\xff"), bytes("\x00\x01\xff")) + ); } export function test_storage_read() { - near.valueReturn(near.storageRead(bytes('\x00tesdsst\xff'))) + near.valueReturn(near.storageRead(bytes("\x00tesdsst\xff"))); } export function test_storage_remove() { - near.valueReturn(near.storageRemove(bytes('\x00tesdsst\xff'))) + near.valueReturn(near.storageRemove(bytes("\x00tesdsst\xff"))); } export function test_storage_has_key() { - near.valueReturn(near.storageHasKey(bytes('\x00tesdsst\xff'))) + near.valueReturn(near.storageHasKey(bytes("\x00tesdsst\xff"))); } export function test_storage_get_evicted() { - near.storageWrite(bytes('\x00tesdsst\xff'), bytes('\x00\x01\xff')) - near.storageWrite(bytes('\x00tesdsst\xff'), bytes('\x03\x01\xee')) - near.valueReturn(near.storageGetEvicted()) + near.storageWrite(bytes("\x00tesdsst\xff"), bytes("\x00\x01\xff")); + near.storageWrite(bytes("\x00tesdsst\xff"), bytes("\x03\x01\xee")); + near.valueReturn(near.storageGetEvicted()); } diff --git a/tests/src/typescript.ts b/tests/src/typescript.ts index ffb5c2df..294fa1b9 100644 --- a/tests/src/typescript.ts +++ b/tests/src/typescript.ts @@ -1,10 +1,10 @@ -import { NearBindgen, view } from 'near-sdk-js' +import { NearBindgen, view } from "near-sdk-js"; @NearBindgen({}) export class TypeScriptTestContract { @view({}) bigint() { // JSON.stringify cannot seriaize a BigInt, need manually toString - return (1n + 2n).toString() + return (1n + 2n).toString(); } } diff --git a/tests/src/unordered-map.js b/tests/src/unordered-map.js index f23d59c3..8658d795 100644 --- a/tests/src/unordered-map.js +++ b/tests/src/unordered-map.js @@ -4,64 +4,70 @@ import { House, Room } from "./model.js"; @NearBindgen({}) export class UnorderedMapTestContract { constructor() { - this.unorderedMap = new UnorderedMap('a') + this.unorderedMap = new UnorderedMap("a"); } @view({}) len() { - return this.unorderedMap.length + return this.unorderedMap.length; } @view({}) isEmpty() { - return this.unorderedMap.isEmpty() + return this.unorderedMap.isEmpty(); } @view({}) get({ key }) { - return this.unorderedMap.get(key) + return this.unorderedMap.get(key); } @call({}) set({ key, value }) { - this.unorderedMap.set(key, value) + this.unorderedMap.set(key, value); } @call({}) remove_key({ key }) { - this.unorderedMap.remove(key) + this.unorderedMap.remove(key); } @call({}) clear() { - this.unorderedMap.clear() + this.unorderedMap.clear(); } @view({}) toArray() { - return this.unorderedMap.toArray() + return this.unorderedMap.toArray(); } @call({}) extend({ kvs }) { - this.unorderedMap.extend(kvs) + this.unorderedMap.extend(kvs); } @call({}) add_house() { - this.unorderedMap.set('house1', new House('house1', [new Room('room1', '200sqft'), new Room('room2', '300sqft')])) + this.unorderedMap.set( + "house1", + new House("house1", [ + new Room("room1", "200sqft"), + new Room("room2", "300sqft"), + ]) + ); } @view({}) get_house() { - const house = this.unorderedMap.get('house1', { + const house = this.unorderedMap.get("house1", { reconstructor: (rawHouse) => new House( rawHouse.name, rawHouse.rooms.map((rawRoom) => new Room(rawRoom.name, rawRoom.size)) ), - }) - const room = house.rooms[0] - return house.describe() + room.describe() + }); + const room = house.rooms[0]; + return house.describe() + room.describe(); } } diff --git a/tests/src/unordered-set.js b/tests/src/unordered-set.js index b56ea5cd..1637dc95 100644 --- a/tests/src/unordered-set.js +++ b/tests/src/unordered-set.js @@ -1,68 +1,68 @@ -import { NearBindgen, call, view, UnorderedSet } from 'near-sdk-js' -import { House, Room } from './model.js' +import { NearBindgen, call, view, UnorderedSet } from "near-sdk-js"; +import { House, Room } from "./model.js"; @NearBindgen({}) export class UnorderedSetTestContract { constructor() { - this.unorderedSet = new UnorderedSet('a') + this.unorderedSet = new UnorderedSet("a"); } @view({}) len() { - return this.unorderedSet.length + return this.unorderedSet.length; } @view({}) isEmpty() { - return this.unorderedSet.isEmpty() + return this.unorderedSet.isEmpty(); } @view({}) contains({ element }) { - return this.unorderedSet.contains(element) + return this.unorderedSet.contains(element); } @call({}) set({ element }) { - this.unorderedSet.set(element) + this.unorderedSet.set(element); } @call({}) remove_key({ element }) { - this.unorderedSet.remove(element) + this.unorderedSet.remove(element); } @call({}) clear() { - this.unorderedSet.clear() + this.unorderedSet.clear(); } @view({}) toArray() { - const res = this.unorderedSet.toArray() - return res + const res = this.unorderedSet.toArray(); + return res; } @call({}) extend({ elements }) { - this.unorderedSet.extend(elements) + this.unorderedSet.extend(elements); } @call({}) add_house({ name, rooms }) { - let house = new House(name, []) + let house = new House(name, []); for (let r of rooms) { - house.rooms.push(new Room(r.name, r.size)) + house.rooms.push(new Room(r.name, r.size)); } - this.unorderedSet.set(house) + this.unorderedSet.set(house); } @view({}) house_exist({ name, rooms }) { - let house = new House(name, []) + let house = new House(name, []); for (let r of rooms) { - house.rooms.push(new Room(r.name, r.size)) + house.rooms.push(new Room(r.name, r.size)); } - return this.unorderedSet.contains(house) + return this.unorderedSet.contains(house); } } diff --git a/tests/src/vector.js b/tests/src/vector.js index 0033d41b..d1f87378 100644 --- a/tests/src/vector.js +++ b/tests/src/vector.js @@ -1,69 +1,74 @@ -import { NearBindgen, call, view, Vector } from 'near-sdk-js' -import { House, Room } from './model.js' +import { NearBindgen, call, view, Vector } from "near-sdk-js"; +import { House, Room } from "./model.js"; @NearBindgen({}) export class VectorTestContract { constructor() { - this.vector = new Vector('a') + this.vector = new Vector("a"); } @view({}) len() { - return this.vector.length + return this.vector.length; } @view({}) isEmpty() { - return this.vector.isEmpty() + return this.vector.isEmpty(); } @view({}) get({ index }) { - return this.vector.get(index) + return this.vector.get(index); } @call({}) push({ value }) { - this.vector.push(value) + this.vector.push(value); } @call({}) pop() { - this.vector.pop() + this.vector.pop(); } @call({}) clear() { - this.vector.clear() + this.vector.clear(); } @view({}) toArray() { - return this.vector.toArray() + return this.vector.toArray(); } @call({}) extend({ kvs }) { - this.vector.extend(kvs) + this.vector.extend(kvs); } @call({}) replace({ index, value }) { - this.vector.replace(index, value) + this.vector.replace(index, value); } @call({}) swapRemove({ index }) { - this.vector.swapRemove(index) + this.vector.swapRemove(index); } @call({}) add_house() { - this.vector.push(new House('house1', [new Room('room1', '200sqft'), new Room('room2', '300sqft')])) + this.vector.push( + new House("house1", [ + new Room("room1", "200sqft"), + new Room("room2", "300sqft"), + ]) + ); } @view({}) get_house() { - return this.vector.get(0) + return this.vector.get(0); } } From 3ae3573a89d687804295377eece31af960b685e4 Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Thu, 13 Oct 2022 11:08:38 +0800 Subject: [PATCH 13/44] remove cli --- cli/cli.js | 162 ------------------------------------------- cli/save_bytecode.js | 29 -------- cli/utils.js | 24 ------- cli/wasm_to_bytes.js | 20 ------ 4 files changed, 235 deletions(-) delete mode 100755 cli/cli.js delete mode 100644 cli/save_bytecode.js delete mode 100644 cli/utils.js delete mode 100644 cli/wasm_to_bytes.js diff --git a/cli/cli.js b/cli/cli.js deleted file mode 100755 index de3ee3fb..00000000 --- a/cli/cli.js +++ /dev/null @@ -1,162 +0,0 @@ -#!/usr/bin/env node - -import fs from 'fs/promises' -import path from 'path' - -import yargs from 'yargs' -import { hideBin } from 'yargs/helpers' - -import { nodeResolve } from '@rollup/plugin-node-resolve' -import sourcemaps from 'rollup-plugin-sourcemaps' -import { babel } from '@rollup/plugin-babel' -import { rollup } from 'rollup' - -import { executeCommand } from './utils.js' - -const PROJECT_DIR = process.cwd() -const NEAR_SDK_JS = 'node_modules/near-sdk-js' -const TSC = 'node_modules/.bin/tsc' -const QJSC_DIR = `${NEAR_SDK_JS}/cli/deps/quickjs` -const QJSC = `${NEAR_SDK_JS}/cli/deps/qjsc` - -yargs(hideBin(process.argv)) - .scriptName('near-sdk-js') - .usage('$0 [args]') - .command( - 'build [source] [target]', - 'Build NEAR JS Smart-contract', - (yargs) => { - yargs - .positional('source', { - type: 'string', - default: 'src/index.js', - describe: 'Contract to build', - }) - .positional('target', { - type: 'string', - default: 'build/contract.wasm', - describe: 'Target file path and name', - }) - }, - build - ) - .help().argv - -async function build(argv) { - const SOURCE_FILE_WITH_PATH = argv.source - const SOURCE_EXT = argv.source.split('.').pop() - const TARGET_DIR = path.dirname(argv.target) - const TARGET_EXT = argv.target.split('.').pop() - const TARGET_FILE_NAME = path.basename(argv.target, `.${TARGET_EXT}`) - - if ('wasm' !== TARGET_EXT) { - throw new Error(`Unsupported target ${TARGET_EXT}, make sure target ends with .wasm`) - } - - const ROLLUP_TARGET = `${TARGET_DIR}/${TARGET_FILE_NAME}.js` - const QJSC_TARGET = `${TARGET_DIR}/${TARGET_FILE_NAME}.h` - const CONTRACT_TARGET = `${TARGET_DIR}/${TARGET_FILE_NAME}.wasm` - - console.log(`Building ${SOURCE_FILE_WITH_PATH} contract...`) - - if (SOURCE_EXT === 'ts') { - await checkTsBuildWithTsc(SOURCE_FILE_WITH_PATH) - } - - console.log(`Creating ${TARGET_DIR} directory...`) - await executeCommand(`mkdir -p ${TARGET_DIR}`) - - await createJsFileWithRullup(SOURCE_FILE_WITH_PATH, ROLLUP_TARGET) - - await createHeaderFileWithQjsc(ROLLUP_TARGET, QJSC_TARGET) - - await createMethodsHeaderFile(ROLLUP_TARGET) - await createWasmContract(QJSC_TARGET, CONTRACT_TARGET) - await wasiStubContract(CONTRACT_TARGET) -} - -async function checkTsBuildWithTsc(sourceFileWithPath) { - console.log(`check TypeScript build of ${sourceFileWithPath} with tsc`) - await executeCommand( - `${TSC} --noEmit --experimentalDecorators --target es2020 --moduleResolution node ${sourceFileWithPath}` - ) -} - -// Common build function -async function createJsFileWithRullup(sourceFileWithPath, rollupTarget) { - console.log(`Creating ${rollupTarget} file with Rollup...`) - const bundle = await rollup({ - input: sourceFileWithPath, - plugins: [ - nodeResolve({ - extensions: ['.js', '.ts'], - }), - sourcemaps(), - // commonjs(), - babel({ - babelHelpers: 'bundled', - extensions: ['.ts', '.js', '.jsx', '.es6', '.es', '.mjs'], - }), - ], - }) - - await bundle.write({ - sourcemap: true, - file: rollupTarget, - format: 'es', - }) -} - -async function createHeaderFileWithQjsc(rollupTarget, qjscTarget) { - console.log(`Creating ${qjscTarget} file with QJSC...`) - await executeCommand(`${QJSC} -c -m -o ${qjscTarget} -N code ${rollupTarget}`) -} - -async function createMethodsHeaderFile(rollupTarget) { - console.log(`Genereting methods.h file`) - - const source = rollupTarget - const buildPath = path.dirname(source) - - console.log(rollupTarget) - - const mod = await import(`${PROJECT_DIR}/${rollupTarget}`) - const exportNames = Object.keys(mod) - const methods = exportNames.reduce((result, key) => `${result}DEFINE_NEAR_METHOD(${key})\n`, '') - - await fs.writeFile(`${buildPath}/methods.h`, methods) -} - -async function createWasmContract(qjscTarget, contractTarget) { - console.log(`Creating ${contractTarget} contract...`) - const WASI_SDK_PATH = `${NEAR_SDK_JS}/cli/deps/wasi-sdk` - - const CC = `${WASI_SDK_PATH}/bin/clang --sysroot=${WASI_SDK_PATH}/share/wasi-sysroot` - let DEFS = `-D_GNU_SOURCE '-DCONFIG_VERSION="2021-03-27"' -DCONFIG_BIGNUM` - - if (process.env.NEAR_NIGHTLY) { - DEFS = DEFS + ' -DNIGHTLY' - } - - const INCLUDES = `-I${QJSC_DIR} -I.` - const ORIGINAL_BUILDER_PATH = `${NEAR_SDK_JS}/cli/builder/builder.c` - const NEW_BUILDER_PATH = `${path.dirname(contractTarget)}/builder.c` - const SOURCES = `${NEW_BUILDER_PATH} ${QJSC_DIR}/quickjs.c ${QJSC_DIR}/libregexp.c ${QJSC_DIR}/libunicode.c ${QJSC_DIR}/cutils.c ${QJSC_DIR}/quickjs-libc-min.c ${QJSC_DIR}/libbf.c` - const LIBS = `-lm` - - // copying builder.c file to the build folder - await executeCommand(`cp ${ORIGINAL_BUILDER_PATH} ${NEW_BUILDER_PATH}`) - await executeCommand(`mv ${qjscTarget} build/code.h`) - - await executeCommand( - `${CC} --target=wasm32-wasi -nostartfiles -Oz -flto ${DEFS} ${INCLUDES} ${SOURCES} ${LIBS} -Wl,--no-entry -Wl,--allow-undefined -Wl,-z,stack-size=${ - 256 * 1024 - } -Wl,--lto-O3 -o ${contractTarget}` - ) -} - -async function wasiStubContract(contractTarget) { - console.log(`Executing wasi-stub...`) - const WASI_STUB = `${NEAR_SDK_JS}/cli/deps/binaryen/wasi-stub/run.sh` - await executeCommand(`${WASI_STUB} ${contractTarget} >/dev/null`) -} diff --git a/cli/save_bytecode.js b/cli/save_bytecode.js deleted file mode 100644 index 5ed5439e..00000000 --- a/cli/save_bytecode.js +++ /dev/null @@ -1,29 +0,0 @@ -import fs from 'fs/promises' -import path from 'path' - -//TODO: execute it in js env -async function main() { - const source = path.resolve(process.argv[process.argv.length - 2]) - const target = path.resolve(process.argv[process.argv.length - 1]) - const code = await fs.readFile(source, 'utf-8') - - const codes = code - .split('\n') - .map((line) => { - if (line.indexOf('0x') < 0) { - return [] - } - - const trimmedLine = line.trim() - const numbers = trimmedLine.slice(0, trimmedLine.length - 1).split(', ') - - return numbers.map(Number) - }) - .filter((numbers) => numbers.length) - - const bytecode = Buffer.concat(codes.map(Buffer.from)) - - await fs.writeFile(target, bytecode.toString('base64')) -} - -main() diff --git a/cli/utils.js b/cli/utils.js deleted file mode 100644 index 11aa3f54..00000000 --- a/cli/utils.js +++ /dev/null @@ -1,24 +0,0 @@ -import { exec as exec_ } from 'child_process' -import { promisify } from 'util' - -const exec = promisify(exec_) - -export async function executeCommand(command, silent = false) { - console.log(command) - const { error, stdout, stderr } = await exec(command) - - if (error) { - console.log(error) - process.exit(1) - } - - if (stderr && !silent) { - console.error(stderr) - } - - if (silent) { - return stdout.trim() - } - - console.log(stdout) -} diff --git a/cli/wasm_to_bytes.js b/cli/wasm_to_bytes.js deleted file mode 100644 index fc32a0b0..00000000 --- a/cli/wasm_to_bytes.js +++ /dev/null @@ -1,20 +0,0 @@ -import fs from 'fs/promises' -import path from 'path' - -// used for deploy code in contract with near.promiseBatchActionDeployContract. -// Usage: -// node wasm_to_bytes.js contract.wasm contract.jsbytes -// copy paste the content of the contract.jsbytes, pass it as arguments to near.promiseBatchActionDeployContract: -// near.promiseBatchActionDeployContract(promsieId, '') -// Note, do not use `bytes()` type check here, which is too expensive for this long bytes and will exceed gas limit. -async function main() { - const source = path.resolve(process.argv[process.argv.length - 2]) - const target = path.resolve(process.argv[process.argv.length - 1]) - const code = await fs.readFile(source) - - const result = code.reduce((result, character) => `${result}\\x${character.toString(16).padStart(2, '0')}`, '') - - await fs.writeFile(target, result) -} - -main() From 723f537ccea1467e23bff3738678090a37fcf8c1 Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Thu, 13 Oct 2022 11:20:38 +0800 Subject: [PATCH 14/44] clean up --- .prettierignore | 2 - lib/cli/post-install.js | 10 +- src/api.ts | 2 +- src/build-tools/include-bytes.js | 41 ---- src/build-tools/near-bindgen-exporter.js | 243 ----------------------- src/cli/post-install.ts | 59 +++--- 6 files changed, 39 insertions(+), 318 deletions(-) delete mode 100644 src/build-tools/include-bytes.js delete mode 100644 src/build-tools/near-bindgen-exporter.js diff --git a/.prettierignore b/.prettierignore index c3dd3989..63c11431 100644 --- a/.prettierignore +++ b/.prettierignore @@ -2,5 +2,3 @@ deps build node_modules lib -cli - diff --git a/lib/cli/post-install.js b/lib/cli/post-install.js index a4f67b83..00dc17b2 100644 --- a/lib/cli/post-install.js +++ b/lib/cli/post-install.js @@ -7,19 +7,19 @@ async function download(url, verbose = false) { } const OS = await executeCommand("uname -s", false); const ARCH = await executeCommand("uname -m", false); -if (OS !== 'Linux' && OS !== 'Darwin') { +if (OS !== "Linux" && OS !== "Darwin") { console.error(`OS ${OS} is not supported at the moment`); process.exit(1); } -if (ARCH !== 'x86_64' && ARCH !== 'arm64') { +if (ARCH !== "x86_64" && ARCH !== "arm64") { console.error(` ${ARCH} architecture is unsapported at the moment`); process.exit(1); } signale.await("Installing wasi-stub..."); const BINARYEN_VERSION = `0.1.10`; const BINARYEN_VERSION_TAG = `v${BINARYEN_VERSION}`; -const BINARYEN_SYSTEM_NAME = OS === 'Linux' ? 'Linux' : OS === 'Darwin' ? 'macOS' : 'other'; -const BINARYEN_ARCH_NAME = ARCH === 'x86_64' ? 'X64' : ARCH === 'arm64' ? 'arm64' : 'other'; +const BINARYEN_SYSTEM_NAME = OS === "Linux" ? "Linux" : OS === "Darwin" ? "macOS" : "other"; +const BINARYEN_ARCH_NAME = ARCH === "x86_64" ? "X64" : ARCH === "arm64" ? "arm64" : "other"; const BINARYEN_TAR_NAME = `binaryen-${BINARYEN_SYSTEM_NAME}-${BINARYEN_ARCH_NAME}.tar.gz`; await download(`https://github.com/near/binaryen/releases/download/${BINARYEN_VERSION_TAG}/${BINARYEN_TAR_NAME}`); await executeCommand(`mkdir -p binaryen && tar xvf ${BINARYEN_TAR_NAME} --directory binaryen`); @@ -51,7 +51,7 @@ signale.await("Installing wasi-sdk..."); const WASI_SDK_MAJOR_VER = 11; const WASI_SDK_MINOR_VER = 0; const WASI_SDK_DOWNLOADED_FOLDER_NAME = `wasi-sdk-${WASI_SDK_MAJOR_VER}.${WASI_SDK_MINOR_VER}`; -const WASI_SDK_SYSTEM_NAME = OS === 'Linux' ? 'linux' : OS === 'Darwin' ? 'macos' : 'other'; +const WASI_SDK_SYSTEM_NAME = OS === "Linux" ? "linux" : OS === "Darwin" ? "macos" : "other"; const WASI_SDK_TAR_NAME = `${WASI_SDK_DOWNLOADED_FOLDER_NAME}-${WASI_SDK_SYSTEM_NAME}.tar.gz`; // Download WASI SDK await download(`https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${WASI_SDK_MAJOR_VER}/${WASI_SDK_TAR_NAME}`); diff --git a/src/api.ts b/src/api.ts index 0ee34bfb..131b43a7 100644 --- a/src/api.ts +++ b/src/api.ts @@ -1,5 +1,5 @@ import { assert, Bytes, NearAmount, PromiseIndex, Register } from "./utils"; -import { PromiseResult, GasWeight } from "./types"; +import { GasWeight, PromiseResult } from "./types"; const U64_MAX = 2n ** 64n - 1n; const EVICTED_REGISTER = U64_MAX - 1n; diff --git a/src/build-tools/include-bytes.js b/src/build-tools/include-bytes.js deleted file mode 100644 index 1010a180..00000000 --- a/src/build-tools/include-bytes.js +++ /dev/null @@ -1,41 +0,0 @@ -import * as t from "@babel/types"; -import fs from "fs"; -import path from "path"; - -export default function () { - return { - visitor: { - CallExpression(p, state) { - const name = p.node.callee.name; - const args = p.node.arguments; - - if (name === "includeBytes") { - // Get the path of file - const filename = this.file.opts.filename; - - // User settings - const root = state.opts.root || path.dirname(filename); - - // Read binary file into bytes, so encoding is 'latin1' (each byte is 0-255, become one character) - const encoding = "latin1"; - - // Require first arg to be string - t.assertStringLiteral(args[0]); - - // Error if filename is not found - if (filename === undefined || filename === "unknown") - throw new Error("`includeBytes` function called outside of file"); - - // Generate and locate the file - const fileRelPath = args[0].value; // Get literal string value - const filePath = path.join(root, fileRelPath); - const fileSrc = fs - .readFileSync(filePath, { encoding }) - .toString(encoding); - - p.replaceWith(t.stringLiteral(fileSrc)); - } - }, - }, - }; -} diff --git a/src/build-tools/near-bindgen-exporter.js b/src/build-tools/near-bindgen-exporter.js deleted file mode 100644 index 7770831a..00000000 --- a/src/build-tools/near-bindgen-exporter.js +++ /dev/null @@ -1,243 +0,0 @@ -import * as t from "@babel/types"; - -const methodTypes = ["call", "view", "initialize"]; - -function throwError(message) { - return t.blockStatement([ - t.throwStatement( - t.newExpression(t.identifier("Error"), [t.stringLiteral(message)]) - ), - ]); -} - -function readState(classId) { - return t.variableDeclaration("const", [ - t.variableDeclarator( - t.identifier("_state"), - t.callExpression( - t.memberExpression(classId, t.identifier("_getState")), - [] - ) - ), - ]); -} - -function preventDoubleInit(methodType) { - if (methodType !== "initialize") { - return t.emptyStatement(); - } - - return t.ifStatement( - t.identifier("_state"), - throwError("Contract already initialized") - ); -} - -function ensureInitBeforeCall(classId, methodType) { - if (!["call", "view"].includes(methodType)) { - return t.emptyStatement(); - } - return t.ifStatement( - t.logicalExpression( - "&&", - t.unaryExpression("!", t.identifier("_state")), - t.callExpression( - t.memberExpression(classId, t.identifier("_requireInit")), - [] - ) - ), - throwError("Contract must be initialized") - ); -} - -function initializeContractClass(classId) { - return t.variableDeclaration("const", [ - t.variableDeclarator( - t.identifier("_contract"), - t.callExpression(t.memberExpression(classId, t.identifier("_create")), []) - ), - ]); -} - -function reconstructState(classId, methodType) { - if (!["call", "view"].includes(methodType)) { - return t.emptyStatement(); - } - - return t.ifStatement( - t.identifier("_state"), - t.blockStatement([ - t.expressionStatement( - t.callExpression( - t.memberExpression(classId, t.identifier("_reconstruct")), - [t.identifier("_contract"), t.identifier("_state")] - ) - ), - ]) - ); -} - -function collectArguments(classId) { - return t.variableDeclaration("const", [ - t.variableDeclarator( - t.identifier("_args"), - t.callExpression( - t.memberExpression(classId, t.identifier("_getArgs")), - [] - ) - ), - ]); -} - -function callContractMethod(methodName) { - return t.variableDeclaration("const", [ - t.variableDeclarator( - t.identifier("_result"), - t.callExpression( - t.memberExpression(t.identifier("_contract"), t.identifier(methodName)), - [t.identifier("_args")] - ) - ), - ]); -} - -function saveToStorage(classId, methodType) { - if (!["initialize", "call"].includes(methodType)) { - return t.emptyStatement(); - } - - return t.expressionStatement( - t.callExpression( - t.memberExpression(classId, t.identifier("_saveToStorage")), - [t.identifier("_contract")] - ) - ); -} - -function executePromise(classId) { - return t.ifStatement( - t.binaryExpression( - "!==", - t.identifier("_result"), - t.identifier("undefined") - ), - t.ifStatement( - t.logicalExpression( - "&&", - t.logicalExpression( - "&&", - t.identifier("_result"), - t.memberExpression( - t.identifier("_result"), - t.identifier("constructor") - ) - ), - t.binaryExpression( - "===", - t.memberExpression( - t.memberExpression( - t.identifier("_result"), - t.identifier("constructor") - ), - t.identifier("name") - ), - t.stringLiteral("NearPromise") - ) - ), - t.expressionStatement( - t.callExpression( - t.memberExpression(t.identifier("_result"), t.identifier("onReturn")), - [] - ) - ), - t.expressionStatement( - t.callExpression( - t.memberExpression(t.identifier("env"), t.identifier("value_return")), - [ - t.callExpression( - t.memberExpression(classId, t.identifier("_serialize")), - [t.identifier("_result")] - ), - ] - ) - ) - ) - ); -} - -export default function () { - return { - visitor: { - ClassDeclaration(path) { - const classNode = path.node; - - if ( - classNode.decorators && - classNode.decorators[0].expression.callee.name === "NearBindgen" - ) { - const classId = classNode.id; - const contractMethods = {}; - - for (let child of classNode.body.body) { - if ( - child.type === "ClassMethod" && - child.kind === "method" && - child.decorators - ) { - const methodType = child.decorators[0].expression.callee.name; - - if (methodTypes.includes(methodType)) { - contractMethods[child.key.name] = methodType; - } - } - } - - for (let methodName of Object.keys(contractMethods)) { - path.insertAfter( - t.exportNamedDeclaration( - t.functionDeclaration( - t.identifier(methodName), - [], - t.blockStatement([ - // Read the state of the contract from storage. - // const _state = Counter._getState(); - readState(classId), - // Throw if initialized on any subsequent init function calls. - // if (_state) { throw new Error('Contract already initialized'); } - preventDoubleInit(contractMethods[methodName]), - // Throw if NOT initialized on any non init function calls. - // if (!_state) { throw new Error('Contract must be initialized'); } - ensureInitBeforeCall(classId, contractMethods[methodName]), - // Create instance of contract by calling _create function. - // let _contract = Counter._create(); - initializeContractClass(classId), - // Reconstruct the contract with the state if the state is valid. - // if (_state) { Counter._reconstruct(_contract, _state); } - reconstructState(classId, contractMethods[methodName]), - // Collect the arguments sent to the function. - // const _args = Counter._getArgs(); - collectArguments(classId), - // Perform the actual function call to the appropriate contract method. - // const _result = _contract.method(args); - callContractMethod(methodName), - // If the method called is either an initialize or call method type, save the changes to storage. - // Counter._saveToStorage(_contract); - saveToStorage(classId, contractMethods[methodName]), - // If a NearPromise is returned from the function call the onReturn method to execute the promise. - // if (_result !== undefined) - // if (_result && _result.constructor && _result.constructor.name === 'NearPromise') - // _result.onReturn(); - // else - // near.valueReturn(_contract._serialize(result)); - executePromise(classId), - ]) - ) - ) - ); - console.log(`Babel ${methodName} method export done`); - } - } - }, - }, - }; -} diff --git a/src/cli/post-install.ts b/src/cli/post-install.ts index f64e2049..cffb26b7 100644 --- a/src/cli/post-install.ts +++ b/src/cli/post-install.ts @@ -12,23 +12,25 @@ async function download(url: string, verbose = false) { const OS = await executeCommand("uname -s", false); const ARCH = await executeCommand("uname -m", false); -if (OS !== 'Linux' && OS !== 'Darwin') { - console.error(`OS ${OS} is not supported at the moment`) - process.exit(1) +if (OS !== "Linux" && OS !== "Darwin") { + console.error(`OS ${OS} is not supported at the moment`); + process.exit(1); } -if (ARCH !== 'x86_64' && ARCH !== 'arm64') { - console.error(` ${ARCH} architecture is unsapported at the moment`) - process.exit(1) +if (ARCH !== "x86_64" && ARCH !== "arm64") { + console.error(` ${ARCH} architecture is unsapported at the moment`); + process.exit(1); } signale.await("Installing wasi-stub..."); -const BINARYEN_VERSION = `0.1.10` -const BINARYEN_VERSION_TAG = `v${BINARYEN_VERSION}` -const BINARYEN_SYSTEM_NAME = OS === 'Linux' ? 'Linux' : OS === 'Darwin' ? 'macOS' : 'other' -const BINARYEN_ARCH_NAME = ARCH === 'x86_64' ? 'X64' : ARCH === 'arm64' ? 'arm64' : 'other' -const BINARYEN_TAR_NAME = `binaryen-${BINARYEN_SYSTEM_NAME}-${BINARYEN_ARCH_NAME}.tar.gz` +const BINARYEN_VERSION = `0.1.10`; +const BINARYEN_VERSION_TAG = `v${BINARYEN_VERSION}`; +const BINARYEN_SYSTEM_NAME = + OS === "Linux" ? "Linux" : OS === "Darwin" ? "macOS" : "other"; +const BINARYEN_ARCH_NAME = + ARCH === "x86_64" ? "X64" : ARCH === "arm64" ? "arm64" : "other"; +const BINARYEN_TAR_NAME = `binaryen-${BINARYEN_SYSTEM_NAME}-${BINARYEN_ARCH_NAME}.tar.gz`; await download( `https://github.com/near/binaryen/releases/download/${BINARYEN_VERSION_TAG}/${BINARYEN_TAR_NAME}` @@ -55,42 +57,47 @@ const QUICK_JS_TARGET_NAME = "qjsc"; // Download QuickJS await download( `https://github.com/near/quickjs/releases/download/${QUICK_JS_VERSION_TAG}/qjsc-${QUICK_JS_SYSTEM_NAME}-${QUICK_JS_ARCH_NAME}` -) -await download(`https://github.com/near/quickjs/archive/refs/tags/${QUICK_JS_VERSION_TAG}.tar.gz`) +); +await download( + `https://github.com/near/quickjs/archive/refs/tags/${QUICK_JS_VERSION_TAG}.tar.gz` +); // Extract QuickJS -await executeCommand(`tar xvf ${QUICK_JS_TAR_NAME}`) +await executeCommand(`tar xvf ${QUICK_JS_TAR_NAME}`); // Delete .tar file -await executeCommand(`rm ${QUICK_JS_TAR_NAME}`) +await executeCommand(`rm ${QUICK_JS_TAR_NAME}`); // Delete version from folder name -await executeCommand(`mv ${QUICK_JS_DOWNLOADED_FOLDER_NAME} ${QUICK_JS_TARGET_FOLDER_NAME}`) +await executeCommand( + `mv ${QUICK_JS_DOWNLOADED_FOLDER_NAME} ${QUICK_JS_TARGET_FOLDER_NAME}` +); // Rename qjsc file -await executeCommand(`mv ${QUICK_JS_DOWNLOADED_NAME} ${QUICK_JS_TARGET_NAME}`) +await executeCommand(`mv ${QUICK_JS_DOWNLOADED_NAME} ${QUICK_JS_TARGET_NAME}`); // chmod qjsc -await executeCommand(`chmod 777 ${QUICK_JS_TARGET_NAME}`) +await executeCommand(`chmod 777 ${QUICK_JS_TARGET_NAME}`); signale.await("Installing wasi-sdk..."); -const WASI_SDK_MAJOR_VER = 11 -const WASI_SDK_MINOR_VER = 0 -const WASI_SDK_DOWNLOADED_FOLDER_NAME = `wasi-sdk-${WASI_SDK_MAJOR_VER}.${WASI_SDK_MINOR_VER}` -const WASI_SDK_SYSTEM_NAME = OS === 'Linux' ? 'linux' : OS === 'Darwin' ? 'macos' : 'other' -const WASI_SDK_TAR_NAME = `${WASI_SDK_DOWNLOADED_FOLDER_NAME}-${WASI_SDK_SYSTEM_NAME}.tar.gz` +const WASI_SDK_MAJOR_VER = 11; +const WASI_SDK_MINOR_VER = 0; +const WASI_SDK_DOWNLOADED_FOLDER_NAME = `wasi-sdk-${WASI_SDK_MAJOR_VER}.${WASI_SDK_MINOR_VER}`; +const WASI_SDK_SYSTEM_NAME = + OS === "Linux" ? "linux" : OS === "Darwin" ? "macos" : "other"; +const WASI_SDK_TAR_NAME = `${WASI_SDK_DOWNLOADED_FOLDER_NAME}-${WASI_SDK_SYSTEM_NAME}.tar.gz`; // Download WASI SDK await download( `https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${WASI_SDK_MAJOR_VER}/${WASI_SDK_TAR_NAME}` -) +); // Extract WASI SDK -await executeCommand(`tar xvf ${WASI_SDK_TAR_NAME}`) +await executeCommand(`tar xvf ${WASI_SDK_TAR_NAME}`); // Delete .tar file -await executeCommand(`rm ${WASI_SDK_TAR_NAME}`) +await executeCommand(`rm ${WASI_SDK_TAR_NAME}`); // Delete version from folder name await executeCommand(`mv ${WASI_SDK_DOWNLOADED_FOLDER_NAME} wasi-sdk`); From eb5ade961ee78afd3c87d2d9997f8c0923deb9dd Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Thu, 13 Oct 2022 16:49:08 +0800 Subject: [PATCH 15/44] fix using new nested api, promise result api, etc. --- near-contract-standards/package.json | 3 +- .../src/non_fungible_token/core/core_impl.ts | 91 +++++-------- .../src/non_fungible_token/metadata.ts | 17 +++ .../src/non_fungible_token/token.ts | 4 +- .../src/non_fungible_token/utils.ts | 10 +- near-contract-standards/tsconfig.json | 3 +- near-contract-standards/yarn.lock | 128 +++++++++++++++++- 7 files changed, 191 insertions(+), 65 deletions(-) diff --git a/near-contract-standards/package.json b/near-contract-standards/package.json index 58b16e79..d17cb7f5 100644 --- a/near-contract-standards/package.json +++ b/near-contract-standards/package.json @@ -5,9 +5,10 @@ "main": "index.js", "type": "module", "scripts": { + "postinstall": "cd .. && yarn link && cd near-contract-standards && yarn link near-sdk-js", "build": "yarn build:non-fungible-token", "rebuild": "cd .. && yarn build && cd near-contract-standards && rm -rf node_modules && rm -rf build && yarn && yarn build", - "build:non-fungible-token": "near-sdk build example-contracts/my-nft.ts build/my-nft.wasm", + "build:non-fungible-token": "near-sdk-js build example-contracts/my-nft.ts build/my-nft.wasm", "test": "ava", "test:non-fungible-token": "ava __tests__/test-non-fungible-token.ava.js" }, diff --git a/near-contract-standards/src/non_fungible_token/core/core_impl.ts b/near-contract-standards/src/non_fungible_token/core/core_impl.ts index eec171f0..7e4dd879 100644 --- a/near-contract-standards/src/non_fungible_token/core/core_impl.ts +++ b/near-contract-standards/src/non_fungible_token/core/core_impl.ts @@ -5,15 +5,17 @@ import { near, UnorderedSet, assert, -} from "near-sdk-js/lib/index"; -import { PromiseResult } from "near-sdk-js/lib/types/index"; -import { assertOneYocto, IntoStorageKey, Option } from "near-sdk-js/lib/utils"; +} from "near-sdk-js/lib"; +import { PromiseResult } from "near-sdk-js/lib/types"; import { TokenMetadata } from "../metadata"; import { hash_account_id, refund_approved_account_ids, refund_deposit, refund_deposit_to_account, + assert_at_least_one_yocto, + IntoStorageKey, + Option } from "../utils"; import { NftMint, NftTransfer } from "../events"; import { NonFungibleTokenResolver } from "./resolver"; @@ -130,12 +132,6 @@ export class NonFungibleToken if (this.next_approval_id_by_id) { this.next_approval_id_by_id.set(tmp_token_id, 1n); } - const u = new UnorderedSet( - new TokenPerOwnerInner(hash_account_id(tmp_owner_id)).into_storage_key() - ); - if (this.tokens_per_owner) { - this.tokens_per_owner.set(tmp_owner_id, u); - } // 2. see how much space it took this.extra_storage_in_bytes_per_token = @@ -149,45 +145,32 @@ export class NonFungibleToken this.approvals_by_id.remove(tmp_token_id); } if (this.tokens_per_owner) { - this.tokens_per_owner.remove(tmp_owner_id); + let u = this.tokens_per_owner.remove(tmp_owner_id, {reconstructor: UnorderedSet.reconstruct}); + u.remove(tmp_token_id); } if (this.token_metadata_by_id) { this.token_metadata_by_id.remove(tmp_token_id); } - if (this.tokens_per_owner) { - this.tokens_per_owner.remove(tmp_owner_id); - } + this.owner_by_id.remove(tmp_token_id); } internal_transfer_unguarded(token_id: string, from: string, to: string) { this.owner_by_id.set(token_id, to); if (this.tokens_per_owner) { - const owner_tokens = this.tokens_per_owner.get(from); - if (owner_tokens == null) { + const owner_tokens_set = this.tokens_per_owner.get(from, {reconstructor: UnorderedSet.reconstruct}); + if (owner_tokens_set == null) { throw new Error("Unable to access tokens per owner in unguarded call."); } - const owner_tokens_set = UnorderedSet.deserialize( - owner_tokens as UnorderedSet - ); if (owner_tokens_set.isEmpty()) { this.tokens_per_owner.remove(from); } else { this.tokens_per_owner.set(from, owner_tokens_set); } - let receiver_tokens = this.tokens_per_owner.get(to); - if (receiver_tokens == null) { - receiver_tokens = new UnorderedSet( - new TokensPerOwner(near.sha256(to)).into_storage_key() - ); - } else { - receiver_tokens = UnorderedSet.deserialize( - receiver_tokens as UnorderedSet - ); - } - (receiver_tokens as UnorderedSet).set(token_id); - this.tokens_per_owner.set(to, receiver_tokens); + let receiver_tokens_set = this.tokens_per_owner.get(to, {reconstructor: UnorderedSet.reconstruct}); + receiver_tokens_set.set(token_id); + this.tokens_per_owner.set(to, receiver_tokens_set); } } @@ -197,7 +180,7 @@ export class NonFungibleToken token_id: string, approval_id: Option, memo: Option - ): [string, Map | null] { + ): [string, { [approvals: string]: bigint } | null] { const owner_id = this.owner_by_id.get(token_id); if (owner_id == null) { throw new Error("Token not found"); @@ -235,9 +218,7 @@ export class NonFungibleToken ); return [ owner_id as string, - approved_account_ids == null - ? null - : (approved_account_ids as Map), + approved_account_ids ]; } @@ -293,8 +274,7 @@ export class NonFungibleToken this.owner_by_id.set(token_id, owner_id); this.token_metadata_by_id?.set(token_id, token_metadata); if (this.tokens_per_owner) { - let token_ids = this.tokens_per_owner.get(owner_id) as UnorderedSet; - token_ids = UnorderedSet.deserialize(token_ids); + let token_ids = this.tokens_per_owner.get(owner_id, {reconstructor: UnorderedSet.reconstruct}) token_ids.set(token_id); this.tokens_per_owner.set(owner_id, token_ids); } @@ -315,7 +295,7 @@ export class NonFungibleToken approval_id: Option, memo: Option ) { - assertOneYocto(); + assert_at_least_one_yocto(); const sender_id = near.predecessorAccountId(); this.internal_transfer(sender_id, receiver_id, token_id, approval_id, memo); } @@ -327,7 +307,7 @@ export class NonFungibleToken memo: Option, msg: string ) { - assertOneYocto(); + assert_at_least_one_yocto(); const sender_id = near.predecessorAccountId(); const [old_owner, old_approvals] = this.internal_transfer( sender_id, @@ -340,16 +320,15 @@ export class NonFungibleToken } nft_token(token_id: string): Option { - const owner_id = this.owner_by_id.get(token_id) as Option; + const owner_id = this.owner_by_id.get(token_id); if (owner_id == null) { return null; } const metadata = this.token_metadata_by_id?.get( - token_id - ) as Option; + token_id, {reconstructor: TokenMetadata.reconstruct} + ); const approved_account_ids = - (this.approvals_by_id?.get(token_id) as Option>) || - new Map(); + (this.approvals_by_id?.get(token_id) as Option<{ [approvals: string]: bigint }>); return new Token(token_id, owner_id, metadata, approved_account_ids); } @@ -357,15 +336,20 @@ export class NonFungibleToken previous_owner_id: string, receiver_id: string, token_id: string, - approved_account_ids: Option> + approved_account_ids: Option<{ [approvals: string]: bigint }> ): boolean { - let must_revert: boolean; - const p = near.promiseResult(0); - if (p === PromiseResult.NotReady) { - throw new Error(); - } else if (p === PromiseResult.Failed) { - must_revert = true; - } else { + let must_revert = false; + let p: Bytes; + try { + p = near.promiseResult(0); + } catch (e) { + if (e.message.includes("Not Ready")) { + throw new Error(); + } else { + must_revert = true; + } + } + if (!must_revert) { try { const yes_or_no = JSON.parse(p as Bytes); if (typeof yes_or_no == "boolean") { @@ -397,11 +381,8 @@ export class NonFungibleToken this.internal_transfer_unguarded(token_id, receiver_id, previous_owner_id); if (this.approvals_by_id) { - let receiver_approvals = this.approvals_by_id.get(token_id) as Option< - Map - >; + let receiver_approvals = this.approvals_by_id.get(token_id); if (receiver_approvals) { - receiver_approvals = new Map(Object.entries(receiver_approvals)); refund_approved_account_ids(receiver_id, receiver_approvals); } if (approved_account_ids) { diff --git a/near-contract-standards/src/non_fungible_token/metadata.ts b/near-contract-standards/src/non_fungible_token/metadata.ts index d81d4bb5..0a1e23b2 100644 --- a/near-contract-standards/src/non_fungible_token/metadata.ts +++ b/near-contract-standards/src/non_fungible_token/metadata.ts @@ -63,4 +63,21 @@ export class TokenMetadata { ); } } + + static reconstruct(data: TokenMetadata): TokenMetadata { + return new TokenMetadata( + data.title, + data.description, + data.media, + data.media_hash, + data.copies, + data.issued_at, + data.expires_at, + data.starts_at, + data.updated_at, + data.extra, + data.reference, + data.reference_hash + ); + } } diff --git a/near-contract-standards/src/non_fungible_token/token.ts b/near-contract-standards/src/non_fungible_token/token.ts index c89d7d4e..56d6c8e5 100644 --- a/near-contract-standards/src/non_fungible_token/token.ts +++ b/near-contract-standards/src/non_fungible_token/token.ts @@ -1,6 +1,6 @@ import { TokenMetadata } from "./metadata"; import { AccountId } from "near-sdk-js/lib/types"; -import { Option } from "near-sdk-js/lib/utils"; +import { Option } from "./utils"; export type TokenId = string; export class Token { @@ -8,6 +8,6 @@ export class Token { public token_id: TokenId, public owner_id: AccountId, public metadata: Option, - public approved_account_ids: Option> + public approved_account_ids: Option<{ [approved_account_id: string]: bigint }> ) {} } diff --git a/near-contract-standards/src/non_fungible_token/utils.ts b/near-contract-standards/src/non_fungible_token/utils.ts index d09ad7f4..0ff40a42 100644 --- a/near-contract-standards/src/non_fungible_token/utils.ts +++ b/near-contract-standards/src/non_fungible_token/utils.ts @@ -23,11 +23,11 @@ export function refund_approved_account_ids_iter( export function refund_approved_account_ids( account_id: AccountId, - approved_account_ids: Map + approved_account_ids: { [approvals: string]: bigint } ) { refund_approved_account_ids_iter( account_id, - Array.from(approved_account_ids.keys()) + Array.from(Object.keys(approved_account_ids)) ); } @@ -65,3 +65,9 @@ export function assert_at_least_one_yocto(): void { "Requires attached deposit of at least 1 yoctoNEAR" ); } + +export type Option = T | null; + +export interface IntoStorageKey { + into_storage_key(): Bytes; +} \ No newline at end of file diff --git a/near-contract-standards/tsconfig.json b/near-contract-standards/tsconfig.json index c68670ab..a5be9b56 100644 --- a/near-contract-standards/tsconfig.json +++ b/near-contract-standards/tsconfig.json @@ -2,7 +2,8 @@ "compilerOptions": { "experimentalDecorators": true, "target": "es2020", - "noEmit": true + "noEmit": true, + "moduleResolution": "node" }, "exclude": ["node_modules"] } diff --git a/near-contract-standards/yarn.lock b/near-contract-standards/yarn.lock index 2ba6b028..30fe199b 100644 --- a/near-contract-standards/yarn.lock +++ b/near-contract-standards/yarn.lock @@ -379,6 +379,11 @@ estree-walker "^1.0.1" picomatch "^2.2.2" +"@scure/base@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" + integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== + "@sindresorhus/is@^4.0.0": version "4.6.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" @@ -725,7 +730,7 @@ cbor@^8.1.0: dependencies: nofilter "^3.1.0" -chalk@^2.0.0: +chalk@^2.0.0, chalk@^2.3.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -846,6 +851,11 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +commander@^9.4.1: + version "9.4.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.1.tgz#d1dd8f2ce6faf93147295c0df13c7c21141cfbdd" + integrity sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw== + common-path-prefix@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" @@ -1001,6 +1011,13 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + error-polyfill@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/error-polyfill/-/error-polyfill-0.1.3.tgz#df848b61ad8834f7a5db69a70b9913df86721d15" @@ -1073,6 +1090,13 @@ fastq@^1.6.0: dependencies: reusify "^1.0.4" +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA== + dependencies: + escape-string-regexp "^1.0.5" + figures@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/figures/-/figures-4.0.1.tgz#27b26609907bc888b3e3b0ef5403643f80aa2518" @@ -1088,6 +1112,13 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +find-up@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + find-up@^6.0.0: version "6.3.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" @@ -1208,7 +1239,7 @@ got@^11.8.2: p-cancelable "^2.0.0" responselike "^2.0.0" -graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== @@ -1292,6 +1323,11 @@ irregular-plurals@^3.3.0: resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-3.3.0.tgz#67d0715d4361a60d9fd9ee80af3881c631a31ee2" integrity sha512-MVBLKUTangM3EfRPFROhmWQQKRDsrgI83J8GS3jXy+OwYqiR2/aoWndYQ5416jLE3uaGgLH7ncme3X9y09gZ3g== +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -1415,6 +1451,11 @@ json-buffer@3.0.1, json-buffer@~3.0.1: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + json5@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" @@ -1437,11 +1478,29 @@ keyv@^4.0.0: compress-brotli "^1.3.8" json-buffer "3.0.1" +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + load-json-file@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-7.0.1.tgz#a3c9fde6beffb6bedb5acf104fad6bb1604e1b00" integrity sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ== +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + locate-path@^7.1.0: version "7.1.1" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.1.1.tgz#8e1e5a75c7343770cef02ff93c4bf1f0aa666374" @@ -1603,7 +1662,7 @@ near-sandbox@^0.0.8: tar "^6.1.0" "near-sdk-js@file:..": - version "0.3.0" + version "0.5.0-1" dependencies: "@babel/core" "^7.17.5" "@babel/plugin-proposal-decorators" "^7.17.2" @@ -1611,9 +1670,11 @@ near-sandbox@^0.0.8: "@rollup/plugin-babel" "^5.3.1" "@rollup/plugin-commonjs" "^21.0.1" "@rollup/plugin-node-resolve" "^13.1.1" + "@scure/base" "^1.1.1" + commander "^9.4.1" rollup "^2.61.1" rollup-plugin-sourcemaps "^0.6.3" - yargs "^17.5.1" + signale "^1.4.0" near-units@^0.1.9: version "0.1.9" @@ -1706,6 +1767,13 @@ p-event@^5.0.1: dependencies: p-timeout "^5.0.2" +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + p-limit@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" @@ -1713,6 +1781,13 @@ p-limit@^4.0.0: dependencies: yocto-queue "^1.0.0" +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + p-locate@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" @@ -1739,11 +1814,29 @@ p-timeout@^5.0.2: resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-5.1.0.tgz#b3c691cf4415138ce2d9cfe071dba11f0fee085b" integrity sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew== +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + parse-ms@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + path-exists@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" @@ -1774,6 +1867,19 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +pkg-conf@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.1.0.tgz#2126514ca6f2abfebd168596df18ba57867f0058" + integrity sha512-C+VUP+8jis7EsQZIhDYmS5qlNtjv2yP4SNtjXK9AP1ZcTRlnSfuumaTnRfYZnYgUUYVIKqL0fRvmUGDV2fmp6g== + dependencies: + find-up "^2.0.0" + load-json-file "^4.0.0" + pkg-conf@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-4.0.0.tgz#63ace00cbacfa94c2226aee133800802d3e3b80c" @@ -1942,6 +2048,15 @@ signal-exit@^3.0.7: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== +signale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/signale/-/signale-1.4.0.tgz#c4be58302fb0262ac00fc3d886a7c113759042f1" + integrity sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w== + dependencies: + chalk "^2.3.2" + figures "^2.0.0" + pkg-conf "^2.1.0" + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -2022,6 +2137,11 @@ strip-ansi@^7.0.1: dependencies: ansi-regex "^6.0.1" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + supertap@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/supertap/-/supertap-3.0.1.tgz#aa89e4522104402c6e8fe470a7d2db6dc4037c6a" From f64127d58823c2d67edc6f63513f490e22d796f0 Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Fri, 14 Oct 2022 15:23:58 +0800 Subject: [PATCH 16/44] fix tsc errors --- .../src/non_fungible_token/core/core_impl.ts | 2 +- near-contract-standards/src/non_fungible_token/events.ts | 2 +- near-contract-standards/src/non_fungible_token/metadata.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/near-contract-standards/src/non_fungible_token/core/core_impl.ts b/near-contract-standards/src/non_fungible_token/core/core_impl.ts index 7e4dd879..8a66a141 100644 --- a/near-contract-standards/src/non_fungible_token/core/core_impl.ts +++ b/near-contract-standards/src/non_fungible_token/core/core_impl.ts @@ -280,7 +280,7 @@ export class NonFungibleToken } const approved_account_ids = this.approvals_by_id - ? new Map() + ? {} : null; if (initial_storage_usage) { const [id, storage_usage] = initial_storage_usage; diff --git a/near-contract-standards/src/non_fungible_token/events.ts b/near-contract-standards/src/non_fungible_token/events.ts index 0a5f1bb5..5daddde4 100644 --- a/near-contract-standards/src/non_fungible_token/events.ts +++ b/near-contract-standards/src/non_fungible_token/events.ts @@ -1,5 +1,5 @@ import { NearEvent } from "../event"; -import { Option } from "near-sdk-js/lib/utils"; +import { Option } from "./utils"; export type Nep171EventKind = NftMint[] | NftTransfer[] | NftBurn[]; diff --git a/near-contract-standards/src/non_fungible_token/metadata.ts b/near-contract-standards/src/non_fungible_token/metadata.ts index 0a1e23b2..ed3125ac 100644 --- a/near-contract-standards/src/non_fungible_token/metadata.ts +++ b/near-contract-standards/src/non_fungible_token/metadata.ts @@ -1,6 +1,6 @@ import { Bytes } from "near-sdk-js"; import { near, assert } from "near-sdk-js"; -import { Option } from "near-sdk-js/lib/utils"; +import { Option } from "./utils"; export const NFT_METADATA_SPEC = "nft-1.0.0"; From c47c32aa802e380363f25087702a47e1f995ef5d Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Fri, 14 Oct 2022 17:24:47 +0800 Subject: [PATCH 17/44] build pass --- near-contract-standards/.gitignore | 2 ++ .../src/non_fungible_token/core/core_impl.ts | 17 ++++++++++++++++- .../src/non_fungible_token/core/receiver.ts | 7 +++++++ .../src/non_fungible_token/core/resolver.ts | 7 +++++++ 4 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 near-contract-standards/.gitignore create mode 100644 near-contract-standards/src/non_fungible_token/core/receiver.ts create mode 100644 near-contract-standards/src/non_fungible_token/core/resolver.ts diff --git a/near-contract-standards/.gitignore b/near-contract-standards/.gitignore new file mode 100644 index 00000000..48912d24 --- /dev/null +++ b/near-contract-standards/.gitignore @@ -0,0 +1,2 @@ +build +node_modules \ No newline at end of file diff --git a/near-contract-standards/src/non_fungible_token/core/core_impl.ts b/near-contract-standards/src/non_fungible_token/core/core_impl.ts index 8a66a141..39b7a994 100644 --- a/near-contract-standards/src/non_fungible_token/core/core_impl.ts +++ b/near-contract-standards/src/non_fungible_token/core/core_impl.ts @@ -5,6 +5,8 @@ import { near, UnorderedSet, assert, + NearPromise, + bytes, } from "near-sdk-js/lib"; import { PromiseResult } from "near-sdk-js/lib/types"; import { TokenMetadata } from "../metadata"; @@ -308,6 +310,7 @@ export class NonFungibleToken msg: string ) { assert_at_least_one_yocto(); + assert(near.prepaidGas() > GAS_FOR_NFT_TRANSFER_CALL, "Not enough prepaid gas"); const sender_id = near.predecessorAccountId(); const [old_owner, old_approvals] = this.internal_transfer( sender_id, @@ -316,7 +319,19 @@ export class NonFungibleToken approval_id, memo ); - // TODO: ext_nft_receiver + + let promise = NearPromise.new(receiver_id).functionCall( + "nft_on_transfer", + bytes(JSON.stringify({sender_id, previous_owner_id: old_owner, token_id, msg})), + 0n, + near.prepaidGas() - GAS_FOR_NFT_TRANSFER_CALL, + ).then(NearPromise.new(near.currentAccountId()).functionCall( + "nft_resolve_transfer", + bytes(JSON.stringify({previous_owner_id: old_owner, receiver_id, token_id, approvals: old_approvals})), + 0n, + GAS_FOR_RESOLVE_TRANSFER + )); + return promise; } nft_token(token_id: string): Option { diff --git a/near-contract-standards/src/non_fungible_token/core/receiver.ts b/near-contract-standards/src/non_fungible_token/core/receiver.ts new file mode 100644 index 00000000..9b172969 --- /dev/null +++ b/near-contract-standards/src/non_fungible_token/core/receiver.ts @@ -0,0 +1,7 @@ +import { PromiseOrValue } from "near-sdk-js/lib"; +import { AccountId } from "near-sdk-js/lib/types"; +import { TokenId } from "../token"; + +export interface NonFungibleTokenReceiver { + nft_on_transfer(sender_id: AccountId, previous_owner_id: AccountId, token_id: TokenId, msg: String): PromiseOrValue; +} diff --git a/near-contract-standards/src/non_fungible_token/core/resolver.ts b/near-contract-standards/src/non_fungible_token/core/resolver.ts new file mode 100644 index 00000000..21bc5e73 --- /dev/null +++ b/near-contract-standards/src/non_fungible_token/core/resolver.ts @@ -0,0 +1,7 @@ +import { AccountId } from "../../../../lib/types"; +import { TokenId } from "../token"; +import { Option } from "../utils"; + +export interface NonFungibleTokenResolver { + nft_resolve_transfer(previous_owner_id: AccountId, receiver_id: AccountId, token_id: TokenId, approvals: Option<{[approval: string]: bigint}>): boolean; +} From 58ce03153427501a4d47adede2039b70ffd53171 Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Fri, 14 Oct 2022 18:29:39 +0800 Subject: [PATCH 18/44] majority of nft standard is implemented --- .../example-contracts/my-nft.ts | 58 ++++++++++++++++++- .../src/non_fungible_token/core/core_impl.ts | 4 +- 2 files changed, 57 insertions(+), 5 deletions(-) diff --git a/near-contract-standards/example-contracts/my-nft.ts b/near-contract-standards/example-contracts/my-nft.ts index d8844f4e..ce17e6af 100644 --- a/near-contract-standards/example-contracts/my-nft.ts +++ b/near-contract-standards/example-contracts/my-nft.ts @@ -1,5 +1,59 @@ import { NonFungibleToken } from "../src/index"; -import { NearBindgen } from "near-sdk-js/lib/index"; +import { assert, Bytes, call, initialize, near, NearBindgen } from "near-sdk-js/lib/index"; +import { NFTContractMetadata, TokenMetadata } from "../src/non_fungible_token/metadata"; +import { IntoStorageKey, Option } from "../src/non_fungible_token/utils"; +import { AccountId } from "../../lib/types"; + +class StorageKey {} + +class StorageKeyNonFungibleToken extends StorageKey implements IntoStorageKey { + into_storage_key(): Bytes { + return 'NFT_'; + } +} + +class StorageKeyTokenMetadata extends StorageKey implements IntoStorageKey { + into_storage_key(): Bytes { + return 'TOKEN_METADATA_'; + } +} + +class StorageKeyTokenEnumeration extends StorageKey implements IntoStorageKey { + into_storage_key(): Bytes { + return 'TOKEN_ENUMERATION_'; + } +} + +class StorageKeyApproval extends StorageKey implements IntoStorageKey { + into_storage_key(): Bytes { + return 'APPROVAL_'; + } +} @NearBindgen({}) -class MyNFT extends NonFungibleToken {} +class MyNFT { + tokens: NonFungibleToken; + metadata: Option; + + constructor() { + } + + @initialize({requireInit: true}) + init({owner_id, metadata}: {owner_id: string, metadata: NFTContractMetadata}) { + metadata.assert_valid(); + this.tokens = new NonFungibleToken( + new StorageKeyNonFungibleToken(), + owner_id, + new StorageKeyTokenMetadata(), + new StorageKeyTokenEnumeration(), + new StorageKeyApproval() + ) + this.metadata = metadata; + } + + @call({payableFunction: true}) + nft_mint({token_id, token_owner_id, token_metadata}: {token_id: AccountId, token_owner_id: AccountId, token_metadata: TokenMetadata}) { + assert(near.predecessorAccountId() === this.tokens.owner_id, "Unauthorized"); + this.tokens.internal_mint(token_id, token_owner_id, token_metadata); + } +} diff --git a/near-contract-standards/src/non_fungible_token/core/core_impl.ts b/near-contract-standards/src/non_fungible_token/core/core_impl.ts index 39b7a994..9eb247dd 100644 --- a/near-contract-standards/src/non_fungible_token/core/core_impl.ts +++ b/near-contract-standards/src/non_fungible_token/core/core_impl.ts @@ -84,11 +84,9 @@ export class NonFungibleToken this.token_metadata_by_id = token_metadata_prefix ? new LookupMap(token_metadata_prefix.into_storage_key()) : null; + this.tokens_per_owner = new LookupMap(enumeration_prefix.into_storage_key()); this.approvals_by_id = approvals_by_id; this.next_approval_id_by_id = next_approval_id_by_id; - } - - init() { this.measure_min_token_storage_cost(); } From f332fd952af4c8abaf73c67cf732916c5e1622d0 Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Mon, 17 Oct 2022 20:48:10 +0800 Subject: [PATCH 19/44] implement core and metadata provider --- .../example-contracts/my-nft.ts | 25 ++++++++++++++++--- .../src/non_fungible_token/metadata.ts | 4 +++ 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/near-contract-standards/example-contracts/my-nft.ts b/near-contract-standards/example-contracts/my-nft.ts index ce17e6af..fdc3dab1 100644 --- a/near-contract-standards/example-contracts/my-nft.ts +++ b/near-contract-standards/example-contracts/my-nft.ts @@ -1,8 +1,10 @@ import { NonFungibleToken } from "../src/index"; -import { assert, Bytes, call, initialize, near, NearBindgen } from "near-sdk-js/lib/index"; -import { NFTContractMetadata, TokenMetadata } from "../src/non_fungible_token/metadata"; +import { assert, Bytes, call, initialize, near, NearBindgen, PromiseOrValue } from "near-sdk-js/lib/index"; +import { NFTContractMetadata, NonFungibleTokenMetadataProvider, TokenMetadata } from "../src/non_fungible_token/metadata"; import { IntoStorageKey, Option } from "../src/non_fungible_token/utils"; import { AccountId } from "../../lib/types"; +import { NonFungibleTokenCore } from "../src/non_fungible_token/core/core_impl"; +import { Token } from "../src/non_fungible_token/token"; class StorageKey {} @@ -31,13 +33,30 @@ class StorageKeyApproval extends StorageKey implements IntoStorageKey { } @NearBindgen({}) -class MyNFT { +class MyNFT implements NonFungibleTokenCore, NonFungibleTokenMetadataProvider { tokens: NonFungibleToken; metadata: Option; constructor() { } + nft_metadata(): NFTContractMetadata { + assert(this.metadata !== null, "Metadata not initialized"); + return this.metadata; + } + + nft_transfer(receiver_id: string, token_id: string, approval_id: bigint, memo: string) { + this.tokens.nft_transfer(receiver_id, token_id, approval_id, memo); + } + + nft_transfer_call(receiver_id: string, token_id: string, approval_id: bigint, memo: string, msg: string): PromiseOrValue { + return this.tokens.nft_transfer_call(receiver_id, token_id, approval_id, memo, msg); + } + + nft_token(token_id: string): Option { + return this.tokens.nft_token(token_id); + } + @initialize({requireInit: true}) init({owner_id, metadata}: {owner_id: string, metadata: NFTContractMetadata}) { metadata.assert_valid(); diff --git a/near-contract-standards/src/non_fungible_token/metadata.ts b/near-contract-standards/src/non_fungible_token/metadata.ts index ed3125ac..946da3ec 100644 --- a/near-contract-standards/src/non_fungible_token/metadata.ts +++ b/near-contract-standards/src/non_fungible_token/metadata.ts @@ -81,3 +81,7 @@ export class TokenMetadata { ); } } + +export interface NonFungibleTokenMetadataProvider { + nft_metadata(): NFTContractMetadata; +} From 373c193af06ea8cac05f1a526cb4c723a87a2079 Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Tue, 18 Oct 2022 18:57:46 +0800 Subject: [PATCH 20/44] first nft standard test --- .../__tests__/my-nft/test_core.ava.js | 42 +++++++++++++++++++ .../example-contracts/my-nft.ts | 8 +++- near-contract-standards/package.json | 6 +-- near-contract-standards/yarn.lock | 18 ++++---- 4 files changed, 60 insertions(+), 14 deletions(-) create mode 100644 near-contract-standards/__tests__/my-nft/test_core.ava.js diff --git a/near-contract-standards/__tests__/my-nft/test_core.ava.js b/near-contract-standards/__tests__/my-nft/test_core.ava.js new file mode 100644 index 00000000..755724a3 --- /dev/null +++ b/near-contract-standards/__tests__/my-nft/test_core.ava.js @@ -0,0 +1,42 @@ +import { Worker } from "near-workspaces"; +import test from "ava"; + +test.before(async (t) => { + // Init the worker and start a Sandbox server + const worker = await Worker.init(); + + // Prepare sandbox for tests, create accounts, deploy contracts, etx. + const root = worker.rootAccount; + + // Deploy status-message the contract. + const nft = await root.devDeploy("./build/my-nft.wasm"); + + // Create test accounts + const ali = await root.createSubAccount("ali"); + const bob = await root.createSubAccount("bob"); + const nftOwner = await root.createSubAccount("owner"); + + await nft.call("init", {owner_id: nftOwner.accountId, metadata: {spec: "nft-1.0.0", name: "My NFT", symbol: "NFT"}}); + + // Save state for test runs, it is unique for each test + t.context.worker = worker; + t.context.accounts = { + root, + nft, + ali, + bob, + }; +}); + +test.after(async (t) => { + await t.context.worker.tearDown().catch((error) => { + console.log("Failed tear down the worker:", error); + }); +}); + +test("Simple transfer", async (t) => { + const { ali, bob, nft } = t.context.accounts; + + let token = await nft.view('nft_token', "0"); + t.is(token.owner_id, nft.accountId); +}); diff --git a/near-contract-standards/example-contracts/my-nft.ts b/near-contract-standards/example-contracts/my-nft.ts index fdc3dab1..77f5e9c0 100644 --- a/near-contract-standards/example-contracts/my-nft.ts +++ b/near-contract-standards/example-contracts/my-nft.ts @@ -1,5 +1,5 @@ import { NonFungibleToken } from "../src/index"; -import { assert, Bytes, call, initialize, near, NearBindgen, PromiseOrValue } from "near-sdk-js/lib/index"; +import { assert, Bytes, call, initialize, near, NearBindgen, PromiseOrValue, view } from "near-sdk-js/lib/index"; import { NFTContractMetadata, NonFungibleTokenMetadataProvider, TokenMetadata } from "../src/non_fungible_token/metadata"; import { IntoStorageKey, Option } from "../src/non_fungible_token/utils"; import { AccountId } from "../../lib/types"; @@ -32,7 +32,7 @@ class StorageKeyApproval extends StorageKey implements IntoStorageKey { } } -@NearBindgen({}) +@NearBindgen({requireInit: true}) class MyNFT implements NonFungibleTokenCore, NonFungibleTokenMetadataProvider { tokens: NonFungibleToken; metadata: Option; @@ -40,19 +40,23 @@ class MyNFT implements NonFungibleTokenCore, NonFungibleTokenMetadataProvider { constructor() { } + @view({}) nft_metadata(): NFTContractMetadata { assert(this.metadata !== null, "Metadata not initialized"); return this.metadata; } + @call({}) nft_transfer(receiver_id: string, token_id: string, approval_id: bigint, memo: string) { this.tokens.nft_transfer(receiver_id, token_id, approval_id, memo); } + @call({}) nft_transfer_call(receiver_id: string, token_id: string, approval_id: bigint, memo: string, msg: string): PromiseOrValue { return this.tokens.nft_transfer_call(receiver_id, token_id, approval_id, memo, msg); } + @view({}) nft_token(token_id: string): Option { return this.tokens.nft_token(token_id); } diff --git a/near-contract-standards/package.json b/near-contract-standards/package.json index d17cb7f5..b1fd9cde 100644 --- a/near-contract-standards/package.json +++ b/near-contract-standards/package.json @@ -10,17 +10,17 @@ "rebuild": "cd .. && yarn build && cd near-contract-standards && rm -rf node_modules && rm -rf build && yarn && yarn build", "build:non-fungible-token": "near-sdk-js build example-contracts/my-nft.ts build/my-nft.wasm", "test": "ava", - "test:non-fungible-token": "ava __tests__/test-non-fungible-token.ava.js" + "test:non-fungible-token": "ava __tests__/my-nft/*" }, "author": "Near Inc ", "license": "Apache-2.0", "dependencies": { - "lodash-es": "^4.17.21", + "lodash-es": "^4.17.21", "near-sdk-js": "file:../" }, "devDependencies": { "ava": "^4.2.0", "typescript": "^4.7.4", - "near-workspaces": "2.0.0" + "near-workspaces": "3.2.1" } } diff --git a/near-contract-standards/yarn.lock b/near-contract-standards/yarn.lock index 30fe199b..fe1cf9b3 100644 --- a/near-contract-standards/yarn.lock +++ b/near-contract-standards/yarn.lock @@ -1653,10 +1653,10 @@ near-api-js@^0.44.1: text-encoding-utf-8 "^1.0.2" tweetnacl "^1.0.1" -near-sandbox@^0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/near-sandbox/-/near-sandbox-0.0.8.tgz#5496e300554e9e722fa200204dc8cd302e0074c7" - integrity sha512-3JrDcA9rI+wA9lWqfOtSovGxBE/TDZL011TLk+jz5wGezVbm7m3tDh/zCfq+++eFyJ3ZbGkG0KF6+trMQJFPQQ== +near-sandbox@^0.0.13: + version "0.0.13" + resolved "https://registry.yarnpkg.com/near-sandbox/-/near-sandbox-0.0.13.tgz#139b70708ccefcdf2dd406710f6615590d1880e5" + integrity sha512-rtRn51BBD1oT9SeGAIInKVedfaS/i4VqKqznZIvFddWo0jcI4lMoK1yHuTVuEE7YfEE12NsspFG1GxN1SlPV2g== dependencies: got "^11.8.2" tar "^6.1.0" @@ -1683,10 +1683,10 @@ near-units@^0.1.9: dependencies: bn.js "^5.2.0" -near-workspaces@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/near-workspaces/-/near-workspaces-2.0.0.tgz#32f7c6999bca8209b7a173986c7ce08218506ebc" - integrity sha512-oxV9B/LBGKM1cQHfZI476GSiUFLRg/0t7PiPGDyUVVsFWpkBLbQEF9EVP2nxctO7HWopAe5SJJTGp0o0ct8B1A== +near-workspaces@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/near-workspaces/-/near-workspaces-3.2.1.tgz#38c33474ece5898323f10cff7c75f771bb5a991a" + integrity sha512-761D8lsbSetS+Nu9C4IWdONn0gBSVpfjY8V09AOQt1Zb5XjtURFWpFTZun6vQJhvWv5+RsSNTF6uYsLyTLJBAA== dependencies: base64url "^3.0.1" bn.js "^5.2.0" @@ -1696,7 +1696,7 @@ near-workspaces@2.0.0: fs-extra "^10.0.0" js-sha256 "^0.9.0" near-api-js "^0.44.1" - near-sandbox "^0.0.8" + near-sandbox "^0.0.13" near-units "^0.1.9" node-port-check "^2.0.1" promisify-child-process "^4.1.1" From c91e325779c1c559b764d8ac6f86f015bb013a35 Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Wed, 19 Oct 2022 21:45:34 +0800 Subject: [PATCH 21/44] figure out reconstruct puzzle --- .../__tests__/my-nft/test_core.ava.js | 9 +- near-contract-standards/ava.config.cjs | 8 + .../example-contracts/my-nft.ts | 180 ++++++++++++------ near-contract-standards/package.json | 2 +- .../src/non_fungible_token/core/core_impl.ts | 107 +++++++---- .../src/non_fungible_token/core/receiver.ts | 7 +- .../src/non_fungible_token/core/resolver.ts | 7 +- .../src/non_fungible_token/metadata.ts | 51 ++++- .../src/non_fungible_token/token.ts | 4 +- .../src/non_fungible_token/utils.ts | 2 +- 10 files changed, 268 insertions(+), 109 deletions(-) create mode 100644 near-contract-standards/ava.config.cjs diff --git a/near-contract-standards/__tests__/my-nft/test_core.ava.js b/near-contract-standards/__tests__/my-nft/test_core.ava.js index 755724a3..25db9a2f 100644 --- a/near-contract-standards/__tests__/my-nft/test_core.ava.js +++ b/near-contract-standards/__tests__/my-nft/test_core.ava.js @@ -16,7 +16,10 @@ test.before(async (t) => { const bob = await root.createSubAccount("bob"); const nftOwner = await root.createSubAccount("owner"); - await nft.call("init", {owner_id: nftOwner.accountId, metadata: {spec: "nft-1.0.0", name: "My NFT", symbol: "NFT"}}); + await nft.call(nft, "init", { + owner_id: nftOwner.accountId, + metadata: { spec: "nft-1.0.0", name: "My NFT", symbol: "NFT" }, + }); // Save state for test runs, it is unique for each test t.context.worker = worker; @@ -37,6 +40,6 @@ test.after(async (t) => { test("Simple transfer", async (t) => { const { ali, bob, nft } = t.context.accounts; - let token = await nft.view('nft_token', "0"); - t.is(token.owner_id, nft.accountId); + let token = await nft.view("nft_token", "0"); + t.is(token, nft.accountId); }); diff --git a/near-contract-standards/ava.config.cjs b/near-contract-standards/ava.config.cjs new file mode 100644 index 00000000..d5a8c029 --- /dev/null +++ b/near-contract-standards/ava.config.cjs @@ -0,0 +1,8 @@ +require("util").inspect.defaultOptions.depth = 5; // Increase AVA's printing depth + +module.exports = { + timeout: "300000", + files: ["**/*.ava.js"], + failWithoutAssertions: false, + extensions: ["js"], +}; diff --git a/near-contract-standards/example-contracts/my-nft.ts b/near-contract-standards/example-contracts/my-nft.ts index 77f5e9c0..bfb0cdef 100644 --- a/near-contract-standards/example-contracts/my-nft.ts +++ b/near-contract-standards/example-contracts/my-nft.ts @@ -1,6 +1,19 @@ import { NonFungibleToken } from "../src/index"; -import { assert, Bytes, call, initialize, near, NearBindgen, PromiseOrValue, view } from "near-sdk-js/lib/index"; -import { NFTContractMetadata, NonFungibleTokenMetadataProvider, TokenMetadata } from "../src/non_fungible_token/metadata"; +import { + assert, + Bytes, + call, + initialize, + near, + NearBindgen, + PromiseOrValue, + view, +} from "near-sdk-js/lib/index"; +import { + NFTContractMetadata, + NonFungibleTokenMetadataProvider, + TokenMetadata, +} from "../src/non_fungible_token/metadata"; import { IntoStorageKey, Option } from "../src/non_fungible_token/utils"; import { AccountId } from "../../lib/types"; import { NonFungibleTokenCore } from "../src/non_fungible_token/core/core_impl"; @@ -9,74 +22,121 @@ import { Token } from "../src/non_fungible_token/token"; class StorageKey {} class StorageKeyNonFungibleToken extends StorageKey implements IntoStorageKey { - into_storage_key(): Bytes { - return 'NFT_'; - } + into_storage_key(): Bytes { + return "NFT_"; + } } class StorageKeyTokenMetadata extends StorageKey implements IntoStorageKey { - into_storage_key(): Bytes { - return 'TOKEN_METADATA_'; - } + into_storage_key(): Bytes { + return "TOKEN_METADATA_"; + } } class StorageKeyTokenEnumeration extends StorageKey implements IntoStorageKey { - into_storage_key(): Bytes { - return 'TOKEN_ENUMERATION_'; - } + into_storage_key(): Bytes { + return "TOKEN_ENUMERATION_"; + } } class StorageKeyApproval extends StorageKey implements IntoStorageKey { - into_storage_key(): Bytes { - return 'APPROVAL_'; - } + into_storage_key(): Bytes { + return "APPROVAL_"; + } } -@NearBindgen({requireInit: true}) +@NearBindgen({ requireInit: true }) class MyNFT implements NonFungibleTokenCore, NonFungibleTokenMetadataProvider { - tokens: NonFungibleToken; - metadata: Option; - - constructor() { - } - - @view({}) - nft_metadata(): NFTContractMetadata { - assert(this.metadata !== null, "Metadata not initialized"); - return this.metadata; - } - - @call({}) - nft_transfer(receiver_id: string, token_id: string, approval_id: bigint, memo: string) { - this.tokens.nft_transfer(receiver_id, token_id, approval_id, memo); - } - - @call({}) - nft_transfer_call(receiver_id: string, token_id: string, approval_id: bigint, memo: string, msg: string): PromiseOrValue { - return this.tokens.nft_transfer_call(receiver_id, token_id, approval_id, memo, msg); - } - - @view({}) - nft_token(token_id: string): Option { - return this.tokens.nft_token(token_id); - } - - @initialize({requireInit: true}) - init({owner_id, metadata}: {owner_id: string, metadata: NFTContractMetadata}) { - metadata.assert_valid(); - this.tokens = new NonFungibleToken( - new StorageKeyNonFungibleToken(), - owner_id, - new StorageKeyTokenMetadata(), - new StorageKeyTokenEnumeration(), - new StorageKeyApproval() - ) - this.metadata = metadata; - } - - @call({payableFunction: true}) - nft_mint({token_id, token_owner_id, token_metadata}: {token_id: AccountId, token_owner_id: AccountId, token_metadata: TokenMetadata}) { - assert(near.predecessorAccountId() === this.tokens.owner_id, "Unauthorized"); - this.tokens.internal_mint(token_id, token_owner_id, token_metadata); - } + tokens: NonFungibleToken; + metadata: Option; + + constructor() { + this.tokens = new NonFungibleToken(); + // @ts-ignore + this.metadata = new NFTContractMetadata(); + } + + @view({}) + nft_metadata(): NFTContractMetadata { + assert(this.metadata !== null, "Metadata not initialized"); + return this.metadata; + } + + @call({}) + nft_transfer( + receiver_id: string, + token_id: string, + approval_id: bigint, + memo: string + ) { + this.tokens.nft_transfer(receiver_id, token_id, approval_id, memo); + } + + @call({}) + nft_transfer_call( + receiver_id: string, + token_id: string, + approval_id: bigint, + memo: string, + msg: string + ): PromiseOrValue { + return this.tokens.nft_transfer_call( + receiver_id, + token_id, + approval_id, + memo, + msg + ); + } + + @view({}) + nft_token(token_id: string): Option { + // @ts-ignore + + // return this.metadata instanceof NFTContractMetadata; + // @ts-ignore + + // return this.tokens.constructor.name; + // @ts-ignore + + return this.tokens.nft_token(token_id); + } + + @initialize({ requireInit: true }) + init({ + owner_id, + metadata, + }: { + owner_id: string; + metadata: NFTContractMetadata; + }) { + // @ts-ignore + this.metadata = Object.assign(new NFTContractMetadata(), metadata); + this.metadata.assert_valid(); + this.tokens = new NonFungibleToken(); + this.tokens.init( + new StorageKeyNonFungibleToken(), + owner_id, + new StorageKeyTokenMetadata(), + new StorageKeyTokenEnumeration(), + new StorageKeyApproval() + ); + } + + @call({ payableFunction: true }) + nft_mint({ + token_id, + token_owner_id, + token_metadata, + }: { + token_id: AccountId; + token_owner_id: AccountId; + token_metadata: TokenMetadata; + }) { + assert( + near.predecessorAccountId() === this.tokens.owner_id, + "Unauthorized" + ); + this.tokens.internal_mint(token_id, token_owner_id, token_metadata); + } } diff --git a/near-contract-standards/package.json b/near-contract-standards/package.json index b1fd9cde..e3790f69 100644 --- a/near-contract-standards/package.json +++ b/near-contract-standards/package.json @@ -15,7 +15,7 @@ "author": "Near Inc ", "license": "Apache-2.0", "dependencies": { - "lodash-es": "^4.17.21", + "lodash-es": "^4.17.21", "near-sdk-js": "file:../" }, "devDependencies": { diff --git a/near-contract-standards/src/non_fungible_token/core/core_impl.ts b/near-contract-standards/src/non_fungible_token/core/core_impl.ts index 9eb247dd..3e31a206 100644 --- a/near-contract-standards/src/non_fungible_token/core/core_impl.ts +++ b/near-contract-standards/src/non_fungible_token/core/core_impl.ts @@ -17,7 +17,7 @@ import { refund_deposit_to_account, assert_at_least_one_yocto, IntoStorageKey, - Option + Option, } from "../utils"; import { NftMint, NftTransfer } from "../events"; import { NonFungibleTokenResolver } from "./resolver"; @@ -60,7 +60,17 @@ export class NonFungibleToken public approvals_by_id: Option>; public next_approval_id_by_id: Option>; - constructor( + constructor() { + this.owner_id = ""; + this.extra_storage_in_bytes_per_token = 0n; + this.owner_by_id = new UnorderedMap(""); + this.token_metadata_by_id = null; + this.tokens_per_owner = new LookupMap(""); + this.approvals_by_id = null; + this.next_approval_id_by_id = null; + } + + init( owner_by_id_prefix: IntoStorageKey, owner_id: string, token_metadata_prefix: Option, @@ -84,12 +94,20 @@ export class NonFungibleToken this.token_metadata_by_id = token_metadata_prefix ? new LookupMap(token_metadata_prefix.into_storage_key()) : null; - this.tokens_per_owner = new LookupMap(enumeration_prefix.into_storage_key()); + this.tokens_per_owner = new LookupMap( + enumeration_prefix.into_storage_key() + ); this.approvals_by_id = approvals_by_id; this.next_approval_id_by_id = next_approval_id_by_id; this.measure_min_token_storage_cost(); } + static reconstruct(data: NonFungibleToken): NonFungibleToken { + let ret = new NonFungibleToken(); + Object.assign(ret, data); + return ret; + } + measure_min_token_storage_cost() { const initial_storage_usage = near.storageUsage(); // 64 Length because this is the max account id length @@ -145,7 +163,9 @@ export class NonFungibleToken this.approvals_by_id.remove(tmp_token_id); } if (this.tokens_per_owner) { - let u = this.tokens_per_owner.remove(tmp_owner_id, {reconstructor: UnorderedSet.reconstruct}); + let u = this.tokens_per_owner.remove(tmp_owner_id, { + reconstructor: UnorderedSet.reconstruct, + }); u.remove(tmp_token_id); } if (this.token_metadata_by_id) { @@ -158,7 +178,9 @@ export class NonFungibleToken this.owner_by_id.set(token_id, to); if (this.tokens_per_owner) { - const owner_tokens_set = this.tokens_per_owner.get(from, {reconstructor: UnorderedSet.reconstruct}); + const owner_tokens_set = this.tokens_per_owner.get(from, { + reconstructor: UnorderedSet.reconstruct, + }); if (owner_tokens_set == null) { throw new Error("Unable to access tokens per owner in unguarded call."); } @@ -168,7 +190,9 @@ export class NonFungibleToken this.tokens_per_owner.set(from, owner_tokens_set); } - let receiver_tokens_set = this.tokens_per_owner.get(to, {reconstructor: UnorderedSet.reconstruct}); + let receiver_tokens_set = this.tokens_per_owner.get(to, { + reconstructor: UnorderedSet.reconstruct, + }); receiver_tokens_set.set(token_id); this.tokens_per_owner.set(to, receiver_tokens_set); } @@ -216,10 +240,7 @@ export class NonFungibleToken sender_id_authorized, memo ); - return [ - owner_id as string, - approved_account_ids - ]; + return [owner_id as string, approved_account_ids]; } static emit_transfer( @@ -274,14 +295,14 @@ export class NonFungibleToken this.owner_by_id.set(token_id, owner_id); this.token_metadata_by_id?.set(token_id, token_metadata); if (this.tokens_per_owner) { - let token_ids = this.tokens_per_owner.get(owner_id, {reconstructor: UnorderedSet.reconstruct}) + let token_ids = this.tokens_per_owner.get(owner_id, { + reconstructor: UnorderedSet.reconstruct, + }); token_ids.set(token_id); this.tokens_per_owner.set(owner_id, token_ids); } - const approved_account_ids = this.approvals_by_id - ? {} - : null; + const approved_account_ids = this.approvals_by_id ? {} : null; if (initial_storage_usage) { const [id, storage_usage] = initial_storage_usage; refund_deposit_to_account(near.storageUsage() - storage_usage, id); @@ -308,7 +329,10 @@ export class NonFungibleToken msg: string ) { assert_at_least_one_yocto(); - assert(near.prepaidGas() > GAS_FOR_NFT_TRANSFER_CALL, "Not enough prepaid gas"); + assert( + near.prepaidGas() > GAS_FOR_NFT_TRANSFER_CALL, + "Not enough prepaid gas" + ); const sender_id = near.predecessorAccountId(); const [old_owner, old_approvals] = this.internal_transfer( sender_id, @@ -317,18 +341,36 @@ export class NonFungibleToken approval_id, memo ); - - let promise = NearPromise.new(receiver_id).functionCall( - "nft_on_transfer", - bytes(JSON.stringify({sender_id, previous_owner_id: old_owner, token_id, msg})), - 0n, - near.prepaidGas() - GAS_FOR_NFT_TRANSFER_CALL, - ).then(NearPromise.new(near.currentAccountId()).functionCall( - "nft_resolve_transfer", - bytes(JSON.stringify({previous_owner_id: old_owner, receiver_id, token_id, approvals: old_approvals})), - 0n, - GAS_FOR_RESOLVE_TRANSFER - )); + + let promise = NearPromise.new(receiver_id) + .functionCall( + "nft_on_transfer", + bytes( + JSON.stringify({ + sender_id, + previous_owner_id: old_owner, + token_id, + msg, + }) + ), + 0n, + near.prepaidGas() - GAS_FOR_NFT_TRANSFER_CALL + ) + .then( + NearPromise.new(near.currentAccountId()).functionCall( + "nft_resolve_transfer", + bytes( + JSON.stringify({ + previous_owner_id: old_owner, + receiver_id, + token_id, + approvals: old_approvals, + }) + ), + 0n, + GAS_FOR_RESOLVE_TRANSFER + ) + ); return promise; } @@ -337,11 +379,12 @@ export class NonFungibleToken if (owner_id == null) { return null; } - const metadata = this.token_metadata_by_id?.get( - token_id, {reconstructor: TokenMetadata.reconstruct} - ); - const approved_account_ids = - (this.approvals_by_id?.get(token_id) as Option<{ [approvals: string]: bigint }>); + const metadata = this.token_metadata_by_id?.get(token_id, { + reconstructor: TokenMetadata.reconstruct, + }); + const approved_account_ids = this.approvals_by_id?.get(token_id) as Option<{ + [approvals: string]: bigint; + }>; return new Token(token_id, owner_id, metadata, approved_account_ids); } diff --git a/near-contract-standards/src/non_fungible_token/core/receiver.ts b/near-contract-standards/src/non_fungible_token/core/receiver.ts index 9b172969..2e95cb67 100644 --- a/near-contract-standards/src/non_fungible_token/core/receiver.ts +++ b/near-contract-standards/src/non_fungible_token/core/receiver.ts @@ -3,5 +3,10 @@ import { AccountId } from "near-sdk-js/lib/types"; import { TokenId } from "../token"; export interface NonFungibleTokenReceiver { - nft_on_transfer(sender_id: AccountId, previous_owner_id: AccountId, token_id: TokenId, msg: String): PromiseOrValue; + nft_on_transfer( + sender_id: AccountId, + previous_owner_id: AccountId, + token_id: TokenId, + msg: String + ): PromiseOrValue; } diff --git a/near-contract-standards/src/non_fungible_token/core/resolver.ts b/near-contract-standards/src/non_fungible_token/core/resolver.ts index 21bc5e73..cf22e14c 100644 --- a/near-contract-standards/src/non_fungible_token/core/resolver.ts +++ b/near-contract-standards/src/non_fungible_token/core/resolver.ts @@ -3,5 +3,10 @@ import { TokenId } from "../token"; import { Option } from "../utils"; export interface NonFungibleTokenResolver { - nft_resolve_transfer(previous_owner_id: AccountId, receiver_id: AccountId, token_id: TokenId, approvals: Option<{[approval: string]: bigint}>): boolean; + nft_resolve_transfer( + previous_owner_id: AccountId, + receiver_id: AccountId, + token_id: TokenId, + approvals: Option<{ [approval: string]: bigint }> + ): boolean; } diff --git a/near-contract-standards/src/non_fungible_token/metadata.ts b/near-contract-standards/src/non_fungible_token/metadata.ts index 946da3ec..d51502f1 100644 --- a/near-contract-standards/src/non_fungible_token/metadata.ts +++ b/near-contract-standards/src/non_fungible_token/metadata.ts @@ -5,15 +5,41 @@ import { Option } from "./utils"; export const NFT_METADATA_SPEC = "nft-1.0.0"; export class NFTContractMetadata { - constructor( - public spec: string, // required, essentially a version like "nft-1.0.0" - public name: string, // required, ex. "Mosaics" - public symbol: string, // required, ex. "MOSIAC" - public icon: Option, // Data URL - public base_uri: Option, // Centralized gateway known to have reliable access to decentralized storage assets referenced by `reference` or `media` URLs - public reference: Option, // URL to a JSON file with more info - public reference_hash: Option // Base64-encoded sha256 hash of JSON from reference field. Required if `reference` is included. - ) {} + public spec: string; // required, essentially a version like "nft-1.0.0" + public name: string; // required, ex. "Mosaics" + public symbol: string; // required, ex. "MOSIAC" + public icon: Option; // Data URL + public base_uri: Option; // Centralized gateway known to have reliable access to decentralized storage assets referenced by `reference` or `media` URLs + public reference: Option; // URL to a JSON file with more info + public reference_hash: Option; // Base64-encoded sha256 hash of JSON from reference field. Required if `reference` is included. + + constructor() { + this.spec = NFT_METADATA_SPEC; + this.name = ""; + this.symbol = ""; + this.icon = null; + this.base_uri = null; + this.reference = null; + this.reference_hash = null; + } + + init( + spec: string, + name: string, + symbol: string, // required, ex. "MOSIAC" + icon: Option, // Data URL + base_uri: Option, // Centralized gateway known to have reliable access to decentralized storage assets referenced by `reference` or `media` URLs + reference: Option, // URL to a JSON file with more info + reference_hash: Option // Base64-encoded sha256 hash of JSON from reference field. Required if `reference` is included. + ) { + this.spec = spec; + this.name = name; + this.symbol = symbol; + this.icon = icon; + this.base_uri = base_uri; + this.reference = reference; + this.reference_hash = reference_hash; + } assert_valid() { assert(this.spec == NFT_METADATA_SPEC, "Spec is not NFT metadata"); @@ -25,6 +51,12 @@ export class NFTContractMetadata { assert(this.reference_hash.length == 32, "Hash has to be 32 bytes"); } } + + static reconstruct(data: NFTContractMetadata): NFTContractMetadata { + let metadata = new NFTContractMetadata(); + Object.assign(metadata, data); + return metadata; + } } export class TokenMetadata { @@ -65,6 +97,7 @@ export class TokenMetadata { } static reconstruct(data: TokenMetadata): TokenMetadata { + throw new Error("abc"); return new TokenMetadata( data.title, data.description, diff --git a/near-contract-standards/src/non_fungible_token/token.ts b/near-contract-standards/src/non_fungible_token/token.ts index 56d6c8e5..5a28bf85 100644 --- a/near-contract-standards/src/non_fungible_token/token.ts +++ b/near-contract-standards/src/non_fungible_token/token.ts @@ -8,6 +8,8 @@ export class Token { public token_id: TokenId, public owner_id: AccountId, public metadata: Option, - public approved_account_ids: Option<{ [approved_account_id: string]: bigint }> + public approved_account_ids: Option<{ + [approved_account_id: string]: bigint; + }> ) {} } diff --git a/near-contract-standards/src/non_fungible_token/utils.ts b/near-contract-standards/src/non_fungible_token/utils.ts index 0ff40a42..a4123aa1 100644 --- a/near-contract-standards/src/non_fungible_token/utils.ts +++ b/near-contract-standards/src/non_fungible_token/utils.ts @@ -70,4 +70,4 @@ export type Option = T | null; export interface IntoStorageKey { into_storage_key(): Bytes; -} \ No newline at end of file +} From 4e2065d2054c32814fe79a855f35cf4526d4373d Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Thu, 20 Oct 2022 10:40:11 +0800 Subject: [PATCH 22/44] fix first test --- .../__tests__/my-nft/test_core.ava.js | 2 +- .../example-contracts/my-nft.ts | 8 -------- .../src/non_fungible_token/core/core_impl.ts | 17 ++++++++++++++++- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/near-contract-standards/__tests__/my-nft/test_core.ava.js b/near-contract-standards/__tests__/my-nft/test_core.ava.js index 25db9a2f..13881348 100644 --- a/near-contract-standards/__tests__/my-nft/test_core.ava.js +++ b/near-contract-standards/__tests__/my-nft/test_core.ava.js @@ -41,5 +41,5 @@ test("Simple transfer", async (t) => { const { ali, bob, nft } = t.context.accounts; let token = await nft.view("nft_token", "0"); - t.is(token, nft.accountId); + t.is(token, null); }); diff --git a/near-contract-standards/example-contracts/my-nft.ts b/near-contract-standards/example-contracts/my-nft.ts index bfb0cdef..045d33fb 100644 --- a/near-contract-standards/example-contracts/my-nft.ts +++ b/near-contract-standards/example-contracts/my-nft.ts @@ -91,14 +91,6 @@ class MyNFT implements NonFungibleTokenCore, NonFungibleTokenMetadataProvider { @view({}) nft_token(token_id: string): Option { - // @ts-ignore - - // return this.metadata instanceof NFTContractMetadata; - // @ts-ignore - - // return this.tokens.constructor.name; - // @ts-ignore - return this.tokens.nft_token(token_id); } diff --git a/near-contract-standards/src/non_fungible_token/core/core_impl.ts b/near-contract-standards/src/non_fungible_token/core/core_impl.ts index 3e31a206..c51c0591 100644 --- a/near-contract-standards/src/non_fungible_token/core/core_impl.ts +++ b/near-contract-standards/src/non_fungible_token/core/core_impl.ts @@ -65,7 +65,7 @@ export class NonFungibleToken this.extra_storage_in_bytes_per_token = 0n; this.owner_by_id = new UnorderedMap(""); this.token_metadata_by_id = null; - this.tokens_per_owner = new LookupMap(""); + this.tokens_per_owner = null; this.approvals_by_id = null; this.next_approval_id_by_id = null; } @@ -105,6 +105,21 @@ export class NonFungibleToken static reconstruct(data: NonFungibleToken): NonFungibleToken { let ret = new NonFungibleToken(); Object.assign(ret, data); + ret.owner_by_id = UnorderedMap.reconstruct(ret.owner_by_id); + if (ret.token_metadata_by_id) { + ret.token_metadata_by_id = LookupMap.reconstruct(ret.token_metadata_by_id); + } + if (ret.tokens_per_owner) { + ret.tokens_per_owner = LookupMap.reconstruct(ret.tokens_per_owner); + } + if (ret.approvals_by_id) { + ret.approvals_by_id = LookupMap.reconstruct(ret.approvals_by_id); + } + if (ret.next_approval_id_by_id) { + ret.next_approval_id_by_id = LookupMap.reconstruct( + ret.next_approval_id_by_id + ); + } return ret; } From cdc84226c4146c4d692a3b29093e51082ab6e6a3 Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Thu, 20 Oct 2022 20:34:59 +0800 Subject: [PATCH 23/44] mint test pass --- .../__tests__/my-nft/test_core.ava.js | 21 +++++++++++++++++-- .../example-contracts/my-nft.ts | 4 ++-- .../src/non_fungible_token/core/core_impl.ts | 3 +++ .../src/non_fungible_token/metadata.ts | 1 - 4 files changed, 24 insertions(+), 5 deletions(-) diff --git a/near-contract-standards/__tests__/my-nft/test_core.ava.js b/near-contract-standards/__tests__/my-nft/test_core.ava.js index 13881348..f9bd9efc 100644 --- a/near-contract-standards/__tests__/my-nft/test_core.ava.js +++ b/near-contract-standards/__tests__/my-nft/test_core.ava.js @@ -21,6 +21,22 @@ test.before(async (t) => { metadata: { spec: "nft-1.0.0", name: "My NFT", symbol: "NFT" }, }); + let token_metadata = { + title: "Olympus Mons", + description: "The tallest mountain in the charted solar system", + media: null, + media_hash: null, + copies: 1, + issued_at: null, + expires_at: null, + starts_at: null, + updated_at: null, + extra: null, + reference: null, + reference_hash: null, + }; + await nftOwner.call(nft, "nft_mint", {token_id: "0", token_owner_id: nftOwner.accountId, token_metadata}, {attachedDeposit: '10 mN'}) + // Save state for test runs, it is unique for each test t.context.worker = worker; t.context.accounts = { @@ -28,6 +44,7 @@ test.before(async (t) => { nft, ali, bob, + nftOwner }; }); @@ -38,8 +55,8 @@ test.after(async (t) => { }); test("Simple transfer", async (t) => { - const { ali, bob, nft } = t.context.accounts; + const { ali, bob, nft, nftOwner } = t.context.accounts; let token = await nft.view("nft_token", "0"); - t.is(token, null); + t.is(token.owner_id, nftOwner.accountId); }); diff --git a/near-contract-standards/example-contracts/my-nft.ts b/near-contract-standards/example-contracts/my-nft.ts index 045d33fb..d3606847 100644 --- a/near-contract-standards/example-contracts/my-nft.ts +++ b/near-contract-standards/example-contracts/my-nft.ts @@ -17,7 +17,7 @@ import { import { IntoStorageKey, Option } from "../src/non_fungible_token/utils"; import { AccountId } from "../../lib/types"; import { NonFungibleTokenCore } from "../src/non_fungible_token/core/core_impl"; -import { Token } from "../src/non_fungible_token/token"; +import { Token, TokenId } from "../src/non_fungible_token/token"; class StorageKey {} @@ -121,7 +121,7 @@ class MyNFT implements NonFungibleTokenCore, NonFungibleTokenMetadataProvider { token_owner_id, token_metadata, }: { - token_id: AccountId; + token_id: TokenId; token_owner_id: AccountId; token_metadata: TokenMetadata; }) { diff --git a/near-contract-standards/src/non_fungible_token/core/core_impl.ts b/near-contract-standards/src/non_fungible_token/core/core_impl.ts index c51c0591..b5b7996d 100644 --- a/near-contract-standards/src/non_fungible_token/core/core_impl.ts +++ b/near-contract-standards/src/non_fungible_token/core/core_impl.ts @@ -313,6 +313,9 @@ export class NonFungibleToken let token_ids = this.tokens_per_owner.get(owner_id, { reconstructor: UnorderedSet.reconstruct, }); + if (token_ids === null) { + token_ids = new UnorderedSet(new TokensPerOwner(near.sha256(owner_id)).into_storage_key()) + } token_ids.set(token_id); this.tokens_per_owner.set(owner_id, token_ids); } diff --git a/near-contract-standards/src/non_fungible_token/metadata.ts b/near-contract-standards/src/non_fungible_token/metadata.ts index d51502f1..2465adbb 100644 --- a/near-contract-standards/src/non_fungible_token/metadata.ts +++ b/near-contract-standards/src/non_fungible_token/metadata.ts @@ -97,7 +97,6 @@ export class TokenMetadata { } static reconstruct(data: TokenMetadata): TokenMetadata { - throw new Error("abc"); return new TokenMetadata( data.title, data.description, From 49f9e9b6e2a638f499038c7266d240c31e6e2665 Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Fri, 21 Oct 2022 17:48:14 +0800 Subject: [PATCH 24/44] simple transfer fully work --- .../__tests__/my-nft/test_core.ava.js | 12 +++++++++-- .../example-contracts/my-nft.ts | 16 +++++++------- .../src/non_fungible_token/core/core_impl.ts | 21 ++++++++++++------- 3 files changed, 31 insertions(+), 18 deletions(-) diff --git a/near-contract-standards/__tests__/my-nft/test_core.ava.js b/near-contract-standards/__tests__/my-nft/test_core.ava.js index f9bd9efc..4586cd41 100644 --- a/near-contract-standards/__tests__/my-nft/test_core.ava.js +++ b/near-contract-standards/__tests__/my-nft/test_core.ava.js @@ -1,7 +1,7 @@ import { Worker } from "near-workspaces"; import test from "ava"; -test.before(async (t) => { +test.beforeEach(async (t) => { // Init the worker and start a Sandbox server const worker = await Worker.init(); @@ -48,7 +48,7 @@ test.before(async (t) => { }; }); -test.after(async (t) => { +test.afterEach.always(async (t) => { await t.context.worker.tearDown().catch((error) => { console.log("Failed tear down the worker:", error); }); @@ -59,4 +59,12 @@ test("Simple transfer", async (t) => { let token = await nft.view("nft_token", "0"); t.is(token.owner_id, nftOwner.accountId); + + let res = await nftOwner.callRaw(nft, 'nft_transfer', [ali.accountId, '0', null, 'simple transfer'], {attachedDeposit: '1'}) + t.is(res.result.status.SuccessValue, ""); + + t.is(res.logs.length, 1); + + token = await nft.view("nft_token", "0"); + t.is(token.owner_id, ali.accountId); }); diff --git a/near-contract-standards/example-contracts/my-nft.ts b/near-contract-standards/example-contracts/my-nft.ts index d3606847..98f60ea0 100644 --- a/near-contract-standards/example-contracts/my-nft.ts +++ b/near-contract-standards/example-contracts/my-nft.ts @@ -62,31 +62,31 @@ class MyNFT implements NonFungibleTokenCore, NonFungibleTokenMetadataProvider { return this.metadata; } - @call({}) - nft_transfer( + @call({payableFunction: true}) + nft_transfer([receiver_id, token_id, approval_id, memo]: [ receiver_id: string, token_id: string, approval_id: bigint, memo: string - ) { - this.tokens.nft_transfer(receiver_id, token_id, approval_id, memo); + ]) { + this.tokens.nft_transfer([receiver_id, token_id, approval_id, memo]); } @call({}) - nft_transfer_call( + nft_transfer_call([receiver_id, token_id, approval_id, memo, msg]: [ receiver_id: string, token_id: string, approval_id: bigint, memo: string, msg: string - ): PromiseOrValue { - return this.tokens.nft_transfer_call( + ]): PromiseOrValue { + return this.tokens.nft_transfer_call([ receiver_id, token_id, approval_id, memo, msg - ); + ]); } @view({}) diff --git a/near-contract-standards/src/non_fungible_token/core/core_impl.ts b/near-contract-standards/src/non_fungible_token/core/core_impl.ts index b5b7996d..2a29c5cf 100644 --- a/near-contract-standards/src/non_fungible_token/core/core_impl.ts +++ b/near-contract-standards/src/non_fungible_token/core/core_impl.ts @@ -25,19 +25,19 @@ import { AccountId } from "near-sdk-js/lib/types/index"; import { Token, TokenId } from "../token"; export interface NonFungibleTokenCore { - nft_transfer( + nft_transfer([receiver_id, token_id, approval_id, memo]: [ receiver_id: AccountId, token_id: TokenId, approval_id: Option, memo: Option - ); - nft_transfer_call( + ]); + nft_transfer_call([receiver_id, token_id, approval_id, memo]: [ receiver_id: AccountId, token_id: TokenId, approval_id: Option, memo: Option, msg: string - ); + ]); nft_token(token_id: TokenId): Option; } @@ -208,6 +208,11 @@ export class NonFungibleToken let receiver_tokens_set = this.tokens_per_owner.get(to, { reconstructor: UnorderedSet.reconstruct, }); + if (receiver_tokens_set === null) { + receiver_tokens_set = new UnorderedSet( + new TokensPerOwner(near.sha256(to)).into_storage_key() + ); + } receiver_tokens_set.set(token_id); this.tokens_per_owner.set(to, receiver_tokens_set); } @@ -328,24 +333,24 @@ export class NonFungibleToken return new Token(token_id, owner_id, token_metadata, approved_account_ids); } - nft_transfer( + nft_transfer([receiver_id, token_id, approval_id, memo]: [ receiver_id: string, token_id: string, approval_id: Option, memo: Option - ) { + ]) { assert_at_least_one_yocto(); const sender_id = near.predecessorAccountId(); this.internal_transfer(sender_id, receiver_id, token_id, approval_id, memo); } - nft_transfer_call( + nft_transfer_call([receiver_id, token_id, approval_id, memo, msg]: [ receiver_id: string, token_id: string, approval_id: Option, memo: Option, msg: string - ) { + ]) { assert_at_least_one_yocto(); assert( near.prepaidGas() > GAS_FOR_NFT_TRANSFER_CALL, From 22807e93141e7a2799dd1c1ef3cf957d9ca8aa4d Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Mon, 24 Oct 2022 20:22:31 +0800 Subject: [PATCH 25/44] add token receiver --- .../__tests__/my-nft/test_core.ava.js | 20 +++++- .../{ => non-fungible-token}/my-nft.ts | 24 +++---- .../non-fungible-token/test-token-receiver.ts | 66 +++++++++++++++++++ near-contract-standards/package.json | 8 ++- .../src/non_fungible_token/core/receiver.ts | 4 +- 5 files changed, 102 insertions(+), 20 deletions(-) rename near-contract-standards/example-contracts/{ => non-fungible-token}/my-nft.ts (84%) create mode 100644 near-contract-standards/example-contracts/non-fungible-token/test-token-receiver.ts diff --git a/near-contract-standards/__tests__/my-nft/test_core.ava.js b/near-contract-standards/__tests__/my-nft/test_core.ava.js index 4586cd41..60820beb 100644 --- a/near-contract-standards/__tests__/my-nft/test_core.ava.js +++ b/near-contract-standards/__tests__/my-nft/test_core.ava.js @@ -15,12 +15,15 @@ test.beforeEach(async (t) => { const ali = await root.createSubAccount("ali"); const bob = await root.createSubAccount("bob"); const nftOwner = await root.createSubAccount("owner"); + const nftReceiver = await root.devDeploy("./build/nft-receiver.wasm"); await nft.call(nft, "init", { owner_id: nftOwner.accountId, metadata: { spec: "nft-1.0.0", name: "My NFT", symbol: "NFT" }, }); + await nftReceiver.call(nftReceiver, 'init', nft.accountId) + let token_metadata = { title: "Olympus Mons", description: "The tallest mountain in the charted solar system", @@ -35,7 +38,7 @@ test.beforeEach(async (t) => { reference: null, reference_hash: null, }; - await nftOwner.call(nft, "nft_mint", {token_id: "0", token_owner_id: nftOwner.accountId, token_metadata}, {attachedDeposit: '10 mN'}) + await nftOwner.call(nft, "nft_mint", ["0", nftOwner.accountId, token_metadata], {attachedDeposit: '10 mN'}) // Save state for test runs, it is unique for each test t.context.worker = worker; @@ -44,7 +47,8 @@ test.beforeEach(async (t) => { nft, ali, bob, - nftOwner + nftOwner, + nftReceiver }; }); @@ -55,7 +59,7 @@ test.afterEach.always(async (t) => { }); test("Simple transfer", async (t) => { - const { ali, bob, nft, nftOwner } = t.context.accounts; + const { ali, nft, nftOwner } = t.context.accounts; let token = await nft.view("nft_token", "0"); t.is(token.owner_id, nftOwner.accountId); @@ -68,3 +72,13 @@ test("Simple transfer", async (t) => { token = await nft.view("nft_token", "0"); t.is(token.owner_id, ali.accountId); }); + +test("Transfer call fast return to sender", async (t) => { + const { nft, nftOwner, nftReceiver } = t.context.accounts; + + let res = await nftOwner.callRaw("nft_transfer_call", [nftReceiver.accountId, "0", null, "transfer & call", "return-it-now"], {attachedDeposit: '1'}) + t.is(JSON.stringify(res, null, 2), ""); + + token = await nft.view("nft_token", "0"); + t.is(token.owner_id, nftOwner.accountId); +}); \ No newline at end of file diff --git a/near-contract-standards/example-contracts/my-nft.ts b/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts similarity index 84% rename from near-contract-standards/example-contracts/my-nft.ts rename to near-contract-standards/example-contracts/non-fungible-token/my-nft.ts index 98f60ea0..3393a283 100644 --- a/near-contract-standards/example-contracts/my-nft.ts +++ b/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts @@ -1,4 +1,4 @@ -import { NonFungibleToken } from "../src/index"; +import { NonFungibleToken } from "../../src/index"; import { assert, Bytes, @@ -13,11 +13,11 @@ import { NFTContractMetadata, NonFungibleTokenMetadataProvider, TokenMetadata, -} from "../src/non_fungible_token/metadata"; -import { IntoStorageKey, Option } from "../src/non_fungible_token/utils"; -import { AccountId } from "../../lib/types"; -import { NonFungibleTokenCore } from "../src/non_fungible_token/core/core_impl"; -import { Token, TokenId } from "../src/non_fungible_token/token"; +} from "../../src/non_fungible_token/metadata"; +import { IntoStorageKey, Option } from "../../src/non_fungible_token/utils"; +import { AccountId } from "../../../lib/types"; +import { NonFungibleTokenCore } from "../../src/non_fungible_token/core/core_impl"; +import { Token, TokenId } from "../../src/non_fungible_token/token"; class StorageKey {} @@ -116,15 +116,15 @@ class MyNFT implements NonFungibleTokenCore, NonFungibleTokenMetadataProvider { } @call({ payableFunction: true }) - nft_mint({ + nft_mint([ token_id, token_owner_id, token_metadata, - }: { - token_id: TokenId; - token_owner_id: AccountId; - token_metadata: TokenMetadata; - }) { + ]: [ + token_id: TokenId, + token_owner_id: AccountId, + token_metadata: TokenMetadata, + ]) { assert( near.predecessorAccountId() === this.tokens.owner_id, "Unauthorized" diff --git a/near-contract-standards/example-contracts/non-fungible-token/test-token-receiver.ts b/near-contract-standards/example-contracts/non-fungible-token/test-token-receiver.ts new file mode 100644 index 00000000..6c73a74d --- /dev/null +++ b/near-contract-standards/example-contracts/non-fungible-token/test-token-receiver.ts @@ -0,0 +1,66 @@ +import { NonFungibleTokenReceiver } from "../../src/non_fungible_token/core/receiver"; +import { TokenId } from "../../src/non_fungible_token/token"; +import { + assert, + Bytes, + call, + initialize, + near, + NearBindgen, + NearPromise, + PromiseOrValue, + view, +} from "near-sdk-js/lib/index"; +import { AccountId } from "near-sdk-js/lib/types"; + +const BASE_GAS = 5_000_000_000_000n; +const PROMISE_CALL = 5_000_000_000_000n; +const GAS_FOR_NFT_ON_TRANSFER = BASE_GAS + PROMISE_CALL; + +interface ValueReturnInterface { + ok_go(return_it: boolean): PromiseOrValue; +} + +@NearBindgen({requireInit: true}) +class TokenReceiver implements NonFungibleTokenReceiver, ValueReturnInterface { + public non_fungible_token_account_id: AccountId; + + constructor() { + this.non_fungible_token_account_id = ''; + } + + @initialize({}) + init(non_fungible_token_account_id: AccountId) { + this.non_fungible_token_account_id = non_fungible_token_account_id; + } + + @call({}) + nft_on_transfer([sender_id, previous_owner_id, token_id, msg]: [sender_id: string, previous_owner_id: string, token_id: string, msg: String]): PromiseOrValue { + assert(near.predecessorAccountId() === this.non_fungible_token_account_id, "Only supports the one non-fungible token contract"); + near.log(`in nft_on_transfer; sender_id=${sender_id}, previous_owner_id=${previous_owner_id}, token_id=${token_id}, msg=${msg}`) + switch (msg) { + case 'return-it-now': + return true; + case 'return-it-later': { + let prepaid_gas = near.prepaidGas(); + let account_id = near.currentAccountId(); + return NearPromise.new(account_id).functionCall('ok_go', JSON.stringify(true), 0n, prepaid_gas - GAS_FOR_NFT_ON_TRANSFER); + } + case 'keep-it-now': + return false; + case 'keep-it-later': { + let prepaid_gas = near.prepaidGas(); + let account_id = near.currentAccountId(); + return NearPromise.new(account_id).functionCall('ok_go', JSON.stringify(false), 0n, prepaid_gas - GAS_FOR_NFT_ON_TRANSFER); + } + default: + throw new Error('unsupported msg') + } + } + + @call({}) + ok_go(return_it: boolean): PromiseOrValue { + near.log(`in ok_go, return_it=${return_it}`); + return return_it; + } +} \ No newline at end of file diff --git a/near-contract-standards/package.json b/near-contract-standards/package.json index e3790f69..049ceef8 100644 --- a/near-contract-standards/package.json +++ b/near-contract-standards/package.json @@ -6,11 +6,13 @@ "type": "module", "scripts": { "postinstall": "cd .. && yarn link && cd near-contract-standards && yarn link near-sdk-js", - "build": "yarn build:non-fungible-token", + "build": "run-s build:*", "rebuild": "cd .. && yarn build && cd near-contract-standards && rm -rf node_modules && rm -rf build && yarn && yarn build", - "build:non-fungible-token": "near-sdk-js build example-contracts/my-nft.ts build/my-nft.wasm", + "build:nft": "run-s build:nft-*", + "build:nft-contract": "near-sdk-js build example-contracts/non-fungible-token/my-nft.ts build/my-nft.wasm", + "build:nft-receiver": "near-sdk-js build example-contracts/non-fungible-token/test-token-receiver.ts build/nft-receiver.wasm", "test": "ava", - "test:non-fungible-token": "ava __tests__/my-nft/*" + "test:nft": "ava __tests__/my-nft/*" }, "author": "Near Inc ", "license": "Apache-2.0", diff --git a/near-contract-standards/src/non_fungible_token/core/receiver.ts b/near-contract-standards/src/non_fungible_token/core/receiver.ts index 2e95cb67..0b19f808 100644 --- a/near-contract-standards/src/non_fungible_token/core/receiver.ts +++ b/near-contract-standards/src/non_fungible_token/core/receiver.ts @@ -3,10 +3,10 @@ import { AccountId } from "near-sdk-js/lib/types"; import { TokenId } from "../token"; export interface NonFungibleTokenReceiver { - nft_on_transfer( + nft_on_transfer([sender_id, previous_owner_id, token_id, msg]: [ sender_id: AccountId, previous_owner_id: AccountId, token_id: TokenId, msg: String - ): PromiseOrValue; + ]): PromiseOrValue; } From 81ffc9d6b97d66f59f6677f7512fa217770f246f Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Tue, 25 Oct 2022 13:09:20 +0800 Subject: [PATCH 26/44] fix transfer call fast return test --- .../__tests__/my-nft/test_core.ava.js | 8 ++++--- .../non-fungible-token/my-nft.ts | 10 +++++++-- .../non-fungible-token/test-token-receiver.ts | 6 ++--- .../src/non_fungible_token/core/core_impl.ts | 22 +++++++++---------- .../src/non_fungible_token/core/resolver.ts | 4 ++-- 5 files changed, 29 insertions(+), 21 deletions(-) diff --git a/near-contract-standards/__tests__/my-nft/test_core.ava.js b/near-contract-standards/__tests__/my-nft/test_core.ava.js index 60820beb..88c848d6 100644 --- a/near-contract-standards/__tests__/my-nft/test_core.ava.js +++ b/near-contract-standards/__tests__/my-nft/test_core.ava.js @@ -1,6 +1,8 @@ import { Worker } from "near-workspaces"; import test from "ava"; +const MAX_GAS = 300_000_000_000_000n; + test.beforeEach(async (t) => { // Init the worker and start a Sandbox server const worker = await Worker.init(); @@ -76,9 +78,9 @@ test("Simple transfer", async (t) => { test("Transfer call fast return to sender", async (t) => { const { nft, nftOwner, nftReceiver } = t.context.accounts; - let res = await nftOwner.callRaw("nft_transfer_call", [nftReceiver.accountId, "0", null, "transfer & call", "return-it-now"], {attachedDeposit: '1'}) - t.is(JSON.stringify(res, null, 2), ""); + let res = await nftOwner.callRaw(nft, "nft_transfer_call", [nftReceiver.accountId, "0", null, "transfer & call", "return-it-now"], {attachedDeposit: '1', gas: MAX_GAS}) + t.is(Buffer.from(res.result.status.SuccessValue, 'base64').toString(), 'false'); - token = await nft.view("nft_token", "0"); + let token = await nft.view("nft_token", "0"); t.is(token.owner_id, nftOwner.accountId); }); \ No newline at end of file diff --git a/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts b/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts index 3393a283..7dc71b79 100644 --- a/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts +++ b/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts @@ -18,6 +18,7 @@ import { IntoStorageKey, Option } from "../../src/non_fungible_token/utils"; import { AccountId } from "../../../lib/types"; import { NonFungibleTokenCore } from "../../src/non_fungible_token/core/core_impl"; import { Token, TokenId } from "../../src/non_fungible_token/token"; +import { NonFungibleTokenResolver } from "../../src/non_fungible_token/core/resolver"; class StorageKey {} @@ -46,7 +47,7 @@ class StorageKeyApproval extends StorageKey implements IntoStorageKey { } @NearBindgen({ requireInit: true }) -class MyNFT implements NonFungibleTokenCore, NonFungibleTokenMetadataProvider { +class MyNFT implements NonFungibleTokenCore, NonFungibleTokenMetadataProvider, NonFungibleTokenResolver { tokens: NonFungibleToken; metadata: Option; @@ -56,6 +57,11 @@ class MyNFT implements NonFungibleTokenCore, NonFungibleTokenMetadataProvider { this.metadata = new NFTContractMetadata(); } + @call({}) + nft_resolve_transfer([previous_owner_id, receiver_id, token_id, approvals]: [previous_owner_id: string, receiver_id: string, token_id: string, approvals: { [approval: string]: bigint; }]): boolean { + return this.tokens.nft_resolve_transfer([previous_owner_id, receiver_id, token_id, approvals]) + } + @view({}) nft_metadata(): NFTContractMetadata { assert(this.metadata !== null, "Metadata not initialized"); @@ -72,7 +78,7 @@ class MyNFT implements NonFungibleTokenCore, NonFungibleTokenMetadataProvider { this.tokens.nft_transfer([receiver_id, token_id, approval_id, memo]); } - @call({}) + @call({payableFunction: true}) nft_transfer_call([receiver_id, token_id, approval_id, memo, msg]: [ receiver_id: string, token_id: string, diff --git a/near-contract-standards/example-contracts/non-fungible-token/test-token-receiver.ts b/near-contract-standards/example-contracts/non-fungible-token/test-token-receiver.ts index 6c73a74d..4bdbfb1a 100644 --- a/near-contract-standards/example-contracts/non-fungible-token/test-token-receiver.ts +++ b/near-contract-standards/example-contracts/non-fungible-token/test-token-receiver.ts @@ -13,8 +13,8 @@ import { } from "near-sdk-js/lib/index"; import { AccountId } from "near-sdk-js/lib/types"; -const BASE_GAS = 5_000_000_000_000n; -const PROMISE_CALL = 5_000_000_000_000n; +const BASE_GAS = 10_000_000_000_000n; +const PROMISE_CALL = 10_000_000_000_000n; const GAS_FOR_NFT_ON_TRANSFER = BASE_GAS + PROMISE_CALL; interface ValueReturnInterface { @@ -33,7 +33,7 @@ class TokenReceiver implements NonFungibleTokenReceiver, ValueReturnInterface { init(non_fungible_token_account_id: AccountId) { this.non_fungible_token_account_id = non_fungible_token_account_id; } - + @call({}) nft_on_transfer([sender_id, previous_owner_id, token_id, msg]: [sender_id: string, previous_owner_id: string, token_id: string, msg: String]): PromiseOrValue { assert(near.predecessorAccountId() === this.non_fungible_token_account_id, "Only supports the one non-fungible token contract"); diff --git a/near-contract-standards/src/non_fungible_token/core/core_impl.ts b/near-contract-standards/src/non_fungible_token/core/core_impl.ts index 2a29c5cf..ac4dee69 100644 --- a/near-contract-standards/src/non_fungible_token/core/core_impl.ts +++ b/near-contract-standards/src/non_fungible_token/core/core_impl.ts @@ -41,9 +41,9 @@ export interface NonFungibleTokenCore { nft_token(token_id: TokenId): Option; } -const GAS_FOR_RESOLVE_TRANSFER = 5_000_000_000_000n; +const GAS_FOR_RESOLVE_TRANSFER = 15_000_000_000_000n; const GAS_FOR_NFT_TRANSFER_CALL = - 25_000_000_000_000n + GAS_FOR_RESOLVE_TRANSFER; + 30_000_000_000_000n + GAS_FOR_RESOLVE_TRANSFER; function repeat(str: string, n: number) { return Array(n + 1).join(str); @@ -369,12 +369,12 @@ export class NonFungibleToken .functionCall( "nft_on_transfer", bytes( - JSON.stringify({ + JSON.stringify([ sender_id, - previous_owner_id: old_owner, + old_owner, token_id, msg, - }) + ]) ), 0n, near.prepaidGas() - GAS_FOR_NFT_TRANSFER_CALL @@ -383,12 +383,12 @@ export class NonFungibleToken NearPromise.new(near.currentAccountId()).functionCall( "nft_resolve_transfer", bytes( - JSON.stringify({ - previous_owner_id: old_owner, + JSON.stringify([ + old_owner, receiver_id, token_id, - approvals: old_approvals, - }) + old_approvals, + ]) ), 0n, GAS_FOR_RESOLVE_TRANSFER @@ -411,12 +411,12 @@ export class NonFungibleToken return new Token(token_id, owner_id, metadata, approved_account_ids); } - nft_resolve_transfer( + nft_resolve_transfer([previous_owner_id, receiver_id, token_id, approved_account_ids]: [ previous_owner_id: string, receiver_id: string, token_id: string, approved_account_ids: Option<{ [approvals: string]: bigint }> - ): boolean { + ]): boolean { let must_revert = false; let p: Bytes; try { diff --git a/near-contract-standards/src/non_fungible_token/core/resolver.ts b/near-contract-standards/src/non_fungible_token/core/resolver.ts index cf22e14c..61f2a8aa 100644 --- a/near-contract-standards/src/non_fungible_token/core/resolver.ts +++ b/near-contract-standards/src/non_fungible_token/core/resolver.ts @@ -3,10 +3,10 @@ import { TokenId } from "../token"; import { Option } from "../utils"; export interface NonFungibleTokenResolver { - nft_resolve_transfer( + nft_resolve_transfer([previous_owner_id, receiver_id, token_id, approvals]: [ previous_owner_id: AccountId, receiver_id: AccountId, token_id: TokenId, approvals: Option<{ [approval: string]: bigint }> - ): boolean; + ]): boolean; } From b47e4241f4d3554a0930a05f83a5914f4a14a3e4 Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Tue, 25 Oct 2022 14:36:02 +0800 Subject: [PATCH 27/44] add all core tests --- .github/workflows/contract-standards.yml | 23 + examples/package.json | 1 + examples/yarn.lock | 441 +++++++++++++- .../__tests__/my-nft/test_core.ava.js | 72 ++- near-contract-standards/package.json | 1 + near-contract-standards/yarn.lock | 441 +++++++++++++- tests/package.json | 3 +- tests/yarn.lock | 567 +++++++++++++++++- 8 files changed, 1539 insertions(+), 10 deletions(-) create mode 100644 .github/workflows/contract-standards.yml diff --git a/.github/workflows/contract-standards.yml b/.github/workflows/contract-standards.yml new file mode 100644 index 00000000..13840aa0 --- /dev/null +++ b/.github/workflows/contract-standards.yml @@ -0,0 +1,23 @@ +name: Examples +on: + pull_request: + push: + branches: + - master + - develop +jobs: + examples: + strategy: + matrix: + platform: [ubuntu-latest, macos-latest] + runs-on: ${{ matrix.platform }} + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-node@v2 + with: + node-version: "16" + - name: Install dependencies + run: yarn && cd near-contract-standards && yarn + - name: nft + run: cd near-contract-standards && yarn build:nft && yarn test:nft + \ No newline at end of file diff --git a/examples/package.json b/examples/package.json index 8bda810f..1eceeb82 100644 --- a/examples/package.json +++ b/examples/package.json @@ -43,6 +43,7 @@ "@types/lodash-es": "^4.17.6", "ava": "^4.2.0", "near-workspaces": "3.2.1", + "npm-run-all": "^4.1.5", "typescript": "^4.7.4" } } diff --git a/examples/yarn.lock b/examples/yarn.lock index 97b6583e..7955a466 100644 --- a/examples/yarn.lock +++ b/examples/yarn.lock @@ -720,6 +720,14 @@ cacheable-request@^7.0.2: normalize-url "^6.0.1" responselike "^2.0.0" +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + callsites@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/callsites/-/callsites-4.0.0.tgz" @@ -742,7 +750,7 @@ cbor@^8.1.0: dependencies: nofilter "^3.1.0" -chalk@^2.0.0, chalk@^2.3.2: +chalk@^2.0.0, chalk@^2.3.2, chalk@^2.4.1: version "2.4.2" resolved "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -917,6 +925,17 @@ convert-to-spaces@^2.0.1: resolved "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz" integrity sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ== +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz" @@ -960,6 +979,14 @@ defer-to-connect@^2.0.0: resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + del@^6.1.1: version "6.1.1" resolved "https://registry.npmjs.org/del/-/del-6.1.1.tgz" @@ -1039,6 +1066,45 @@ error-polyfill@^0.1.3: o3 "^1.0.3" u3 "^0.1.1" +es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.5: + version "1.20.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" + integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.3" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.2" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz" @@ -1170,6 +1236,21 @@ function-bind@^1.1.1: resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -1180,6 +1261,15 @@ get-caller-file@^2.0.5: resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + get-stream@^5.1.0: version "5.2.0" resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz" @@ -1187,6 +1277,14 @@ get-stream@^5.1.0: dependencies: pump "^3.0.0" +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" @@ -1256,11 +1354,35 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + has@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -1268,6 +1390,11 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + http-cache-semantics@^4.0.0: version "4.1.0" resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz" @@ -1330,6 +1457,15 @@ inherits@2, inherits@2.0.4: resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + irregular-plurals@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.3.0.tgz" @@ -1340,6 +1476,13 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" @@ -1347,6 +1490,14 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + is-builtin-module@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz#6fdb24313b1c03b75f8b9711c0feb8c30b903b00" @@ -1354,6 +1505,11 @@ is-builtin-module@^3.1.0: dependencies: builtin-modules "^3.0.0" +is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + is-core-module@^2.9.0: version "2.9.0" resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" @@ -1361,6 +1517,13 @@ is-core-module@^2.9.0: dependencies: has "^1.0.3" +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + is-error@^2.2.2: version "2.2.2" resolved "https://registry.npmjs.org/is-error/-/is-error-2.2.2.tgz" @@ -1393,6 +1556,18 @@ is-module@^1.0.0: resolved "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + is-number@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" @@ -1425,11 +1600,52 @@ is-reference@^1.2.1: dependencies: "@types/estree" "*" +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + is-unicode-supported@^1.2.0: version "1.2.0" resolved "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.2.0.tgz" integrity sha512-wH+U77omcRzevfIG8dDhTS0V9zZyweakfD01FULl97+0EHiJTTZtJqxPSkIIo/SDPv/i07k/C9jAPY+jwLLeUQ== +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + js-sha256@^0.9.0: version "0.9.0" resolved "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz" @@ -1578,6 +1794,11 @@ mem@^9.0.2: map-age-cleaner "^0.1.3" mimic-fn "^4.0.0" +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" @@ -1606,7 +1827,7 @@ mimic-response@^3.1.0: resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -minimatch@^3.1.1: +minimatch@^3.0.4, minimatch@^3.1.1: version "3.1.2" resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -1716,6 +1937,11 @@ near-workspaces@3.2.1: rimraf "^3.0.2" temp-dir "^2.0.0" +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + node-fetch@^2.6.1: version "2.6.7" resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" @@ -1738,6 +1964,16 @@ nofilter@^3.1.0: resolved "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz" integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" @@ -1748,6 +1984,21 @@ normalize-url@^6.0.1: resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== +npm-run-all@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" + integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== + dependencies: + ansi-styles "^3.2.1" + chalk "^2.4.1" + cross-spawn "^6.0.5" + memorystream "^0.3.1" + minimatch "^3.0.4" + pidtree "^0.3.0" + read-pkg "^3.0.0" + shell-quote "^1.6.1" + string.prototype.padend "^3.0.0" + o3@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/o3/-/o3-1.0.3.tgz" @@ -1755,6 +2006,26 @@ o3@^1.0.3: dependencies: capability "^0.2.5" +object-inspect@^1.12.2, object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" @@ -1859,11 +2130,23 @@ path-is-absolute@^1.0.0: resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== +path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + path-parse@^1.0.7: version "1.0.7" resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + path-type@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" @@ -1879,6 +2162,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pidtree@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" + integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== + pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" @@ -1942,6 +2230,15 @@ quick-lru@^5.1.1: resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" @@ -1949,6 +2246,15 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz" @@ -1971,7 +2277,7 @@ resolve-from@^5.0.0: resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve@^1.17.0, resolve@^1.19.0: +resolve@^1.10.0, resolve@^1.17.0, resolve@^1.19.0: version "1.22.1" resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -2031,6 +2337,20 @@ safe-buffer@~5.1.1: resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +"semver@2 || 3 || 4 || 5", semver@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + semver@^6.3.0: version "6.3.0" resolved "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -2055,6 +2375,32 @@ setprototypeof@1.2.0: resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + +shell-quote@^1.6.1: + version "1.7.4" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.4.tgz#33fe15dee71ab2a81fcbd3a52106c5cfb9fb75d8" + integrity sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" @@ -2100,6 +2446,32 @@ sourcemap-codec@^1.4.8: resolved "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.12" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" + integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz" @@ -2135,6 +2507,33 @@ string-width@^5.0.0: emoji-regex "^9.2.2" strip-ansi "^7.0.1" +string.prototype.padend@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz#997a6de12c92c7cb34dc8a201a6c53d9bd88a5f1" + integrity sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +string.prototype.trimend@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" + integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +string.prototype.trimstart@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" + integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" @@ -2245,6 +2644,16 @@ u3@^0.1.1: resolved "https://registry.npmjs.org/u3/-/u3-0.1.1.tgz" integrity sha512-+J5D5ir763y+Am/QY6hXNRlwljIeRMZMGs0cT6qqZVVzzT3X3nFPXVyPOFRMOR4kupB0T8JnCdpWdp6Q/iXn3w== +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + universalify@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz" @@ -2258,6 +2667,14 @@ update-browserslist-db@^1.0.4: escalade "^3.1.1" picocolors "^1.0.0" +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" @@ -2276,6 +2693,24 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" diff --git a/near-contract-standards/__tests__/my-nft/test_core.ava.js b/near-contract-standards/__tests__/my-nft/test_core.ava.js index 88c848d6..f6cccf3d 100644 --- a/near-contract-standards/__tests__/my-nft/test_core.ava.js +++ b/near-contract-standards/__tests__/my-nft/test_core.ava.js @@ -83,4 +83,74 @@ test("Transfer call fast return to sender", async (t) => { let token = await nft.view("nft_token", "0"); t.is(token.owner_id, nftOwner.accountId); -}); \ No newline at end of file +}); + +test("Transfer call slow return to sender", async (t) => { + const { nft, nftOwner, nftReceiver } = t.context.accounts; + + let res = await nftOwner.callRaw(nft, "nft_transfer_call", [nftReceiver.accountId, "0", null, "transfer & call", "return-it-later"], {attachedDeposit: '1', gas: MAX_GAS}) + t.is(Buffer.from(res.result.status.SuccessValue, 'base64').toString(), 'false'); + + let token = await nft.view("nft_token", "0"); + t.is(token.owner_id, nftOwner.accountId); +}) + +test("Transfer call fast keep with sender", async (t) => { + const { nft, nftOwner, nftReceiver } = t.context.accounts; + + let res = await nftOwner.callRaw(nft, "nft_transfer_call", [nftReceiver.accountId, "0", null, "transfer & call", "keep-it-now"], {attachedDeposit: '1', gas: MAX_GAS}) + t.is(Buffer.from(res.result.status.SuccessValue, 'base64').toString(), 'true'); + + let token = await nft.view("nft_token", "0"); + t.is(token.owner_id, nftReceiver.accountId); +}) + +test("Transfer call slow keep with sender", async (t) => { + const { nft, nftOwner, nftReceiver } = t.context.accounts; + + let res = await nftOwner.callRaw(nft, "nft_transfer_call", [nftReceiver.accountId, "0", null, "transfer & call", "keep-it-later"], {attachedDeposit: '1', gas: MAX_GAS}) + t.is(Buffer.from(res.result.status.SuccessValue, 'base64').toString(), 'true'); + + let token = await nft.view("nft_token", "0"); + t.is(token.owner_id, nftReceiver.accountId); +}) + +test("Transfer call receiver panics", async (t) => { + const { nft, nftOwner, nftReceiver } = t.context.accounts; + + let res = await nftOwner.callRaw(nft, "nft_transfer_call", [nftReceiver.accountId, "0", null, "transfer & call", "incorrect message"], {attachedDeposit: '1', gas: MAX_GAS}) + t.is(Buffer.from(res.result.status.SuccessValue, 'base64').toString(), 'false'); + + t.is(res.logs.length, 3); + + let token = await nft.view("nft_token", "0"); + t.is(token.owner_id, nftOwner.accountId); +}) + +test("Transfer call receiver panics and nft_resolve_transfer produces no log if not enough gas", async (t) => { + const { nft, nftOwner, nftReceiver } = t.context.accounts; + + let res = await nftOwner.callRaw(nft, "nft_transfer_call", [nftReceiver.accountId, "0", null, "transfer & call", "incorrect message"], {attachedDeposit: '1', gas: 30_000_000_000_000n}) + t.assert(res.result.status.Failure !== undefined); + + t.is(res.logs.length, 0); + + let token = await nft.view("nft_token", "0"); + t.is(token.owner_id, nftOwner.accountId); +}) + +test("Simple transfer no logs on failure", async (t) => { + const { nft, nftOwner } = t.context.accounts; + + let token = await nft.view("nft_token", "0"); + t.is(token.owner_id, nftOwner.accountId); + + // transfer to the current owner should fail and not print log + let res = await nftOwner.callRaw(nft, 'nft_transfer', [nftOwner.accountId, '0', null, 'simple transfer'], {attachedDeposit: '1'}) + t.assert(res.result.status.Failure !== undefined); + + t.is(res.logs.length, 0); + + token = await nft.view("nft_token", "0"); + t.is(token.owner_id, nftOwner.accountId); +}) \ No newline at end of file diff --git a/near-contract-standards/package.json b/near-contract-standards/package.json index 049ceef8..a86e2559 100644 --- a/near-contract-standards/package.json +++ b/near-contract-standards/package.json @@ -23,6 +23,7 @@ "devDependencies": { "ava": "^4.2.0", "typescript": "^4.7.4", + "npm-run-all": "^4.1.5", "near-workspaces": "3.2.1" } } diff --git a/near-contract-standards/yarn.lock b/near-contract-standards/yarn.lock index fe1cf9b3..40b4524a 100644 --- a/near-contract-standards/yarn.lock +++ b/near-contract-standards/yarn.lock @@ -708,6 +708,14 @@ cacheable-request@^7.0.2: normalize-url "^6.0.1" responselike "^2.0.0" +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + callsites@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-4.0.0.tgz#8014cea4fedfe681a30e2f7d2d557dd95808a92a" @@ -730,7 +738,7 @@ cbor@^8.1.0: dependencies: nofilter "^3.1.0" -chalk@^2.0.0, chalk@^2.3.2: +chalk@^2.0.0, chalk@^2.3.2, chalk@^2.4.1: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -905,6 +913,17 @@ convert-to-spaces@^2.0.1: resolved "https://registry.yarnpkg.com/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz#61a6c98f8aa626c16b296b862a91412a33bceb6b" integrity sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ== +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -948,6 +967,14 @@ defer-to-connect@^2.0.0: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + del@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" @@ -1027,6 +1054,45 @@ error-polyfill@^0.1.3: o3 "^1.0.3" u3 "^0.1.1" +es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.5: + version "1.20.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" + integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.3" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.2" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -1158,6 +1224,21 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" @@ -1168,6 +1249,15 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + get-stream@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" @@ -1175,6 +1265,14 @@ get-stream@^5.1.0: dependencies: pump "^3.0.0" +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -1244,11 +1342,35 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -1256,6 +1378,11 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + http-cache-semantics@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" @@ -1318,6 +1445,15 @@ inherits@2, inherits@2.0.4: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + irregular-plurals@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-3.3.0.tgz#67d0715d4361a60d9fd9ee80af3881c631a31ee2" @@ -1328,6 +1464,13 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -1335,6 +1478,14 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + is-builtin-module@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.1.0.tgz#6fdb24313b1c03b75f8b9711c0feb8c30b903b00" @@ -1342,6 +1493,11 @@ is-builtin-module@^3.1.0: dependencies: builtin-modules "^3.0.0" +is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + is-core-module@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" @@ -1349,6 +1505,13 @@ is-core-module@^2.9.0: dependencies: has "^1.0.3" +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + is-error@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/is-error/-/is-error-2.2.2.tgz#c10ade187b3c93510c5470a5567833ee25649843" @@ -1381,6 +1544,18 @@ is-module@^1.0.0: resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -1413,11 +1588,52 @@ is-reference@^1.2.1: dependencies: "@types/estree" "*" +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + is-unicode-supported@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.2.0.tgz#f4f54f34d8ebc84a46b93559a036763b6d3e1014" integrity sha512-wH+U77omcRzevfIG8dDhTS0V9zZyweakfD01FULl97+0EHiJTTZtJqxPSkIIo/SDPv/i07k/C9jAPY+jwLLeUQ== +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + js-sha256@^0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" @@ -1566,6 +1782,11 @@ mem@^9.0.2: map-age-cleaner "^0.1.3" mimic-fn "^4.0.0" +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" @@ -1594,7 +1815,7 @@ mimic-response@^3.1.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -minimatch@^3.1.1: +minimatch@^3.0.4, minimatch@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -1704,6 +1925,11 @@ near-workspaces@3.2.1: rimraf "^3.0.2" temp-dir "^2.0.0" +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + node-fetch@^2.6.1: version "2.6.7" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" @@ -1726,6 +1952,16 @@ nofilter@^3.1.0: resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -1736,6 +1972,21 @@ normalize-url@^6.0.1: resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== +npm-run-all@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" + integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== + dependencies: + ansi-styles "^3.2.1" + chalk "^2.4.1" + cross-spawn "^6.0.5" + memorystream "^0.3.1" + minimatch "^3.0.4" + pidtree "^0.3.0" + read-pkg "^3.0.0" + shell-quote "^1.6.1" + string.prototype.padend "^3.0.0" + o3@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/o3/-/o3-1.0.3.tgz#192ce877a882dfa6751f0412a865fafb2da1dac0" @@ -1743,6 +1994,26 @@ o3@^1.0.3: dependencies: capability "^0.2.5" +object-inspect@^1.12.2, object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -1847,11 +2118,23 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== +path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -1867,6 +2150,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pidtree@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" + integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== + pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" @@ -1930,6 +2218,15 @@ quick-lru@^5.1.1: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -1937,6 +2234,15 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -1959,7 +2265,7 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -resolve@^1.17.0, resolve@^1.19.0: +resolve@^1.10.0, resolve@^1.17.0, resolve@^1.19.0: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -2019,6 +2325,20 @@ safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +"semver@2 || 3 || 4 || 5", semver@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" @@ -2043,6 +2363,32 @@ setprototypeof@1.2.0: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + +shell-quote@^1.6.1: + version "1.7.4" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.4.tgz#33fe15dee71ab2a81fcbd3a52106c5cfb9fb75d8" + integrity sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" @@ -2088,6 +2434,32 @@ sourcemap-codec@^1.4.8: resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.12" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" + integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -2123,6 +2495,33 @@ string-width@^5.0.0: emoji-regex "^9.2.2" strip-ansi "^7.0.1" +string.prototype.padend@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz#997a6de12c92c7cb34dc8a201a6c53d9bd88a5f1" + integrity sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +string.prototype.trimend@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" + integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +string.prototype.trimstart@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" + integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -2233,6 +2632,16 @@ u3@^0.1.1: resolved "https://registry.yarnpkg.com/u3/-/u3-0.1.1.tgz#5f52044f42ee76cd8de33148829e14528494b73b" integrity sha512-+J5D5ir763y+Am/QY6hXNRlwljIeRMZMGs0cT6qqZVVzzT3X3nFPXVyPOFRMOR4kupB0T8JnCdpWdp6Q/iXn3w== +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + universalify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" @@ -2246,6 +2655,14 @@ update-browserslist-db@^1.0.4: escalade "^3.1.1" picocolors "^1.0.0" +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -2264,6 +2681,24 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" diff --git a/tests/package.json b/tests/package.json index 5bc3d5fd..05f6a9fd 100644 --- a/tests/package.json +++ b/tests/package.json @@ -56,6 +56,7 @@ "devDependencies": { "ava": "^4.2.0", "near-workspaces": "3.2.1", - "typescript": "^4.7.4" + "typescript": "^4.7.4", + "npm-run-all": "^4.1.5" } } diff --git a/tests/yarn.lock b/tests/yarn.lock index 8317aabf..b058ed57 100644 --- a/tests/yarn.lock +++ b/tests/yarn.lock @@ -110,6 +110,13 @@ ansi-regex@^6.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + ansi-styles@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" @@ -303,6 +310,14 @@ cacheable-request@^7.0.2: normalize-url "^6.0.1" responselike "^2.0.0" +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + callsites@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-4.0.0.tgz#8014cea4fedfe681a30e2f7d2d557dd95808a92a" @@ -320,6 +335,15 @@ cbor@^8.1.0: dependencies: nofilter "^3.1.0" +chalk@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + chalk@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6" @@ -408,6 +432,13 @@ code-excerpt@^4.0.0: dependencies: convert-to-spaces "^2.0.1" +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + color-convert@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" @@ -415,6 +446,11 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + color-name@~1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" @@ -457,6 +493,17 @@ convert-to-spaces@^2.0.1: resolved "https://registry.yarnpkg.com/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz#61a6c98f8aa626c16b296b862a91412a33bceb6b" integrity sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ== +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" @@ -490,6 +537,14 @@ defer-to-connect@^2.0.0: resolved "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" + integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + del@^6.1.1: version "6.1.1" resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" @@ -548,6 +603,13 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + error-polyfill@^0.1.3: version "0.1.3" resolved "https://registry.npmjs.org/error-polyfill/-/error-polyfill-0.1.3.tgz#df848b61ad8834f7a5db69a70b9913df86721d15" @@ -557,6 +619,45 @@ error-polyfill@^0.1.3: o3 "^1.0.3" u3 "^0.1.1" +es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.5: + version "1.20.4" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" + integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.1.3" + get-symbol-description "^1.0.0" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-symbols "^1.0.3" + internal-slot "^1.0.3" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-weakref "^1.0.2" + object-inspect "^1.12.2" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trimend "^1.0.5" + string.prototype.trimstart "^1.0.5" + unbox-primitive "^1.0.2" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -567,6 +668,11 @@ escape-string-regexp@5.0.0, escape-string-regexp@^5.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + escape-string-regexp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" @@ -654,11 +760,40 @@ fsevents@~2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + get-caller-file@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" + integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + get-stream@^5.1.0: version "5.2.0" resolved "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" @@ -666,6 +801,14 @@ get-stream@^5.1.0: dependencies: pump "^3.0.0" +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" @@ -725,11 +868,52 @@ got@^11.8.2: p-cancelable "^2.0.0" responselike "^2.0.0" -graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + http-cache-semantics@^4.0.0: version "4.1.0" resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" @@ -792,11 +976,32 @@ inherits@2, inherits@2.0.4: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + irregular-plurals@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-3.3.0.tgz#67d0715d4361a60d9fd9ee80af3881c631a31ee2" integrity sha512-MVBLKUTangM3EfRPFROhmWQQKRDsrgI83J8GS3jXy+OwYqiR2/aoWndYQ5416jLE3uaGgLH7ncme3X9y09gZ3g== +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -804,6 +1009,33 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + is-error@^2.2.2: version "2.2.2" resolved "https://registry.yarnpkg.com/is-error/-/is-error-2.2.2.tgz#c10ade187b3c93510c5470a5567833ee25649843" @@ -831,6 +1063,18 @@ is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -856,11 +1100,52 @@ is-promise@^4.0.0: resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + is-unicode-supported@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.2.0.tgz#f4f54f34d8ebc84a46b93559a036763b6d3e1014" integrity sha512-wH+U77omcRzevfIG8dDhTS0V9zZyweakfD01FULl97+0EHiJTTZtJqxPSkIIo/SDPv/i07k/C9jAPY+jwLLeUQ== +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + js-sha256@^0.9.0: version "0.9.0" resolved "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" @@ -884,6 +1169,11 @@ json-buffer@3.0.1, json-buffer@~3.0.1: resolved "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" @@ -901,6 +1191,16 @@ keyv@^4.0.0: compress-brotli "^1.3.8" json-buffer "3.0.1" +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + load-json-file@^7.0.0: version "7.0.1" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-7.0.1.tgz#a3c9fde6beffb6bedb5acf104fad6bb1604e1b00" @@ -959,6 +1259,11 @@ mem@^9.0.2: map-age-cleaner "^0.1.3" mimic-fn "^4.0.0" +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + merge2@^1.3.0, merge2@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" @@ -987,7 +1292,7 @@ mimic-response@^3.1.0: resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -minimatch@^3.1.1: +minimatch@^3.0.4, minimatch@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -1082,6 +1387,11 @@ near-workspaces@3.2.1: rimraf "^3.0.2" temp-dir "^2.0.0" +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + node-fetch@^2.6.1: version "2.6.7" resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" @@ -1099,6 +1409,16 @@ nofilter@^3.1.0: resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" @@ -1109,6 +1429,21 @@ normalize-url@^6.0.1: resolved "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== +npm-run-all@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" + integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== + dependencies: + ansi-styles "^3.2.1" + chalk "^2.4.1" + cross-spawn "^6.0.5" + memorystream "^0.3.1" + minimatch "^3.0.4" + pidtree "^0.3.0" + read-pkg "^3.0.0" + shell-quote "^1.6.1" + string.prototype.padend "^3.0.0" + o3@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/o3/-/o3-1.0.3.tgz#192ce877a882dfa6751f0412a865fafb2da1dac0" @@ -1116,6 +1451,26 @@ o3@^1.0.3: dependencies: capability "^0.2.5" +object-inspect@^1.12.2, object-inspect@^1.9.0: + version "1.12.2" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -1173,6 +1528,14 @@ p-timeout@^5.0.2: resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-5.1.0.tgz#b3c691cf4415138ce2d9cfe071dba11f0fee085b" integrity sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew== +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + parse-ms@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" @@ -1188,6 +1551,23 @@ path-is-absolute@^1.0.0: resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== +path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -1198,6 +1578,16 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +pidtree@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" + integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + pkg-conf@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-4.0.0.tgz#63ace00cbacfa94c2226aee133800802d3e3b80c" @@ -1248,6 +1638,15 @@ quick-lru@^5.1.1: resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + readdirp@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" @@ -1255,6 +1654,15 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -1277,6 +1685,15 @@ resolve-from@^5.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== +resolve@^1.10.0: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + responselike@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" @@ -1308,6 +1725,20 @@ safe-buffer@^5.0.1: resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +"semver@2 || 3 || 4 || 5", semver@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + semver@^7.3.2: version "7.3.7" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" @@ -1327,6 +1758,32 @@ setprototypeof@1.2.0: resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + +shell-quote@^1.6.1: + version "1.7.4" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.4.tgz#33fe15dee71ab2a81fcbd3a52106c5cfb9fb75d8" + integrity sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw== + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" @@ -1350,6 +1807,32 @@ slice-ansi@^5.0.0: ansi-styles "^6.0.0" is-fullwidth-code-point "^4.0.0" +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.12" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" + integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -1385,6 +1868,33 @@ string-width@^5.0.0: emoji-regex "^9.2.2" strip-ansi "^7.0.1" +string.prototype.padend@^3.0.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz#997a6de12c92c7cb34dc8a201a6c53d9bd88a5f1" + integrity sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.1" + +string.prototype.trimend@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" + integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + +string.prototype.trimstart@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" + integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.19.5" + strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" @@ -1399,6 +1909,11 @@ strip-ansi@^7.0.1: dependencies: ansi-regex "^6.0.1" +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + supertap@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/supertap/-/supertap-3.0.1.tgz#aa89e4522104402c6e8fe470a7d2db6dc4037c6a" @@ -1409,6 +1924,18 @@ supertap@^3.0.1: serialize-error "^7.0.1" strip-ansi "^7.0.1" +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + tar@^6.1.0: version "6.1.11" resolved "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" @@ -1473,11 +2000,29 @@ u3@^0.1.1: resolved "https://registry.npmjs.org/u3/-/u3-0.1.1.tgz#5f52044f42ee76cd8de33148829e14528494b73b" integrity sha512-+J5D5ir763y+Am/QY6hXNRlwljIeRMZMGs0cT6qqZVVzzT3X3nFPXVyPOFRMOR4kupB0T8JnCdpWdp6Q/iXn3w== +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + universalify@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" @@ -1496,6 +2041,24 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" From ba57c2360f2d2392cd1811803c3f8239b6ba07f4 Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Wed, 26 Oct 2022 17:42:51 +0800 Subject: [PATCH 28/44] reorganize code because ts interface must be impl in place, unlike rust trait --- .../non-fungible-token/my-nft.ts | 2 +- near-contract-standards/package.json | 2 +- .../approval/approval_receiver.ts | 7 +++++ .../src/non_fungible_token/core/index.ts | 21 ++++++++++++-- .../{core/core_impl.ts => impl.ts} | 28 ++++--------------- .../src/non_fungible_token/index.ts | 2 +- 6 files changed, 35 insertions(+), 27 deletions(-) create mode 100644 near-contract-standards/src/non_fungible_token/approval/approval_receiver.ts rename near-contract-standards/src/non_fungible_token/{core/core_impl.ts => impl.ts} (95%) diff --git a/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts b/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts index 7dc71b79..b5ee44c7 100644 --- a/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts +++ b/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts @@ -16,7 +16,7 @@ import { } from "../../src/non_fungible_token/metadata"; import { IntoStorageKey, Option } from "../../src/non_fungible_token/utils"; import { AccountId } from "../../../lib/types"; -import { NonFungibleTokenCore } from "../../src/non_fungible_token/core/core_impl"; +import { NonFungibleTokenCore } from "../../src/non_fungible_token/core"; import { Token, TokenId } from "../../src/non_fungible_token/token"; import { NonFungibleTokenResolver } from "../../src/non_fungible_token/core/resolver"; diff --git a/near-contract-standards/package.json b/near-contract-standards/package.json index a86e2559..e18c4567 100644 --- a/near-contract-standards/package.json +++ b/near-contract-standards/package.json @@ -8,7 +8,7 @@ "postinstall": "cd .. && yarn link && cd near-contract-standards && yarn link near-sdk-js", "build": "run-s build:*", "rebuild": "cd .. && yarn build && cd near-contract-standards && rm -rf node_modules && rm -rf build && yarn && yarn build", - "build:nft": "run-s build:nft-*", + "build-nft": "run-s build:nft-*", "build:nft-contract": "near-sdk-js build example-contracts/non-fungible-token/my-nft.ts build/my-nft.wasm", "build:nft-receiver": "near-sdk-js build example-contracts/non-fungible-token/test-token-receiver.ts build/nft-receiver.wasm", "test": "ava", diff --git a/near-contract-standards/src/non_fungible_token/approval/approval_receiver.ts b/near-contract-standards/src/non_fungible_token/approval/approval_receiver.ts new file mode 100644 index 00000000..0ba5c447 --- /dev/null +++ b/near-contract-standards/src/non_fungible_token/approval/approval_receiver.ts @@ -0,0 +1,7 @@ +import { PromiseOrValue } from "near-sdk-js/lib"; +import { AccountId } from "near-sdk-js/lib/types"; +import { TokenId } from "../token"; + +export interface NonFungibleTokenApproval { + nft_on_approve([token_id, owner_id, approval_id, msg]: [token_id: TokenId, owner_id: AccountId, approval_id: bigint, msg: string]): PromiseOrValue; +} \ No newline at end of file diff --git a/near-contract-standards/src/non_fungible_token/core/index.ts b/near-contract-standards/src/non_fungible_token/core/index.ts index f09d5eff..a201aa3c 100644 --- a/near-contract-standards/src/non_fungible_token/core/index.ts +++ b/near-contract-standards/src/non_fungible_token/core/index.ts @@ -1,3 +1,20 @@ -import { NonFungibleToken } from "./core_impl"; +import { AccountId } from "near-sdk-js/lib/types"; +import { Token, TokenId } from "../token"; +import { Option } from "../utils"; -export { NonFungibleToken }; +export interface NonFungibleTokenCore { + nft_transfer([receiver_id, token_id, approval_id, memo]: [ + receiver_id: AccountId, + token_id: TokenId, + approval_id: Option, + memo: Option + ]); + nft_transfer_call([receiver_id, token_id, approval_id, memo]: [ + receiver_id: AccountId, + token_id: TokenId, + approval_id: Option, + memo: Option, + msg: string + ]); + nft_token(token_id: TokenId): Option; + } \ No newline at end of file diff --git a/near-contract-standards/src/non_fungible_token/core/core_impl.ts b/near-contract-standards/src/non_fungible_token/impl.ts similarity index 95% rename from near-contract-standards/src/non_fungible_token/core/core_impl.ts rename to near-contract-standards/src/non_fungible_token/impl.ts index ac4dee69..e211e05a 100644 --- a/near-contract-standards/src/non_fungible_token/core/core_impl.ts +++ b/near-contract-standards/src/non_fungible_token/impl.ts @@ -9,7 +9,7 @@ import { bytes, } from "near-sdk-js/lib"; import { PromiseResult } from "near-sdk-js/lib/types"; -import { TokenMetadata } from "../metadata"; +import { TokenMetadata } from "./metadata"; import { hash_account_id, refund_approved_account_ids, @@ -18,28 +18,12 @@ import { assert_at_least_one_yocto, IntoStorageKey, Option, -} from "../utils"; -import { NftMint, NftTransfer } from "../events"; -import { NonFungibleTokenResolver } from "./resolver"; +} from "./utils"; +import { NftMint, NftTransfer } from "./events"; +import { NonFungibleTokenResolver } from "./core/resolver"; import { AccountId } from "near-sdk-js/lib/types/index"; -import { Token, TokenId } from "../token"; - -export interface NonFungibleTokenCore { - nft_transfer([receiver_id, token_id, approval_id, memo]: [ - receiver_id: AccountId, - token_id: TokenId, - approval_id: Option, - memo: Option - ]); - nft_transfer_call([receiver_id, token_id, approval_id, memo]: [ - receiver_id: AccountId, - token_id: TokenId, - approval_id: Option, - memo: Option, - msg: string - ]); - nft_token(token_id: TokenId): Option; -} +import { Token, TokenId } from "./token"; +import { NonFungibleTokenCore } from "./core"; const GAS_FOR_RESOLVE_TRANSFER = 15_000_000_000_000n; const GAS_FOR_NFT_TRANSFER_CALL = diff --git a/near-contract-standards/src/non_fungible_token/index.ts b/near-contract-standards/src/non_fungible_token/index.ts index 1fff9dd5..3b7ea1ec 100644 --- a/near-contract-standards/src/non_fungible_token/index.ts +++ b/near-contract-standards/src/non_fungible_token/index.ts @@ -1,3 +1,3 @@ -import { NonFungibleToken } from "./core/index"; +import { NonFungibleToken } from "./impl"; export { NonFungibleToken }; From b9009660d3c12e7ab0939e9cd652c0da9afbb7be Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Thu, 27 Oct 2022 19:46:47 +0800 Subject: [PATCH 29/44] implement approval, approval receiver interface and make an example approval receiver contract --- .../non-fungible-token/my-nft.ts | 24 +++- .../test-approval-receiver.ts | 47 +++++++ near-contract-standards/package.json | 1 + .../approval/approval_receiver.ts | 2 +- .../src/non_fungible_token/approval/index.ts | 11 ++ .../src/non_fungible_token/impl.ts | 116 +++++++++++++++++- .../src/non_fungible_token/utils.ts | 7 ++ 7 files changed, 205 insertions(+), 3 deletions(-) create mode 100644 near-contract-standards/example-contracts/non-fungible-token/test-approval-receiver.ts create mode 100644 near-contract-standards/src/non_fungible_token/approval/index.ts diff --git a/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts b/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts index b5ee44c7..bcec5b97 100644 --- a/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts +++ b/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts @@ -6,6 +6,7 @@ import { initialize, near, NearBindgen, + NearPromise, PromiseOrValue, view, } from "near-sdk-js/lib/index"; @@ -19,6 +20,7 @@ import { AccountId } from "../../../lib/types"; import { NonFungibleTokenCore } from "../../src/non_fungible_token/core"; import { Token, TokenId } from "../../src/non_fungible_token/token"; import { NonFungibleTokenResolver } from "../../src/non_fungible_token/core/resolver"; +import { NonFungibleTokenApproval } from "../../src/non_fungible_token/approval"; class StorageKey {} @@ -47,7 +49,7 @@ class StorageKeyApproval extends StorageKey implements IntoStorageKey { } @NearBindgen({ requireInit: true }) -class MyNFT implements NonFungibleTokenCore, NonFungibleTokenMetadataProvider, NonFungibleTokenResolver { +class MyNFT implements NonFungibleTokenCore, NonFungibleTokenMetadataProvider, NonFungibleTokenResolver, NonFungibleTokenApproval { tokens: NonFungibleToken; metadata: Option; @@ -57,6 +59,26 @@ class MyNFT implements NonFungibleTokenCore, NonFungibleTokenMetadataProvider, N this.metadata = new NFTContractMetadata(); } + @call({payableFunction: true}) + nft_approve([token_id, account_id, msg]: [token_id: string, account_id: string, msg: string]): NearPromise { + return this.tokens.nft_approve([token_id, account_id, msg]); + } + + @call({payableFunction: true}) + nft_revoke([token_id, account_id]: [token_id: string, account_id: string]) { + return this.tokens.nft_revoke([token_id, account_id]); + } + + @call({payableFunction: true}) + nft_revoke_all(token_id: string) { + return this.tokens.nft_revoke_all(token_id); + } + + @view({}) + nft_is_approved([token_id, approved_account_id, approval_id]: [token_id: string, approved_account_id: string, approval_id: bigint]): boolean { + return this.tokens.nft_is_approved([token_id, approved_account_id, approval_id]); + } + @call({}) nft_resolve_transfer([previous_owner_id, receiver_id, token_id, approvals]: [previous_owner_id: string, receiver_id: string, token_id: string, approvals: { [approval: string]: bigint; }]): boolean { return this.tokens.nft_resolve_transfer([previous_owner_id, receiver_id, token_id, approvals]) diff --git a/near-contract-standards/example-contracts/non-fungible-token/test-approval-receiver.ts b/near-contract-standards/example-contracts/non-fungible-token/test-approval-receiver.ts new file mode 100644 index 00000000..538a6956 --- /dev/null +++ b/near-contract-standards/example-contracts/non-fungible-token/test-approval-receiver.ts @@ -0,0 +1,47 @@ +import { initialize, near, NearBindgen, NearPromise, PromiseOrValue, assert } from "../../../lib"; +import { AccountId } from "../../../lib/types"; +import { NonFungibleTokenApprovalReceiver } from "../../src/non_fungible_token/approval/approval_receiver"; + +const BASE_GAS = 5_000_000_000_000n; +const PROMISE_CALL = 5_000_000_000_000n; +const GAS_FOR_NFT_ON_APPROVE = BASE_GAS + PROMISE_CALL; + +interface ValueReturnInterface { + ok_go(msg: string): PromiseOrValue; +} + +@NearBindgen({requireInit: true}) +class ApprovalReceiver implements NonFungibleTokenApprovalReceiver, ValueReturnInterface { + public non_fungible_token_account_id: AccountId; + + constructor() { + this.non_fungible_token_account_id = ''; + } + + nft_on_approve([token_id, owner_id, approval_id, msg]: [token_id: string, owner_id: string, approval_id: bigint, msg: string]): PromiseOrValue { + assert(near.predecessorAccountId() === this.non_fungible_token_account_id, + "Only supports the one non-fungible token contract" + ); + + near.log(`in nft_on_approve; token_id=${token_id}, owner_id=${owner_id}, approval_id=${approval_id}, msg=${msg}`); + switch(msg) { + case 'return-now': + return 'cool'; + default: { + let prepaid_gas = near.prepaidGas(); + let account_id = near.currentAccountId(); + return NearPromise.new(account_id).functionCall('ok_go', msg, 0n, prepaid_gas - GAS_FOR_NFT_ON_APPROVE) + } + } + } + + ok_go(msg: string): PromiseOrValue { + near.log(`in ok_go, msg=${msg}`); + return msg; + } + + @initialize({}) + init(non_fungible_token_account_id: AccountId) { + this.non_fungible_token_account_id = non_fungible_token_account_id; + } +} \ No newline at end of file diff --git a/near-contract-standards/package.json b/near-contract-standards/package.json index e18c4567..d6d5d0f1 100644 --- a/near-contract-standards/package.json +++ b/near-contract-standards/package.json @@ -11,6 +11,7 @@ "build-nft": "run-s build:nft-*", "build:nft-contract": "near-sdk-js build example-contracts/non-fungible-token/my-nft.ts build/my-nft.wasm", "build:nft-receiver": "near-sdk-js build example-contracts/non-fungible-token/test-token-receiver.ts build/nft-receiver.wasm", + "build:nft-approval-receiver": "near-sdk-js build example-contracts/non-fungible-token/test-approval-receiver.ts build/nft-approval-receiver.wasm", "test": "ava", "test:nft": "ava __tests__/my-nft/*" }, diff --git a/near-contract-standards/src/non_fungible_token/approval/approval_receiver.ts b/near-contract-standards/src/non_fungible_token/approval/approval_receiver.ts index 0ba5c447..c358e64a 100644 --- a/near-contract-standards/src/non_fungible_token/approval/approval_receiver.ts +++ b/near-contract-standards/src/non_fungible_token/approval/approval_receiver.ts @@ -2,6 +2,6 @@ import { PromiseOrValue } from "near-sdk-js/lib"; import { AccountId } from "near-sdk-js/lib/types"; import { TokenId } from "../token"; -export interface NonFungibleTokenApproval { +export interface NonFungibleTokenApprovalReceiver { nft_on_approve([token_id, owner_id, approval_id, msg]: [token_id: TokenId, owner_id: AccountId, approval_id: bigint, msg: string]): PromiseOrValue; } \ No newline at end of file diff --git a/near-contract-standards/src/non_fungible_token/approval/index.ts b/near-contract-standards/src/non_fungible_token/approval/index.ts new file mode 100644 index 00000000..ef44c6cd --- /dev/null +++ b/near-contract-standards/src/non_fungible_token/approval/index.ts @@ -0,0 +1,11 @@ +import { AccountId } from "near-sdk-js/lib/types"; +import { NearPromise } from "../../../../lib"; +import { TokenId } from "../token"; +import { Option } from "../utils"; + +export interface NonFungibleTokenApproval { + nft_approve([token_id, account_id, msg]: [token_id: TokenId, account_id: AccountId, msg: Option]): Option; + nft_revoke([token_id, account_id]: [token_id: TokenId, account_id: AccountId]); + nft_revoke_all(token_id: TokenId); + nft_is_approved([token_id, approved_account_id, approval_id]: [token_id: TokenId, approved_account_id: AccountId, approval_id: Option]): boolean; +} diff --git a/near-contract-standards/src/non_fungible_token/impl.ts b/near-contract-standards/src/non_fungible_token/impl.ts index e211e05a..dd33db3f 100644 --- a/near-contract-standards/src/non_fungible_token/impl.ts +++ b/near-contract-standards/src/non_fungible_token/impl.ts @@ -7,6 +7,7 @@ import { assert, NearPromise, bytes, + PromiseOrValue, } from "near-sdk-js/lib"; import { PromiseResult } from "near-sdk-js/lib/types"; import { TokenMetadata } from "./metadata"; @@ -18,23 +19,43 @@ import { assert_at_least_one_yocto, IntoStorageKey, Option, + bytes_for_approved_account_id, + assert_one_yocto, + refund_approved_account_ids_iter, } from "./utils"; import { NftMint, NftTransfer } from "./events"; import { NonFungibleTokenResolver } from "./core/resolver"; import { AccountId } from "near-sdk-js/lib/types/index"; import { Token, TokenId } from "./token"; import { NonFungibleTokenCore } from "./core"; +import { NonFungibleTokenApproval } from "./approval"; const GAS_FOR_RESOLVE_TRANSFER = 15_000_000_000_000n; const GAS_FOR_NFT_TRANSFER_CALL = 30_000_000_000_000n + GAS_FOR_RESOLVE_TRANSFER; +const GAS_FOR_NFT_APPROVE = 10_000_000_000_000n; + function repeat(str: string, n: number) { return Array(n + 1).join(str); } +function expect_token_found(option: Option): T { + if (option === null) { + throw new Error("Token not found"); + } + return option; +} + +function expect_approval(option: Option): T { + if (option === null) { + throw new Error("next_approval_by_id must be set for approval ext"); + } + return option; +} + export class NonFungibleToken - implements NonFungibleTokenCore, NonFungibleTokenResolver + implements NonFungibleTokenCore, NonFungibleTokenResolver, NonFungibleTokenApproval { public owner_id: string; public extra_storage_in_bytes_per_token: bigint; @@ -54,6 +75,99 @@ export class NonFungibleToken this.next_approval_id_by_id = null; } + nft_approve([token_id, account_id, msg]: [token_id: string, account_id: string, msg: string]): NearPromise { + assert_at_least_one_yocto(); + if (this.approvals_by_id === null) { + throw new Error("NFT does not support Approval Management"); + } + let approvals_by_id = this.approvals_by_id; + let owner_id = expect_token_found(this.owner_by_id.get(token_id)); + + assert(near.predecessorAccountId() === owner_id, "Predecessor must be token owner."); + + let next_approval_id_by_id = expect_approval(this.next_approval_id_by_id); + let approved_account_ids = approvals_by_id.get(token_id) ?? {}; + let approval_id = next_approval_id_by_id.get(token_id) ?? 1n; + let old_approval_id = approved_account_ids[account_id] = approval_id; + + approvals_by_id.set(token_id, approved_account_ids); + + next_approval_id_by_id.set(token_id, approval_id + 1n); + + let storage_used = (old_approval_id === null) ? bytes_for_approved_account_id(account_id) : 0; + refund_deposit(BigInt(storage_used)); + + if(msg) { + return NearPromise.new(account_id).functionCall('nft_on_approve', bytes(JSON.stringify([token_id, owner_id, approval_id, msg])), 0n, near.prepaidGas() - GAS_FOR_NFT_APPROVE); + } + } + + nft_revoke([token_id, account_id]: [token_id: string, account_id: string]) { + assert_one_yocto(); + if (this.approvals_by_id === null) { + throw new Error("NFT does not support Approval Management"); + } + let approvals_by_id = this.approvals_by_id; + let owner_id = expect_token_found(this.owner_by_id.get(token_id)); + + let predecessorAccountId = near.predecessorAccountId(); + assert(predecessorAccountId === owner_id, "Predecessor must be token owner."); + + let approved_account_ids = approvals_by_id.get(token_id); + if (approved_account_ids) { + refund_approved_account_ids_iter(predecessorAccountId, [account_id]); + + if (Object.keys(approved_account_ids).length === 0) { + approvals_by_id.remove(token_id); + } else { + approvals_by_id.set(token_id, approved_account_ids) + } + } + } + + nft_revoke_all(token_id: string) { + assert_one_yocto(); + if (this.approvals_by_id === null) { + throw new Error("NFT does not support Approval Management"); + } + let approvals_by_id = this.approvals_by_id; + let owner_id = expect_token_found(this.owner_by_id.get(token_id)); + + let predecessorAccountId = near.predecessorAccountId(); + assert(predecessorAccountId === owner_id, "Predecessor must be token owner."); + + let approved_account_ids = approvals_by_id.get(token_id); + if (approved_account_ids) { + refund_approved_account_ids(predecessorAccountId, approved_account_ids); + + approvals_by_id.remove(token_id); + } + } + + nft_is_approved([token_id, approved_account_id, approval_id]: [token_id: string, approved_account_id: string, approval_id: bigint]): boolean { + expect_token_found(this.owner_by_id.get(token_id)); + + if (this.approvals_by_id === null) { + return false; + } + let approval_by_ids = this.approvals_by_id; + + let approved_account_ids = approval_by_ids.get(token_id) === null; + if (approved_account_ids === null) { + return false; + } + + let actual_approval_id = approved_account_ids[approved_account_id]; + if (actual_approval_id === undefined) { + return false; + } + + if (approval_id) { + return approval_id === actual_approval_id; + } + return true; + } + init( owner_by_id_prefix: IntoStorageKey, owner_id: string, diff --git a/near-contract-standards/src/non_fungible_token/utils.ts b/near-contract-standards/src/non_fungible_token/utils.ts index a4123aa1..dc41dc8f 100644 --- a/near-contract-standards/src/non_fungible_token/utils.ts +++ b/near-contract-standards/src/non_fungible_token/utils.ts @@ -66,6 +66,13 @@ export function assert_at_least_one_yocto(): void { ); } +export function assert_one_yocto(): void { + assert( + near.attachedDeposit() === 1n, + "Requires attached deposit of 1 yoctoNEAR" + ); +} + export type Option = T | null; export interface IntoStorageKey { From 1e9ac1dca15ca9ef553b7de954bb451efd8c22ba Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Fri, 28 Oct 2022 21:57:45 +0800 Subject: [PATCH 30/44] add and fix simple approve test --- .../__tests__/my-nft/test_approval.ava.js | 74 +++++++++++++++++++ .../non-fungible-token/my-nft.ts | 2 +- .../src/non_fungible_token/impl.ts | 9 ++- 3 files changed, 80 insertions(+), 5 deletions(-) create mode 100644 near-contract-standards/__tests__/my-nft/test_approval.ava.js diff --git a/near-contract-standards/__tests__/my-nft/test_approval.ava.js b/near-contract-standards/__tests__/my-nft/test_approval.ava.js new file mode 100644 index 00000000..6cc15789 --- /dev/null +++ b/near-contract-standards/__tests__/my-nft/test_approval.ava.js @@ -0,0 +1,74 @@ +import { Worker } from "near-workspaces"; +import test from "ava"; + +const MAX_GAS = 300_000_000_000_000n; + +test.beforeEach(async (t) => { + // Init the worker and start a Sandbox server + const worker = await Worker.init(); + + // Prepare sandbox for tests, create accounts, deploy contracts, etx. + const root = worker.rootAccount; + + // Deploy status-message the contract. + const nft = await root.devDeploy("./build/my-nft.wasm"); + + // Create test accounts + const ali = await root.createSubAccount("ali"); + const bob = await root.createSubAccount("bob"); + const nftOwner = await root.createSubAccount("owner"); + const nftReceiver = await root.devDeploy("./build/nft-receiver.wasm"); + const approvalReceiver = await root.devDeploy("./build/nft-approval-receiver.wasm"); + + await nft.call(nft, "init", { + owner_id: nftOwner.accountId, + metadata: { spec: "nft-1.0.0", name: "My NFT", symbol: "NFT" }, + }); + + await nftReceiver.call(nftReceiver, 'init', nft.accountId) + await nftReceiver.call(approvalReceiver, 'init', nft.accountId) + + let token_metadata = { + title: "Olympus Mons", + description: "The tallest mountain in the charted solar system", + media: null, + media_hash: null, + copies: 1, + issued_at: null, + expires_at: null, + starts_at: null, + updated_at: null, + extra: null, + reference: null, + reference_hash: null, + }; + await nftOwner.call(nft, "nft_mint", ["0", nftOwner.accountId, token_metadata], {attachedDeposit: '10 mN'}) + + // Save state for test runs, it is unique for each test + t.context.worker = worker; + t.context.accounts = { + root, + nft, + ali, + bob, + nftOwner, + nftReceiver, + approvalReceiver + }; +}); + +test.afterEach.always(async (t) => { + await t.context.worker.tearDown().catch((error) => { + console.log("Failed tear down the worker:", error); + }); +}); + +test("Simple approve", async (t) => { + const { ali, bob, nft, nftOwner } = t.context.accounts; + + let res = await nftOwner.callRaw(nft, 'nft_approve', ['0', ali.accountId, null], {attachedDeposit: '510000000000000000000'}) + t.is(res.result.status.SuccessValue, ""); + + let alice_approved = await nft.view('nft_is_approved', ['0', ali.accountId, null]) + t.is(alice_approved, true) +}); diff --git a/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts b/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts index bcec5b97..73d41031 100644 --- a/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts +++ b/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts @@ -44,7 +44,7 @@ class StorageKeyTokenEnumeration extends StorageKey implements IntoStorageKey { class StorageKeyApproval extends StorageKey implements IntoStorageKey { into_storage_key(): Bytes { - return "APPROVAL_"; + return "APPROVAL1_"; } } diff --git a/near-contract-standards/src/non_fungible_token/impl.ts b/near-contract-standards/src/non_fungible_token/impl.ts index dd33db3f..a173bad6 100644 --- a/near-contract-standards/src/non_fungible_token/impl.ts +++ b/near-contract-standards/src/non_fungible_token/impl.ts @@ -88,7 +88,8 @@ export class NonFungibleToken let next_approval_id_by_id = expect_approval(this.next_approval_id_by_id); let approved_account_ids = approvals_by_id.get(token_id) ?? {}; let approval_id = next_approval_id_by_id.get(token_id) ?? 1n; - let old_approval_id = approved_account_ids[account_id] = approval_id; + let old_approval_id = approved_account_ids[account_id] + approved_account_ids[account_id] = approval_id; approvals_by_id.set(token_id, approved_account_ids); @@ -150,9 +151,9 @@ export class NonFungibleToken if (this.approvals_by_id === null) { return false; } - let approval_by_ids = this.approvals_by_id; + let approvals_by_id = this.approvals_by_id; - let approved_account_ids = approval_by_ids.get(token_id) === null; + let approved_account_ids = approvals_by_id.get(token_id); if (approved_account_ids === null) { return false; } @@ -180,7 +181,7 @@ export class NonFungibleToken if (approval_prefix) { const prefix = approval_prefix.into_storage_key(); approvals_by_id = new LookupMap(prefix); - next_approval_id_by_id = new LookupMap(prefix); + next_approval_id_by_id = new LookupMap(prefix + 'n'); } else { approvals_by_id = null; next_approval_id_by_id = null; From bbb300ca70bff3ae9aa5dc62e51cecdce435bb0b Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Mon, 31 Oct 2022 16:48:31 +0800 Subject: [PATCH 31/44] add and fix all approval tests --- .../__tests__/my-nft/test_approval.ava.js | 95 ++++++++++++++++++- .../test-approval-receiver.ts | 10 +- .../src/non_fungible_token/impl.ts | 10 +- 3 files changed, 105 insertions(+), 10 deletions(-) diff --git a/near-contract-standards/__tests__/my-nft/test_approval.ava.js b/near-contract-standards/__tests__/my-nft/test_approval.ava.js index 6cc15789..d4621785 100644 --- a/near-contract-standards/__tests__/my-nft/test_approval.ava.js +++ b/near-contract-standards/__tests__/my-nft/test_approval.ava.js @@ -14,7 +14,7 @@ test.beforeEach(async (t) => { const nft = await root.devDeploy("./build/my-nft.wasm"); // Create test accounts - const ali = await root.createSubAccount("ali"); + const ali = await root.createSubAccount("alice"); const bob = await root.createSubAccount("bob"); const nftOwner = await root.createSubAccount("owner"); const nftReceiver = await root.devDeploy("./build/nft-receiver.wasm"); @@ -70,5 +70,96 @@ test("Simple approve", async (t) => { t.is(res.result.status.SuccessValue, ""); let alice_approved = await nft.view('nft_is_approved', ['0', ali.accountId, null]) - t.is(alice_approved, true) + t.assert(alice_approved) + + let alice_approval_id_is_1 = await nft.view('nft_is_approved', ['0', ali.accountId, '1']) + t.assert(alice_approval_id_is_1) + + let alice_approval_id_is_2 = await nft.view('nft_is_approved', ['0', ali.accountId, '2']) + t.assert(!alice_approval_id_is_2) + + res = await nftOwner.callRaw(nft, 'nft_approve', ['0', ali.accountId, null], {attachedDeposit: '1'}) + t.is(res.result.status.SuccessValue, ""); + alice_approval_id_is_2 = await nft.view('nft_is_approved', ['0', ali.accountId, '2']) + t.assert(alice_approval_id_is_2) + + res = await nftOwner.callRaw(nft, 'nft_approve', ['0', bob.accountId, null], {attachedDeposit: '450000000000000000000'}) + t.is(res.result.status.SuccessValue, ""); + + let bob_approval_id_is_3 = await nft.view('nft_is_approved', ['0', bob.accountId, '3']) + t.assert(bob_approval_id_is_3) }); + + +test('Approve call', async (t) => { + const { ali, bob, nft, nftOwner, approvalReceiver } = t.context.accounts; + + let res = await nftOwner.call(nft, 'nft_approve', ['0', approvalReceiver.accountId, 'return-now'], {attachedDeposit: '450000000000000000000', gas: '300 Tgas'}) + t.is(res, "cool"); + + res = await nftOwner.call(nft, 'nft_approve', ['0', approvalReceiver.accountId, 'hahaha'], {attachedDeposit: '1', gas: '300 Tgas'}) + t.is(res, "hahaha"); +}) + +test('Approved account transfers token', async (t) => { + const { ali, bob, nft, nftOwner } = t.context.accounts; + + let res = await nftOwner.callRaw(nft, 'nft_approve', ['0', ali.accountId, null], {attachedDeposit: '510000000000000000000'}) + t.is(res.result.status.SuccessValue, ""); + + let token = await nft.view("nft_token", "0"); + t.is(token.owner_id, nftOwner.accountId); + + res = await ali.callRaw(nft, 'nft_transfer', [ali.accountId, '0', null, 'gotcha! bahahaha'], {attachedDeposit: '1'}) + t.is(res.result.status.SuccessValue, ""); + + token = await nft.view("nft_token", "0"); + t.is(token.owner_id, ali.accountId); +}) + +test('revoke', async (t) => { + const { ali, bob, nft, nftOwner } = t.context.accounts; + + let res = await nftOwner.callRaw(nft, 'nft_approve', ['0', ali.accountId, null], {attachedDeposit: '510000000000000000000'}) + t.is(res.result.status.SuccessValue, ""); + + res = await nftOwner.callRaw(nft, 'nft_approve', ['0', bob.accountId, null], {attachedDeposit: '510000000000000000000'}) + t.is(res.result.status.SuccessValue, ""); + + res = await nftOwner.callRaw(nft, 'nft_revoke', ['0', ali.accountId], {attachedDeposit: '1'}) + t.is(res.result.status.SuccessValue, ""); + + let alice_approved = await nft.view('nft_is_approved', ['0', ali.accountId, null]) + t.assert(!alice_approved) + + let bob_approved = await nft.view('nft_is_approved', ['0', bob.accountId, null]) + t.assert(bob_approved) + + res = await nftOwner.callRaw(nft, 'nft_revoke', ['0', bob.accountId], {attachedDeposit: '1'}) + t.is(res.result.status.SuccessValue, ""); + + alice_approved = await nft.view('nft_is_approved', ['0', ali.accountId, null]) + t.assert(!alice_approved) + + bob_approved = await nft.view('nft_is_approved', ['0', bob.accountId, null]) + t.assert(!bob_approved) +}) + +test('revoke all', async (t) => { + const { ali, bob, nft, nftOwner } = t.context.accounts; + + let res = await nftOwner.callRaw(nft, 'nft_approve', ['0', ali.accountId, null], {attachedDeposit: '510000000000000000000'}) + t.is(res.result.status.SuccessValue, ""); + + res = await nftOwner.callRaw(nft, 'nft_approve', ['0', bob.accountId, null], {attachedDeposit: '510000000000000000000'}) + t.is(res.result.status.SuccessValue, ""); + + res = await nftOwner.callRaw(nft, 'nft_revoke_all', '0', {attachedDeposit: '1'}) + t.is(res.result.status.SuccessValue, ""); + + let alice_approved = await nft.view('nft_is_approved', ['0', ali.accountId, null]) + t.assert(!alice_approved) + + let bob_approved = await nft.view('nft_is_approved', ['0', bob.accountId, null]) + t.assert(!bob_approved) +}) \ No newline at end of file diff --git a/near-contract-standards/example-contracts/non-fungible-token/test-approval-receiver.ts b/near-contract-standards/example-contracts/non-fungible-token/test-approval-receiver.ts index 538a6956..a577ad9d 100644 --- a/near-contract-standards/example-contracts/non-fungible-token/test-approval-receiver.ts +++ b/near-contract-standards/example-contracts/non-fungible-token/test-approval-receiver.ts @@ -1,9 +1,9 @@ -import { initialize, near, NearBindgen, NearPromise, PromiseOrValue, assert } from "../../../lib"; +import { initialize, near, NearBindgen, NearPromise, PromiseOrValue, assert, call } from "../../../lib"; import { AccountId } from "../../../lib/types"; import { NonFungibleTokenApprovalReceiver } from "../../src/non_fungible_token/approval/approval_receiver"; -const BASE_GAS = 5_000_000_000_000n; -const PROMISE_CALL = 5_000_000_000_000n; +const BASE_GAS = 20_000_000_000_000n; +const PROMISE_CALL = 20_000_000_000_000n; const GAS_FOR_NFT_ON_APPROVE = BASE_GAS + PROMISE_CALL; interface ValueReturnInterface { @@ -18,6 +18,7 @@ class ApprovalReceiver implements NonFungibleTokenApprovalReceiver, ValueReturnI this.non_fungible_token_account_id = ''; } + @call({}) nft_on_approve([token_id, owner_id, approval_id, msg]: [token_id: string, owner_id: string, approval_id: bigint, msg: string]): PromiseOrValue { assert(near.predecessorAccountId() === this.non_fungible_token_account_id, "Only supports the one non-fungible token contract" @@ -30,11 +31,12 @@ class ApprovalReceiver implements NonFungibleTokenApprovalReceiver, ValueReturnI default: { let prepaid_gas = near.prepaidGas(); let account_id = near.currentAccountId(); - return NearPromise.new(account_id).functionCall('ok_go', msg, 0n, prepaid_gas - GAS_FOR_NFT_ON_APPROVE) + return NearPromise.new(account_id).functionCall('ok_go', JSON.stringify(msg), 0n, prepaid_gas - GAS_FOR_NFT_ON_APPROVE) } } } + @call({}) ok_go(msg: string): PromiseOrValue { near.log(`in ok_go, msg=${msg}`); return msg; diff --git a/near-contract-standards/src/non_fungible_token/impl.ts b/near-contract-standards/src/non_fungible_token/impl.ts index a173bad6..399eb20b 100644 --- a/near-contract-standards/src/non_fungible_token/impl.ts +++ b/near-contract-standards/src/non_fungible_token/impl.ts @@ -9,6 +9,7 @@ import { bytes, PromiseOrValue, } from "near-sdk-js/lib"; +import {serialize} from 'near-sdk-js/lib/utils' import { PromiseResult } from "near-sdk-js/lib/types"; import { TokenMetadata } from "./metadata"; import { @@ -33,7 +34,7 @@ import { NonFungibleTokenApproval } from "./approval"; const GAS_FOR_RESOLVE_TRANSFER = 15_000_000_000_000n; const GAS_FOR_NFT_TRANSFER_CALL = 30_000_000_000_000n + GAS_FOR_RESOLVE_TRANSFER; -const GAS_FOR_NFT_APPROVE = 10_000_000_000_000n; +const GAS_FOR_NFT_APPROVE = 20_000_000_000_000n; function repeat(str: string, n: number) { @@ -99,7 +100,7 @@ export class NonFungibleToken refund_deposit(BigInt(storage_used)); if(msg) { - return NearPromise.new(account_id).functionCall('nft_on_approve', bytes(JSON.stringify([token_id, owner_id, approval_id, msg])), 0n, near.prepaidGas() - GAS_FOR_NFT_APPROVE); + return NearPromise.new(account_id).functionCall('nft_on_approve', bytes(serialize([token_id, owner_id, approval_id, msg])), 0n, near.prepaidGas() - GAS_FOR_NFT_APPROVE); } } @@ -115,7 +116,8 @@ export class NonFungibleToken assert(predecessorAccountId === owner_id, "Predecessor must be token owner."); let approved_account_ids = approvals_by_id.get(token_id); - if (approved_account_ids) { + if (approved_account_ids[account_id]) { + delete approved_account_ids[account_id] refund_approved_account_ids_iter(predecessorAccountId, [account_id]); if (Object.keys(approved_account_ids).length === 0) { @@ -164,7 +166,7 @@ export class NonFungibleToken } if (approval_id) { - return approval_id === actual_approval_id; + return BigInt(approval_id) === actual_approval_id; } return true; } From 128a4e410e24a5f15c2aac7c878dda7e29cd5847 Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Tue, 1 Nov 2022 17:10:44 +0800 Subject: [PATCH 32/44] add nft enum implementation --- .../non-fungible-token/my-nft.ts | 23 ++++++- .../non_fungible_token/enumeration/index.ts | 9 +++ .../src/non_fungible_token/impl.ts | 61 ++++++++++++++++++- 3 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 near-contract-standards/src/non_fungible_token/enumeration/index.ts diff --git a/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts b/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts index 73d41031..24d30493 100644 --- a/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts +++ b/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts @@ -21,6 +21,7 @@ import { NonFungibleTokenCore } from "../../src/non_fungible_token/core"; import { Token, TokenId } from "../../src/non_fungible_token/token"; import { NonFungibleTokenResolver } from "../../src/non_fungible_token/core/resolver"; import { NonFungibleTokenApproval } from "../../src/non_fungible_token/approval"; +import { NonFungibleTokenEnumeration } from "../../src/non_fungible_token/enumeration"; class StorageKey {} @@ -49,7 +50,7 @@ class StorageKeyApproval extends StorageKey implements IntoStorageKey { } @NearBindgen({ requireInit: true }) -class MyNFT implements NonFungibleTokenCore, NonFungibleTokenMetadataProvider, NonFungibleTokenResolver, NonFungibleTokenApproval { +class MyNFT implements NonFungibleTokenCore, NonFungibleTokenMetadataProvider, NonFungibleTokenResolver, NonFungibleTokenApproval, NonFungibleTokenEnumeration { tokens: NonFungibleToken; metadata: Option; @@ -59,6 +60,26 @@ class MyNFT implements NonFungibleTokenCore, NonFungibleTokenMetadataProvider, N this.metadata = new NFTContractMetadata(); } + @view({}) + nft_total_supply(): number { + return this.tokens.nft_total_supply() + } + + @view({}) + nft_tokens([from_index, limit]: [from_index: number, limit: number]): Token[] { + return this.tokens.nft_tokens([from_index, limit]) + } + + @view({}) + nft_supply_for_owner(account_id: string): number { + return this.tokens.nft_supply_for_owner(account_id) + } + + @view({}) + nft_tokens_for_owner([account_id, from_index, limit]: [account_id: string, from_index: number, limit: number]): Token[] { + return this.tokens.nft_tokens_for_owner([account_id, from_index, limit]) + } + @call({payableFunction: true}) nft_approve([token_id, account_id, msg]: [token_id: string, account_id: string, msg: string]): NearPromise { return this.tokens.nft_approve([token_id, account_id, msg]); diff --git a/near-contract-standards/src/non_fungible_token/enumeration/index.ts b/near-contract-standards/src/non_fungible_token/enumeration/index.ts new file mode 100644 index 00000000..bf148c0f --- /dev/null +++ b/near-contract-standards/src/non_fungible_token/enumeration/index.ts @@ -0,0 +1,9 @@ +import { AccountId } from "../../../../lib/types"; +import { Token } from "../token"; + +export interface NonFungibleTokenEnumeration { + nft_total_supply(): number; + nft_tokens([from_index, limit]: [from_index: number | null, limit: number | null]): Token[]; + nft_supply_for_owner(account_id: AccountId): number; + nft_tokens_for_owner([account_id, from_index, limit]: [account_id: AccountId, from_index: number, limit: number]): Token[]; +} \ No newline at end of file diff --git a/near-contract-standards/src/non_fungible_token/impl.ts b/near-contract-standards/src/non_fungible_token/impl.ts index 399eb20b..655ce4d1 100644 --- a/near-contract-standards/src/non_fungible_token/impl.ts +++ b/near-contract-standards/src/non_fungible_token/impl.ts @@ -30,6 +30,7 @@ import { AccountId } from "near-sdk-js/lib/types/index"; import { Token, TokenId } from "./token"; import { NonFungibleTokenCore } from "./core"; import { NonFungibleTokenApproval } from "./approval"; +import { NonFungibleTokenEnumeration } from "./enumeration"; const GAS_FOR_RESOLVE_TRANSFER = 15_000_000_000_000n; const GAS_FOR_NFT_TRANSFER_CALL = @@ -56,7 +57,7 @@ function expect_approval(option: Option): T { } export class NonFungibleToken - implements NonFungibleTokenCore, NonFungibleTokenResolver, NonFungibleTokenApproval + implements NonFungibleTokenCore, NonFungibleTokenResolver, NonFungibleTokenApproval, NonFungibleTokenEnumeration { public owner_id: string; public extra_storage_in_bytes_per_token: bigint; @@ -76,6 +77,64 @@ export class NonFungibleToken this.next_approval_id_by_id = null; } + nft_total_supply(): number { + return this.owner_by_id.length + } + + private enum_get_token(owner_id: AccountId, token_id: TokenId): Token { + let metadata = this.token_metadata_by_id.get(token_id, {reconstructor: TokenMetadata.reconstruct}) + let approved_account_ids = this.approvals_by_id.get(token_id, {defaultValue: {}}) + return new Token(token_id, owner_id, metadata, approved_account_ids) + } + + nft_tokens([from_index, limit]: [from_index: number | null, limit: number | null]): Token[] { + let start_index = from_index === null ? 0 : from_index; + assert(this.owner_by_id.length >= start_index, "Out of bounds, please use a smaller from_index."); + let l = limit === null ? 2**32 : limit; + assert(l >= 0, "limit must be greater than 0."); + l = Math.min(l, this.owner_by_id.length - start_index); + let ret: Token[] = []; + for (let i = start_index; i < l; i++) { + let token_id = this.owner_by_id.keys.get(i); + let owner_id = this.owner_by_id.get(token_id); + ret.push(this.enum_get_token(owner_id, token_id)); + } + return ret; + } + + nft_supply_for_owner(account_id: string): number { + let tokens_per_owner = this.tokens_per_owner + assert(tokens_per_owner !== null, + "Could not find tokens_per_owner when calling a method on the enumeration standard.", + ); + + let account_tokens = tokens_per_owner.get(account_id, {reconstructor: UnorderedSet.reconstruct}); + return account_tokens === null ? 0 : account_tokens.length + } + + nft_tokens_for_owner([account_id, from_index, limit]: [account_id: string, from_index: number, limit: number]): Token[] { + let tokens_per_owner = this.tokens_per_owner + assert(tokens_per_owner !== null, + "Could not find tokens_per_owner when calling a method on the enumeration standard.", + ); + let token_set = tokens_per_owner.get(account_id, {reconstructor: UnorderedSet.reconstruct}); + assert(token_set !== null, "Token set is empty"); + + let start_index = from_index === null ? 0 : from_index; + assert(token_set.length >= start_index, "Out of bounds, please use a smaller from_index."); + let l = limit === null ? 2**32 : limit; + assert(l >= 0, "limit must be greater than 0."); + l = Math.min(l, token_set.length - start_index); + + let ret: Token[] = []; + for (let i = start_index; i < l; i++) { + let token_id = token_set.elements.get(i); + let owner_id = this.owner_by_id.get(token_id); + ret.push(this.enum_get_token(owner_id, token_id)); + } + return ret; + } + nft_approve([token_id, account_id, msg]: [token_id: string, account_id: string, msg: string]): NearPromise { assert_at_least_one_yocto(); if (this.approvals_by_id === null) { From 8473065b86df14ba07ab03b4287c9d4a6380bf9f Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Wed, 2 Nov 2022 19:19:01 +0800 Subject: [PATCH 33/44] add approval tests, lint, format --- .github/workflows/contract-standards.yml | 1 - .../__tests__/my-nft/test_approval.ava.js | 215 +++++++++++----- .../__tests__/my-nft/test_core.ava.js | 104 ++++++-- .../__tests__/my-nft/test_enumeration.ava.js | 168 +++++++++++++ .../non-fungible-token/my-nft.ts | 82 ++++-- .../test-approval-receiver.ts | 89 ++++--- .../non-fungible-token/test-token-receiver.ts | 117 +++++---- .../approval/approval_receiver.ts | 9 +- .../src/non_fungible_token/approval/index.ts | 19 +- .../src/non_fungible_token/core/index.ts | 30 +-- .../src/non_fungible_token/core/receiver.ts | 2 +- .../non_fungible_token/enumeration/index.ts | 17 +- .../src/non_fungible_token/impl.ts | 236 +++++++++++------- .../src/non_fungible_token/metadata.ts | 4 +- 14 files changed, 776 insertions(+), 317 deletions(-) create mode 100644 near-contract-standards/__tests__/my-nft/test_enumeration.ava.js diff --git a/.github/workflows/contract-standards.yml b/.github/workflows/contract-standards.yml index 13840aa0..b8f4c25b 100644 --- a/.github/workflows/contract-standards.yml +++ b/.github/workflows/contract-standards.yml @@ -20,4 +20,3 @@ jobs: run: yarn && cd near-contract-standards && yarn - name: nft run: cd near-contract-standards && yarn build:nft && yarn test:nft - \ No newline at end of file diff --git a/near-contract-standards/__tests__/my-nft/test_approval.ava.js b/near-contract-standards/__tests__/my-nft/test_approval.ava.js index d4621785..aee4bb45 100644 --- a/near-contract-standards/__tests__/my-nft/test_approval.ava.js +++ b/near-contract-standards/__tests__/my-nft/test_approval.ava.js @@ -1,8 +1,6 @@ import { Worker } from "near-workspaces"; import test from "ava"; -const MAX_GAS = 300_000_000_000_000n; - test.beforeEach(async (t) => { // Init the worker and start a Sandbox server const worker = await Worker.init(); @@ -18,15 +16,17 @@ test.beforeEach(async (t) => { const bob = await root.createSubAccount("bob"); const nftOwner = await root.createSubAccount("owner"); const nftReceiver = await root.devDeploy("./build/nft-receiver.wasm"); - const approvalReceiver = await root.devDeploy("./build/nft-approval-receiver.wasm"); + const approvalReceiver = await root.devDeploy( + "./build/nft-approval-receiver.wasm" + ); await nft.call(nft, "init", { owner_id: nftOwner.accountId, metadata: { spec: "nft-1.0.0", name: "My NFT", symbol: "NFT" }, }); - await nftReceiver.call(nftReceiver, 'init', nft.accountId) - await nftReceiver.call(approvalReceiver, 'init', nft.accountId) + await nftReceiver.call(nftReceiver, "init", nft.accountId); + await nftReceiver.call(approvalReceiver, "init", nft.accountId); let token_metadata = { title: "Olympus Mons", @@ -42,7 +42,12 @@ test.beforeEach(async (t) => { reference: null, reference_hash: null, }; - await nftOwner.call(nft, "nft_mint", ["0", nftOwner.accountId, token_metadata], {attachedDeposit: '10 mN'}) + await nftOwner.call( + nft, + "nft_mint", + ["0", nftOwner.accountId, token_metadata], + { attachedDeposit: "10 mN" } + ); // Save state for test runs, it is unique for each test t.context.worker = worker; @@ -53,7 +58,7 @@ test.beforeEach(async (t) => { bob, nftOwner, nftReceiver, - approvalReceiver + approvalReceiver, }; }); @@ -66,100 +71,188 @@ test.afterEach.always(async (t) => { test("Simple approve", async (t) => { const { ali, bob, nft, nftOwner } = t.context.accounts; - let res = await nftOwner.callRaw(nft, 'nft_approve', ['0', ali.accountId, null], {attachedDeposit: '510000000000000000000'}) + let res = await nftOwner.callRaw( + nft, + "nft_approve", + ["0", ali.accountId, null], + { attachedDeposit: "510000000000000000000" } + ); t.is(res.result.status.SuccessValue, ""); - let alice_approved = await nft.view('nft_is_approved', ['0', ali.accountId, null]) - t.assert(alice_approved) - - let alice_approval_id_is_1 = await nft.view('nft_is_approved', ['0', ali.accountId, '1']) - t.assert(alice_approval_id_is_1) - - let alice_approval_id_is_2 = await nft.view('nft_is_approved', ['0', ali.accountId, '2']) - t.assert(!alice_approval_id_is_2) - - res = await nftOwner.callRaw(nft, 'nft_approve', ['0', ali.accountId, null], {attachedDeposit: '1'}) + let alice_approved = await nft.view("nft_is_approved", [ + "0", + ali.accountId, + null, + ]); + t.assert(alice_approved); + + let alice_approval_id_is_1 = await nft.view("nft_is_approved", [ + "0", + ali.accountId, + "1", + ]); + t.assert(alice_approval_id_is_1); + + let alice_approval_id_is_2 = await nft.view("nft_is_approved", [ + "0", + ali.accountId, + "2", + ]); + t.assert(!alice_approval_id_is_2); + + res = await nftOwner.callRaw(nft, "nft_approve", ["0", ali.accountId, null], { + attachedDeposit: "1", + }); t.is(res.result.status.SuccessValue, ""); - alice_approval_id_is_2 = await nft.view('nft_is_approved', ['0', ali.accountId, '2']) - t.assert(alice_approval_id_is_2) - - res = await nftOwner.callRaw(nft, 'nft_approve', ['0', bob.accountId, null], {attachedDeposit: '450000000000000000000'}) + alice_approval_id_is_2 = await nft.view("nft_is_approved", [ + "0", + ali.accountId, + "2", + ]); + t.assert(alice_approval_id_is_2); + + res = await nftOwner.callRaw(nft, "nft_approve", ["0", bob.accountId, null], { + attachedDeposit: "450000000000000000000", + }); t.is(res.result.status.SuccessValue, ""); - let bob_approval_id_is_3 = await nft.view('nft_is_approved', ['0', bob.accountId, '3']) - t.assert(bob_approval_id_is_3) + let bob_approval_id_is_3 = await nft.view("nft_is_approved", [ + "0", + bob.accountId, + "3", + ]); + t.assert(bob_approval_id_is_3); }); +test("Approve call", async (t) => { + const { nft, nftOwner, approvalReceiver } = t.context.accounts; -test('Approve call', async (t) => { - const { ali, bob, nft, nftOwner, approvalReceiver } = t.context.accounts; - - let res = await nftOwner.call(nft, 'nft_approve', ['0', approvalReceiver.accountId, 'return-now'], {attachedDeposit: '450000000000000000000', gas: '300 Tgas'}) + let res = await nftOwner.call( + nft, + "nft_approve", + ["0", approvalReceiver.accountId, "return-now"], + { attachedDeposit: "450000000000000000000", gas: "300 Tgas" } + ); t.is(res, "cool"); - res = await nftOwner.call(nft, 'nft_approve', ['0', approvalReceiver.accountId, 'hahaha'], {attachedDeposit: '1', gas: '300 Tgas'}) + res = await nftOwner.call( + nft, + "nft_approve", + ["0", approvalReceiver.accountId, "hahaha"], + { attachedDeposit: "1", gas: "300 Tgas" } + ); t.is(res, "hahaha"); -}) +}); -test('Approved account transfers token', async (t) => { - const { ali, bob, nft, nftOwner } = t.context.accounts; +test("Approved account transfers token", async (t) => { + const { ali, nft, nftOwner } = t.context.accounts; - let res = await nftOwner.callRaw(nft, 'nft_approve', ['0', ali.accountId, null], {attachedDeposit: '510000000000000000000'}) + let res = await nftOwner.callRaw( + nft, + "nft_approve", + ["0", ali.accountId, null], + { attachedDeposit: "510000000000000000000" } + ); t.is(res.result.status.SuccessValue, ""); let token = await nft.view("nft_token", "0"); t.is(token.owner_id, nftOwner.accountId); - res = await ali.callRaw(nft, 'nft_transfer', [ali.accountId, '0', null, 'gotcha! bahahaha'], {attachedDeposit: '1'}) + res = await ali.callRaw( + nft, + "nft_transfer", + [ali.accountId, "0", null, "gotcha! bahahaha"], + { attachedDeposit: "1" } + ); t.is(res.result.status.SuccessValue, ""); token = await nft.view("nft_token", "0"); t.is(token.owner_id, ali.accountId); -}) +}); -test('revoke', async (t) => { +test("revoke", async (t) => { const { ali, bob, nft, nftOwner } = t.context.accounts; - let res = await nftOwner.callRaw(nft, 'nft_approve', ['0', ali.accountId, null], {attachedDeposit: '510000000000000000000'}) + let res = await nftOwner.callRaw( + nft, + "nft_approve", + ["0", ali.accountId, null], + { attachedDeposit: "510000000000000000000" } + ); t.is(res.result.status.SuccessValue, ""); - res = await nftOwner.callRaw(nft, 'nft_approve', ['0', bob.accountId, null], {attachedDeposit: '510000000000000000000'}) + res = await nftOwner.callRaw(nft, "nft_approve", ["0", bob.accountId, null], { + attachedDeposit: "510000000000000000000", + }); t.is(res.result.status.SuccessValue, ""); - res = await nftOwner.callRaw(nft, 'nft_revoke', ['0', ali.accountId], {attachedDeposit: '1'}) + res = await nftOwner.callRaw(nft, "nft_revoke", ["0", ali.accountId], { + attachedDeposit: "1", + }); t.is(res.result.status.SuccessValue, ""); - let alice_approved = await nft.view('nft_is_approved', ['0', ali.accountId, null]) - t.assert(!alice_approved) - - let bob_approved = await nft.view('nft_is_approved', ['0', bob.accountId, null]) - t.assert(bob_approved) - - res = await nftOwner.callRaw(nft, 'nft_revoke', ['0', bob.accountId], {attachedDeposit: '1'}) + let alice_approved = await nft.view("nft_is_approved", [ + "0", + ali.accountId, + null, + ]); + t.assert(!alice_approved); + + let bob_approved = await nft.view("nft_is_approved", [ + "0", + bob.accountId, + null, + ]); + t.assert(bob_approved); + + res = await nftOwner.callRaw(nft, "nft_revoke", ["0", bob.accountId], { + attachedDeposit: "1", + }); t.is(res.result.status.SuccessValue, ""); - alice_approved = await nft.view('nft_is_approved', ['0', ali.accountId, null]) - t.assert(!alice_approved) + alice_approved = await nft.view("nft_is_approved", [ + "0", + ali.accountId, + null, + ]); + t.assert(!alice_approved); - bob_approved = await nft.view('nft_is_approved', ['0', bob.accountId, null]) - t.assert(!bob_approved) -}) + bob_approved = await nft.view("nft_is_approved", ["0", bob.accountId, null]); + t.assert(!bob_approved); +}); -test('revoke all', async (t) => { +test("revoke all", async (t) => { const { ali, bob, nft, nftOwner } = t.context.accounts; - let res = await nftOwner.callRaw(nft, 'nft_approve', ['0', ali.accountId, null], {attachedDeposit: '510000000000000000000'}) + let res = await nftOwner.callRaw( + nft, + "nft_approve", + ["0", ali.accountId, null], + { attachedDeposit: "510000000000000000000" } + ); t.is(res.result.status.SuccessValue, ""); - res = await nftOwner.callRaw(nft, 'nft_approve', ['0', bob.accountId, null], {attachedDeposit: '510000000000000000000'}) + res = await nftOwner.callRaw(nft, "nft_approve", ["0", bob.accountId, null], { + attachedDeposit: "510000000000000000000", + }); t.is(res.result.status.SuccessValue, ""); - res = await nftOwner.callRaw(nft, 'nft_revoke_all', '0', {attachedDeposit: '1'}) + res = await nftOwner.callRaw(nft, "nft_revoke_all", "0", { + attachedDeposit: "1", + }); t.is(res.result.status.SuccessValue, ""); - let alice_approved = await nft.view('nft_is_approved', ['0', ali.accountId, null]) - t.assert(!alice_approved) - - let bob_approved = await nft.view('nft_is_approved', ['0', bob.accountId, null]) - t.assert(!bob_approved) -}) \ No newline at end of file + let alice_approved = await nft.view("nft_is_approved", [ + "0", + ali.accountId, + null, + ]); + t.assert(!alice_approved); + + let bob_approved = await nft.view("nft_is_approved", [ + "0", + bob.accountId, + null, + ]); + t.assert(!bob_approved); +}); diff --git a/near-contract-standards/__tests__/my-nft/test_core.ava.js b/near-contract-standards/__tests__/my-nft/test_core.ava.js index f6cccf3d..a42cf14f 100644 --- a/near-contract-standards/__tests__/my-nft/test_core.ava.js +++ b/near-contract-standards/__tests__/my-nft/test_core.ava.js @@ -24,7 +24,7 @@ test.beforeEach(async (t) => { metadata: { spec: "nft-1.0.0", name: "My NFT", symbol: "NFT" }, }); - await nftReceiver.call(nftReceiver, 'init', nft.accountId) + await nftReceiver.call(nftReceiver, "init", nft.accountId); let token_metadata = { title: "Olympus Mons", @@ -40,7 +40,12 @@ test.beforeEach(async (t) => { reference: null, reference_hash: null, }; - await nftOwner.call(nft, "nft_mint", ["0", nftOwner.accountId, token_metadata], {attachedDeposit: '10 mN'}) + await nftOwner.call( + nft, + "nft_mint", + ["0", nftOwner.accountId, token_metadata], + { attachedDeposit: "10 mN" } + ); // Save state for test runs, it is unique for each test t.context.worker = worker; @@ -50,7 +55,7 @@ test.beforeEach(async (t) => { ali, bob, nftOwner, - nftReceiver + nftReceiver, }; }); @@ -66,7 +71,12 @@ test("Simple transfer", async (t) => { let token = await nft.view("nft_token", "0"); t.is(token.owner_id, nftOwner.accountId); - let res = await nftOwner.callRaw(nft, 'nft_transfer', [ali.accountId, '0', null, 'simple transfer'], {attachedDeposit: '1'}) + let res = await nftOwner.callRaw( + nft, + "nft_transfer", + [ali.accountId, "0", null, "simple transfer"], + { attachedDeposit: "1" } + ); t.is(res.result.status.SuccessValue, ""); t.is(res.logs.length, 1); @@ -78,8 +88,16 @@ test("Simple transfer", async (t) => { test("Transfer call fast return to sender", async (t) => { const { nft, nftOwner, nftReceiver } = t.context.accounts; - let res = await nftOwner.callRaw(nft, "nft_transfer_call", [nftReceiver.accountId, "0", null, "transfer & call", "return-it-now"], {attachedDeposit: '1', gas: MAX_GAS}) - t.is(Buffer.from(res.result.status.SuccessValue, 'base64').toString(), 'false'); + let res = await nftOwner.callRaw( + nft, + "nft_transfer_call", + [nftReceiver.accountId, "0", null, "transfer & call", "return-it-now"], + { attachedDeposit: "1", gas: MAX_GAS } + ); + t.is( + Buffer.from(res.result.status.SuccessValue, "base64").toString(), + "false" + ); let token = await nft.view("nft_token", "0"); t.is(token.owner_id, nftOwner.accountId); @@ -88,56 +106,93 @@ test("Transfer call fast return to sender", async (t) => { test("Transfer call slow return to sender", async (t) => { const { nft, nftOwner, nftReceiver } = t.context.accounts; - let res = await nftOwner.callRaw(nft, "nft_transfer_call", [nftReceiver.accountId, "0", null, "transfer & call", "return-it-later"], {attachedDeposit: '1', gas: MAX_GAS}) - t.is(Buffer.from(res.result.status.SuccessValue, 'base64').toString(), 'false'); + let res = await nftOwner.callRaw( + nft, + "nft_transfer_call", + [nftReceiver.accountId, "0", null, "transfer & call", "return-it-later"], + { attachedDeposit: "1", gas: MAX_GAS } + ); + t.is( + Buffer.from(res.result.status.SuccessValue, "base64").toString(), + "false" + ); let token = await nft.view("nft_token", "0"); t.is(token.owner_id, nftOwner.accountId); -}) +}); test("Transfer call fast keep with sender", async (t) => { const { nft, nftOwner, nftReceiver } = t.context.accounts; - let res = await nftOwner.callRaw(nft, "nft_transfer_call", [nftReceiver.accountId, "0", null, "transfer & call", "keep-it-now"], {attachedDeposit: '1', gas: MAX_GAS}) - t.is(Buffer.from(res.result.status.SuccessValue, 'base64').toString(), 'true'); + let res = await nftOwner.callRaw( + nft, + "nft_transfer_call", + [nftReceiver.accountId, "0", null, "transfer & call", "keep-it-now"], + { attachedDeposit: "1", gas: MAX_GAS } + ); + t.is( + Buffer.from(res.result.status.SuccessValue, "base64").toString(), + "true" + ); let token = await nft.view("nft_token", "0"); t.is(token.owner_id, nftReceiver.accountId); -}) +}); test("Transfer call slow keep with sender", async (t) => { const { nft, nftOwner, nftReceiver } = t.context.accounts; - let res = await nftOwner.callRaw(nft, "nft_transfer_call", [nftReceiver.accountId, "0", null, "transfer & call", "keep-it-later"], {attachedDeposit: '1', gas: MAX_GAS}) - t.is(Buffer.from(res.result.status.SuccessValue, 'base64').toString(), 'true'); + let res = await nftOwner.callRaw( + nft, + "nft_transfer_call", + [nftReceiver.accountId, "0", null, "transfer & call", "keep-it-later"], + { attachedDeposit: "1", gas: MAX_GAS } + ); + t.is( + Buffer.from(res.result.status.SuccessValue, "base64").toString(), + "true" + ); let token = await nft.view("nft_token", "0"); t.is(token.owner_id, nftReceiver.accountId); -}) +}); test("Transfer call receiver panics", async (t) => { const { nft, nftOwner, nftReceiver } = t.context.accounts; - let res = await nftOwner.callRaw(nft, "nft_transfer_call", [nftReceiver.accountId, "0", null, "transfer & call", "incorrect message"], {attachedDeposit: '1', gas: MAX_GAS}) - t.is(Buffer.from(res.result.status.SuccessValue, 'base64').toString(), 'false'); + let res = await nftOwner.callRaw( + nft, + "nft_transfer_call", + [nftReceiver.accountId, "0", null, "transfer & call", "incorrect message"], + { attachedDeposit: "1", gas: MAX_GAS } + ); + t.is( + Buffer.from(res.result.status.SuccessValue, "base64").toString(), + "false" + ); t.is(res.logs.length, 3); let token = await nft.view("nft_token", "0"); t.is(token.owner_id, nftOwner.accountId); -}) +}); test("Transfer call receiver panics and nft_resolve_transfer produces no log if not enough gas", async (t) => { const { nft, nftOwner, nftReceiver } = t.context.accounts; - let res = await nftOwner.callRaw(nft, "nft_transfer_call", [nftReceiver.accountId, "0", null, "transfer & call", "incorrect message"], {attachedDeposit: '1', gas: 30_000_000_000_000n}) + let res = await nftOwner.callRaw( + nft, + "nft_transfer_call", + [nftReceiver.accountId, "0", null, "transfer & call", "incorrect message"], + { attachedDeposit: "1", gas: 30_000_000_000_000n } + ); t.assert(res.result.status.Failure !== undefined); t.is(res.logs.length, 0); let token = await nft.view("nft_token", "0"); t.is(token.owner_id, nftOwner.accountId); -}) +}); test("Simple transfer no logs on failure", async (t) => { const { nft, nftOwner } = t.context.accounts; @@ -146,11 +201,16 @@ test("Simple transfer no logs on failure", async (t) => { t.is(token.owner_id, nftOwner.accountId); // transfer to the current owner should fail and not print log - let res = await nftOwner.callRaw(nft, 'nft_transfer', [nftOwner.accountId, '0', null, 'simple transfer'], {attachedDeposit: '1'}) + let res = await nftOwner.callRaw( + nft, + "nft_transfer", + [nftOwner.accountId, "0", null, "simple transfer"], + { attachedDeposit: "1" } + ); t.assert(res.result.status.Failure !== undefined); t.is(res.logs.length, 0); token = await nft.view("nft_token", "0"); t.is(token.owner_id, nftOwner.accountId); -}) \ No newline at end of file +}); diff --git a/near-contract-standards/__tests__/my-nft/test_enumeration.ava.js b/near-contract-standards/__tests__/my-nft/test_enumeration.ava.js new file mode 100644 index 00000000..3443c493 --- /dev/null +++ b/near-contract-standards/__tests__/my-nft/test_enumeration.ava.js @@ -0,0 +1,168 @@ +import { Worker } from "near-workspaces"; +import test from "ava"; + +async function helper_mint(nft, nftOwner, id, title, description) { + let token_metadata = { + title, + description, + media: null, + media_hash: null, + copies: 1, + issued_at: null, + expires_at: null, + starts_at: null, + updated_at: null, + extra: null, + reference: null, + reference_hash: null, + }; + await nftOwner.call( + nft, + "nft_mint", + [id, nftOwner.accountId, token_metadata], + { attachedDeposit: "10 mN" } + ); +} + +test.beforeEach(async (t) => { + // Init the worker and start a Sandbox server + const worker = await Worker.init(); + + // Prepare sandbox for tests, create accounts, deploy contracts, etx. + const root = worker.rootAccount; + + // Deploy status-message the contract. + const nft = await root.devDeploy("./build/my-nft.wasm"); + + // Create test accounts + const ali = await root.createSubAccount("ali"); + const bob = await root.createSubAccount("bob"); + const nftOwner = await root.createSubAccount("owner"); + const nftReceiver = await root.devDeploy("./build/nft-receiver.wasm"); + + await nft.call(nft, "init", { + owner_id: nftOwner.accountId, + metadata: { spec: "nft-1.0.0", name: "My NFT", symbol: "NFT" }, + }); + + await nftReceiver.call(nftReceiver, "init", nft.accountId); + + await helper_mint( + nft, + nftOwner, + "0", + "Olympus Mons", + "The tallest mountain in the charted solar system" + ); + await helper_mint(nft, nftOwner, "1", "Black as the Night", "In charcoal"); + await helper_mint(nft, nftOwner, "2", "Hamakua", "Vintage recording"); + await helper_mint(nft, nftOwner, "3", "Aloha ke akua", "Original with piano"); + + // Save state for test runs, it is unique for each test + t.context.worker = worker; + t.context.accounts = { + root, + nft, + ali, + bob, + nftOwner, + nftReceiver, + }; +}); + +test.afterEach.always(async (t) => { + await t.context.worker.tearDown().catch((error) => { + console.log("Failed tear down the worker:", error); + }); +}); + +test("Enumerate NFT tokens total supply", async (t) => { + const { nft } = t.context.accounts; + + let totalSupply = await nft.view("nft_total_supply"); + t.is(totalSupply, 4); +}); + +test("Enumerate NFT tokens", async (t) => { + const { nft } = t.context.accounts; + + let nftTokens = await nft.view("nft_tokens", [1, null]); + t.is(nftTokens.length, 3); + t.is(nftTokens[0].token_id, "1"); + t.is(nftTokens[1].token_id, "2"); + t.is(nftTokens[2].token_id, "3"); + + nftTokens = await nft.view("nft_tokens", [null, 2]); + t.is(nftTokens.length, 2); + t.is(nftTokens[0].token_id, "0"); + t.is(nftTokens[1].token_id, "1"); +}); + +test("Enumerate NFT tokens supply for owner", async (t) => { + const { ali, nft, nftOwner } = t.context.accounts; + + let aliNfts = await nft.view("nft_supply_for_owner", ali.accountId); + t.is(aliNfts, 0); + + let ownerNfts = await nft.view("nft_supply_for_owner", nftOwner.accountId); + t.is(ownerNfts, 4); +}); + +test("Enumerate NFT tokens for owner", async (t) => { + const { ali, nft, nftOwner } = t.context.accounts; + + let nftTokens = await nft.view("nft_tokens_for_owner", [ + nftOwner.accountId, + null, + null, + ]); + t.is(nftTokens.length, 4); + t.is(nftTokens[0].token_id, "0"); + t.is(nftTokens[1].token_id, "1"); + t.is(nftTokens[2].token_id, "2"); + t.is(nftTokens[3].token_id, "3"); + + nftTokens = await nft.view("nft_tokens_for_owner", [ + nftOwner.accountId, + 1, + null, + ]); + t.is(nftTokens.length, 3); + t.is(nftTokens[0].token_id, "1"); + t.is(nftTokens[1].token_id, "2"); + t.is(nftTokens[2].token_id, "3"); + + nftTokens = await nft.view("nft_tokens_for_owner", [ + nftOwner.accountId, + null, + 2, + ]); + t.is(nftTokens.length, 2); + t.is(nftTokens[0].token_id, "0"); + t.is(nftTokens[1].token_id, "1"); + + let res = await nftOwner.callRaw( + nft, + "nft_transfer", + [ali.accountId, "0", null, "simple transfer"], + { attachedDeposit: "1" } + ); + t.is(res.result.status.SuccessValue, ""); + + nftTokens = await nft.view("nft_tokens_for_owner", [ + ali.accountId, + null, + null, + ]); + t.is(nftTokens.length, 1); + + nftTokens = await nft.view("nft_tokens_for_owner", [ + nftOwner.accountId, + null, + null, + ]); + t.is(nftTokens.length, 3); + t.is(nftTokens[0].token_id, "3"); + t.is(nftTokens[1].token_id, "1"); + t.is(nftTokens[2].token_id, "2"); +}); diff --git a/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts b/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts index 24d30493..ebab10e0 100644 --- a/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts +++ b/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts @@ -50,59 +50,94 @@ class StorageKeyApproval extends StorageKey implements IntoStorageKey { } @NearBindgen({ requireInit: true }) -class MyNFT implements NonFungibleTokenCore, NonFungibleTokenMetadataProvider, NonFungibleTokenResolver, NonFungibleTokenApproval, NonFungibleTokenEnumeration { +export class MyNFT + implements + NonFungibleTokenCore, + NonFungibleTokenMetadataProvider, + NonFungibleTokenResolver, + NonFungibleTokenApproval, + NonFungibleTokenEnumeration +{ tokens: NonFungibleToken; metadata: Option; constructor() { this.tokens = new NonFungibleToken(); - // @ts-ignore this.metadata = new NFTContractMetadata(); } @view({}) nft_total_supply(): number { - return this.tokens.nft_total_supply() + return this.tokens.nft_total_supply(); } @view({}) - nft_tokens([from_index, limit]: [from_index: number, limit: number]): Token[] { - return this.tokens.nft_tokens([from_index, limit]) + nft_tokens([from_index, limit]: [ + from_index: number, + limit: number + ]): Token[] { + return this.tokens.nft_tokens([from_index, limit]); } @view({}) nft_supply_for_owner(account_id: string): number { - return this.tokens.nft_supply_for_owner(account_id) + return this.tokens.nft_supply_for_owner(account_id); } @view({}) - nft_tokens_for_owner([account_id, from_index, limit]: [account_id: string, from_index: number, limit: number]): Token[] { - return this.tokens.nft_tokens_for_owner([account_id, from_index, limit]) + nft_tokens_for_owner([account_id, from_index, limit]: [ + account_id: string, + from_index: number, + limit: number + ]): Token[] { + return this.tokens.nft_tokens_for_owner([account_id, from_index, limit]); } - @call({payableFunction: true}) - nft_approve([token_id, account_id, msg]: [token_id: string, account_id: string, msg: string]): NearPromise { + @call({ payableFunction: true }) + nft_approve([token_id, account_id, msg]: [ + token_id: string, + account_id: string, + msg: string + ]): NearPromise { return this.tokens.nft_approve([token_id, account_id, msg]); } - @call({payableFunction: true}) + @call({ payableFunction: true }) nft_revoke([token_id, account_id]: [token_id: string, account_id: string]) { return this.tokens.nft_revoke([token_id, account_id]); } - @call({payableFunction: true}) + @call({ payableFunction: true }) nft_revoke_all(token_id: string) { return this.tokens.nft_revoke_all(token_id); } @view({}) - nft_is_approved([token_id, approved_account_id, approval_id]: [token_id: string, approved_account_id: string, approval_id: bigint]): boolean { - return this.tokens.nft_is_approved([token_id, approved_account_id, approval_id]); + nft_is_approved([token_id, approved_account_id, approval_id]: [ + token_id: string, + approved_account_id: string, + approval_id: bigint + ]): boolean { + return this.tokens.nft_is_approved([ + token_id, + approved_account_id, + approval_id, + ]); } @call({}) - nft_resolve_transfer([previous_owner_id, receiver_id, token_id, approvals]: [previous_owner_id: string, receiver_id: string, token_id: string, approvals: { [approval: string]: bigint; }]): boolean { - return this.tokens.nft_resolve_transfer([previous_owner_id, receiver_id, token_id, approvals]) + nft_resolve_transfer([previous_owner_id, receiver_id, token_id, approvals]: [ + previous_owner_id: string, + receiver_id: string, + token_id: string, + approvals: { [approval: string]: bigint } + ]): boolean { + return this.tokens.nft_resolve_transfer([ + previous_owner_id, + receiver_id, + token_id, + approvals, + ]); } @view({}) @@ -111,7 +146,7 @@ class MyNFT implements NonFungibleTokenCore, NonFungibleTokenMetadataProvider, N return this.metadata; } - @call({payableFunction: true}) + @call({ payableFunction: true }) nft_transfer([receiver_id, token_id, approval_id, memo]: [ receiver_id: string, token_id: string, @@ -121,7 +156,7 @@ class MyNFT implements NonFungibleTokenCore, NonFungibleTokenMetadataProvider, N this.tokens.nft_transfer([receiver_id, token_id, approval_id, memo]); } - @call({payableFunction: true}) + @call({ payableFunction: true }) nft_transfer_call([receiver_id, token_id, approval_id, memo, msg]: [ receiver_id: string, token_id: string, @@ -134,7 +169,7 @@ class MyNFT implements NonFungibleTokenCore, NonFungibleTokenMetadataProvider, N token_id, approval_id, memo, - msg + msg, ]); } @@ -151,7 +186,6 @@ class MyNFT implements NonFungibleTokenCore, NonFungibleTokenMetadataProvider, N owner_id: string; metadata: NFTContractMetadata; }) { - // @ts-ignore this.metadata = Object.assign(new NFTContractMetadata(), metadata); this.metadata.assert_valid(); this.tokens = new NonFungibleToken(); @@ -165,14 +199,10 @@ class MyNFT implements NonFungibleTokenCore, NonFungibleTokenMetadataProvider, N } @call({ payableFunction: true }) - nft_mint([ - token_id, - token_owner_id, - token_metadata, - ]: [ + nft_mint([token_id, token_owner_id, token_metadata]: [ token_id: TokenId, token_owner_id: AccountId, - token_metadata: TokenMetadata, + token_metadata: TokenMetadata ]) { assert( near.predecessorAccountId() === this.tokens.owner_id, diff --git a/near-contract-standards/example-contracts/non-fungible-token/test-approval-receiver.ts b/near-contract-standards/example-contracts/non-fungible-token/test-approval-receiver.ts index a577ad9d..06328e50 100644 --- a/near-contract-standards/example-contracts/non-fungible-token/test-approval-receiver.ts +++ b/near-contract-standards/example-contracts/non-fungible-token/test-approval-receiver.ts @@ -1,4 +1,12 @@ -import { initialize, near, NearBindgen, NearPromise, PromiseOrValue, assert, call } from "../../../lib"; +import { + initialize, + near, + NearBindgen, + NearPromise, + PromiseOrValue, + assert, + call, +} from "../../../lib"; import { AccountId } from "../../../lib/types"; import { NonFungibleTokenApprovalReceiver } from "../../src/non_fungible_token/approval/approval_receiver"; @@ -7,43 +15,58 @@ const PROMISE_CALL = 20_000_000_000_000n; const GAS_FOR_NFT_ON_APPROVE = BASE_GAS + PROMISE_CALL; interface ValueReturnInterface { - ok_go(msg: string): PromiseOrValue; + ok_go(msg: string): PromiseOrValue; } -@NearBindgen({requireInit: true}) -class ApprovalReceiver implements NonFungibleTokenApprovalReceiver, ValueReturnInterface { - public non_fungible_token_account_id: AccountId; +@NearBindgen({ requireInit: true }) +export class ApprovalReceiver + implements NonFungibleTokenApprovalReceiver, ValueReturnInterface +{ + public non_fungible_token_account_id: AccountId; - constructor() { - this.non_fungible_token_account_id = ''; - } + constructor() { + this.non_fungible_token_account_id = ""; + } + + @call({}) + nft_on_approve([token_id, owner_id, approval_id, msg]: [ + token_id: string, + owner_id: string, + approval_id: bigint, + msg: string + ]): PromiseOrValue { + assert( + near.predecessorAccountId() === this.non_fungible_token_account_id, + "Only supports the one non-fungible token contract" + ); - @call({}) - nft_on_approve([token_id, owner_id, approval_id, msg]: [token_id: string, owner_id: string, approval_id: bigint, msg: string]): PromiseOrValue { - assert(near.predecessorAccountId() === this.non_fungible_token_account_id, - "Only supports the one non-fungible token contract" + near.log( + `in nft_on_approve; token_id=${token_id}, owner_id=${owner_id}, approval_id=${approval_id}, msg=${msg}` + ); + switch (msg) { + case "return-now": + return "cool"; + default: { + const prepaid_gas = near.prepaidGas(); + const account_id = near.currentAccountId(); + return NearPromise.new(account_id).functionCall( + "ok_go", + JSON.stringify(msg), + 0n, + prepaid_gas - GAS_FOR_NFT_ON_APPROVE ); - - near.log(`in nft_on_approve; token_id=${token_id}, owner_id=${owner_id}, approval_id=${approval_id}, msg=${msg}`); - switch(msg) { - case 'return-now': - return 'cool'; - default: { - let prepaid_gas = near.prepaidGas(); - let account_id = near.currentAccountId(); - return NearPromise.new(account_id).functionCall('ok_go', JSON.stringify(msg), 0n, prepaid_gas - GAS_FOR_NFT_ON_APPROVE) - } - } + } } + } - @call({}) - ok_go(msg: string): PromiseOrValue { - near.log(`in ok_go, msg=${msg}`); - return msg; - } + @call({}) + ok_go(msg: string): PromiseOrValue { + near.log(`in ok_go, msg=${msg}`); + return msg; + } - @initialize({}) - init(non_fungible_token_account_id: AccountId) { - this.non_fungible_token_account_id = non_fungible_token_account_id; - } -} \ No newline at end of file + @initialize({}) + init(non_fungible_token_account_id: AccountId) { + this.non_fungible_token_account_id = non_fungible_token_account_id; + } +} diff --git a/near-contract-standards/example-contracts/non-fungible-token/test-token-receiver.ts b/near-contract-standards/example-contracts/non-fungible-token/test-token-receiver.ts index 4bdbfb1a..0669f164 100644 --- a/near-contract-standards/example-contracts/non-fungible-token/test-token-receiver.ts +++ b/near-contract-standards/example-contracts/non-fungible-token/test-token-receiver.ts @@ -1,15 +1,12 @@ import { NonFungibleTokenReceiver } from "../../src/non_fungible_token/core/receiver"; -import { TokenId } from "../../src/non_fungible_token/token"; import { - assert, - Bytes, - call, - initialize, - near, - NearBindgen, - NearPromise, - PromiseOrValue, - view, + assert, + call, + initialize, + near, + NearBindgen, + NearPromise, + PromiseOrValue, } from "near-sdk-js/lib/index"; import { AccountId } from "near-sdk-js/lib/types"; @@ -18,49 +15,71 @@ const PROMISE_CALL = 10_000_000_000_000n; const GAS_FOR_NFT_ON_TRANSFER = BASE_GAS + PROMISE_CALL; interface ValueReturnInterface { - ok_go(return_it: boolean): PromiseOrValue; + ok_go(return_it: boolean): PromiseOrValue; } -@NearBindgen({requireInit: true}) -class TokenReceiver implements NonFungibleTokenReceiver, ValueReturnInterface { - public non_fungible_token_account_id: AccountId; +@NearBindgen({ requireInit: true }) +export class TokenReceiver + implements NonFungibleTokenReceiver, ValueReturnInterface +{ + public non_fungible_token_account_id: AccountId; - constructor() { - this.non_fungible_token_account_id = ''; - } + constructor() { + this.non_fungible_token_account_id = ""; + } - @initialize({}) - init(non_fungible_token_account_id: AccountId) { - this.non_fungible_token_account_id = non_fungible_token_account_id; - } + @initialize({}) + init(non_fungible_token_account_id: AccountId) { + this.non_fungible_token_account_id = non_fungible_token_account_id; + } - @call({}) - nft_on_transfer([sender_id, previous_owner_id, token_id, msg]: [sender_id: string, previous_owner_id: string, token_id: string, msg: String]): PromiseOrValue { - assert(near.predecessorAccountId() === this.non_fungible_token_account_id, "Only supports the one non-fungible token contract"); - near.log(`in nft_on_transfer; sender_id=${sender_id}, previous_owner_id=${previous_owner_id}, token_id=${token_id}, msg=${msg}`) - switch (msg) { - case 'return-it-now': - return true; - case 'return-it-later': { - let prepaid_gas = near.prepaidGas(); - let account_id = near.currentAccountId(); - return NearPromise.new(account_id).functionCall('ok_go', JSON.stringify(true), 0n, prepaid_gas - GAS_FOR_NFT_ON_TRANSFER); - } - case 'keep-it-now': - return false; - case 'keep-it-later': { - let prepaid_gas = near.prepaidGas(); - let account_id = near.currentAccountId(); - return NearPromise.new(account_id).functionCall('ok_go', JSON.stringify(false), 0n, prepaid_gas - GAS_FOR_NFT_ON_TRANSFER); - } - default: - throw new Error('unsupported msg') - } + @call({}) + nft_on_transfer([sender_id, previous_owner_id, token_id, msg]: [ + sender_id: string, + previous_owner_id: string, + token_id: string, + msg: string + ]): PromiseOrValue { + assert( + near.predecessorAccountId() === this.non_fungible_token_account_id, + "Only supports the one non-fungible token contract" + ); + near.log( + `in nft_on_transfer; sender_id=${sender_id}, previous_owner_id=${previous_owner_id}, token_id=${token_id}, msg=${msg}` + ); + switch (msg) { + case "return-it-now": + return true; + case "return-it-later": { + const prepaid_gas = near.prepaidGas(); + const account_id = near.currentAccountId(); + return NearPromise.new(account_id).functionCall( + "ok_go", + JSON.stringify(true), + 0n, + prepaid_gas - GAS_FOR_NFT_ON_TRANSFER + ); + } + case "keep-it-now": + return false; + case "keep-it-later": { + const prepaid_gas = near.prepaidGas(); + const account_id = near.currentAccountId(); + return NearPromise.new(account_id).functionCall( + "ok_go", + JSON.stringify(false), + 0n, + prepaid_gas - GAS_FOR_NFT_ON_TRANSFER + ); + } + default: + throw new Error("unsupported msg"); } + } - @call({}) - ok_go(return_it: boolean): PromiseOrValue { - near.log(`in ok_go, return_it=${return_it}`); - return return_it; - } -} \ No newline at end of file + @call({}) + ok_go(return_it: boolean): PromiseOrValue { + near.log(`in ok_go, return_it=${return_it}`); + return return_it; + } +} diff --git a/near-contract-standards/src/non_fungible_token/approval/approval_receiver.ts b/near-contract-standards/src/non_fungible_token/approval/approval_receiver.ts index c358e64a..8b8071c6 100644 --- a/near-contract-standards/src/non_fungible_token/approval/approval_receiver.ts +++ b/near-contract-standards/src/non_fungible_token/approval/approval_receiver.ts @@ -3,5 +3,10 @@ import { AccountId } from "near-sdk-js/lib/types"; import { TokenId } from "../token"; export interface NonFungibleTokenApprovalReceiver { - nft_on_approve([token_id, owner_id, approval_id, msg]: [token_id: TokenId, owner_id: AccountId, approval_id: bigint, msg: string]): PromiseOrValue; -} \ No newline at end of file + nft_on_approve([token_id, owner_id, approval_id, msg]: [ + token_id: TokenId, + owner_id: AccountId, + approval_id: bigint, + msg: string + ]): PromiseOrValue; +} diff --git a/near-contract-standards/src/non_fungible_token/approval/index.ts b/near-contract-standards/src/non_fungible_token/approval/index.ts index ef44c6cd..7bf339b3 100644 --- a/near-contract-standards/src/non_fungible_token/approval/index.ts +++ b/near-contract-standards/src/non_fungible_token/approval/index.ts @@ -4,8 +4,19 @@ import { TokenId } from "../token"; import { Option } from "../utils"; export interface NonFungibleTokenApproval { - nft_approve([token_id, account_id, msg]: [token_id: TokenId, account_id: AccountId, msg: Option]): Option; - nft_revoke([token_id, account_id]: [token_id: TokenId, account_id: AccountId]); - nft_revoke_all(token_id: TokenId); - nft_is_approved([token_id, approved_account_id, approval_id]: [token_id: TokenId, approved_account_id: AccountId, approval_id: Option]): boolean; + nft_approve([token_id, account_id, msg]: [ + token_id: TokenId, + account_id: AccountId, + msg: Option + ]): Option; + nft_revoke([token_id, account_id]: [ + token_id: TokenId, + account_id: AccountId + ]); + nft_revoke_all(token_id: TokenId); + nft_is_approved([token_id, approved_account_id, approval_id]: [ + token_id: TokenId, + approved_account_id: AccountId, + approval_id: Option + ]): boolean; } diff --git a/near-contract-standards/src/non_fungible_token/core/index.ts b/near-contract-standards/src/non_fungible_token/core/index.ts index a201aa3c..6e6212c7 100644 --- a/near-contract-standards/src/non_fungible_token/core/index.ts +++ b/near-contract-standards/src/non_fungible_token/core/index.ts @@ -3,18 +3,18 @@ import { Token, TokenId } from "../token"; import { Option } from "../utils"; export interface NonFungibleTokenCore { - nft_transfer([receiver_id, token_id, approval_id, memo]: [ - receiver_id: AccountId, - token_id: TokenId, - approval_id: Option, - memo: Option - ]); - nft_transfer_call([receiver_id, token_id, approval_id, memo]: [ - receiver_id: AccountId, - token_id: TokenId, - approval_id: Option, - memo: Option, - msg: string - ]); - nft_token(token_id: TokenId): Option; - } \ No newline at end of file + nft_transfer([receiver_id, token_id, approval_id, memo]: [ + receiver_id: AccountId, + token_id: TokenId, + approval_id: Option, + memo: Option + ]); + nft_transfer_call([receiver_id, token_id, approval_id, memo]: [ + receiver_id: AccountId, + token_id: TokenId, + approval_id: Option, + memo: Option, + msg: string + ]); + nft_token(token_id: TokenId): Option; +} diff --git a/near-contract-standards/src/non_fungible_token/core/receiver.ts b/near-contract-standards/src/non_fungible_token/core/receiver.ts index 0b19f808..03fd84be 100644 --- a/near-contract-standards/src/non_fungible_token/core/receiver.ts +++ b/near-contract-standards/src/non_fungible_token/core/receiver.ts @@ -7,6 +7,6 @@ export interface NonFungibleTokenReceiver { sender_id: AccountId, previous_owner_id: AccountId, token_id: TokenId, - msg: String + msg: string ]): PromiseOrValue; } diff --git a/near-contract-standards/src/non_fungible_token/enumeration/index.ts b/near-contract-standards/src/non_fungible_token/enumeration/index.ts index bf148c0f..5310d253 100644 --- a/near-contract-standards/src/non_fungible_token/enumeration/index.ts +++ b/near-contract-standards/src/non_fungible_token/enumeration/index.ts @@ -2,8 +2,15 @@ import { AccountId } from "../../../../lib/types"; import { Token } from "../token"; export interface NonFungibleTokenEnumeration { - nft_total_supply(): number; - nft_tokens([from_index, limit]: [from_index: number | null, limit: number | null]): Token[]; - nft_supply_for_owner(account_id: AccountId): number; - nft_tokens_for_owner([account_id, from_index, limit]: [account_id: AccountId, from_index: number, limit: number]): Token[]; -} \ No newline at end of file + nft_total_supply(): number; + nft_tokens([from_index, limit]: [ + from_index: number | null, + limit: number | null + ]): Token[]; + nft_supply_for_owner(account_id: AccountId): number; + nft_tokens_for_owner([account_id, from_index, limit]: [ + account_id: AccountId, + from_index: number, + limit: number + ]): Token[]; +} diff --git a/near-contract-standards/src/non_fungible_token/impl.ts b/near-contract-standards/src/non_fungible_token/impl.ts index 655ce4d1..8d960926 100644 --- a/near-contract-standards/src/non_fungible_token/impl.ts +++ b/near-contract-standards/src/non_fungible_token/impl.ts @@ -7,13 +7,10 @@ import { assert, NearPromise, bytes, - PromiseOrValue, } from "near-sdk-js/lib"; -import {serialize} from 'near-sdk-js/lib/utils' -import { PromiseResult } from "near-sdk-js/lib/types"; +import { serialize } from "near-sdk-js/lib/utils"; import { TokenMetadata } from "./metadata"; import { - hash_account_id, refund_approved_account_ids, refund_deposit, refund_deposit_to_account, @@ -37,7 +34,6 @@ const GAS_FOR_NFT_TRANSFER_CALL = 30_000_000_000_000n + GAS_FOR_RESOLVE_TRANSFER; const GAS_FOR_NFT_APPROVE = 20_000_000_000_000n; - function repeat(str: string, n: number) { return Array(n + 1).join(str); } @@ -57,7 +53,11 @@ function expect_approval(option: Option): T { } export class NonFungibleToken - implements NonFungibleTokenCore, NonFungibleTokenResolver, NonFungibleTokenApproval, NonFungibleTokenEnumeration + implements + NonFungibleTokenCore, + NonFungibleTokenResolver, + NonFungibleTokenApproval, + NonFungibleTokenEnumeration { public owner_id: string; public extra_storage_in_bytes_per_token: bigint; @@ -78,88 +78,124 @@ export class NonFungibleToken } nft_total_supply(): number { - return this.owner_by_id.length + return this.owner_by_id.length; } private enum_get_token(owner_id: AccountId, token_id: TokenId): Token { - let metadata = this.token_metadata_by_id.get(token_id, {reconstructor: TokenMetadata.reconstruct}) - let approved_account_ids = this.approvals_by_id.get(token_id, {defaultValue: {}}) - return new Token(token_id, owner_id, metadata, approved_account_ids) + const metadata = this.token_metadata_by_id.get(token_id, { + reconstructor: TokenMetadata.reconstruct, + }); + const approved_account_ids = this.approvals_by_id.get(token_id, { + defaultValue: {}, + }); + return new Token(token_id, owner_id, metadata, approved_account_ids); } - nft_tokens([from_index, limit]: [from_index: number | null, limit: number | null]): Token[] { - let start_index = from_index === null ? 0 : from_index; - assert(this.owner_by_id.length >= start_index, "Out of bounds, please use a smaller from_index."); - let l = limit === null ? 2**32 : limit; - assert(l >= 0, "limit must be greater than 0."); + nft_tokens([from_index, limit]: [ + from_index: number | null, + limit: number | null + ]): Token[] { + const start_index = from_index === null ? 0 : from_index; + assert( + this.owner_by_id.length >= start_index, + "Out of bounds, please use a smaller from_index." + ); + let l = limit === null ? 2 ** 32 : limit; + assert(l > 0, "limit must be greater than 0."); l = Math.min(l, this.owner_by_id.length - start_index); - let ret: Token[] = []; - for (let i = start_index; i < l; i++) { - let token_id = this.owner_by_id.keys.get(i); - let owner_id = this.owner_by_id.get(token_id); + const ret: Token[] = []; + for (let i = start_index; i < start_index + l; i++) { + const token_id = this.owner_by_id.keys.get(i); + const owner_id = this.owner_by_id.get(token_id); ret.push(this.enum_get_token(owner_id, token_id)); } return ret; } nft_supply_for_owner(account_id: string): number { - let tokens_per_owner = this.tokens_per_owner - assert(tokens_per_owner !== null, - "Could not find tokens_per_owner when calling a method on the enumeration standard.", + const tokens_per_owner = this.tokens_per_owner; + assert( + tokens_per_owner !== null, + "Could not find tokens_per_owner when calling a method on the enumeration standard." ); - let account_tokens = tokens_per_owner.get(account_id, {reconstructor: UnorderedSet.reconstruct}); - return account_tokens === null ? 0 : account_tokens.length + const account_tokens = tokens_per_owner.get(account_id, { + reconstructor: UnorderedSet.reconstruct, + }); + return account_tokens === null ? 0 : account_tokens.length; } - nft_tokens_for_owner([account_id, from_index, limit]: [account_id: string, from_index: number, limit: number]): Token[] { - let tokens_per_owner = this.tokens_per_owner - assert(tokens_per_owner !== null, - "Could not find tokens_per_owner when calling a method on the enumeration standard.", + nft_tokens_for_owner([account_id, from_index, limit]: [ + account_id: string, + from_index: number, + limit: number + ]): Token[] { + const tokens_per_owner = this.tokens_per_owner; + assert( + tokens_per_owner !== null, + "Could not find tokens_per_owner when calling a method on the enumeration standard." ); - let token_set = tokens_per_owner.get(account_id, {reconstructor: UnorderedSet.reconstruct}); + const token_set = tokens_per_owner.get(account_id, { + reconstructor: UnorderedSet.reconstruct, + }); assert(token_set !== null, "Token set is empty"); - let start_index = from_index === null ? 0 : from_index; - assert(token_set.length >= start_index, "Out of bounds, please use a smaller from_index."); - let l = limit === null ? 2**32 : limit; - assert(l >= 0, "limit must be greater than 0."); + const start_index = from_index === null ? 0 : from_index; + assert( + token_set.length >= start_index, + "Out of bounds, please use a smaller from_index." + ); + let l = limit === null ? 2 ** 32 : limit; + assert(l > 0, "limit must be greater than 0."); l = Math.min(l, token_set.length - start_index); - let ret: Token[] = []; - for (let i = start_index; i < l; i++) { - let token_id = token_set.elements.get(i); - let owner_id = this.owner_by_id.get(token_id); + const ret: Token[] = []; + for (let i = start_index; i < start_index + l; i++) { + const token_id = token_set.elements.get(i); + const owner_id = this.owner_by_id.get(token_id); ret.push(this.enum_get_token(owner_id, token_id)); } return ret; } - nft_approve([token_id, account_id, msg]: [token_id: string, account_id: string, msg: string]): NearPromise { + nft_approve([token_id, account_id, msg]: [ + token_id: string, + account_id: string, + msg: string + ]): NearPromise { assert_at_least_one_yocto(); if (this.approvals_by_id === null) { throw new Error("NFT does not support Approval Management"); } - let approvals_by_id = this.approvals_by_id; - let owner_id = expect_token_found(this.owner_by_id.get(token_id)); - - assert(near.predecessorAccountId() === owner_id, "Predecessor must be token owner."); - - let next_approval_id_by_id = expect_approval(this.next_approval_id_by_id); - let approved_account_ids = approvals_by_id.get(token_id) ?? {}; - let approval_id = next_approval_id_by_id.get(token_id) ?? 1n; - let old_approval_id = approved_account_ids[account_id] + const approvals_by_id = this.approvals_by_id; + const owner_id = expect_token_found(this.owner_by_id.get(token_id)); + + assert( + near.predecessorAccountId() === owner_id, + "Predecessor must be token owner." + ); + + const next_approval_id_by_id = expect_approval(this.next_approval_id_by_id); + const approved_account_ids = approvals_by_id.get(token_id) ?? {}; + const approval_id = next_approval_id_by_id.get(token_id) ?? 1n; + const old_approval_id = approved_account_ids[account_id]; approved_account_ids[account_id] = approval_id; approvals_by_id.set(token_id, approved_account_ids); - + next_approval_id_by_id.set(token_id, approval_id + 1n); - let storage_used = (old_approval_id === null) ? bytes_for_approved_account_id(account_id) : 0; + const storage_used = + old_approval_id === null ? bytes_for_approved_account_id(account_id) : 0; refund_deposit(BigInt(storage_used)); - if(msg) { - return NearPromise.new(account_id).functionCall('nft_on_approve', bytes(serialize([token_id, owner_id, approval_id, msg])), 0n, near.prepaidGas() - GAS_FOR_NFT_APPROVE); + if (msg) { + return NearPromise.new(account_id).functionCall( + "nft_on_approve", + bytes(serialize([token_id, owner_id, approval_id, msg])), + 0n, + near.prepaidGas() - GAS_FOR_NFT_APPROVE + ); } } @@ -168,21 +204,24 @@ export class NonFungibleToken if (this.approvals_by_id === null) { throw new Error("NFT does not support Approval Management"); } - let approvals_by_id = this.approvals_by_id; - let owner_id = expect_token_found(this.owner_by_id.get(token_id)); - - let predecessorAccountId = near.predecessorAccountId(); - assert(predecessorAccountId === owner_id, "Predecessor must be token owner."); - - let approved_account_ids = approvals_by_id.get(token_id); + const approvals_by_id = this.approvals_by_id; + const owner_id = expect_token_found(this.owner_by_id.get(token_id)); + + const predecessorAccountId = near.predecessorAccountId(); + assert( + predecessorAccountId === owner_id, + "Predecessor must be token owner." + ); + + const approved_account_ids = approvals_by_id.get(token_id); if (approved_account_ids[account_id]) { - delete approved_account_ids[account_id] + delete approved_account_ids[account_id]; refund_approved_account_ids_iter(predecessorAccountId, [account_id]); if (Object.keys(approved_account_ids).length === 0) { approvals_by_id.remove(token_id); } else { - approvals_by_id.set(token_id, approved_account_ids) + approvals_by_id.set(token_id, approved_account_ids); } } } @@ -192,34 +231,41 @@ export class NonFungibleToken if (this.approvals_by_id === null) { throw new Error("NFT does not support Approval Management"); } - let approvals_by_id = this.approvals_by_id; - let owner_id = expect_token_found(this.owner_by_id.get(token_id)); - - let predecessorAccountId = near.predecessorAccountId(); - assert(predecessorAccountId === owner_id, "Predecessor must be token owner."); - - let approved_account_ids = approvals_by_id.get(token_id); + const approvals_by_id = this.approvals_by_id; + const owner_id = expect_token_found(this.owner_by_id.get(token_id)); + + const predecessorAccountId = near.predecessorAccountId(); + assert( + predecessorAccountId === owner_id, + "Predecessor must be token owner." + ); + + const approved_account_ids = approvals_by_id.get(token_id); if (approved_account_ids) { refund_approved_account_ids(predecessorAccountId, approved_account_ids); approvals_by_id.remove(token_id); - } + } } - nft_is_approved([token_id, approved_account_id, approval_id]: [token_id: string, approved_account_id: string, approval_id: bigint]): boolean { + nft_is_approved([token_id, approved_account_id, approval_id]: [ + token_id: string, + approved_account_id: string, + approval_id: bigint + ]): boolean { expect_token_found(this.owner_by_id.get(token_id)); if (this.approvals_by_id === null) { return false; } - let approvals_by_id = this.approvals_by_id; + const approvals_by_id = this.approvals_by_id; - let approved_account_ids = approvals_by_id.get(token_id); + const approved_account_ids = approvals_by_id.get(token_id); if (approved_account_ids === null) { return false; } - let actual_approval_id = approved_account_ids[approved_account_id]; + const actual_approval_id = approved_account_ids[approved_account_id]; if (actual_approval_id === undefined) { return false; } @@ -229,7 +275,7 @@ export class NonFungibleToken } return true; } - + init( owner_by_id_prefix: IntoStorageKey, owner_id: string, @@ -242,7 +288,7 @@ export class NonFungibleToken if (approval_prefix) { const prefix = approval_prefix.into_storage_key(); approvals_by_id = new LookupMap(prefix); - next_approval_id_by_id = new LookupMap(prefix + 'n'); + next_approval_id_by_id = new LookupMap(prefix + "n"); } else { approvals_by_id = null; next_approval_id_by_id = null; @@ -263,11 +309,13 @@ export class NonFungibleToken } static reconstruct(data: NonFungibleToken): NonFungibleToken { - let ret = new NonFungibleToken(); + const ret = new NonFungibleToken(); Object.assign(ret, data); ret.owner_by_id = UnorderedMap.reconstruct(ret.owner_by_id); if (ret.token_metadata_by_id) { - ret.token_metadata_by_id = LookupMap.reconstruct(ret.token_metadata_by_id); + ret.token_metadata_by_id = LookupMap.reconstruct( + ret.token_metadata_by_id + ); } if (ret.tokens_per_owner) { ret.tokens_per_owner = LookupMap.reconstruct(ret.tokens_per_owner); @@ -338,7 +386,7 @@ export class NonFungibleToken this.approvals_by_id.remove(tmp_token_id); } if (this.tokens_per_owner) { - let u = this.tokens_per_owner.remove(tmp_owner_id, { + const u = this.tokens_per_owner.remove(tmp_owner_id, { reconstructor: UnorderedSet.reconstruct, }); u.remove(tmp_token_id); @@ -359,6 +407,7 @@ export class NonFungibleToken if (owner_tokens_set == null) { throw new Error("Unable to access tokens per owner in unguarded call."); } + owner_tokens_set.remove(token_id); if (owner_tokens_set.isEmpty()) { this.tokens_per_owner.remove(from); } else { @@ -398,7 +447,7 @@ export class NonFungibleToken throw new Error("Unauthorized"); } - const actual_approval_id = (approved_account_ids as any)[sender_id]; + const actual_approval_id = approved_account_ids[sender_id]; if (!actual_approval_id) { throw new Error("Sender not approved"); } @@ -479,7 +528,9 @@ export class NonFungibleToken reconstructor: UnorderedSet.reconstruct, }); if (token_ids === null) { - token_ids = new UnorderedSet(new TokensPerOwner(near.sha256(owner_id)).into_storage_key()) + token_ids = new UnorderedSet( + new TokensPerOwner(near.sha256(owner_id)).into_storage_key() + ); } token_ids.set(token_id); this.tokens_per_owner.set(owner_id, token_ids); @@ -525,17 +576,10 @@ export class NonFungibleToken memo ); - let promise = NearPromise.new(receiver_id) + const promise = NearPromise.new(receiver_id) .functionCall( "nft_on_transfer", - bytes( - JSON.stringify([ - sender_id, - old_owner, - token_id, - msg, - ]) - ), + bytes(JSON.stringify([sender_id, old_owner, token_id, msg])), 0n, near.prepaidGas() - GAS_FOR_NFT_TRANSFER_CALL ) @@ -543,12 +587,7 @@ export class NonFungibleToken NearPromise.new(near.currentAccountId()).functionCall( "nft_resolve_transfer", bytes( - JSON.stringify([ - old_owner, - receiver_id, - token_id, - old_approvals, - ]) + JSON.stringify([old_owner, receiver_id, token_id, old_approvals]) ), 0n, GAS_FOR_RESOLVE_TRANSFER @@ -571,7 +610,12 @@ export class NonFungibleToken return new Token(token_id, owner_id, metadata, approved_account_ids); } - nft_resolve_transfer([previous_owner_id, receiver_id, token_id, approved_account_ids]: [ + nft_resolve_transfer([ + previous_owner_id, + receiver_id, + token_id, + approved_account_ids, + ]: [ previous_owner_id: string, receiver_id: string, token_id: string, @@ -620,7 +664,7 @@ export class NonFungibleToken this.internal_transfer_unguarded(token_id, receiver_id, previous_owner_id); if (this.approvals_by_id) { - let receiver_approvals = this.approvals_by_id.get(token_id); + const receiver_approvals = this.approvals_by_id.get(token_id); if (receiver_approvals) { refund_approved_account_ids(receiver_id, receiver_approvals); } diff --git a/near-contract-standards/src/non_fungible_token/metadata.ts b/near-contract-standards/src/non_fungible_token/metadata.ts index 2465adbb..eab2afd2 100644 --- a/near-contract-standards/src/non_fungible_token/metadata.ts +++ b/near-contract-standards/src/non_fungible_token/metadata.ts @@ -1,5 +1,5 @@ import { Bytes } from "near-sdk-js"; -import { near, assert } from "near-sdk-js"; +import { assert } from "near-sdk-js"; import { Option } from "./utils"; export const NFT_METADATA_SPEC = "nft-1.0.0"; @@ -53,7 +53,7 @@ export class NFTContractMetadata { } static reconstruct(data: NFTContractMetadata): NFTContractMetadata { - let metadata = new NFTContractMetadata(); + const metadata = new NFTContractMetadata(); Object.assign(metadata, data); return metadata; } From 1990900d2a47e915c75539ec377ab6c169896de6 Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Wed, 2 Nov 2022 19:25:40 +0800 Subject: [PATCH 34/44] yarn build --- lib/cli/cli.js | 2 +- lib/cli/post-install.js | 38 ++++++++++++++++++++++++-------------- lib/cli/utils.js | 4 +++- 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/lib/cli/cli.js b/lib/cli/cli.js index d60ebd69..f579f947 100755 --- a/lib/cli/cli.js +++ b/lib/cli/cli.js @@ -46,7 +46,7 @@ export async function buildCom(source, target, { verbose = false }) { signale.await(`Creating ${TARGET_DIR} directory...`); await executeCommand(`mkdir -p ${TARGET_DIR}`, verbose); signal.await(`Validatig ${source} contract...`); - if (!await validateContract(source, verbose)) { + if (!(await validateContract(source, verbose))) { process.exit(1); } signale.await(`Creating ${source} file with Rollup...`); diff --git a/lib/cli/post-install.js b/lib/cli/post-install.js index 4df5c749..e6873e22 100644 --- a/lib/cli/post-install.js +++ b/lib/cli/post-install.js @@ -26,11 +26,14 @@ if (!SUPPORTED_ARCH.includes(ARCH)) { signale.await("Installing wasi-stub..."); const BINARYEN_VERSION = `0.1.10`; const BINARYEN_VERSION_TAG = `v${BINARYEN_VERSION}`; -const BINARYEN_SYSTEM_NAME = PLATFORM === "linux" ? "Linux" : - PLATFORM === "darwin" ? "macOS" : - PLATFORM === "win32" ? "windows" : "other"; -const BINARYEN_ARCH_NAME = ARCH === "x64" ? "X64" : - ARCH === "arm64" ? "arm64" : "other"; +const BINARYEN_SYSTEM_NAME = PLATFORM === "linux" + ? "Linux" + : PLATFORM === "darwin" + ? "macOS" + : PLATFORM === "win32" + ? "windows" + : "other"; +const BINARYEN_ARCH_NAME = ARCH === "x64" ? "X64" : ARCH === "arm64" ? "arm64" : "other"; const BINARYEN_TAR_NAME = `binaryen-${BINARYEN_SYSTEM_NAME}-${BINARYEN_ARCH_NAME}.tar.gz`; await download(`https://github.com/near/binaryen/releases/download/${BINARYEN_VERSION_TAG}/${BINARYEN_TAR_NAME}`); fs.mkdirSync("binaryen"); @@ -39,11 +42,14 @@ fs.rmSync(BINARYEN_TAR_NAME); signale.await("Installing QuickJS..."); const QUICK_JS_VERSION = `0.1.2`; const QUICK_JS_VERSION_TAG = `v${QUICK_JS_VERSION}`; -const QUICK_JS_SYSTEM_NAME = PLATFORM === "linux" ? "Linux" : - PLATFORM === "darwin" ? "macOS" : - PLATFORM === "win32" ? "windows" : "other"; -const QUICK_JS_ARCH_NAME = ARCH === "x64" ? "X64" : - ARCH === "arm64" ? "arm64" : "other"; +const QUICK_JS_SYSTEM_NAME = PLATFORM === "linux" + ? "Linux" + : PLATFORM === "darwin" + ? "macOS" + : PLATFORM === "win32" + ? "windows" + : "other"; +const QUICK_JS_ARCH_NAME = ARCH === "x64" ? "X64" : ARCH === "arm64" ? "arm64" : "other"; const QUICK_JS_TAR_NAME = `${QUICK_JS_VERSION_TAG}.tar.gz`; const QUICK_JS_DOWNLOADED_FOLDER_NAME = `quickjs-${QUICK_JS_VERSION}`; const QUICK_JS_TARGET_FOLDER_NAME = "quickjs"; @@ -66,9 +72,13 @@ signale.await("Installing wasi-sdk..."); const WASI_SDK_MAJOR_VER = 11; const WASI_SDK_MINOR_VER = 0; const WASI_SDK_DOWNLOADED_FOLDER_NAME = `wasi-sdk-${WASI_SDK_MAJOR_VER}.${WASI_SDK_MINOR_VER}`; -const WASI_SDK_SYSTEM_NAME = PLATFORM === "linux" ? "linux" : - PLATFORM === "darwin" ? "macos" : - PLATFORM === "win32" ? "windows" : "other"; +const WASI_SDK_SYSTEM_NAME = PLATFORM === "linux" + ? "linux" + : PLATFORM === "darwin" + ? "macos" + : PLATFORM === "win32" + ? "windows" + : "other"; const WASI_SDK_TAR_NAME = `${WASI_SDK_DOWNLOADED_FOLDER_NAME}-${WASI_SDK_SYSTEM_NAME}.tar.gz`; // Download WASI SDK await download(`https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${WASI_SDK_MAJOR_VER}/${WASI_SDK_TAR_NAME}`); @@ -77,5 +87,5 @@ await executeCommand(`tar xvf ${WASI_SDK_TAR_NAME}`); // Delete .tar file fs.rmSync(WASI_SDK_TAR_NAME); // Delete version from folder name -fs.renameSync(WASI_SDK_DOWNLOADED_FOLDER_NAME, 'wasi-sdk'); +fs.renameSync(WASI_SDK_DOWNLOADED_FOLDER_NAME, "wasi-sdk"); signale.success("Successfully finished postinstall script!"); diff --git a/lib/cli/utils.js b/lib/cli/utils.js index 6d09f627..f7dc7e23 100644 --- a/lib/cli/utils.js +++ b/lib/cli/utils.js @@ -56,7 +56,9 @@ export async function validateContract(contractPath, verbose = false) { return true; } if (!hasConstructor && propertiesToBeInited.length > 0) { - signale.error(chalk.redBright(`${UNINITIALIZED_PARAMETERS_ERROR} ${propertiesToBeInited.map(({ name }) => name).join(", ")}`)); + signale.error(chalk.redBright(`${UNINITIALIZED_PARAMETERS_ERROR} ${propertiesToBeInited + .map(({ name }) => name) + .join(", ")}`)); return false; } const [constructor] = constructors; From e8fe9f709f2e36762e4efb38203bdc5532e6356a Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Wed, 2 Nov 2022 19:29:23 +0800 Subject: [PATCH 35/44] fix ci --- .github/workflows/contract-standards.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/contract-standards.yml b/.github/workflows/contract-standards.yml index b8f4c25b..3dd0fe07 100644 --- a/.github/workflows/contract-standards.yml +++ b/.github/workflows/contract-standards.yml @@ -1,4 +1,4 @@ -name: Examples +name: Contract standard on: pull_request: push: @@ -19,4 +19,4 @@ jobs: - name: Install dependencies run: yarn && cd near-contract-standards && yarn - name: nft - run: cd near-contract-standards && yarn build:nft && yarn test:nft + run: cd near-contract-standards && yarn build-nft && yarn test:nft From e30dc24cd070447fca1c8a637a63a7a6627ccf5d Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Thu, 3 Nov 2022 10:16:43 +0800 Subject: [PATCH 36/44] revert cli from develop --- lib/cli/cli.js | 2 +- lib/cli/post-install.js | 38 ++++++++++++------------------- lib/cli/utils.js | 4 +--- src/cli/cli.ts | 9 ++++---- src/cli/post-install.ts | 40 +++++++++++++-------------------- src/cli/utils.ts | 50 +++++++++++++---------------------------- 6 files changed, 51 insertions(+), 92 deletions(-) diff --git a/lib/cli/cli.js b/lib/cli/cli.js index f579f947..d60ebd69 100755 --- a/lib/cli/cli.js +++ b/lib/cli/cli.js @@ -46,7 +46,7 @@ export async function buildCom(source, target, { verbose = false }) { signale.await(`Creating ${TARGET_DIR} directory...`); await executeCommand(`mkdir -p ${TARGET_DIR}`, verbose); signal.await(`Validatig ${source} contract...`); - if (!(await validateContract(source, verbose))) { + if (!await validateContract(source, verbose)) { process.exit(1); } signale.await(`Creating ${source} file with Rollup...`); diff --git a/lib/cli/post-install.js b/lib/cli/post-install.js index e6873e22..4df5c749 100644 --- a/lib/cli/post-install.js +++ b/lib/cli/post-install.js @@ -26,14 +26,11 @@ if (!SUPPORTED_ARCH.includes(ARCH)) { signale.await("Installing wasi-stub..."); const BINARYEN_VERSION = `0.1.10`; const BINARYEN_VERSION_TAG = `v${BINARYEN_VERSION}`; -const BINARYEN_SYSTEM_NAME = PLATFORM === "linux" - ? "Linux" - : PLATFORM === "darwin" - ? "macOS" - : PLATFORM === "win32" - ? "windows" - : "other"; -const BINARYEN_ARCH_NAME = ARCH === "x64" ? "X64" : ARCH === "arm64" ? "arm64" : "other"; +const BINARYEN_SYSTEM_NAME = PLATFORM === "linux" ? "Linux" : + PLATFORM === "darwin" ? "macOS" : + PLATFORM === "win32" ? "windows" : "other"; +const BINARYEN_ARCH_NAME = ARCH === "x64" ? "X64" : + ARCH === "arm64" ? "arm64" : "other"; const BINARYEN_TAR_NAME = `binaryen-${BINARYEN_SYSTEM_NAME}-${BINARYEN_ARCH_NAME}.tar.gz`; await download(`https://github.com/near/binaryen/releases/download/${BINARYEN_VERSION_TAG}/${BINARYEN_TAR_NAME}`); fs.mkdirSync("binaryen"); @@ -42,14 +39,11 @@ fs.rmSync(BINARYEN_TAR_NAME); signale.await("Installing QuickJS..."); const QUICK_JS_VERSION = `0.1.2`; const QUICK_JS_VERSION_TAG = `v${QUICK_JS_VERSION}`; -const QUICK_JS_SYSTEM_NAME = PLATFORM === "linux" - ? "Linux" - : PLATFORM === "darwin" - ? "macOS" - : PLATFORM === "win32" - ? "windows" - : "other"; -const QUICK_JS_ARCH_NAME = ARCH === "x64" ? "X64" : ARCH === "arm64" ? "arm64" : "other"; +const QUICK_JS_SYSTEM_NAME = PLATFORM === "linux" ? "Linux" : + PLATFORM === "darwin" ? "macOS" : + PLATFORM === "win32" ? "windows" : "other"; +const QUICK_JS_ARCH_NAME = ARCH === "x64" ? "X64" : + ARCH === "arm64" ? "arm64" : "other"; const QUICK_JS_TAR_NAME = `${QUICK_JS_VERSION_TAG}.tar.gz`; const QUICK_JS_DOWNLOADED_FOLDER_NAME = `quickjs-${QUICK_JS_VERSION}`; const QUICK_JS_TARGET_FOLDER_NAME = "quickjs"; @@ -72,13 +66,9 @@ signale.await("Installing wasi-sdk..."); const WASI_SDK_MAJOR_VER = 11; const WASI_SDK_MINOR_VER = 0; const WASI_SDK_DOWNLOADED_FOLDER_NAME = `wasi-sdk-${WASI_SDK_MAJOR_VER}.${WASI_SDK_MINOR_VER}`; -const WASI_SDK_SYSTEM_NAME = PLATFORM === "linux" - ? "linux" - : PLATFORM === "darwin" - ? "macos" - : PLATFORM === "win32" - ? "windows" - : "other"; +const WASI_SDK_SYSTEM_NAME = PLATFORM === "linux" ? "linux" : + PLATFORM === "darwin" ? "macos" : + PLATFORM === "win32" ? "windows" : "other"; const WASI_SDK_TAR_NAME = `${WASI_SDK_DOWNLOADED_FOLDER_NAME}-${WASI_SDK_SYSTEM_NAME}.tar.gz`; // Download WASI SDK await download(`https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${WASI_SDK_MAJOR_VER}/${WASI_SDK_TAR_NAME}`); @@ -87,5 +77,5 @@ await executeCommand(`tar xvf ${WASI_SDK_TAR_NAME}`); // Delete .tar file fs.rmSync(WASI_SDK_TAR_NAME); // Delete version from folder name -fs.renameSync(WASI_SDK_DOWNLOADED_FOLDER_NAME, "wasi-sdk"); +fs.renameSync(WASI_SDK_DOWNLOADED_FOLDER_NAME, 'wasi-sdk'); signale.success("Successfully finished postinstall script!"); diff --git a/lib/cli/utils.js b/lib/cli/utils.js index f7dc7e23..6d09f627 100644 --- a/lib/cli/utils.js +++ b/lib/cli/utils.js @@ -56,9 +56,7 @@ export async function validateContract(contractPath, verbose = false) { return true; } if (!hasConstructor && propertiesToBeInited.length > 0) { - signale.error(chalk.redBright(`${UNINITIALIZED_PARAMETERS_ERROR} ${propertiesToBeInited - .map(({ name }) => name) - .join(", ")}`)); + signale.error(chalk.redBright(`${UNINITIALIZED_PARAMETERS_ERROR} ${propertiesToBeInited.map(({ name }) => name).join(", ")}`)); return false; } const [constructor] = constructors; diff --git a/src/cli/cli.ts b/src/cli/cli.ts index 32da9265..84bb74db 100755 --- a/src/cli/cli.ts +++ b/src/cli/cli.ts @@ -67,7 +67,7 @@ export async function buildCom( await executeCommand(`mkdir -p ${TARGET_DIR}`, verbose); signal.await(`Validatig ${source} contract...`); - if (!(await validateContract(source, verbose))) { + if (!await validateContract(source, verbose)) { process.exit(1); } @@ -148,7 +148,9 @@ async function createMethodsHeaderFile(rollupTarget: string, verbose = false) { const buildPath = path.dirname(rollupTarget); if (verbose) { - new Signale({ scope: "method-header" }).info(rollupTarget); + new Signale({ scope: "method-header" }).info( + rollupTarget + ) } const mod = await import(`${PROJECT_DIR}/${rollupTarget}`); @@ -189,8 +191,7 @@ async function createWasmContract( await executeCommand(`mv ${qjscTarget} build/code.h`, verbose); await executeCommand( - `${CC} --target=wasm32-wasi -nostartfiles -Oz -flto ${DEFS} ${INCLUDES} ${SOURCES} ${LIBS} -Wl,--no-entry -Wl,--allow-undefined -Wl,-z,stack-size=${ - 256 * 1024 + `${CC} --target=wasm32-wasi -nostartfiles -Oz -flto ${DEFS} ${INCLUDES} ${SOURCES} ${LIBS} -Wl,--no-entry -Wl,--allow-undefined -Wl,-z,stack-size=${256 * 1024 } -Wl,--lto-O3 -o ${contractTarget}`, verbose ); diff --git a/src/cli/post-install.ts b/src/cli/post-install.ts index 3106f548..b1bdce91 100644 --- a/src/cli/post-install.ts +++ b/src/cli/post-install.ts @@ -12,7 +12,7 @@ process.chdir("lib/cli"); const DEPS = "deps"; fs.rmSync(DEPS, { recursive: true, force: true }); fs.mkdirSync(DEPS); -process.chdir(DEPS); +process.chdir(DEPS) const PLATFORM = os.platform(); const ARCH = os.arch(); @@ -37,16 +37,13 @@ const BINARYEN_VERSION = `0.1.10`; const BINARYEN_VERSION_TAG = `v${BINARYEN_VERSION}`; const BINARYEN_SYSTEM_NAME = - PLATFORM === "linux" - ? "Linux" - : PLATFORM === "darwin" - ? "macOS" - : PLATFORM === "win32" - ? "windows" - : "other"; + PLATFORM === "linux" ? "Linux" : + PLATFORM === "darwin" ? "macOS" : + PLATFORM === "win32" ? "windows" : "other"; const BINARYEN_ARCH_NAME = - ARCH === "x64" ? "X64" : ARCH === "arm64" ? "arm64" : "other"; + ARCH === "x64" ? "X64" : + ARCH === "arm64" ? "arm64" : "other"; const BINARYEN_TAR_NAME = `binaryen-${BINARYEN_SYSTEM_NAME}-${BINARYEN_ARCH_NAME}.tar.gz`; @@ -65,16 +62,13 @@ const QUICK_JS_VERSION = `0.1.2`; const QUICK_JS_VERSION_TAG = `v${QUICK_JS_VERSION}`; const QUICK_JS_SYSTEM_NAME = - PLATFORM === "linux" - ? "Linux" - : PLATFORM === "darwin" - ? "macOS" - : PLATFORM === "win32" - ? "windows" - : "other"; + PLATFORM === "linux" ? "Linux" : + PLATFORM === "darwin"? "macOS": + PLATFORM === "win32" ? "windows" : "other"; const QUICK_JS_ARCH_NAME = - ARCH === "x64" ? "X64" : ARCH === "arm64" ? "arm64" : "other"; + ARCH === "x64" ? "X64" : + ARCH === "arm64" ? "arm64" : "other"; const QUICK_JS_TAR_NAME = `${QUICK_JS_VERSION_TAG}.tar.gz`; const QUICK_JS_DOWNLOADED_FOLDER_NAME = `quickjs-${QUICK_JS_VERSION}`; @@ -111,13 +105,9 @@ const WASI_SDK_MAJOR_VER = 11; const WASI_SDK_MINOR_VER = 0; const WASI_SDK_DOWNLOADED_FOLDER_NAME = `wasi-sdk-${WASI_SDK_MAJOR_VER}.${WASI_SDK_MINOR_VER}`; const WASI_SDK_SYSTEM_NAME = - PLATFORM === "linux" - ? "linux" - : PLATFORM === "darwin" - ? "macos" - : PLATFORM === "win32" - ? "windows" - : "other"; + PLATFORM === "linux" ? "linux" : + PLATFORM === "darwin" ? "macos" : + PLATFORM === "win32" ? "windows" : "other"; const WASI_SDK_TAR_NAME = `${WASI_SDK_DOWNLOADED_FOLDER_NAME}-${WASI_SDK_SYSTEM_NAME}.tar.gz`; // Download WASI SDK @@ -132,6 +122,6 @@ await executeCommand(`tar xvf ${WASI_SDK_TAR_NAME}`); fs.rmSync(WASI_SDK_TAR_NAME); // Delete version from folder name -fs.renameSync(WASI_SDK_DOWNLOADED_FOLDER_NAME, "wasi-sdk"); +fs.renameSync(WASI_SDK_DOWNLOADED_FOLDER_NAME, 'wasi-sdk'); signale.success("Successfully finished postinstall script!"); diff --git a/src/cli/utils.ts b/src/cli/utils.ts index dca08163..6c204dde 100644 --- a/src/cli/utils.ts +++ b/src/cli/utils.ts @@ -1,6 +1,6 @@ import childProcess from "child_process"; import { promisify } from "util"; -import signal from "signale"; +import signal from "signale" import { Project } from "ts-morph"; import chalk from "chalk"; @@ -12,7 +12,7 @@ export async function executeCommand( command: string, verbose = false ): Promise { - const signale = new Signale({ scope: "exec", interactive: !verbose }); + const signale = new Signale({ scope: "exec", interactive: !verbose }) if (verbose) { signale.info(`Running command: ${command}`); @@ -40,8 +40,7 @@ export async function download(url: string, verbose = false) { await executeCommand(`curl -LOf ${url}`, verbose); } -const UNINITIALIZED_PARAMETERS_ERROR = - "All parameters must be initialized in the constructor. Uninitialized parameters:"; +const UNINITIALIZED_PARAMETERS_ERROR = "All parameters must be initialized in the constructor. Uninitialized parameters:"; /** * Validates the contract by checking that all parameters are initialized in the constructor. Works only for contracts written in TypeScript. @@ -49,10 +48,7 @@ const UNINITIALIZED_PARAMETERS_ERROR = * @param contractPath - Path to the contract. * @param verbose - Whether to print verbose output. **/ -export async function validateContract( - contractPath: string, - verbose = false -): Promise { +export async function validateContract(contractPath: string, verbose = false): Promise { const signale = new Signale({ scope: "validate-contract" }); const project = new Project(); @@ -70,27 +66,19 @@ export async function validateContract( if (hasNearBindgen) { if (verbose) { - signale.info(`Validating ${name} class...`); + signale.info(`Validating ${name} class...`) } const constructors = classDeclaration.getConstructors(); const hasConstructor = constructors.length > 0; - const propertiesToBeInited = properties.filter( - ({ initializer }) => !initializer - ); + const propertiesToBeInited = properties.filter(({ initializer }) => !initializer); if (!hasConstructor && propertiesToBeInited.length === 0) { return true; } if (!hasConstructor && propertiesToBeInited.length > 0) { - signale.error( - chalk.redBright( - `${UNINITIALIZED_PARAMETERS_ERROR} ${propertiesToBeInited - .map(({ name }) => name) - .join(", ")}` - ) - ); + signale.error(chalk.redBright(`${UNINITIALIZED_PARAMETERS_ERROR} ${propertiesToBeInited.map(({ name }) => name).join(", ")}`)); return false; } @@ -101,25 +89,17 @@ export async function validateContract( signale.info("Checking for non initialized properties..."); } - const nonInitedProperties = propertiesToBeInited.reduce( - (properties, { name }) => { - if (constructorContent.includes(`this.${name}`)) { - return properties; - } + const nonInitedProperties = propertiesToBeInited.reduce((properties, { name }) => { + if (constructorContent.includes(`this.${name}`)) { + return properties; + } + + return [...properties, name] + }, [] as string[]); - return [...properties, name]; - }, - [] as string[] - ); if (nonInitedProperties.length > 0) { - signale.error( - chalk.redBright( - `${UNINITIALIZED_PARAMETERS_ERROR} ${nonInitedProperties.join( - ", " - )}` - ) - ); + signale.error(chalk.redBright(`${UNINITIALIZED_PARAMETERS_ERROR} ${nonInitedProperties.join(", ")}`)); return false; } } From 64a233f4a6910f99b05887c835062d415f54e5aa Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Thu, 3 Nov 2022 10:19:15 +0800 Subject: [PATCH 37/44] revert unrelated files --- .prettierignore | 2 ++ examples/yarn.lock | 31 ------------------------------- 2 files changed, 2 insertions(+), 31 deletions(-) diff --git a/.prettierignore b/.prettierignore index 63c11431..c3dd3989 100644 --- a/.prettierignore +++ b/.prettierignore @@ -2,3 +2,5 @@ deps build node_modules lib +cli + diff --git a/examples/yarn.lock b/examples/yarn.lock index ae5744a0..ac244dce 100644 --- a/examples/yarn.lock +++ b/examples/yarn.lock @@ -1501,11 +1501,6 @@ is-callable@^1.1.4, is-callable@^1.2.7: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - is-core-module@^2.9.0: version "2.11.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" @@ -1642,18 +1637,6 @@ isexe@^2.0.0: resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - js-sha256@^0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" @@ -2353,20 +2336,6 @@ safe-regex-test@^1.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" - -"semver@2 || 3 || 4 || 5", semver@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" From 0bfd74e20ad9671c57bc3cfc0471fe4936c1f65b Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Thu, 3 Nov 2022 16:52:57 +0800 Subject: [PATCH 38/44] add most docs strings --- near-contract-standards/src/event.ts | 4 ++ near-contract-standards/src/index.ts | 5 +- .../approval/approval_receiver.ts | 14 ++++ .../src/non_fungible_token/approval/index.ts | 66 +++++++++++++++++++ .../src/non_fungible_token/core/index.ts | 66 +++++++++++++++++++ .../src/non_fungible_token/core/receiver.ts | 17 +++++ .../src/non_fungible_token/core/resolver.ts | 27 ++++++++ .../non_fungible_token/enumeration/index.ts | 31 +++++++-- .../src/non_fungible_token/events.ts | 31 +++++++++ .../src/non_fungible_token/impl.ts | 10 +++ .../src/non_fungible_token/index.ts | 25 ++++++- .../src/non_fungible_token/metadata.ts | 14 ++-- .../src/non_fungible_token/token.ts | 3 + .../src/non_fungible_token/utils.ts | 3 + 14 files changed, 302 insertions(+), 14 deletions(-) diff --git a/near-contract-standards/src/event.ts b/near-contract-standards/src/event.ts index 4ca0f563..5c564a60 100644 --- a/near-contract-standards/src/event.ts +++ b/near-contract-standards/src/event.ts @@ -9,6 +9,10 @@ export class NearEvent { return `EVENT_JSON: ${this.internal_to_json_string()}`; } + /** + * Logs the event to the host. This is required to ensure that the event is triggered + * and to consume the event. + */ emit(): void { near.log(this.internal_to_json_event_string()); } diff --git a/near-contract-standards/src/index.ts b/near-contract-standards/src/index.ts index 5a3faed5..e78c5a1d 100644 --- a/near-contract-standards/src/index.ts +++ b/near-contract-standards/src/index.ts @@ -1,3 +1,2 @@ -import { NonFungibleToken } from "./non_fungible_token/index"; - -export { NonFungibleToken }; +/** Non-fungible tokens as described in [by the spec](https://nomicon.io/Standards/NonFungibleToken/README.html). */ +export { NonFungibleToken } from "./non_fungible_token"; diff --git a/near-contract-standards/src/non_fungible_token/approval/approval_receiver.ts b/near-contract-standards/src/non_fungible_token/approval/approval_receiver.ts index 8b8071c6..33c529f3 100644 --- a/near-contract-standards/src/non_fungible_token/approval/approval_receiver.ts +++ b/near-contract-standards/src/non_fungible_token/approval/approval_receiver.ts @@ -2,7 +2,21 @@ import { PromiseOrValue } from "near-sdk-js/lib"; import { AccountId } from "near-sdk-js/lib/types"; import { TokenId } from "../token"; +/** Approval receiver is the trait for the method called (or attempted to be called) when an NFT contract adds an approval for an account. */ export interface NonFungibleTokenApprovalReceiver { + /** Respond to notification that contract has been granted approval for a token. + * + * Notes + * - Contract knows the token contract ID from `predecessor_account_id` + * + * @param token_id - The token to which this contract has been granted approval + * @param owner_id - The owner of the token + * @param approval_id - The approval ID stored by NFT contract for this approval. + * Expected to be a number within the 2^53 limit representable by JSON. + * @param msg: - specifies information needed by the approved contract in order to + handle the approval. Can indicate both a function to call and the + parameters to pass to that function. + */ nft_on_approve([token_id, owner_id, approval_id, msg]: [ token_id: TokenId, owner_id: AccountId, diff --git a/near-contract-standards/src/non_fungible_token/approval/index.ts b/near-contract-standards/src/non_fungible_token/approval/index.ts index 7bf339b3..89d35a19 100644 --- a/near-contract-standards/src/non_fungible_token/approval/index.ts +++ b/near-contract-standards/src/non_fungible_token/approval/index.ts @@ -3,17 +3,83 @@ import { NearPromise } from "../../../../lib"; import { TokenId } from "../token"; import { Option } from "../utils"; +/** Interface used when it's desired to have a non-fungible token that has a + * traditional escrow or approval system. This allows Alice to allow Bob + * to take only the token with the unique identifier "19" but not others. + * It should be noted that in the [core non-fungible token standard] there + * is a method to do "transfer and call" which may be preferred over using + * an approval management standard in certain use cases. + * + * [approval management standard]: https://nomicon.io/Standards/NonFungibleToken/ApprovalManagement.html + * [core non-fungible token standard]: https://nomicon.io/Standards/NonFungibleToken/Core.html + */ export interface NonFungibleTokenApproval { + /** Add an approved account for a specific token. + * + * Requirements + * - Caller of the method must attach a deposit of at least 1 yoctoⓃ for + * security purposes + * - Contract MAY require caller to attach larger deposit, to cover cost of + * storing approver data + * - Contract MUST panic if called by someone other than token owner + * - Contract MUST panic if addition would cause `nft_revoke_all` to exceed + * single-block gas limit + * - Contract MUST increment approval ID even if re-approving an account + * - If successfully approved or if had already been approved, and if `msg` is + * present, contract MUST call `nft_on_approve` on `account_id`. See + * `nft_on_approve` description below for details. + * + * @param token_id - The token for which to add an approval + * @param account_id - The account to add to `approvals` + * @param msg - Optional string to be passed to `nft_on_approve` + * @returns void, if no `msg` given. Otherwise, returns promise call to + * `nft_on_approve`, which can resolve with whatever it wants. + */ nft_approve([token_id, account_id, msg]: [ token_id: TokenId, account_id: AccountId, msg: Option ]): Option; + + /** Revoke an approved account for a specific token. + * + * Requirements + * - Caller of the method must attach a deposit of 1 yoctoⓃ for security + * purposes + * - If contract requires >1yN deposit on `nft_approve`, contract + * MUST refund associated storage deposit when owner revokes approval + * - Contract MUST panic if called by someone other than token owner + * + * @param token_id - The token for which to revoke an approval + * @param account_id - The account to remove from `approvals` + */ nft_revoke([token_id, account_id]: [ token_id: TokenId, account_id: AccountId ]); + + /** Revoke all approved accounts for a specific token. + * + * Requirements + * - Caller of the method must attach a deposit of 1 yoctoⓃ for security + * purposes + * - If contract requires >1yN deposit on `nft_approve`, contract + * MUST refund all associated storage deposit when owner revokes approvals + * - Contract MUST panic if called by someone other than token owner + * + * @param token_id - The token with approvals to revoke + */ nft_revoke_all(token_id: TokenId); + + /** Check if a token is approved for transfer by a given account, optionally + * checking an approval_id + * + * @param token_id - The token for which to revoke an approval + * @param approved_account_id - The account to check the existence of in `approvals` + * @param approval_id - An optional approval ID to check against current approval ID for given account + * @returns if `approval_id` given, `true` if `approved_account_id` is approved with given `approval_id` + * otherwise, `true` if `approved_account_id` is in list of approved accounts + */ nft_is_approved([token_id, approved_account_id, approval_id]: [ token_id: TokenId, approved_account_id: AccountId, diff --git a/near-contract-standards/src/non_fungible_token/core/index.ts b/near-contract-standards/src/non_fungible_token/core/index.ts index 6e6212c7..1aa15ada 100644 --- a/near-contract-standards/src/non_fungible_token/core/index.ts +++ b/near-contract-standards/src/non_fungible_token/core/index.ts @@ -2,13 +2,77 @@ import { AccountId } from "near-sdk-js/lib/types"; import { Token, TokenId } from "../token"; import { Option } from "../utils"; +/** Used for all non-fungible tokens. The specification for the + * [core non-fungible token standard] lays out the reasoning for each method. + * It's important to check out [NonFungibleTokenReceiver](./receiver.ts) + * and [NonFungibleTokenResolver](./resolver.ts) to + * understand how the cross-contract call work. + * + * [core non-fungible token standard]: + */ export interface NonFungibleTokenCore { + /** Simple transfer. Transfer a given `token_id` from current owner to + * `receiver_id`. + * + * Requirements + * - Caller of the method must attach a deposit of 1 yoctoⓃ for security purposes + * - Contract MUST panic if called by someone other than token owner or, + * if using Approval Management, one of the approved accounts + * - `approval_id` is for use with Approval Management, + * see + * - If using Approval Management, contract MUST nullify approved accounts on + * successful transfer. + * - TODO: needed? Both accounts must be registered with the contract for transfer to + * succeed. See see + * + * @param receiver_id - The valid NEAR account receiving the token + * @param token_id - The token to transfer + * @param approval_id - Expected approval ID. A number smaller than + * 2^53, and therefore representable as JSON. See Approval Management + * standard for full explanation. + * @param memo (optional) - For use cases that may benefit from indexing or + * providing information for a transfer + */ nft_transfer([receiver_id, token_id, approval_id, memo]: [ receiver_id: AccountId, token_id: TokenId, approval_id: Option, memo: Option ]); + + /** Transfer token and call a method on a receiver contract. A successful + * workflow will end in a success execution outcome to the callback on the NFT + * contract at the method `nft_resolve_transfer`. + * + * You can think of this as being similar to attaching native NEAR tokens to a + * function call. It allows you to attach any Non-Fungible Token in a call to a + * receiver contract. + * + * Requirements: + * - Caller of the method must attach a deposit of 1 yoctoⓃ for security + * purposes + * - Contract MUST panic if called by someone other than token owner or, + * if using Approval Management, one of the approved accounts + * - The receiving contract must implement `ft_on_transfer` according to the + * standard. If it does not, FT contract's `ft_resolve_transfer` MUST deal + * with the resulting failed cross-contract call and roll back the transfer. + * - Contract MUST implement the behavior described in `ft_resolve_transfer` + * - `approval_id` is for use with Approval Management extension, see + * that document for full explanation. + * - If using Approval Management, contract MUST nullify approved accounts on + * successful transfer. + * + * @param receiver_id - The valid NEAR account receiving the token. + * @param token_id - The token to send. + * @param approval_id - Expected approval ID. A number smaller than + * 2^53, and therefore representable as JSON. See Approval Management + * standard for full explanation. + * @param memo (optional) - For use cases that may benefit from indexing or + * providing information for a transfer. + * @param msg - Specifies information needed by the receiving contract in + * order to properly handle the transfer. Can indicate both a function to + * call and the parameters to pass to that function. + */ nft_transfer_call([receiver_id, token_id, approval_id, memo]: [ receiver_id: AccountId, token_id: TokenId, @@ -16,5 +80,7 @@ export interface NonFungibleTokenCore { memo: Option, msg: string ]); + + /** Returns the token with the given `token_id` or `null` if no such token. */ nft_token(token_id: TokenId): Option; } diff --git a/near-contract-standards/src/non_fungible_token/core/receiver.ts b/near-contract-standards/src/non_fungible_token/core/receiver.ts index 03fd84be..5127e49f 100644 --- a/near-contract-standards/src/non_fungible_token/core/receiver.ts +++ b/near-contract-standards/src/non_fungible_token/core/receiver.ts @@ -2,7 +2,24 @@ import { PromiseOrValue } from "near-sdk-js/lib"; import { AccountId } from "near-sdk-js/lib/types"; import { TokenId } from "../token"; +/** Used when an NFT is transferred using `nft_transfer_call`. This trait is implemented on the receiving contract, not on the NFT contract. */ export interface NonFungibleTokenReceiver { + /** Take some action after receiving a non-fungible token + * + * Requirements: + * - Contract MUST restrict calls to this function to a set of whitelisted NFT + * contracts + * + * @param sender_id - The sender of `nft_transfer_call` + * @param previous_owner_id - The account that owned the NFT prior to it being + * transferred to this contract, which can differ from `sender_id` if using + * Approval Management extension + * @param token_id - The `token_id` argument given to `nft_transfer_call` + * @param msg - Information necessary for this contract to know how to process the + * request. This may include method names and/or arguments. + * + * @returns true if token should be returned to `sender_id` + */ nft_on_transfer([sender_id, previous_owner_id, token_id, msg]: [ sender_id: AccountId, previous_owner_id: AccountId, diff --git a/near-contract-standards/src/non_fungible_token/core/resolver.ts b/near-contract-standards/src/non_fungible_token/core/resolver.ts index 61f2a8aa..c1310067 100644 --- a/near-contract-standards/src/non_fungible_token/core/resolver.ts +++ b/near-contract-standards/src/non_fungible_token/core/resolver.ts @@ -2,7 +2,34 @@ import { AccountId } from "../../../../lib/types"; import { TokenId } from "../token"; import { Option } from "../utils"; +/** Used when an NFT is transferred using `nft_transfer_call`. This is the method that's called after `nft_on_transfer`. This trait is implemented on the NFT contract. */ export interface NonFungibleTokenResolver { + /** Finalize an `nft_transfer_call` chain of cross-contract calls. + * + * The `nft_transfer_call` process: + * + * 1. Sender calls `nft_transfer_call` on FT contract + * 2. NFT contract transfers token from sender to receiver + * 3. NFT contract calls `nft_on_transfer` on receiver contract + * 4+. [receiver contract may make other cross-contract calls] + * N. NFT contract resolves promise chain with `nft_resolve_transfer`, and may + * transfer token back to sender + * + * Requirements: + * - Contract MUST forbid calls to this function by any account except self + * - If promise chain failed, contract MUST revert token transfer + * - If promise chain resolves with `true`, contract MUST return token to + * `sender_id` + * + * @param previous_owner_id - The owner prior to the call to `nft_transfer_call` + * @param receiver_id - The `receiver_id` argument given to `nft_transfer_call` + * @param token_id - The `token_id` argument given to `ft_transfer_call` + * @param approvals - If using Approval Management, contract MUST provide + * set of original approved accounts in this argument, and restore these + * approved accounts in case of revert. + * + * @returns true if token was successfully transferred to `receiver_id`. + */ nft_resolve_transfer([previous_owner_id, receiver_id, token_id, approvals]: [ previous_owner_id: AccountId, receiver_id: AccountId, diff --git a/near-contract-standards/src/non_fungible_token/enumeration/index.ts b/near-contract-standards/src/non_fungible_token/enumeration/index.ts index 5310d253..f69545c6 100644 --- a/near-contract-standards/src/non_fungible_token/enumeration/index.ts +++ b/near-contract-standards/src/non_fungible_token/enumeration/index.ts @@ -1,16 +1,39 @@ import { AccountId } from "../../../../lib/types"; import { Token } from "../token"; +/** Offers methods helpful in determining account ownership of NFTs and provides a way to page through NFTs per owner, determine total supply, etc. */ export interface NonFungibleTokenEnumeration { + /** Returns the total supply of non-fungible tokens */ nft_total_supply(): number; + + /** Get a list of all tokens + * + * @param from_index - The starting index of tokens to return + * @param limit - The maximum number of tokens to return + * @returns - An array of Token objects, as described in Core standard + */ nft_tokens([from_index, limit]: [ - from_index: number | null, - limit: number | null + from_index: number | null, // default: "0" + limit: number | null // default: unlimited (could fail due to gas limit) ]): Token[]; + + /** Get number of tokens owned by a given account + * + * @param account_id - A valid NEAR account + * @returns - The number of non-fungible tokens owned by given `account_id` + */ nft_supply_for_owner(account_id: AccountId): number; + + /** Get list of all tokens owned by a given account + * + * @param account_id - A valid NEAR account + * @param from_index - The starting index of tokens to return + * @param limit - The maximum number of tokens to return + * @returns - A paginated list of all tokens owned by this account + */ nft_tokens_for_owner([account_id, from_index, limit]: [ account_id: AccountId, - from_index: number, - limit: number + from_index: number, // default: "0" + limit: number // default: unlimited (could fail due to gas limit) ]): Token[]; } diff --git a/near-contract-standards/src/non_fungible_token/events.ts b/near-contract-standards/src/non_fungible_token/events.ts index 5daddde4..d246a2ff 100644 --- a/near-contract-standards/src/non_fungible_token/events.ts +++ b/near-contract-standards/src/non_fungible_token/events.ts @@ -1,3 +1,18 @@ +/** Standard for nep171 (Non-Fungible Token) events. + * + * These events will be picked up by the NEAR indexer. + * + * + * + * This is an extension of the events format (nep-297): + * + * + * The three events in this standard are [`NftMint`], [`NftTransfer`], and [`NftBurn`]. + * + * These events can be logged by calling `.emit()` on them if a single event, or calling + * [`NftMint::emit_many`], [`NftTransfer::emit_many`], + * or [`NftBurn::emit_many`] respectively. + */ import { NearEvent } from "../event"; import { Option } from "./utils"; @@ -14,6 +29,7 @@ export class Nep171Event extends NearEvent { } } +/** Data to log for an NFT mint event. To log this event, call [`.emit()`](NftMint::emit). */ export class NftMint { constructor( public owner_id: string, @@ -21,15 +37,21 @@ export class NftMint { public memo: Option ) {} + /** Logs the event to the host. This is required to ensure that the event is triggered + * and to consume the event. */ emit() { NftMint.emit_many([this]); } + /** Emits an nft mint event, through [`env::log_str`](near_sdk::env::log_str), + * where each [`NftMint`] represents the data of each mint. */ static emit_many(data: NftMint[]) { new_171_v1(data).emit(); } } +/** Data to log for an NFT transfer event. To log this event, + * call [`.emit()`](NftTransfer::emit). */ export class NftTransfer { constructor( public old_owner_id: string, @@ -39,15 +61,20 @@ export class NftTransfer { public memo: Option ) {} + /** Logs the event to the host. This is required to ensure that the event is triggered + * and to consume the event. */ emit() { NftTransfer.emit_many([this]); } + /** Emits an nft transfer event, through [`env::log_str`](near_sdk::env::log_str), + * where each [`NftTransfer`] represents the data of each transfer. */ static emit_many(data: NftTransfer[]) { new_171_v1(data).emit(); } } +/** Data to log for an NFT burn event. To log this event, call [`.emit()`](NftBurn::emit). */ export class NftBurn { constructor( public owner_id: string, @@ -56,10 +83,14 @@ export class NftBurn { public memo: Option ) {} + /** Logs the event to the host. This is required to ensure that the event is triggered + * and to consume the event. */ emit() { NftBurn.emit_many([this]); } + /** Emits an nft burn event, through [`env::log_str`](near_sdk::env::log_str), + * where each [`NftBurn`] represents the data of each burn. */ static emit_many(data: NftBurn[]) { new_171_v1(data).emit(); } diff --git a/near-contract-standards/src/non_fungible_token/impl.ts b/near-contract-standards/src/non_fungible_token/impl.ts index 8d960926..c6efa4fe 100644 --- a/near-contract-standards/src/non_fungible_token/impl.ts +++ b/near-contract-standards/src/non_fungible_token/impl.ts @@ -52,6 +52,16 @@ function expect_approval(option: Option): T { return option; } +/** Implementation of the non-fungible token standard. + * Allows to include NEP-171 compatible token to any contract. + * There are next traits that any contract may implement: + * - NonFungibleTokenCore -- interface with nft_transfer methods. NonFungibleToken provides methods for it. + * - NonFungibleTokenApproval -- interface with nft_approve methods. NonFungibleToken provides methods for it. + * - NonFungibleTokenEnumeration -- interface for getting lists of tokens. NonFungibleToken provides methods for it. + * - NonFungibleTokenMetadata -- return metadata for the token in NEP-177, up to contract to implement. + * + * For example usage, see near-contract-standards/example-contracts/non-fungible-token/my-nft.ts. + */ export class NonFungibleToken implements NonFungibleTokenCore, diff --git a/near-contract-standards/src/non_fungible_token/index.ts b/near-contract-standards/src/non_fungible_token/index.ts index 3b7ea1ec..c3a24bea 100644 --- a/near-contract-standards/src/non_fungible_token/index.ts +++ b/near-contract-standards/src/non_fungible_token/index.ts @@ -1,3 +1,24 @@ -import { NonFungibleToken } from "./impl"; +/** The Token struct for the non-fungible token. */ +export { Token, TokenId } from "./token"; -export { NonFungibleToken }; +/** The [core non-fungible token standard](https://nomicon.io/Standards/NonFungibleToken/Core.html). This can be though of as the base standard, with the others being extension standards. */ +export * as core from "./core"; + +/** The [approval management standard](https://nomicon.io/Standards/NonFungibleToken/ApprovalManagement.html) for NFTs. */ +export * as approval from "./approval"; + +/** Interface for the [NFT enumeration standard](https://nomicon.io/Standards/NonFungibleToken/Enumeration.html). + * This provides useful view-only methods returning token supply, tokens by owner, etc. + */ +export * as enumeration from "./enumeration"; + +/** Metadata interfaces and implementation according to the [NFT enumeration standard](https://nomicon.io/Standards/NonFungibleToken/Metadata.html). + * This covers both the contract metadata and the individual token metadata. + */ +export * as metadata from "./metadata"; + +/** NFT utility functions */ +export * from "./utils"; + +export * as events from "./events"; +export { NonFungibleToken } from "./impl"; diff --git a/near-contract-standards/src/non_fungible_token/metadata.ts b/near-contract-standards/src/non_fungible_token/metadata.ts index eab2afd2..99a868d8 100644 --- a/near-contract-standards/src/non_fungible_token/metadata.ts +++ b/near-contract-standards/src/non_fungible_token/metadata.ts @@ -2,8 +2,10 @@ import { Bytes } from "near-sdk-js"; import { assert } from "near-sdk-js"; import { Option } from "./utils"; +/** This spec can be treated like a version of the standard. */ export const NFT_METADATA_SPEC = "nft-1.0.0"; +/** Metadata for the NFT contract itself. */ export class NFTContractMetadata { public spec: string; // required, essentially a version like "nft-1.0.0" public name: string; // required, ex. "Mosaics" @@ -26,11 +28,11 @@ export class NFTContractMetadata { init( spec: string, name: string, - symbol: string, // required, ex. "MOSIAC" - icon: Option, // Data URL - base_uri: Option, // Centralized gateway known to have reliable access to decentralized storage assets referenced by `reference` or `media` URLs - reference: Option, // URL to a JSON file with more info - reference_hash: Option // Base64-encoded sha256 hash of JSON from reference field. Required if `reference` is included. + symbol: string, + icon: Option, + base_uri: Option, + reference: Option, + reference_hash: Option ) { this.spec = spec; this.name = name; @@ -59,6 +61,7 @@ export class NFTContractMetadata { } } +/** Metadata on the individual token level. */ export class TokenMetadata { constructor( public title: Option, // ex. "Arch Nemesis: Mail Carrier" or "Parcel #5055" @@ -114,6 +117,7 @@ export class TokenMetadata { } } +/** Offers details on the contract-level metadata. */ export interface NonFungibleTokenMetadataProvider { nft_metadata(): NFTContractMetadata; } diff --git a/near-contract-standards/src/non_fungible_token/token.ts b/near-contract-standards/src/non_fungible_token/token.ts index 5a28bf85..9306ec23 100644 --- a/near-contract-standards/src/non_fungible_token/token.ts +++ b/near-contract-standards/src/non_fungible_token/token.ts @@ -2,7 +2,10 @@ import { TokenMetadata } from "./metadata"; import { AccountId } from "near-sdk-js/lib/types"; import { Option } from "./utils"; +/** Note that token IDs for NFTs are strings on NEAR. It's still fine to use autoincrementing numbers as unique IDs if desired, but they should be stringified. This is to make IDs more future-proof as chain-agnostic conventions and standards arise, and allows for more flexibility with considerations like bridging NFTs across chains, etc. */ export type TokenId = string; + +/** In this implementation, the Token struct takes two extensions standards (metadata and approval) as optional fields, as they are frequently used in modern NFTs. */ export class Token { constructor( public token_id: TokenId, diff --git a/near-contract-standards/src/non_fungible_token/utils.ts b/near-contract-standards/src/non_fungible_token/utils.ts index dc41dc8f..5d125203 100644 --- a/near-contract-standards/src/non_fungible_token/utils.ts +++ b/near-contract-standards/src/non_fungible_token/utils.ts @@ -51,6 +51,7 @@ export function refund_deposit_to_account( } } +/** Assumes that the precedecessor will be refunded */ export function refund_deposit(storage_used: bigint): void { refund_deposit_to_account(storage_used, near.predecessorAccountId()); } @@ -59,6 +60,7 @@ export function hash_account_id(account_id: string): Bytes { return near.sha256(account_id); } +/** Assert that at least 1 yoctoNEAR was attached. */ export function assert_at_least_one_yocto(): void { assert( near.attachedDeposit() >= 1n, @@ -66,6 +68,7 @@ export function assert_at_least_one_yocto(): void { ); } +/** Assert that exactly 1 yoctoNEAR was attached */ export function assert_one_yocto(): void { assert( near.attachedDeposit() === 1n, From 7ff97f56b89ec55df9e0a2b4a5561637c1d8bd60 Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Fri, 4 Nov 2022 15:12:55 +0800 Subject: [PATCH 39/44] example standard contract use near-contract-standards as external dependency --- .github/workflows/contract-standards.yml | 22 - .github/workflows/examples.yml | 2 + .../standard-nft}/test_approval.ava.js | 16 +- .../__tests__/standard-nft}/test_core.ava.js | 0 .../standard-nft}/test_enumeration.ava.js | 0 examples/package.json | 10 +- .../src/standard-nft}/my-nft.ts | 22 +- .../standard-nft}/test-approval-receiver.ts | 6 +- .../src/standard-nft}/test-token-receiver.ts | 4 +- examples/yarn.lock | 8 +- near-contract-standards/lib/event.d.ts | 9 + near-contract-standards/lib/event.js | 16 + near-contract-standards/lib/index.d.ts | 2 + near-contract-standards/lib/index.js | 2 + .../approval/approval_receiver.d.ts | 25 + .../approval/approval_receiver.js | 1 + .../non_fungible_token/approval/index.d.ts | 84 ++++ .../lib/non_fungible_token/approval/index.js | 1 + .../lib/non_fungible_token/core/index.d.ts | 83 ++++ .../lib/non_fungible_token/core/index.js | 1 + .../lib/non_fungible_token/core/receiver.d.ts | 28 ++ .../lib/non_fungible_token/core/receiver.js | 1 + .../lib/non_fungible_token/core/resolver.d.ts | 40 ++ .../lib/non_fungible_token/core/resolver.js | 1 + .../non_fungible_token/enumeration/index.d.ts | 35 ++ .../non_fungible_token/enumeration/index.js | 1 + .../lib/non_fungible_token/events.d.ts | 65 +++ .../lib/non_fungible_token/events.js | 86 ++++ .../lib/non_fungible_token/impl.d.ts | 98 ++++ .../lib/non_fungible_token/impl.js | 450 ++++++++++++++++++ .../lib/non_fungible_token/index.d.ts | 18 + .../lib/non_fungible_token/index.js | 18 + .../lib/non_fungible_token/metadata.d.ts | 51 ++ .../lib/non_fungible_token/metadata.js | 78 +++ .../lib/non_fungible_token/token.d.ts | 17 + .../lib/non_fungible_token/token.js | 9 + .../lib/non_fungible_token/utils.d.ts | 19 + .../lib/non_fungible_token/utils.js | 42 ++ near-contract-standards/package.json | 19 +- .../src/non_fungible_token/approval/index.ts | 2 +- .../src/non_fungible_token/impl.ts | 3 +- near-contract-standards/tsconfig.json | 27 +- 42 files changed, 1355 insertions(+), 67 deletions(-) delete mode 100644 .github/workflows/contract-standards.yml rename {near-contract-standards/__tests__/my-nft => examples/__tests__/standard-nft}/test_approval.ava.js (94%) rename {near-contract-standards/__tests__/my-nft => examples/__tests__/standard-nft}/test_core.ava.js (100%) rename {near-contract-standards/__tests__/my-nft => examples/__tests__/standard-nft}/test_enumeration.ava.js (100%) rename {near-contract-standards/example-contracts/non-fungible-token => examples/src/standard-nft}/my-nft.ts (85%) rename {near-contract-standards/example-contracts/non-fungible-token => examples/src/standard-nft}/test-approval-receiver.ts (89%) rename {near-contract-standards/example-contracts/non-fungible-token => examples/src/standard-nft}/test-token-receiver.ts (94%) create mode 100644 near-contract-standards/lib/event.d.ts create mode 100644 near-contract-standards/lib/event.js create mode 100644 near-contract-standards/lib/index.d.ts create mode 100644 near-contract-standards/lib/index.js create mode 100644 near-contract-standards/lib/non_fungible_token/approval/approval_receiver.d.ts create mode 100644 near-contract-standards/lib/non_fungible_token/approval/approval_receiver.js create mode 100644 near-contract-standards/lib/non_fungible_token/approval/index.d.ts create mode 100644 near-contract-standards/lib/non_fungible_token/approval/index.js create mode 100644 near-contract-standards/lib/non_fungible_token/core/index.d.ts create mode 100644 near-contract-standards/lib/non_fungible_token/core/index.js create mode 100644 near-contract-standards/lib/non_fungible_token/core/receiver.d.ts create mode 100644 near-contract-standards/lib/non_fungible_token/core/receiver.js create mode 100644 near-contract-standards/lib/non_fungible_token/core/resolver.d.ts create mode 100644 near-contract-standards/lib/non_fungible_token/core/resolver.js create mode 100644 near-contract-standards/lib/non_fungible_token/enumeration/index.d.ts create mode 100644 near-contract-standards/lib/non_fungible_token/enumeration/index.js create mode 100644 near-contract-standards/lib/non_fungible_token/events.d.ts create mode 100644 near-contract-standards/lib/non_fungible_token/events.js create mode 100644 near-contract-standards/lib/non_fungible_token/impl.d.ts create mode 100644 near-contract-standards/lib/non_fungible_token/impl.js create mode 100644 near-contract-standards/lib/non_fungible_token/index.d.ts create mode 100644 near-contract-standards/lib/non_fungible_token/index.js create mode 100644 near-contract-standards/lib/non_fungible_token/metadata.d.ts create mode 100644 near-contract-standards/lib/non_fungible_token/metadata.js create mode 100644 near-contract-standards/lib/non_fungible_token/token.d.ts create mode 100644 near-contract-standards/lib/non_fungible_token/token.js create mode 100644 near-contract-standards/lib/non_fungible_token/utils.d.ts create mode 100644 near-contract-standards/lib/non_fungible_token/utils.js diff --git a/.github/workflows/contract-standards.yml b/.github/workflows/contract-standards.yml deleted file mode 100644 index 3dd0fe07..00000000 --- a/.github/workflows/contract-standards.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: Contract standard -on: - pull_request: - push: - branches: - - master - - develop -jobs: - examples: - strategy: - matrix: - platform: [ubuntu-latest, macos-latest] - runs-on: ${{ matrix.platform }} - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 - with: - node-version: "16" - - name: Install dependencies - run: yarn && cd near-contract-standards && yarn - - name: nft - run: cd near-contract-standards && yarn build-nft && yarn test:nft diff --git a/.github/workflows/examples.yml b/.github/workflows/examples.yml index e5dc0254..9f80f0bf 100644 --- a/.github/workflows/examples.yml +++ b/.github/workflows/examples.yml @@ -40,3 +40,5 @@ jobs: run: cd examples && yarn build:status-message && yarn test:status-message - name: parking-lot run: cd examples && yarn build:parking-lot && yarn test:parking-lot + - name: standard nft + run: cd examples && yarn build-nft && yarn test:nft diff --git a/near-contract-standards/__tests__/my-nft/test_approval.ava.js b/examples/__tests__/standard-nft/test_approval.ava.js similarity index 94% rename from near-contract-standards/__tests__/my-nft/test_approval.ava.js rename to examples/__tests__/standard-nft/test_approval.ava.js index aee4bb45..56890fb3 100644 --- a/near-contract-standards/__tests__/my-nft/test_approval.ava.js +++ b/examples/__tests__/standard-nft/test_approval.ava.js @@ -77,7 +77,7 @@ test("Simple approve", async (t) => { ["0", ali.accountId, null], { attachedDeposit: "510000000000000000000" } ); - t.is(res.result.status.SuccessValue, ""); + t.assert(res.result.status.SuccessValue); let alice_approved = await nft.view("nft_is_approved", [ "0", @@ -103,7 +103,7 @@ test("Simple approve", async (t) => { res = await nftOwner.callRaw(nft, "nft_approve", ["0", ali.accountId, null], { attachedDeposit: "1", }); - t.is(res.result.status.SuccessValue, ""); + t.assert(res.result.status.SuccessValue); alice_approval_id_is_2 = await nft.view("nft_is_approved", [ "0", ali.accountId, @@ -114,7 +114,7 @@ test("Simple approve", async (t) => { res = await nftOwner.callRaw(nft, "nft_approve", ["0", bob.accountId, null], { attachedDeposit: "450000000000000000000", }); - t.is(res.result.status.SuccessValue, ""); + t.assert(res.result.status.SuccessValue); let bob_approval_id_is_3 = await nft.view("nft_is_approved", [ "0", @@ -153,7 +153,7 @@ test("Approved account transfers token", async (t) => { ["0", ali.accountId, null], { attachedDeposit: "510000000000000000000" } ); - t.is(res.result.status.SuccessValue, ""); + t.assert(res.result.status.SuccessValue); let token = await nft.view("nft_token", "0"); t.is(token.owner_id, nftOwner.accountId); @@ -179,12 +179,12 @@ test("revoke", async (t) => { ["0", ali.accountId, null], { attachedDeposit: "510000000000000000000" } ); - t.is(res.result.status.SuccessValue, ""); + t.assert(res.result.status.SuccessValue); res = await nftOwner.callRaw(nft, "nft_approve", ["0", bob.accountId, null], { attachedDeposit: "510000000000000000000", }); - t.is(res.result.status.SuccessValue, ""); + t.assert(res.result.status.SuccessValue); res = await nftOwner.callRaw(nft, "nft_revoke", ["0", ali.accountId], { attachedDeposit: "1", @@ -230,12 +230,12 @@ test("revoke all", async (t) => { ["0", ali.accountId, null], { attachedDeposit: "510000000000000000000" } ); - t.is(res.result.status.SuccessValue, ""); + t.assert(res.result.status.SuccessValue); res = await nftOwner.callRaw(nft, "nft_approve", ["0", bob.accountId, null], { attachedDeposit: "510000000000000000000", }); - t.is(res.result.status.SuccessValue, ""); + t.assert(res.result.status.SuccessValue); res = await nftOwner.callRaw(nft, "nft_revoke_all", "0", { attachedDeposit: "1", diff --git a/near-contract-standards/__tests__/my-nft/test_core.ava.js b/examples/__tests__/standard-nft/test_core.ava.js similarity index 100% rename from near-contract-standards/__tests__/my-nft/test_core.ava.js rename to examples/__tests__/standard-nft/test_core.ava.js diff --git a/near-contract-standards/__tests__/my-nft/test_enumeration.ava.js b/examples/__tests__/standard-nft/test_enumeration.ava.js similarity index 100% rename from near-contract-standards/__tests__/my-nft/test_enumeration.ava.js rename to examples/__tests__/standard-nft/test_enumeration.ava.js diff --git a/examples/package.json b/examples/package.json index 7ac56c46..2c07d9be 100644 --- a/examples/package.json +++ b/examples/package.json @@ -5,7 +5,7 @@ "main": "index.js", "type": "module", "scripts": { - "postinstall": "cd .. && yarn link && cd examples && yarn link near-sdk-js", + "postinstall": "cd .. && yarn link && cd near-contract-standards && yarn link && cd ../examples && yarn link near-sdk-js near-contract-standards", "build": "run-s build:*", "build:status-message": "near-sdk-js build src/status-message.js build/status-message.wasm", "build:clean-state": "near-sdk-js build src/clean-state.js build/clean-state.wasm", @@ -19,7 +19,12 @@ "build:status-message-collections": "near-sdk-js build src/status-message-collections.js build/status-message-collections.wasm", "build:parking-lot": "near-sdk-js build src/parking-lot.ts build/parking-lot.wasm", "build:nested-collections": "near-sdk-js build src/nested-collections.ts build/nested-collections.wasm", + "build-nft": "run-s build:nft-*", + "build:nft-contract": "near-sdk-js build src/standard-nft/my-nft.ts build/my-nft.wasm", + "build:nft-receiver": "near-sdk-js build src/standard-nft/test-token-receiver.ts build/nft-receiver.wasm", + "build:nft-approval-receiver": "near-sdk-js build src/standard-nft/test-approval-receiver.ts build/nft-approval-receiver.wasm", "test": "ava && yarn test:counter-lowlevel && yarn test:counter-ts", + "test:nft": "ava __tests__/standard-nft/*", "test:status-message": "ava __tests__/test-status-message.ava.js", "test:clean-state": "ava __tests__/test-clean-state.ava.js", "test:counter": "ava __tests__/test-counter.ava.js", @@ -37,7 +42,8 @@ "license": "Apache-2.0", "dependencies": { "lodash-es": "^4.17.21", - "near-sdk-js": "file:../" + "near-sdk-js": "file:../", + "near-contract-standards": "file:../near-contract-standards/" }, "devDependencies": { "@types/lodash-es": "^4.17.6", diff --git a/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts b/examples/src/standard-nft/my-nft.ts similarity index 85% rename from near-contract-standards/example-contracts/non-fungible-token/my-nft.ts rename to examples/src/standard-nft/my-nft.ts index ebab10e0..5949caf8 100644 --- a/near-contract-standards/example-contracts/non-fungible-token/my-nft.ts +++ b/examples/src/standard-nft/my-nft.ts @@ -1,4 +1,4 @@ -import { NonFungibleToken } from "../../src/index"; +import { NonFungibleToken } from "near-contract-standards/lib"; import { assert, Bytes, @@ -9,19 +9,19 @@ import { NearPromise, PromiseOrValue, view, -} from "near-sdk-js/lib/index"; +} from "near-sdk-js/lib"; import { NFTContractMetadata, NonFungibleTokenMetadataProvider, TokenMetadata, -} from "../../src/non_fungible_token/metadata"; -import { IntoStorageKey, Option } from "../../src/non_fungible_token/utils"; -import { AccountId } from "../../../lib/types"; -import { NonFungibleTokenCore } from "../../src/non_fungible_token/core"; -import { Token, TokenId } from "../../src/non_fungible_token/token"; -import { NonFungibleTokenResolver } from "../../src/non_fungible_token/core/resolver"; -import { NonFungibleTokenApproval } from "../../src/non_fungible_token/approval"; -import { NonFungibleTokenEnumeration } from "../../src/non_fungible_token/enumeration"; +} from "near-contract-standards/lib/non_fungible_token/metadata"; +import { IntoStorageKey, Option } from "near-contract-standards/lib/non_fungible_token/utils"; +import { AccountId } from "near-sdk-js/lib/types"; +import { NonFungibleTokenCore } from "near-contract-standards/lib/non_fungible_token/core"; +import { Token, TokenId } from "near-contract-standards/lib/non_fungible_token/token"; +import { NonFungibleTokenResolver } from "near-contract-standards/lib/non_fungible_token/core/resolver"; +import { NonFungibleTokenApproval } from "near-contract-standards/lib/non_fungible_token/approval"; +import { NonFungibleTokenEnumeration } from "near-contract-standards/lib/non_fungible_token/enumeration"; class StorageKey {} @@ -98,7 +98,7 @@ export class MyNFT token_id: string, account_id: string, msg: string - ]): NearPromise { + ]): Option { return this.tokens.nft_approve([token_id, account_id, msg]); } diff --git a/near-contract-standards/example-contracts/non-fungible-token/test-approval-receiver.ts b/examples/src/standard-nft/test-approval-receiver.ts similarity index 89% rename from near-contract-standards/example-contracts/non-fungible-token/test-approval-receiver.ts rename to examples/src/standard-nft/test-approval-receiver.ts index 06328e50..8c9f083d 100644 --- a/near-contract-standards/example-contracts/non-fungible-token/test-approval-receiver.ts +++ b/examples/src/standard-nft/test-approval-receiver.ts @@ -6,9 +6,9 @@ import { PromiseOrValue, assert, call, -} from "../../../lib"; -import { AccountId } from "../../../lib/types"; -import { NonFungibleTokenApprovalReceiver } from "../../src/non_fungible_token/approval/approval_receiver"; +} from "near-sdk-js/lib"; +import { AccountId } from "near-sdk-js/lib/types"; +import { NonFungibleTokenApprovalReceiver } from "near-contract-standards/lib/non_fungible_token/approval/approval_receiver"; const BASE_GAS = 20_000_000_000_000n; const PROMISE_CALL = 20_000_000_000_000n; diff --git a/near-contract-standards/example-contracts/non-fungible-token/test-token-receiver.ts b/examples/src/standard-nft/test-token-receiver.ts similarity index 94% rename from near-contract-standards/example-contracts/non-fungible-token/test-token-receiver.ts rename to examples/src/standard-nft/test-token-receiver.ts index 0669f164..7d0a8192 100644 --- a/near-contract-standards/example-contracts/non-fungible-token/test-token-receiver.ts +++ b/examples/src/standard-nft/test-token-receiver.ts @@ -1,4 +1,4 @@ -import { NonFungibleTokenReceiver } from "../../src/non_fungible_token/core/receiver"; +import { NonFungibleTokenReceiver } from "near-contract-standards/lib/non_fungible_token/core/receiver"; import { assert, call, @@ -7,7 +7,7 @@ import { NearBindgen, NearPromise, PromiseOrValue, -} from "near-sdk-js/lib/index"; +} from "near-sdk-js/lib"; import { AccountId } from "near-sdk-js/lib/types"; const BASE_GAS = 10_000_000_000_000n; diff --git a/examples/yarn.lock b/examples/yarn.lock index ac244dce..e37ffab5 100644 --- a/examples/yarn.lock +++ b/examples/yarn.lock @@ -1876,6 +1876,12 @@ near-api-js@^0.44.1: text-encoding-utf-8 "^1.0.2" tweetnacl "^1.0.1" +"near-contract-standards@file:../near-contract-standards": + version "1.0.0" + dependencies: + lodash-es "^4.17.21" + near-sdk-js "file:../../../.cache/yarn/v6/npm-near-contract-standards-1.0.0-eb290289-756e-48dc-a42b-83469cf20f4f-1667544242717/node_modules" + near-sandbox@^0.0.13: version "0.0.13" resolved "https://registry.yarnpkg.com/near-sandbox/-/near-sandbox-0.0.13.tgz#139b70708ccefcdf2dd406710f6615590d1880e5" @@ -1885,7 +1891,7 @@ near-sandbox@^0.0.13: tar "^6.1.0" "near-sdk-js@file:..": - version "0.6.0-0" + version "0.6.0" dependencies: "@babel/core" "^7.17.5" "@babel/plugin-proposal-decorators" "^7.17.2" diff --git a/near-contract-standards/lib/event.d.ts b/near-contract-standards/lib/event.d.ts new file mode 100644 index 00000000..7d601fa4 --- /dev/null +++ b/near-contract-standards/lib/event.d.ts @@ -0,0 +1,9 @@ +export declare class NearEvent { + internal_to_json_string(): string; + internal_to_json_event_string(): string; + /** + * Logs the event to the host. This is required to ensure that the event is triggered + * and to consume the event. + */ + emit(): void; +} diff --git a/near-contract-standards/lib/event.js b/near-contract-standards/lib/event.js new file mode 100644 index 00000000..f872129d --- /dev/null +++ b/near-contract-standards/lib/event.js @@ -0,0 +1,16 @@ +import { near } from "near-sdk-js"; +export class NearEvent { + internal_to_json_string() { + return JSON.stringify(this); + } + internal_to_json_event_string() { + return `EVENT_JSON: ${this.internal_to_json_string()}`; + } + /** + * Logs the event to the host. This is required to ensure that the event is triggered + * and to consume the event. + */ + emit() { + near.log(this.internal_to_json_event_string()); + } +} diff --git a/near-contract-standards/lib/index.d.ts b/near-contract-standards/lib/index.d.ts new file mode 100644 index 00000000..e78c5a1d --- /dev/null +++ b/near-contract-standards/lib/index.d.ts @@ -0,0 +1,2 @@ +/** Non-fungible tokens as described in [by the spec](https://nomicon.io/Standards/NonFungibleToken/README.html). */ +export { NonFungibleToken } from "./non_fungible_token"; diff --git a/near-contract-standards/lib/index.js b/near-contract-standards/lib/index.js new file mode 100644 index 00000000..e78c5a1d --- /dev/null +++ b/near-contract-standards/lib/index.js @@ -0,0 +1,2 @@ +/** Non-fungible tokens as described in [by the spec](https://nomicon.io/Standards/NonFungibleToken/README.html). */ +export { NonFungibleToken } from "./non_fungible_token"; diff --git a/near-contract-standards/lib/non_fungible_token/approval/approval_receiver.d.ts b/near-contract-standards/lib/non_fungible_token/approval/approval_receiver.d.ts new file mode 100644 index 00000000..3f608d4c --- /dev/null +++ b/near-contract-standards/lib/non_fungible_token/approval/approval_receiver.d.ts @@ -0,0 +1,25 @@ +import { PromiseOrValue } from "near-sdk-js/lib"; +import { AccountId } from "near-sdk-js/lib/types"; +import { TokenId } from "../token"; +/** Approval receiver is the trait for the method called (or attempted to be called) when an NFT contract adds an approval for an account. */ +export interface NonFungibleTokenApprovalReceiver { + /** Respond to notification that contract has been granted approval for a token. + * + * Notes + * - Contract knows the token contract ID from `predecessor_account_id` + * + * @param token_id - The token to which this contract has been granted approval + * @param owner_id - The owner of the token + * @param approval_id - The approval ID stored by NFT contract for this approval. + * Expected to be a number within the 2^53 limit representable by JSON. + * @param msg: - specifies information needed by the approved contract in order to + handle the approval. Can indicate both a function to call and the + parameters to pass to that function. + */ + nft_on_approve([token_id, owner_id, approval_id, msg]: [ + token_id: TokenId, + owner_id: AccountId, + approval_id: bigint, + msg: string + ]): PromiseOrValue; +} diff --git a/near-contract-standards/lib/non_fungible_token/approval/approval_receiver.js b/near-contract-standards/lib/non_fungible_token/approval/approval_receiver.js new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/near-contract-standards/lib/non_fungible_token/approval/approval_receiver.js @@ -0,0 +1 @@ +export {}; diff --git a/near-contract-standards/lib/non_fungible_token/approval/index.d.ts b/near-contract-standards/lib/non_fungible_token/approval/index.d.ts new file mode 100644 index 00000000..72373608 --- /dev/null +++ b/near-contract-standards/lib/non_fungible_token/approval/index.d.ts @@ -0,0 +1,84 @@ +import { AccountId } from "near-sdk-js/lib/types"; +import { NearPromise } from "near-sdk-js/lib"; +import { TokenId } from "../token"; +import { Option } from "../utils"; +/** Interface used when it's desired to have a non-fungible token that has a + * traditional escrow or approval system. This allows Alice to allow Bob + * to take only the token with the unique identifier "19" but not others. + * It should be noted that in the [core non-fungible token standard] there + * is a method to do "transfer and call" which may be preferred over using + * an approval management standard in certain use cases. + * + * [approval management standard]: https://nomicon.io/Standards/NonFungibleToken/ApprovalManagement.html + * [core non-fungible token standard]: https://nomicon.io/Standards/NonFungibleToken/Core.html + */ +export interface NonFungibleTokenApproval { + /** Add an approved account for a specific token. + * + * Requirements + * - Caller of the method must attach a deposit of at least 1 yoctoⓃ for + * security purposes + * - Contract MAY require caller to attach larger deposit, to cover cost of + * storing approver data + * - Contract MUST panic if called by someone other than token owner + * - Contract MUST panic if addition would cause `nft_revoke_all` to exceed + * single-block gas limit + * - Contract MUST increment approval ID even if re-approving an account + * - If successfully approved or if had already been approved, and if `msg` is + * present, contract MUST call `nft_on_approve` on `account_id`. See + * `nft_on_approve` description below for details. + * + * @param token_id - The token for which to add an approval + * @param account_id - The account to add to `approvals` + * @param msg - Optional string to be passed to `nft_on_approve` + * @returns void, if no `msg` given. Otherwise, returns promise call to + * `nft_on_approve`, which can resolve with whatever it wants. + */ + nft_approve([token_id, account_id, msg]: [ + token_id: TokenId, + account_id: AccountId, + msg: Option + ]): Option; + /** Revoke an approved account for a specific token. + * + * Requirements + * - Caller of the method must attach a deposit of 1 yoctoⓃ for security + * purposes + * - If contract requires >1yN deposit on `nft_approve`, contract + * MUST refund associated storage deposit when owner revokes approval + * - Contract MUST panic if called by someone other than token owner + * + * @param token_id - The token for which to revoke an approval + * @param account_id - The account to remove from `approvals` + */ + nft_revoke([token_id, account_id]: [ + token_id: TokenId, + account_id: AccountId + ]): any; + /** Revoke all approved accounts for a specific token. + * + * Requirements + * - Caller of the method must attach a deposit of 1 yoctoⓃ for security + * purposes + * - If contract requires >1yN deposit on `nft_approve`, contract + * MUST refund all associated storage deposit when owner revokes approvals + * - Contract MUST panic if called by someone other than token owner + * + * @param token_id - The token with approvals to revoke + */ + nft_revoke_all(token_id: TokenId): any; + /** Check if a token is approved for transfer by a given account, optionally + * checking an approval_id + * + * @param token_id - The token for which to revoke an approval + * @param approved_account_id - The account to check the existence of in `approvals` + * @param approval_id - An optional approval ID to check against current approval ID for given account + * @returns if `approval_id` given, `true` if `approved_account_id` is approved with given `approval_id` + * otherwise, `true` if `approved_account_id` is in list of approved accounts + */ + nft_is_approved([token_id, approved_account_id, approval_id]: [ + token_id: TokenId, + approved_account_id: AccountId, + approval_id: Option + ]): boolean; +} diff --git a/near-contract-standards/lib/non_fungible_token/approval/index.js b/near-contract-standards/lib/non_fungible_token/approval/index.js new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/near-contract-standards/lib/non_fungible_token/approval/index.js @@ -0,0 +1 @@ +export {}; diff --git a/near-contract-standards/lib/non_fungible_token/core/index.d.ts b/near-contract-standards/lib/non_fungible_token/core/index.d.ts new file mode 100644 index 00000000..b8ff6d7a --- /dev/null +++ b/near-contract-standards/lib/non_fungible_token/core/index.d.ts @@ -0,0 +1,83 @@ +import { AccountId } from "near-sdk-js/lib/types"; +import { Token, TokenId } from "../token"; +import { Option } from "../utils"; +/** Used for all non-fungible tokens. The specification for the + * [core non-fungible token standard] lays out the reasoning for each method. + * It's important to check out [NonFungibleTokenReceiver](./receiver.ts) + * and [NonFungibleTokenResolver](./resolver.ts) to + * understand how the cross-contract call work. + * + * [core non-fungible token standard]: + */ +export interface NonFungibleTokenCore { + /** Simple transfer. Transfer a given `token_id` from current owner to + * `receiver_id`. + * + * Requirements + * - Caller of the method must attach a deposit of 1 yoctoⓃ for security purposes + * - Contract MUST panic if called by someone other than token owner or, + * if using Approval Management, one of the approved accounts + * - `approval_id` is for use with Approval Management, + * see + * - If using Approval Management, contract MUST nullify approved accounts on + * successful transfer. + * - TODO: needed? Both accounts must be registered with the contract for transfer to + * succeed. See see + * + * @param receiver_id - The valid NEAR account receiving the token + * @param token_id - The token to transfer + * @param approval_id - Expected approval ID. A number smaller than + * 2^53, and therefore representable as JSON. See Approval Management + * standard for full explanation. + * @param memo (optional) - For use cases that may benefit from indexing or + * providing information for a transfer + */ + nft_transfer([receiver_id, token_id, approval_id, memo]: [ + receiver_id: AccountId, + token_id: TokenId, + approval_id: Option, + memo: Option + ]): any; + /** Transfer token and call a method on a receiver contract. A successful + * workflow will end in a success execution outcome to the callback on the NFT + * contract at the method `nft_resolve_transfer`. + * + * You can think of this as being similar to attaching native NEAR tokens to a + * function call. It allows you to attach any Non-Fungible Token in a call to a + * receiver contract. + * + * Requirements: + * - Caller of the method must attach a deposit of 1 yoctoⓃ for security + * purposes + * - Contract MUST panic if called by someone other than token owner or, + * if using Approval Management, one of the approved accounts + * - The receiving contract must implement `ft_on_transfer` according to the + * standard. If it does not, FT contract's `ft_resolve_transfer` MUST deal + * with the resulting failed cross-contract call and roll back the transfer. + * - Contract MUST implement the behavior described in `ft_resolve_transfer` + * - `approval_id` is for use with Approval Management extension, see + * that document for full explanation. + * - If using Approval Management, contract MUST nullify approved accounts on + * successful transfer. + * + * @param receiver_id - The valid NEAR account receiving the token. + * @param token_id - The token to send. + * @param approval_id - Expected approval ID. A number smaller than + * 2^53, and therefore representable as JSON. See Approval Management + * standard for full explanation. + * @param memo (optional) - For use cases that may benefit from indexing or + * providing information for a transfer. + * @param msg - Specifies information needed by the receiving contract in + * order to properly handle the transfer. Can indicate both a function to + * call and the parameters to pass to that function. + */ + nft_transfer_call([receiver_id, token_id, approval_id, memo]: [ + receiver_id: AccountId, + token_id: TokenId, + approval_id: Option, + memo: Option, + msg: string + ]): any; + /** Returns the token with the given `token_id` or `null` if no such token. */ + nft_token(token_id: TokenId): Option; +} diff --git a/near-contract-standards/lib/non_fungible_token/core/index.js b/near-contract-standards/lib/non_fungible_token/core/index.js new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/near-contract-standards/lib/non_fungible_token/core/index.js @@ -0,0 +1 @@ +export {}; diff --git a/near-contract-standards/lib/non_fungible_token/core/receiver.d.ts b/near-contract-standards/lib/non_fungible_token/core/receiver.d.ts new file mode 100644 index 00000000..4ff96afc --- /dev/null +++ b/near-contract-standards/lib/non_fungible_token/core/receiver.d.ts @@ -0,0 +1,28 @@ +import { PromiseOrValue } from "near-sdk-js/lib"; +import { AccountId } from "near-sdk-js/lib/types"; +import { TokenId } from "../token"; +/** Used when an NFT is transferred using `nft_transfer_call`. This trait is implemented on the receiving contract, not on the NFT contract. */ +export interface NonFungibleTokenReceiver { + /** Take some action after receiving a non-fungible token + * + * Requirements: + * - Contract MUST restrict calls to this function to a set of whitelisted NFT + * contracts + * + * @param sender_id - The sender of `nft_transfer_call` + * @param previous_owner_id - The account that owned the NFT prior to it being + * transferred to this contract, which can differ from `sender_id` if using + * Approval Management extension + * @param token_id - The `token_id` argument given to `nft_transfer_call` + * @param msg - Information necessary for this contract to know how to process the + * request. This may include method names and/or arguments. + * + * @returns true if token should be returned to `sender_id` + */ + nft_on_transfer([sender_id, previous_owner_id, token_id, msg]: [ + sender_id: AccountId, + previous_owner_id: AccountId, + token_id: TokenId, + msg: string + ]): PromiseOrValue; +} diff --git a/near-contract-standards/lib/non_fungible_token/core/receiver.js b/near-contract-standards/lib/non_fungible_token/core/receiver.js new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/near-contract-standards/lib/non_fungible_token/core/receiver.js @@ -0,0 +1 @@ +export {}; diff --git a/near-contract-standards/lib/non_fungible_token/core/resolver.d.ts b/near-contract-standards/lib/non_fungible_token/core/resolver.d.ts new file mode 100644 index 00000000..155aad55 --- /dev/null +++ b/near-contract-standards/lib/non_fungible_token/core/resolver.d.ts @@ -0,0 +1,40 @@ +import { AccountId } from "../../../../lib/types"; +import { TokenId } from "../token"; +import { Option } from "../utils"; +/** Used when an NFT is transferred using `nft_transfer_call`. This is the method that's called after `nft_on_transfer`. This trait is implemented on the NFT contract. */ +export interface NonFungibleTokenResolver { + /** Finalize an `nft_transfer_call` chain of cross-contract calls. + * + * The `nft_transfer_call` process: + * + * 1. Sender calls `nft_transfer_call` on FT contract + * 2. NFT contract transfers token from sender to receiver + * 3. NFT contract calls `nft_on_transfer` on receiver contract + * 4+. [receiver contract may make other cross-contract calls] + * N. NFT contract resolves promise chain with `nft_resolve_transfer`, and may + * transfer token back to sender + * + * Requirements: + * - Contract MUST forbid calls to this function by any account except self + * - If promise chain failed, contract MUST revert token transfer + * - If promise chain resolves with `true`, contract MUST return token to + * `sender_id` + * + * @param previous_owner_id - The owner prior to the call to `nft_transfer_call` + * @param receiver_id - The `receiver_id` argument given to `nft_transfer_call` + * @param token_id - The `token_id` argument given to `ft_transfer_call` + * @param approvals - If using Approval Management, contract MUST provide + * set of original approved accounts in this argument, and restore these + * approved accounts in case of revert. + * + * @returns true if token was successfully transferred to `receiver_id`. + */ + nft_resolve_transfer([previous_owner_id, receiver_id, token_id, approvals]: [ + previous_owner_id: AccountId, + receiver_id: AccountId, + token_id: TokenId, + approvals: Option<{ + [approval: string]: bigint; + }> + ]): boolean; +} diff --git a/near-contract-standards/lib/non_fungible_token/core/resolver.js b/near-contract-standards/lib/non_fungible_token/core/resolver.js new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/near-contract-standards/lib/non_fungible_token/core/resolver.js @@ -0,0 +1 @@ +export {}; diff --git a/near-contract-standards/lib/non_fungible_token/enumeration/index.d.ts b/near-contract-standards/lib/non_fungible_token/enumeration/index.d.ts new file mode 100644 index 00000000..e8b98432 --- /dev/null +++ b/near-contract-standards/lib/non_fungible_token/enumeration/index.d.ts @@ -0,0 +1,35 @@ +import { AccountId } from "../../../../lib/types"; +import { Token } from "../token"; +/** Offers methods helpful in determining account ownership of NFTs and provides a way to page through NFTs per owner, determine total supply, etc. */ +export interface NonFungibleTokenEnumeration { + /** Returns the total supply of non-fungible tokens */ + nft_total_supply(): number; + /** Get a list of all tokens + * + * @param from_index - The starting index of tokens to return + * @param limit - The maximum number of tokens to return + * @returns - An array of Token objects, as described in Core standard + */ + nft_tokens([from_index, limit]: [ + from_index: number | null, + limit: number | null + ]): Token[]; + /** Get number of tokens owned by a given account + * + * @param account_id - A valid NEAR account + * @returns - The number of non-fungible tokens owned by given `account_id` + */ + nft_supply_for_owner(account_id: AccountId): number; + /** Get list of all tokens owned by a given account + * + * @param account_id - A valid NEAR account + * @param from_index - The starting index of tokens to return + * @param limit - The maximum number of tokens to return + * @returns - A paginated list of all tokens owned by this account + */ + nft_tokens_for_owner([account_id, from_index, limit]: [ + account_id: AccountId, + from_index: number, + limit: number + ]): Token[]; +} diff --git a/near-contract-standards/lib/non_fungible_token/enumeration/index.js b/near-contract-standards/lib/non_fungible_token/enumeration/index.js new file mode 100644 index 00000000..cb0ff5c3 --- /dev/null +++ b/near-contract-standards/lib/non_fungible_token/enumeration/index.js @@ -0,0 +1 @@ +export {}; diff --git a/near-contract-standards/lib/non_fungible_token/events.d.ts b/near-contract-standards/lib/non_fungible_token/events.d.ts new file mode 100644 index 00000000..d1bc03dd --- /dev/null +++ b/near-contract-standards/lib/non_fungible_token/events.d.ts @@ -0,0 +1,65 @@ +/** Standard for nep171 (Non-Fungible Token) events. + * + * These events will be picked up by the NEAR indexer. + * + * + * + * This is an extension of the events format (nep-297): + * + * + * The three events in this standard are [`NftMint`], [`NftTransfer`], and [`NftBurn`]. + * + * These events can be logged by calling `.emit()` on them if a single event, or calling + * [`NftMint::emit_many`], [`NftTransfer::emit_many`], + * or [`NftBurn::emit_many`] respectively. + */ +import { NearEvent } from "../event"; +import { Option } from "./utils"; +export declare type Nep171EventKind = NftMint[] | NftTransfer[] | NftBurn[]; +export declare class Nep171Event extends NearEvent { + version: string; + event_kind: Nep171EventKind; + constructor(version: string, event_kind: Nep171EventKind); +} +/** Data to log for an NFT mint event. To log this event, call [`.emit()`](NftMint::emit). */ +export declare class NftMint { + owner_id: string; + token_ids: string[]; + memo: Option; + constructor(owner_id: string, token_ids: string[], memo: Option); + /** Logs the event to the host. This is required to ensure that the event is triggered + * and to consume the event. */ + emit(): void; + /** Emits an nft mint event, through [`env::log_str`](near_sdk::env::log_str), + * where each [`NftMint`] represents the data of each mint. */ + static emit_many(data: NftMint[]): void; +} +/** Data to log for an NFT transfer event. To log this event, + * call [`.emit()`](NftTransfer::emit). */ +export declare class NftTransfer { + old_owner_id: string; + new_owner_id: string; + token_ids: string[]; + authorized_id: Option; + memo: Option; + constructor(old_owner_id: string, new_owner_id: string, token_ids: string[], authorized_id: Option, memo: Option); + /** Logs the event to the host. This is required to ensure that the event is triggered + * and to consume the event. */ + emit(): void; + /** Emits an nft transfer event, through [`env::log_str`](near_sdk::env::log_str), + * where each [`NftTransfer`] represents the data of each transfer. */ + static emit_many(data: NftTransfer[]): void; +} +/** Data to log for an NFT burn event. To log this event, call [`.emit()`](NftBurn::emit). */ +export declare class NftBurn { + owner_id: string; + token_ids: string[]; + memo: Option; + constructor(owner_id: string, token_ids: string[], authorized_id: Option, memo: Option); + /** Logs the event to the host. This is required to ensure that the event is triggered + * and to consume the event. */ + emit(): void; + /** Emits an nft burn event, through [`env::log_str`](near_sdk::env::log_str), + * where each [`NftBurn`] represents the data of each burn. */ + static emit_many(data: NftBurn[]): void; +} diff --git a/near-contract-standards/lib/non_fungible_token/events.js b/near-contract-standards/lib/non_fungible_token/events.js new file mode 100644 index 00000000..a9d60807 --- /dev/null +++ b/near-contract-standards/lib/non_fungible_token/events.js @@ -0,0 +1,86 @@ +/** Standard for nep171 (Non-Fungible Token) events. + * + * These events will be picked up by the NEAR indexer. + * + * + * + * This is an extension of the events format (nep-297): + * + * + * The three events in this standard are [`NftMint`], [`NftTransfer`], and [`NftBurn`]. + * + * These events can be logged by calling `.emit()` on them if a single event, or calling + * [`NftMint::emit_many`], [`NftTransfer::emit_many`], + * or [`NftBurn::emit_many`] respectively. + */ +import { NearEvent } from "../event"; +export class Nep171Event extends NearEvent { + constructor(version, event_kind) { + super(); + this.version = version; + this.event_kind = event_kind; + } +} +/** Data to log for an NFT mint event. To log this event, call [`.emit()`](NftMint::emit). */ +export class NftMint { + constructor(owner_id, token_ids, memo) { + this.owner_id = owner_id; + this.token_ids = token_ids; + this.memo = memo; + } + /** Logs the event to the host. This is required to ensure that the event is triggered + * and to consume the event. */ + emit() { + NftMint.emit_many([this]); + } + /** Emits an nft mint event, through [`env::log_str`](near_sdk::env::log_str), + * where each [`NftMint`] represents the data of each mint. */ + static emit_many(data) { + new_171_v1(data).emit(); + } +} +/** Data to log for an NFT transfer event. To log this event, + * call [`.emit()`](NftTransfer::emit). */ +export class NftTransfer { + constructor(old_owner_id, new_owner_id, token_ids, authorized_id, memo) { + this.old_owner_id = old_owner_id; + this.new_owner_id = new_owner_id; + this.token_ids = token_ids; + this.authorized_id = authorized_id; + this.memo = memo; + } + /** Logs the event to the host. This is required to ensure that the event is triggered + * and to consume the event. */ + emit() { + NftTransfer.emit_many([this]); + } + /** Emits an nft transfer event, through [`env::log_str`](near_sdk::env::log_str), + * where each [`NftTransfer`] represents the data of each transfer. */ + static emit_many(data) { + new_171_v1(data).emit(); + } +} +/** Data to log for an NFT burn event. To log this event, call [`.emit()`](NftBurn::emit). */ +export class NftBurn { + constructor(owner_id, token_ids, authorized_id, memo) { + this.owner_id = owner_id; + this.token_ids = token_ids; + this.memo = memo; + } + /** Logs the event to the host. This is required to ensure that the event is triggered + * and to consume the event. */ + emit() { + NftBurn.emit_many([this]); + } + /** Emits an nft burn event, through [`env::log_str`](near_sdk::env::log_str), + * where each [`NftBurn`] represents the data of each burn. */ + static emit_many(data) { + new_171_v1(data).emit(); + } +} +function new_171(version, event_kind) { + return new Nep171Event(version, event_kind); +} +function new_171_v1(event_kind) { + return new_171("1.0.0", event_kind); +} diff --git a/near-contract-standards/lib/non_fungible_token/impl.d.ts b/near-contract-standards/lib/non_fungible_token/impl.d.ts new file mode 100644 index 00000000..08afed4a --- /dev/null +++ b/near-contract-standards/lib/non_fungible_token/impl.d.ts @@ -0,0 +1,98 @@ +import { UnorderedMap, LookupMap, Bytes, UnorderedSet, NearPromise } from "near-sdk-js/lib"; +import { TokenMetadata } from "./metadata"; +import { IntoStorageKey, Option } from "./utils"; +import { NonFungibleTokenResolver } from "./core/resolver"; +import { AccountId } from "near-sdk-js/lib/types/index"; +import { Token } from "./token"; +import { NonFungibleTokenCore } from "./core"; +import { NonFungibleTokenApproval } from "./approval"; +import { NonFungibleTokenEnumeration } from "./enumeration"; +/** Implementation of the non-fungible token standard. + * Allows to include NEP-171 compatible token to any contract. + * There are next traits that any contract may implement: + * - NonFungibleTokenCore -- interface with nft_transfer methods. NonFungibleToken provides methods for it. + * - NonFungibleTokenApproval -- interface with nft_approve methods. NonFungibleToken provides methods for it. + * - NonFungibleTokenEnumeration -- interface for getting lists of tokens. NonFungibleToken provides methods for it. + * - NonFungibleTokenMetadata -- return metadata for the token in NEP-177, up to contract to implement. + * + * For example usage, see near-contract-standards/example-contracts/non-fungible-token/my-nft.ts. + */ +export declare class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenResolver, NonFungibleTokenApproval, NonFungibleTokenEnumeration { + owner_id: string; + extra_storage_in_bytes_per_token: bigint; + owner_by_id: UnorderedMap; + token_metadata_by_id: Option>; + tokens_per_owner: Option>>; + approvals_by_id: Option>; + next_approval_id_by_id: Option>; + constructor(); + nft_total_supply(): number; + private enum_get_token; + nft_tokens([from_index, limit]: [ + from_index: number | null, + limit: number | null + ]): Token[]; + nft_supply_for_owner(account_id: string): number; + nft_tokens_for_owner([account_id, from_index, limit]: [ + account_id: string, + from_index: number, + limit: number + ]): Token[]; + nft_approve([token_id, account_id, msg]: [ + token_id: string, + account_id: string, + msg: string + ]): Option; + nft_revoke([token_id, account_id]: [token_id: string, account_id: string]): void; + nft_revoke_all(token_id: string): void; + nft_is_approved([token_id, approved_account_id, approval_id]: [ + token_id: string, + approved_account_id: string, + approval_id: bigint + ]): boolean; + init(owner_by_id_prefix: IntoStorageKey, owner_id: string, token_metadata_prefix: Option, enumeration_prefix: Option, approval_prefix: Option): void; + static reconstruct(data: NonFungibleToken): NonFungibleToken; + measure_min_token_storage_cost(): void; + internal_transfer_unguarded(token_id: string, from: string, to: string): void; + internal_transfer(sender_id: string, receiver_id: string, token_id: string, approval_id: Option, memo: Option): [string, { + [approvals: string]: bigint; + } | null]; + static emit_transfer(owner_id: string, receiver_id: string, token_id: string, sender_id: Option, memo: Option): void; + internal_mint(token_id: string, token_owner_id: string, token_metadata: Option): Token; + internal_mint_with_refund(token_id: string, token_owner_id: string, token_metadata: Option, refund_id: Option): Token; + nft_transfer([receiver_id, token_id, approval_id, memo]: [ + receiver_id: string, + token_id: string, + approval_id: Option, + memo: Option + ]): void; + nft_transfer_call([receiver_id, token_id, approval_id, memo, msg]: [ + receiver_id: string, + token_id: string, + approval_id: Option, + memo: Option, + msg: string + ]): NearPromise; + nft_token(token_id: string): Option; + nft_resolve_transfer([previous_owner_id, receiver_id, token_id, approved_account_ids,]: [ + previous_owner_id: string, + receiver_id: string, + token_id: string, + approved_account_ids: Option<{ + [approvals: string]: bigint; + }> + ]): boolean; +} +export declare type StorageKey = TokensPerOwner | TokenPerOwnerInner; +export declare class TokensPerOwner implements IntoStorageKey { + account_hash: Bytes; + constructor(account_hash: Bytes); + into_storage_key(): Bytes; +} +export declare class TokenPerOwnerInner implements IntoStorageKey { + account_id_hash: Bytes; + constructor(account_id_hash: Bytes); + into_storage_key(): Bytes; +} diff --git a/near-contract-standards/lib/non_fungible_token/impl.js b/near-contract-standards/lib/non_fungible_token/impl.js new file mode 100644 index 00000000..09a907de --- /dev/null +++ b/near-contract-standards/lib/non_fungible_token/impl.js @@ -0,0 +1,450 @@ +import { UnorderedMap, LookupMap, near, UnorderedSet, assert, NearPromise, bytes, } from "near-sdk-js/lib"; +import { serialize } from "near-sdk-js/lib/utils"; +import { TokenMetadata } from "./metadata"; +import { refund_approved_account_ids, refund_deposit, refund_deposit_to_account, assert_at_least_one_yocto, bytes_for_approved_account_id, assert_one_yocto, refund_approved_account_ids_iter, } from "./utils"; +import { NftMint, NftTransfer } from "./events"; +import { Token } from "./token"; +const GAS_FOR_RESOLVE_TRANSFER = 15000000000000n; +const GAS_FOR_NFT_TRANSFER_CALL = 30000000000000n + GAS_FOR_RESOLVE_TRANSFER; +const GAS_FOR_NFT_APPROVE = 20000000000000n; +function repeat(str, n) { + return Array(n + 1).join(str); +} +function expect_token_found(option) { + if (option === null) { + throw new Error("Token not found"); + } + return option; +} +function expect_approval(option) { + if (option === null) { + throw new Error("next_approval_by_id must be set for approval ext"); + } + return option; +} +/** Implementation of the non-fungible token standard. + * Allows to include NEP-171 compatible token to any contract. + * There are next traits that any contract may implement: + * - NonFungibleTokenCore -- interface with nft_transfer methods. NonFungibleToken provides methods for it. + * - NonFungibleTokenApproval -- interface with nft_approve methods. NonFungibleToken provides methods for it. + * - NonFungibleTokenEnumeration -- interface for getting lists of tokens. NonFungibleToken provides methods for it. + * - NonFungibleTokenMetadata -- return metadata for the token in NEP-177, up to contract to implement. + * + * For example usage, see near-contract-standards/example-contracts/non-fungible-token/my-nft.ts. + */ +export class NonFungibleToken { + constructor() { + this.owner_id = ""; + this.extra_storage_in_bytes_per_token = 0n; + this.owner_by_id = new UnorderedMap(""); + this.token_metadata_by_id = null; + this.tokens_per_owner = null; + this.approvals_by_id = null; + this.next_approval_id_by_id = null; + } + nft_total_supply() { + return this.owner_by_id.length; + } + enum_get_token(owner_id, token_id) { + const metadata = this.token_metadata_by_id.get(token_id, { + reconstructor: TokenMetadata.reconstruct, + }); + const approved_account_ids = this.approvals_by_id.get(token_id, { + defaultValue: {}, + }); + return new Token(token_id, owner_id, metadata, approved_account_ids); + } + nft_tokens([from_index, limit]) { + const start_index = from_index === null ? 0 : from_index; + assert(this.owner_by_id.length >= start_index, "Out of bounds, please use a smaller from_index."); + let l = limit === null ? 2 ** 32 : limit; + assert(l > 0, "limit must be greater than 0."); + l = Math.min(l, this.owner_by_id.length - start_index); + const ret = []; + for (let i = start_index; i < start_index + l; i++) { + const token_id = this.owner_by_id.keys.get(i); + const owner_id = this.owner_by_id.get(token_id); + ret.push(this.enum_get_token(owner_id, token_id)); + } + return ret; + } + nft_supply_for_owner(account_id) { + const tokens_per_owner = this.tokens_per_owner; + assert(tokens_per_owner !== null, "Could not find tokens_per_owner when calling a method on the enumeration standard."); + const account_tokens = tokens_per_owner.get(account_id, { + reconstructor: UnorderedSet.reconstruct, + }); + return account_tokens === null ? 0 : account_tokens.length; + } + nft_tokens_for_owner([account_id, from_index, limit]) { + const tokens_per_owner = this.tokens_per_owner; + assert(tokens_per_owner !== null, "Could not find tokens_per_owner when calling a method on the enumeration standard."); + const token_set = tokens_per_owner.get(account_id, { + reconstructor: UnorderedSet.reconstruct, + }); + assert(token_set !== null, "Token set is empty"); + const start_index = from_index === null ? 0 : from_index; + assert(token_set.length >= start_index, "Out of bounds, please use a smaller from_index."); + let l = limit === null ? 2 ** 32 : limit; + assert(l > 0, "limit must be greater than 0."); + l = Math.min(l, token_set.length - start_index); + const ret = []; + for (let i = start_index; i < start_index + l; i++) { + const token_id = token_set.elements.get(i); + const owner_id = this.owner_by_id.get(token_id); + ret.push(this.enum_get_token(owner_id, token_id)); + } + return ret; + } + nft_approve([token_id, account_id, msg]) { + assert_at_least_one_yocto(); + if (this.approvals_by_id === null) { + throw new Error("NFT does not support Approval Management"); + } + const approvals_by_id = this.approvals_by_id; + const owner_id = expect_token_found(this.owner_by_id.get(token_id)); + assert(near.predecessorAccountId() === owner_id, "Predecessor must be token owner."); + const next_approval_id_by_id = expect_approval(this.next_approval_id_by_id); + const approved_account_ids = approvals_by_id.get(token_id) ?? {}; + const approval_id = next_approval_id_by_id.get(token_id) ?? 1n; + const old_approval_id = approved_account_ids[account_id]; + approved_account_ids[account_id] = approval_id; + approvals_by_id.set(token_id, approved_account_ids); + next_approval_id_by_id.set(token_id, approval_id + 1n); + const storage_used = old_approval_id === null ? bytes_for_approved_account_id(account_id) : 0; + refund_deposit(BigInt(storage_used)); + if (msg) { + return NearPromise.new(account_id).functionCall("nft_on_approve", bytes(serialize([token_id, owner_id, approval_id, msg])), 0n, near.prepaidGas() - GAS_FOR_NFT_APPROVE); + } + return null; + } + nft_revoke([token_id, account_id]) { + assert_one_yocto(); + if (this.approvals_by_id === null) { + throw new Error("NFT does not support Approval Management"); + } + const approvals_by_id = this.approvals_by_id; + const owner_id = expect_token_found(this.owner_by_id.get(token_id)); + const predecessorAccountId = near.predecessorAccountId(); + assert(predecessorAccountId === owner_id, "Predecessor must be token owner."); + const approved_account_ids = approvals_by_id.get(token_id); + if (approved_account_ids[account_id]) { + delete approved_account_ids[account_id]; + refund_approved_account_ids_iter(predecessorAccountId, [account_id]); + if (Object.keys(approved_account_ids).length === 0) { + approvals_by_id.remove(token_id); + } + else { + approvals_by_id.set(token_id, approved_account_ids); + } + } + } + nft_revoke_all(token_id) { + assert_one_yocto(); + if (this.approvals_by_id === null) { + throw new Error("NFT does not support Approval Management"); + } + const approvals_by_id = this.approvals_by_id; + const owner_id = expect_token_found(this.owner_by_id.get(token_id)); + const predecessorAccountId = near.predecessorAccountId(); + assert(predecessorAccountId === owner_id, "Predecessor must be token owner."); + const approved_account_ids = approvals_by_id.get(token_id); + if (approved_account_ids) { + refund_approved_account_ids(predecessorAccountId, approved_account_ids); + approvals_by_id.remove(token_id); + } + } + nft_is_approved([token_id, approved_account_id, approval_id]) { + expect_token_found(this.owner_by_id.get(token_id)); + if (this.approvals_by_id === null) { + return false; + } + const approvals_by_id = this.approvals_by_id; + const approved_account_ids = approvals_by_id.get(token_id); + if (approved_account_ids === null) { + return false; + } + const actual_approval_id = approved_account_ids[approved_account_id]; + if (actual_approval_id === undefined) { + return false; + } + if (approval_id) { + return BigInt(approval_id) === actual_approval_id; + } + return true; + } + init(owner_by_id_prefix, owner_id, token_metadata_prefix, enumeration_prefix, approval_prefix) { + let approvals_by_id; + let next_approval_id_by_id; + if (approval_prefix) { + const prefix = approval_prefix.into_storage_key(); + approvals_by_id = new LookupMap(prefix); + next_approval_id_by_id = new LookupMap(prefix + "n"); + } + else { + approvals_by_id = null; + next_approval_id_by_id = null; + } + this.owner_id = owner_id; + this.extra_storage_in_bytes_per_token = 0n; + this.owner_by_id = new UnorderedMap(owner_by_id_prefix.into_storage_key()); + this.token_metadata_by_id = token_metadata_prefix + ? new LookupMap(token_metadata_prefix.into_storage_key()) + : null; + this.tokens_per_owner = new LookupMap(enumeration_prefix.into_storage_key()); + this.approvals_by_id = approvals_by_id; + this.next_approval_id_by_id = next_approval_id_by_id; + this.measure_min_token_storage_cost(); + } + static reconstruct(data) { + const ret = new NonFungibleToken(); + Object.assign(ret, data); + ret.owner_by_id = UnorderedMap.reconstruct(ret.owner_by_id); + if (ret.token_metadata_by_id) { + ret.token_metadata_by_id = LookupMap.reconstruct(ret.token_metadata_by_id); + } + if (ret.tokens_per_owner) { + ret.tokens_per_owner = LookupMap.reconstruct(ret.tokens_per_owner); + } + if (ret.approvals_by_id) { + ret.approvals_by_id = LookupMap.reconstruct(ret.approvals_by_id); + } + if (ret.next_approval_id_by_id) { + ret.next_approval_id_by_id = LookupMap.reconstruct(ret.next_approval_id_by_id); + } + return ret; + } + measure_min_token_storage_cost() { + const initial_storage_usage = near.storageUsage(); + // 64 Length because this is the max account id length + const tmp_token_id = repeat("a", 64); + const tmp_owner_id = repeat("a", 64); + // 1. set some dummy data + this.owner_by_id.set(tmp_token_id, tmp_owner_id); + if (this.token_metadata_by_id) { + this.token_metadata_by_id.set(tmp_token_id, new TokenMetadata(repeat("a", 64), repeat("a", 64), repeat("a", 64), repeat("a", 64), 1n, null, null, null, null, null, null, null)); + } + if (this.tokens_per_owner) { + const u = new UnorderedSet(new TokensPerOwner(near.sha256(tmp_owner_id)).into_storage_key()); + u.set(tmp_token_id); + this.tokens_per_owner.set(tmp_owner_id, u); + } + if (this.approvals_by_id) { + const approvals = {}; + approvals[tmp_owner_id] = 1n; + this.approvals_by_id.set(tmp_token_id, approvals); + } + if (this.next_approval_id_by_id) { + this.next_approval_id_by_id.set(tmp_token_id, 1n); + } + // 2. see how much space it took + this.extra_storage_in_bytes_per_token = + near.storageUsage() - initial_storage_usage; + // 3. roll it all back + if (this.next_approval_id_by_id) { + this.next_approval_id_by_id.remove(tmp_token_id); + } + if (this.approvals_by_id) { + this.approvals_by_id.remove(tmp_token_id); + } + if (this.tokens_per_owner) { + const u = this.tokens_per_owner.remove(tmp_owner_id, { + reconstructor: UnorderedSet.reconstruct, + }); + u.remove(tmp_token_id); + } + if (this.token_metadata_by_id) { + this.token_metadata_by_id.remove(tmp_token_id); + } + this.owner_by_id.remove(tmp_token_id); + } + internal_transfer_unguarded(token_id, from, to) { + this.owner_by_id.set(token_id, to); + if (this.tokens_per_owner) { + const owner_tokens_set = this.tokens_per_owner.get(from, { + reconstructor: UnorderedSet.reconstruct, + }); + if (owner_tokens_set == null) { + throw new Error("Unable to access tokens per owner in unguarded call."); + } + owner_tokens_set.remove(token_id); + if (owner_tokens_set.isEmpty()) { + this.tokens_per_owner.remove(from); + } + else { + this.tokens_per_owner.set(from, owner_tokens_set); + } + let receiver_tokens_set = this.tokens_per_owner.get(to, { + reconstructor: UnorderedSet.reconstruct, + }); + if (receiver_tokens_set === null) { + receiver_tokens_set = new UnorderedSet(new TokensPerOwner(near.sha256(to)).into_storage_key()); + } + receiver_tokens_set.set(token_id); + this.tokens_per_owner.set(to, receiver_tokens_set); + } + } + internal_transfer(sender_id, receiver_id, token_id, approval_id, memo) { + const owner_id = this.owner_by_id.get(token_id); + if (owner_id == null) { + throw new Error("Token not found"); + } + const approved_account_ids = this.approvals_by_id?.remove(token_id); + let sender_id_authorized; + if (sender_id != owner_id) { + if (!approved_account_ids) { + throw new Error("Unauthorized"); + } + const actual_approval_id = approved_account_ids[sender_id]; + if (!actual_approval_id) { + throw new Error("Sender not approved"); + } + assert(approval_id == null || approval_id == actual_approval_id, `The actual approval_id ${actual_approval_id} is different from the given ${approval_id}`); + sender_id_authorized = sender_id; + } + else { + sender_id_authorized = null; + } + assert(owner_id != receiver_id, "Current and next owner must differ"); + this.internal_transfer_unguarded(token_id, owner_id, receiver_id); + NonFungibleToken.emit_transfer(owner_id, receiver_id, token_id, sender_id_authorized, memo); + return [owner_id, approved_account_ids]; + } + static emit_transfer(owner_id, receiver_id, token_id, sender_id, memo) { + new NftTransfer(owner_id, receiver_id, [token_id], sender_id && sender_id == owner_id ? sender_id : null, memo).emit(); + } + internal_mint(token_id, token_owner_id, token_metadata) { + const token = this.internal_mint_with_refund(token_id, token_owner_id, token_metadata, near.predecessorAccountId()); + new NftMint(token.owner_id, [token.token_id], null).emit(); + return token; + } + internal_mint_with_refund(token_id, token_owner_id, token_metadata, refund_id) { + let initial_storage_usage = null; + if (refund_id) { + initial_storage_usage = [refund_id, near.storageUsage()]; + } + if (this.token_metadata_by_id && token_metadata == null) { + throw new Error("Must provide metadata"); + } + if (this.owner_by_id.get(token_id)) { + throw new Error("token_id must be unique"); + } + const owner_id = token_owner_id; + this.owner_by_id.set(token_id, owner_id); + this.token_metadata_by_id?.set(token_id, token_metadata); + if (this.tokens_per_owner) { + let token_ids = this.tokens_per_owner.get(owner_id, { + reconstructor: UnorderedSet.reconstruct, + }); + if (token_ids === null) { + token_ids = new UnorderedSet(new TokensPerOwner(near.sha256(owner_id)).into_storage_key()); + } + token_ids.set(token_id); + this.tokens_per_owner.set(owner_id, token_ids); + } + const approved_account_ids = this.approvals_by_id ? {} : null; + if (initial_storage_usage) { + const [id, storage_usage] = initial_storage_usage; + refund_deposit_to_account(near.storageUsage() - storage_usage, id); + } + return new Token(token_id, owner_id, token_metadata, approved_account_ids); + } + nft_transfer([receiver_id, token_id, approval_id, memo]) { + assert_at_least_one_yocto(); + const sender_id = near.predecessorAccountId(); + this.internal_transfer(sender_id, receiver_id, token_id, approval_id, memo); + } + nft_transfer_call([receiver_id, token_id, approval_id, memo, msg]) { + assert_at_least_one_yocto(); + assert(near.prepaidGas() > GAS_FOR_NFT_TRANSFER_CALL, "Not enough prepaid gas"); + const sender_id = near.predecessorAccountId(); + const [old_owner, old_approvals] = this.internal_transfer(sender_id, receiver_id, token_id, approval_id, memo); + const promise = NearPromise.new(receiver_id) + .functionCall("nft_on_transfer", bytes(JSON.stringify([sender_id, old_owner, token_id, msg])), 0n, near.prepaidGas() - GAS_FOR_NFT_TRANSFER_CALL) + .then(NearPromise.new(near.currentAccountId()).functionCall("nft_resolve_transfer", bytes(JSON.stringify([old_owner, receiver_id, token_id, old_approvals])), 0n, GAS_FOR_RESOLVE_TRANSFER)); + return promise; + } + nft_token(token_id) { + const owner_id = this.owner_by_id.get(token_id); + if (owner_id == null) { + return null; + } + const metadata = this.token_metadata_by_id?.get(token_id, { + reconstructor: TokenMetadata.reconstruct, + }); + const approved_account_ids = this.approvals_by_id?.get(token_id); + return new Token(token_id, owner_id, metadata, approved_account_ids); + } + nft_resolve_transfer([previous_owner_id, receiver_id, token_id, approved_account_ids,]) { + let must_revert = false; + let p; + try { + p = near.promiseResult(0); + } + catch (e) { + if (e.message.includes("Not Ready")) { + throw new Error(); + } + else { + must_revert = true; + } + } + if (!must_revert) { + try { + const yes_or_no = JSON.parse(p); + if (typeof yes_or_no == "boolean") { + must_revert = yes_or_no; + } + else { + must_revert = true; + } + } + catch (_e) { + must_revert = true; + } + } + if (!must_revert) { + return true; + } + const current_owner = this.owner_by_id.get(token_id); + if (current_owner) { + if (current_owner != receiver_id) { + return true; + } + } + else { + if (approved_account_ids) { + refund_approved_account_ids(previous_owner_id, approved_account_ids); + } + return true; + } + this.internal_transfer_unguarded(token_id, receiver_id, previous_owner_id); + if (this.approvals_by_id) { + const receiver_approvals = this.approvals_by_id.get(token_id); + if (receiver_approvals) { + refund_approved_account_ids(receiver_id, receiver_approvals); + } + if (approved_account_ids) { + this.approvals_by_id.set(token_id, approved_account_ids); + } + } + NonFungibleToken.emit_transfer(receiver_id, previous_owner_id, token_id, null, null); + return false; + } +} +export class TokensPerOwner { + constructor(account_hash) { + this.account_hash = account_hash; + } + into_storage_key() { + return "\x00" + this.account_hash; + } +} +export class TokenPerOwnerInner { + constructor(account_id_hash) { + this.account_id_hash = account_id_hash; + } + into_storage_key() { + return "\x01" + this.account_id_hash; + } +} diff --git a/near-contract-standards/lib/non_fungible_token/index.d.ts b/near-contract-standards/lib/non_fungible_token/index.d.ts new file mode 100644 index 00000000..495a7ea2 --- /dev/null +++ b/near-contract-standards/lib/non_fungible_token/index.d.ts @@ -0,0 +1,18 @@ +/** The Token struct for the non-fungible token. */ +export { Token, TokenId } from "./token"; +/** The [core non-fungible token standard](https://nomicon.io/Standards/NonFungibleToken/Core.html). This can be though of as the base standard, with the others being extension standards. */ +export * as core from "./core"; +/** The [approval management standard](https://nomicon.io/Standards/NonFungibleToken/ApprovalManagement.html) for NFTs. */ +export * as approval from "./approval"; +/** Interface for the [NFT enumeration standard](https://nomicon.io/Standards/NonFungibleToken/Enumeration.html). + * This provides useful view-only methods returning token supply, tokens by owner, etc. + */ +export * as enumeration from "./enumeration"; +/** Metadata interfaces and implementation according to the [NFT enumeration standard](https://nomicon.io/Standards/NonFungibleToken/Metadata.html). + * This covers both the contract metadata and the individual token metadata. + */ +export * as metadata from "./metadata"; +/** NFT utility functions */ +export * from "./utils"; +export * as events from "./events"; +export { NonFungibleToken } from "./impl"; diff --git a/near-contract-standards/lib/non_fungible_token/index.js b/near-contract-standards/lib/non_fungible_token/index.js new file mode 100644 index 00000000..acba36c4 --- /dev/null +++ b/near-contract-standards/lib/non_fungible_token/index.js @@ -0,0 +1,18 @@ +/** The Token struct for the non-fungible token. */ +export { Token } from "./token"; +/** The [core non-fungible token standard](https://nomicon.io/Standards/NonFungibleToken/Core.html). This can be though of as the base standard, with the others being extension standards. */ +export * as core from "./core"; +/** The [approval management standard](https://nomicon.io/Standards/NonFungibleToken/ApprovalManagement.html) for NFTs. */ +export * as approval from "./approval"; +/** Interface for the [NFT enumeration standard](https://nomicon.io/Standards/NonFungibleToken/Enumeration.html). + * This provides useful view-only methods returning token supply, tokens by owner, etc. + */ +export * as enumeration from "./enumeration"; +/** Metadata interfaces and implementation according to the [NFT enumeration standard](https://nomicon.io/Standards/NonFungibleToken/Metadata.html). + * This covers both the contract metadata and the individual token metadata. + */ +export * as metadata from "./metadata"; +/** NFT utility functions */ +export * from "./utils"; +export * as events from "./events"; +export { NonFungibleToken } from "./impl"; diff --git a/near-contract-standards/lib/non_fungible_token/metadata.d.ts b/near-contract-standards/lib/non_fungible_token/metadata.d.ts new file mode 100644 index 00000000..f0d83440 --- /dev/null +++ b/near-contract-standards/lib/non_fungible_token/metadata.d.ts @@ -0,0 +1,51 @@ +import { Bytes } from "near-sdk-js"; +import { Option } from "./utils"; +/** This spec can be treated like a version of the standard. */ +export declare const NFT_METADATA_SPEC = "nft-1.0.0"; +/** Metadata for the NFT contract itself. */ +export declare class NFTContractMetadata { + spec: string; + name: string; + symbol: string; + icon: Option; + base_uri: Option; + reference: Option; + reference_hash: Option; + constructor(); + init(spec: string, name: string, symbol: string, icon: Option, base_uri: Option, reference: Option, reference_hash: Option): void; + assert_valid(): void; + static reconstruct(data: NFTContractMetadata): NFTContractMetadata; +} +/** Metadata on the individual token level. */ +export declare class TokenMetadata { + title: Option; + description: Option; + media: Option; + media_hash: Option; + copies: Option; + issued_at: Option; + expires_at: Option; + starts_at: Option; + updated_at: Option; + extra: Option; + reference: Option; + reference_hash: Option; + constructor(title: Option, // ex. "Arch Nemesis: Mail Carrier" or "Parcel #5055" + description: Option, // free-form description + media: Option, // URL to associated media, preferably to decentralized, content-addressed storage + media_hash: Option, // Base64-encoded sha256 hash of content referenced by the `media` field. Required if `media` is included. + copies: Option, // number of copies of this set of metadata in existence when token was minted. + issued_at: Option, // ISO 8601 datetime when token was issued or minted + expires_at: Option, // ISO 8601 datetime when token expires + starts_at: Option, // ISO 8601 datetime when token starts being valid + updated_at: Option, // ISO 8601 datetime when token was last updated + extra: Option, // anything extra the NFT wants to store on-chain. Can be stringified JSON. + reference: Option, // URL to an off-chain JSON file with more info. + reference_hash: Option); + assert_valid(): void; + static reconstruct(data: TokenMetadata): TokenMetadata; +} +/** Offers details on the contract-level metadata. */ +export interface NonFungibleTokenMetadataProvider { + nft_metadata(): NFTContractMetadata; +} diff --git a/near-contract-standards/lib/non_fungible_token/metadata.js b/near-contract-standards/lib/non_fungible_token/metadata.js new file mode 100644 index 00000000..e350efd9 --- /dev/null +++ b/near-contract-standards/lib/non_fungible_token/metadata.js @@ -0,0 +1,78 @@ +import { assert } from "near-sdk-js"; +/** This spec can be treated like a version of the standard. */ +export const NFT_METADATA_SPEC = "nft-1.0.0"; +/** Metadata for the NFT contract itself. */ +export class NFTContractMetadata { + constructor() { + this.spec = NFT_METADATA_SPEC; + this.name = ""; + this.symbol = ""; + this.icon = null; + this.base_uri = null; + this.reference = null; + this.reference_hash = null; + } + init(spec, name, symbol, icon, base_uri, reference, reference_hash) { + this.spec = spec; + this.name = name; + this.symbol = symbol; + this.icon = icon; + this.base_uri = base_uri; + this.reference = reference; + this.reference_hash = reference_hash; + } + assert_valid() { + assert(this.spec == NFT_METADATA_SPEC, "Spec is not NFT metadata"); + assert((this.reference != null) == (this.reference_hash != null), "Reference and reference hash must be present"); + if (this.reference_hash != null) { + assert(this.reference_hash.length == 32, "Hash has to be 32 bytes"); + } + } + static reconstruct(data) { + const metadata = new NFTContractMetadata(); + Object.assign(metadata, data); + return metadata; + } +} +/** Metadata on the individual token level. */ +export class TokenMetadata { + constructor(title, // ex. "Arch Nemesis: Mail Carrier" or "Parcel #5055" + description, // free-form description + media, // URL to associated media, preferably to decentralized, content-addressed storage + media_hash, // Base64-encoded sha256 hash of content referenced by the `media` field. Required if `media` is included. + copies, // number of copies of this set of metadata in existence when token was minted. + issued_at, // ISO 8601 datetime when token was issued or minted + expires_at, // ISO 8601 datetime when token expires + starts_at, // ISO 8601 datetime when token starts being valid + updated_at, // ISO 8601 datetime when token was last updated + extra, // anything extra the NFT wants to store on-chain. Can be stringified JSON. + reference, // URL to an off-chain JSON file with more info. + reference_hash // Base64-encoded sha256 hash of JSON from reference field. Required if `reference` is included. + ) { + this.title = title; + this.description = description; + this.media = media; + this.media_hash = media_hash; + this.copies = copies; + this.issued_at = issued_at; + this.expires_at = expires_at; + this.starts_at = starts_at; + this.updated_at = updated_at; + this.extra = extra; + this.reference = reference; + this.reference_hash = reference_hash; + } + assert_valid() { + assert((this.media != null) == (this.media_hash != null), "Media and media hash must be present"); + if (this.media_hash != null) { + assert(this.media_hash.length == 32, "Media hash has to be 32 bytes"); + } + assert((this.reference != null) == (this.reference_hash != null), "Reference and reference hash must be present"); + if (this.reference_hash != null) { + assert(this.reference_hash.length == 32, "Reference hash has to be 32 bytes"); + } + } + static reconstruct(data) { + return new TokenMetadata(data.title, data.description, data.media, data.media_hash, data.copies, data.issued_at, data.expires_at, data.starts_at, data.updated_at, data.extra, data.reference, data.reference_hash); + } +} diff --git a/near-contract-standards/lib/non_fungible_token/token.d.ts b/near-contract-standards/lib/non_fungible_token/token.d.ts new file mode 100644 index 00000000..8cd79253 --- /dev/null +++ b/near-contract-standards/lib/non_fungible_token/token.d.ts @@ -0,0 +1,17 @@ +import { TokenMetadata } from "./metadata"; +import { AccountId } from "near-sdk-js/lib/types"; +import { Option } from "./utils"; +/** Note that token IDs for NFTs are strings on NEAR. It's still fine to use autoincrementing numbers as unique IDs if desired, but they should be stringified. This is to make IDs more future-proof as chain-agnostic conventions and standards arise, and allows for more flexibility with considerations like bridging NFTs across chains, etc. */ +export declare type TokenId = string; +/** In this implementation, the Token struct takes two extensions standards (metadata and approval) as optional fields, as they are frequently used in modern NFTs. */ +export declare class Token { + token_id: TokenId; + owner_id: AccountId; + metadata: Option; + approved_account_ids: Option<{ + [approved_account_id: string]: bigint; + }>; + constructor(token_id: TokenId, owner_id: AccountId, metadata: Option, approved_account_ids: Option<{ + [approved_account_id: string]: bigint; + }>); +} diff --git a/near-contract-standards/lib/non_fungible_token/token.js b/near-contract-standards/lib/non_fungible_token/token.js new file mode 100644 index 00000000..b6351a3c --- /dev/null +++ b/near-contract-standards/lib/non_fungible_token/token.js @@ -0,0 +1,9 @@ +/** In this implementation, the Token struct takes two extensions standards (metadata and approval) as optional fields, as they are frequently used in modern NFTs. */ +export class Token { + constructor(token_id, owner_id, metadata, approved_account_ids) { + this.token_id = token_id; + this.owner_id = owner_id; + this.metadata = metadata; + this.approved_account_ids = approved_account_ids; + } +} diff --git a/near-contract-standards/lib/non_fungible_token/utils.d.ts b/near-contract-standards/lib/non_fungible_token/utils.d.ts new file mode 100644 index 00000000..5e806f7a --- /dev/null +++ b/near-contract-standards/lib/non_fungible_token/utils.d.ts @@ -0,0 +1,19 @@ +import { Bytes } from "near-sdk-js"; +import { AccountId } from "near-sdk-js/lib/types"; +export declare function bytes_for_approved_account_id(account_id: string): number; +export declare function refund_approved_account_ids_iter(account_id: string, approved_account_ids: string[]): void; +export declare function refund_approved_account_ids(account_id: AccountId, approved_account_ids: { + [approvals: string]: bigint; +}): void; +export declare function refund_deposit_to_account(storage_used: bigint, account_id: string): void; +/** Assumes that the precedecessor will be refunded */ +export declare function refund_deposit(storage_used: bigint): void; +export declare function hash_account_id(account_id: string): Bytes; +/** Assert that at least 1 yoctoNEAR was attached. */ +export declare function assert_at_least_one_yocto(): void; +/** Assert that exactly 1 yoctoNEAR was attached */ +export declare function assert_one_yocto(): void; +export declare type Option = T | null; +export interface IntoStorageKey { + into_storage_key(): Bytes; +} diff --git a/near-contract-standards/lib/non_fungible_token/utils.js b/near-contract-standards/lib/non_fungible_token/utils.js new file mode 100644 index 00000000..34a89b41 --- /dev/null +++ b/near-contract-standards/lib/non_fungible_token/utils.js @@ -0,0 +1,42 @@ +import { near, assert } from "near-sdk-js"; +export function bytes_for_approved_account_id(account_id) { + // The extra 4 bytes are coming from Borsh serialization to store the length of the string. + return account_id.length + 4 + 8; +} +export function refund_approved_account_ids_iter(account_id, approved_account_ids) { + const storage_released = approved_account_ids + .map(bytes_for_approved_account_id) + .reduce((a, b) => a + b); + const promise_id = near.promiseBatchCreate(account_id); + near.promiseBatchActionTransfer(promise_id, BigInt(storage_released) * near.storageByteCost()); + near.promiseReturn(promise_id); +} +export function refund_approved_account_ids(account_id, approved_account_ids) { + refund_approved_account_ids_iter(account_id, Array.from(Object.keys(approved_account_ids))); +} +export function refund_deposit_to_account(storage_used, account_id) { + const required_cost = near.storageByteCost() * storage_used; + const attached_deposit = near.attachedDeposit(); + assert(required_cost <= attached_deposit, `Must attach ${required_cost} yoctoNEAR to cover storage`); + const refund = attached_deposit - required_cost; + if (refund > 1n) { + const promise_id = near.promiseBatchCreate(account_id); + near.promiseBatchActionTransfer(promise_id, refund); + near.promiseReturn(promise_id); + } +} +/** Assumes that the precedecessor will be refunded */ +export function refund_deposit(storage_used) { + refund_deposit_to_account(storage_used, near.predecessorAccountId()); +} +export function hash_account_id(account_id) { + return near.sha256(account_id); +} +/** Assert that at least 1 yoctoNEAR was attached. */ +export function assert_at_least_one_yocto() { + assert(near.attachedDeposit() >= 1n, "Requires attached deposit of at least 1 yoctoNEAR"); +} +/** Assert that exactly 1 yoctoNEAR was attached */ +export function assert_one_yocto() { + assert(near.attachedDeposit() === 1n, "Requires attached deposit of 1 yoctoNEAR"); +} diff --git a/near-contract-standards/package.json b/near-contract-standards/package.json index d6d5d0f1..b07ea3fb 100644 --- a/near-contract-standards/package.json +++ b/near-contract-standards/package.json @@ -6,14 +6,7 @@ "type": "module", "scripts": { "postinstall": "cd .. && yarn link && cd near-contract-standards && yarn link near-sdk-js", - "build": "run-s build:*", - "rebuild": "cd .. && yarn build && cd near-contract-standards && rm -rf node_modules && rm -rf build && yarn && yarn build", - "build-nft": "run-s build:nft-*", - "build:nft-contract": "near-sdk-js build example-contracts/non-fungible-token/my-nft.ts build/my-nft.wasm", - "build:nft-receiver": "near-sdk-js build example-contracts/non-fungible-token/test-token-receiver.ts build/nft-receiver.wasm", - "build:nft-approval-receiver": "near-sdk-js build example-contracts/non-fungible-token/test-approval-receiver.ts build/nft-approval-receiver.wasm", - "test": "ava", - "test:nft": "ava __tests__/my-nft/*" + "build": "tsc" }, "author": "Near Inc ", "license": "Apache-2.0", @@ -22,9 +15,9 @@ "near-sdk-js": "file:../" }, "devDependencies": { - "ava": "^4.2.0", - "typescript": "^4.7.4", - "npm-run-all": "^4.1.5", - "near-workspaces": "3.2.1" - } + "typescript": "^4.7.4" + }, + "files": [ + "lib" + ] } diff --git a/near-contract-standards/src/non_fungible_token/approval/index.ts b/near-contract-standards/src/non_fungible_token/approval/index.ts index 89d35a19..7f0dd24f 100644 --- a/near-contract-standards/src/non_fungible_token/approval/index.ts +++ b/near-contract-standards/src/non_fungible_token/approval/index.ts @@ -1,5 +1,5 @@ import { AccountId } from "near-sdk-js/lib/types"; -import { NearPromise } from "../../../../lib"; +import { NearPromise } from "near-sdk-js/lib"; import { TokenId } from "../token"; import { Option } from "../utils"; diff --git a/near-contract-standards/src/non_fungible_token/impl.ts b/near-contract-standards/src/non_fungible_token/impl.ts index c6efa4fe..e0e1d521 100644 --- a/near-contract-standards/src/non_fungible_token/impl.ts +++ b/near-contract-standards/src/non_fungible_token/impl.ts @@ -172,7 +172,7 @@ export class NonFungibleToken token_id: string, account_id: string, msg: string - ]): NearPromise { + ]): Option { assert_at_least_one_yocto(); if (this.approvals_by_id === null) { throw new Error("NFT does not support Approval Management"); @@ -207,6 +207,7 @@ export class NonFungibleToken near.prepaidGas() - GAS_FOR_NFT_APPROVE ); } + return null; } nft_revoke([token_id, account_id]: [token_id: string, account_id: string]) { diff --git a/near-contract-standards/tsconfig.json b/near-contract-standards/tsconfig.json index a5be9b56..247f4d53 100644 --- a/near-contract-standards/tsconfig.json +++ b/near-contract-standards/tsconfig.json @@ -1,9 +1,30 @@ { "compilerOptions": { - "experimentalDecorators": true, + "esModuleInterop": true, + "lib": ["es2015", "esnext", "dom"], + "module": "esnext", "target": "es2020", - "noEmit": true, - "moduleResolution": "node" + "moduleResolution": "node", + "alwaysStrict": true, + "outDir": "./lib", + "declaration": true, + "preserveSymlinks": true, + "preserveWatchOutput": true, + "pretty": false, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "noImplicitAny": false, + "noImplicitReturns": true, + "noUnusedLocals": true, + "experimentalDecorators": true, + "resolveJsonModule": true, + "allowJs": true, + "skipLibCheck": true }, + "files": [ + "src/index.ts", + "src/non_fungible_token/approval/approval_receiver.ts", + "src/non_fungible_token/core/receiver.ts" + ], "exclude": ["node_modules"] } From bc80ae38b7346f406a02b45ae52fe4996705d7b7 Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Fri, 4 Nov 2022 15:14:09 +0800 Subject: [PATCH 40/44] lint format --- examples/src/standard-nft/my-nft.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/examples/src/standard-nft/my-nft.ts b/examples/src/standard-nft/my-nft.ts index 5949caf8..4171487c 100644 --- a/examples/src/standard-nft/my-nft.ts +++ b/examples/src/standard-nft/my-nft.ts @@ -15,10 +15,16 @@ import { NonFungibleTokenMetadataProvider, TokenMetadata, } from "near-contract-standards/lib/non_fungible_token/metadata"; -import { IntoStorageKey, Option } from "near-contract-standards/lib/non_fungible_token/utils"; +import { + IntoStorageKey, + Option, +} from "near-contract-standards/lib/non_fungible_token/utils"; import { AccountId } from "near-sdk-js/lib/types"; import { NonFungibleTokenCore } from "near-contract-standards/lib/non_fungible_token/core"; -import { Token, TokenId } from "near-contract-standards/lib/non_fungible_token/token"; +import { + Token, + TokenId, +} from "near-contract-standards/lib/non_fungible_token/token"; import { NonFungibleTokenResolver } from "near-contract-standards/lib/non_fungible_token/core/resolver"; import { NonFungibleTokenApproval } from "near-contract-standards/lib/non_fungible_token/approval"; import { NonFungibleTokenEnumeration } from "near-contract-standards/lib/non_fungible_token/enumeration"; From 3df19a641d1d6fec49abd4b0c43296250106a40f Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Fri, 4 Nov 2022 15:23:50 +0800 Subject: [PATCH 41/44] try fix link in ci --- examples/package.json | 2 +- near-contract-standards/package.json | 1 - near-contract-standards/yarn.lock | 1890 +------------------------- 3 files changed, 11 insertions(+), 1882 deletions(-) diff --git a/examples/package.json b/examples/package.json index 2c07d9be..32948a4b 100644 --- a/examples/package.json +++ b/examples/package.json @@ -5,7 +5,7 @@ "main": "index.js", "type": "module", "scripts": { - "postinstall": "cd .. && yarn link && cd near-contract-standards && yarn link && cd ../examples && yarn link near-sdk-js near-contract-standards", + "postinstall": "cd .. && yarn link && cd examples && yarn link near-sdk-js", "build": "run-s build:*", "build:status-message": "near-sdk-js build src/status-message.js build/status-message.wasm", "build:clean-state": "near-sdk-js build src/clean-state.js build/clean-state.wasm", diff --git a/near-contract-standards/package.json b/near-contract-standards/package.json index b07ea3fb..75ac94a3 100644 --- a/near-contract-standards/package.json +++ b/near-contract-standards/package.json @@ -5,7 +5,6 @@ "main": "index.js", "type": "module", "scripts": { - "postinstall": "cd .. && yarn link && cd near-contract-standards && yarn link near-sdk-js", "build": "tsc" }, "author": "Near Inc ", diff --git a/near-contract-standards/yarn.lock b/near-contract-standards/yarn.lock index 40b4524a..073161d0 100644 --- a/near-contract-standards/yarn.lock +++ b/near-contract-standards/yarn.lock @@ -316,27 +316,6 @@ "@jridgewell/resolve-uri" "^3.0.3" "@jridgewell/sourcemap-codec" "^1.4.10" -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - "@rollup/plugin-babel@^5.3.1": version "5.3.1" resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-5.3.1.tgz#04bc0608f4aa4b2e4b1aebf284344d0f68fda283" @@ -384,28 +363,6 @@ resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.1.tgz#ebb651ee52ff84f420097055f4bf46cfba403938" integrity sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA== -"@sindresorhus/is@^4.0.0": - version "4.6.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" - integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== - -"@szmarczak/http-timer@^4.0.5": - version "4.0.6" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" - integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== - dependencies: - defer-to-connect "^2.0.0" - -"@types/cacheable-request@^6.0.1": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.2.tgz#c324da0197de0a98a2312156536ae262429ff6b9" - integrity sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA== - dependencies: - "@types/http-cache-semantics" "*" - "@types/keyv" "*" - "@types/node" "*" - "@types/responselike" "*" - "@types/estree@*": version "1.0.0" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" @@ -416,23 +373,6 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== -"@types/http-cache-semantics@*": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz#0ea7b61496902b95890dc4c3a116b60cb8dae812" - integrity sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ== - -"@types/json-buffer@~3.0.0": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/json-buffer/-/json-buffer-3.0.0.tgz#85c1ff0f0948fc159810d4b5be35bf8c20875f64" - integrity sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ== - -"@types/keyv@*": - version "3.1.4" - resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" - integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== - dependencies: - "@types/node" "*" - "@types/node@*": version "18.0.6" resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.6.tgz#0ba49ac517ad69abe7a1508bc9b3a5483df9d5d7" @@ -445,49 +385,6 @@ dependencies: "@types/node" "*" -"@types/responselike@*", "@types/responselike@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.0.tgz#251f4fe7d154d2bad125abe1b429b23afd262e29" - integrity sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA== - dependencies: - "@types/node" "*" - -acorn-walk@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" - integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== - -acorn@^8.7.1: - version "8.8.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.0.tgz#88c0187620435c7f6015803f5539dae05a9dbea8" - integrity sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w== - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -aggregate-error@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-4.0.1.tgz#25091fe1573b9e0be892aeda15c7c66a545f758e" - integrity sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w== - dependencies: - clean-stack "^4.0.0" - indent-string "^5.0.0" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" @@ -495,164 +392,16 @@ ansi-styles@^3.2.1: dependencies: color-convert "^1.9.0" -ansi-styles@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^6.0.0, ansi-styles@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3" - integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== - -anymatch@~3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" - integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw== - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -arrgv@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/arrgv/-/arrgv-1.0.2.tgz#025ed55a6a433cad9b604f8112fc4292715a6ec0" - integrity sha512-a4eg4yhp7mmruZDQFqVMlxNRFGi/i1r87pt8SDHy0/I8PqSXoUTlWZRdAZo0VXgvEARcujbtTk8kiZRi1uDGRw== - -arrify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-3.0.0.tgz#ccdefb8eaf2a1d2ab0da1ca2ce53118759fd46bc" - integrity sha512-tLkvA81vQG/XqE2mjDkGQHoOINtMHtysSnemrmoGe6PydDPMRbVugqyk4A6V/WDWEfm3l+0d8anA9r8cv/5Jaw== - atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -ava@^4.2.0: - version "4.3.1" - resolved "https://registry.yarnpkg.com/ava/-/ava-4.3.1.tgz#376a788a5a863c39a9dd2dab9fcbbbcf94bf6c38" - integrity sha512-zdSp9QxRTmN5hJeGmg+ZjUKL5yHFLMcP/0KBla8GH25XD8Xm7Uc34CDFlwqGL6JXtjNbVkJ0Zw+DqcTf4ggCCA== - dependencies: - acorn "^8.7.1" - acorn-walk "^8.2.0" - ansi-styles "^6.1.0" - arrgv "^1.0.2" - arrify "^3.0.0" - callsites "^4.0.0" - cbor "^8.1.0" - chalk "^5.0.1" - chokidar "^3.5.3" - chunkd "^2.0.1" - ci-info "^3.3.1" - ci-parallel-vars "^1.0.1" - clean-yaml-object "^0.1.0" - cli-truncate "^3.1.0" - code-excerpt "^4.0.0" - common-path-prefix "^3.0.0" - concordance "^5.0.4" - currently-unhandled "^0.4.1" - debug "^4.3.4" - del "^6.1.1" - emittery "^0.11.0" - figures "^4.0.1" - globby "^13.1.1" - ignore-by-default "^2.1.0" - indent-string "^5.0.0" - is-error "^2.2.2" - is-plain-object "^5.0.0" - is-promise "^4.0.0" - matcher "^5.0.0" - mem "^9.0.2" - ms "^2.1.3" - p-event "^5.0.1" - p-map "^5.4.0" - picomatch "^2.3.1" - pkg-conf "^4.0.0" - plur "^5.1.0" - pretty-ms "^7.0.1" - resolve-cwd "^3.0.0" - slash "^3.0.0" - stack-utils "^2.0.5" - strip-ansi "^7.0.1" - supertap "^3.0.1" - temp-dir "^2.0.0" - write-file-atomic "^4.0.1" - yargs "^17.5.1" - balanced-match@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base-x@^3.0.2: - version "3.0.9" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" - integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== - dependencies: - safe-buffer "^5.0.1" - -base64url@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/base64url/-/base64url-3.0.1.tgz#6399d572e2bc3f90a9a8b22d5dbb0a32d33f788d" - integrity sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -blueimp-md5@^2.10.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/blueimp-md5/-/blueimp-md5-2.19.0.tgz#b53feea5498dcb53dc6ec4b823adb84b729c4af0" - integrity sha512-DRQrD6gJyy8FbiE4s+bDoXS9hiW3Vbx5uCdwvcCf3zLHL+Iv7LtGHLpr+GZV8rHG8tK766FGYBwRbu8pELTt+w== - -bn.js@5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" - integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== - -bn.js@^5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" - integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== - -borsh@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.5.0.tgz#d5eed021a34118908d672295819e3c9e44f692ce" - integrity sha512-p9w/qGBeeFdUf2GPBPHdX5JQyez8K5VtoFN7PqSfmR+cVUMSmcwAKhP9n2aXoDSKbtS7xZlZt3MVnrJL7GdYhg== - dependencies: - bn.js "^5.2.0" - bs58 "^4.0.0" - text-encoding-utf-8 "^1.0.2" - -borsh@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/borsh/-/borsh-0.6.0.tgz#a7c9eeca6a31ca9e0607cb49f329cb659eb791e1" - integrity sha512-sl5k89ViqsThXQpYa9XDtz1sBl3l1lI313cFUY1HKr+wvMILnb+58xpkqTNrYbelh99dY7K8usxoCusQmqix9Q== - dependencies: - bn.js "^5.2.0" - bs58 "^4.0.0" - text-encoding-utf-8 "^1.0.2" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -661,13 +410,6 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - browserslist@^4.20.2: version "4.21.2" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.2.tgz#59a400757465535954946a400b841ed37e2b4ecf" @@ -678,67 +420,17 @@ browserslist@^4.20.2: node-releases "^2.0.6" update-browserslist-db "^1.0.4" -bs58@^4.0.0, bs58@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" - integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== - dependencies: - base-x "^3.0.2" - builtin-modules@^3.0.0: version "3.3.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.3.0.tgz#cae62812b89801e9656336e46223e030386be7b6" integrity sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw== -cacheable-lookup@^5.0.3: - version "5.0.4" - resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" - integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== - -cacheable-request@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.2.tgz#ea0d0b889364a25854757301ca12b2da77f91d27" - integrity sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew== - dependencies: - clone-response "^1.0.2" - get-stream "^5.1.0" - http-cache-semantics "^4.0.0" - keyv "^4.0.0" - lowercase-keys "^2.0.0" - normalize-url "^6.0.1" - responselike "^2.0.0" - -call-bind@^1.0.0, call-bind@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -callsites@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-4.0.0.tgz#8014cea4fedfe681a30e2f7d2d557dd95808a92a" - integrity sha512-y3jRROutgpKdz5vzEhWM34TidDU8vkJppF8dszITeb1PQmSqV3DTxyV8G/lyO/DNvtE1YTedehmw9MPZsCBHxQ== - caniuse-lite@^1.0.30001366: version "1.0.30001368" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001368.tgz#c5c06381c6051cd863c45021475434e81936f713" integrity sha512-wgfRYa9DenEomLG/SdWgQxpIyvdtH3NW8Vq+tB6AwR9e56iOIcu1im5F/wNdDf04XlKHXqIx4N8Jo0PemeBenQ== -capability@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/capability/-/capability-0.2.5.tgz#51ad87353f1936ffd77f2f21c74633a4dea88801" - integrity sha512-rsJZYVCgXd08sPqwmaIqjAd5SUTfonV0z/gDJ8D6cN8wQphky1kkAYEqQ+hmDxTw7UihvBfjUVUSY+DBEe44jg== - -cbor@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" - integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== - dependencies: - nofilter "^3.1.0" - -chalk@^2.0.0, chalk@^2.3.2, chalk@^2.4.1: +chalk@^2.0.0, chalk@^2.3.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -747,94 +439,6 @@ chalk@^2.0.0, chalk@^2.3.2, chalk@^2.4.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.0.1.tgz#ca57d71e82bb534a296df63bbacc4a1c22b2a4b6" - integrity sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w== - -chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" - -chownr@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-2.0.0.tgz#15bfbe53d2eab4cf70f18a8cd68ebe5b3cb1dece" - integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ== - -chunkd@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/chunkd/-/chunkd-2.0.1.tgz#49cd1d7b06992dc4f7fccd962fe2a101ee7da920" - integrity sha512-7d58XsFmOq0j6el67Ug9mHf9ELUXsQXYJBkyxhH/k+6Ke0qXRnv0kbemx+Twc6fRJ07C49lcbdgm9FL1Ei/6SQ== - -ci-info@^3.3.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.3.2.tgz#6d2967ffa407466481c6c90b6e16b3098f080128" - integrity sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg== - -ci-parallel-vars@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ci-parallel-vars/-/ci-parallel-vars-1.0.1.tgz#e87ff0625ccf9d286985b29b4ada8485ca9ffbc2" - integrity sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -clean-stack@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-4.2.0.tgz#c464e4cde4ac789f4e0735c5d75beb49d7b30b31" - integrity sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg== - dependencies: - escape-string-regexp "5.0.0" - -clean-yaml-object@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz#63fb110dc2ce1a84dc21f6d9334876d010ae8b68" - integrity sha512-3yONmlN9CSAkzNwnRCiJQ7Q2xK5mWuEfL3PuTZcAUzhObbXsfsnMptJzXwz93nc5zn9V9TwCVMmV7w4xsm43dw== - -cli-truncate@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" - integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== - dependencies: - slice-ansi "^5.0.0" - string-width "^5.0.0" - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -clone-response@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" - integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== - dependencies: - mimic-response "^1.0.0" - -code-excerpt@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/code-excerpt/-/code-excerpt-4.0.0.tgz#2de7d46e98514385cb01f7b3b741320115f4c95e" - integrity sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA== - dependencies: - convert-to-spaces "^2.0.1" - color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -842,65 +446,26 @@ color-convert@^1.9.0: dependencies: color-name "1.1.3" -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - color-name@1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - commander@^9.4.1: version "9.4.1" resolved "https://registry.yarnpkg.com/commander/-/commander-9.4.1.tgz#d1dd8f2ce6faf93147295c0df13c7c21141cfbdd" integrity sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw== -common-path-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/common-path-prefix/-/common-path-prefix-3.0.0.tgz#7d007a7e07c58c4b4d5f433131a19141b29f11e0" - integrity sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w== - commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== -compress-brotli@^1.3.8: - version "1.3.8" - resolved "https://registry.yarnpkg.com/compress-brotli/-/compress-brotli-1.3.8.tgz#0c0a60c97a989145314ec381e84e26682e7b38db" - integrity sha512-lVcQsjhxhIXsuupfy9fmZUFtAIdBmXA7EGY6GBdgZ++qkM9zG4YFT8iU7FoBxzryNDMOpD1HIFHUSX4D87oqhQ== - dependencies: - "@types/json-buffer" "~3.0.0" - json-buffer "~3.0.1" - concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== -concordance@^5.0.4: - version "5.0.4" - resolved "https://registry.yarnpkg.com/concordance/-/concordance-5.0.4.tgz#9896073261adced72f88d60e4d56f8efc4bbbbd2" - integrity sha512-OAcsnTEYu1ARJqWVGwf4zh4JDfHZEaSNlNccFmt8YjB2l/n19/PF2viLINHc57vO4FKIAFl2FWASIGZZWZ2Kxw== - dependencies: - date-time "^3.1.0" - esutils "^2.0.3" - fast-diff "^1.2.0" - js-string-escape "^1.0.1" - lodash "^4.17.15" - md5-hex "^3.0.1" - semver "^7.3.2" - well-known-symbols "^2.0.0" - convert-source-map@^1.7.0: version "1.8.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.8.0.tgz#f3373c32d21b4d780dd8004514684fb791ca4369" @@ -908,37 +473,7 @@ convert-source-map@^1.7.0: dependencies: safe-buffer "~5.1.1" -convert-to-spaces@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz#61a6c98f8aa626c16b296b862a91412a33bceb6b" - integrity sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ== - -cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng== - dependencies: - array-find-index "^1.0.1" - -date-time@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/date-time/-/date-time-3.1.0.tgz#0d1e934d170579f481ed8df1e2b8ff70ee845e1e" - integrity sha512-uqCUKXE5q1PNBXjPqvwhwJf9SwMoAHBgWJ6DcrnS5o+W2JOiIILl0JEdVD8SGujrNS02GGxgwAg2PN2zONgtjg== - dependencies: - time-zone "^1.0.0" - -debug@^4.1.0, debug@^4.3.4: +debug@^4.1.0: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -950,94 +485,16 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== -decompress-response@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" - integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== - dependencies: - mimic-response "^3.1.0" - deepmerge@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== -defer-to-connect@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" - integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== - -define-properties@^1.1.3, define-properties@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.4.tgz#0b14d7bd7fbeb2f3572c3a7eda80ea5d57fb05b1" - integrity sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA== - dependencies: - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -del@^6.1.1: - version "6.1.1" - resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" - integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== - dependencies: - globby "^11.0.1" - graceful-fs "^4.2.4" - is-glob "^4.0.1" - is-path-cwd "^2.2.0" - is-path-inside "^3.0.2" - p-map "^4.0.0" - rimraf "^3.0.2" - slash "^3.0.0" - -depd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" - integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - electron-to-chromium@^1.4.188: version "1.4.198" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.198.tgz#36a8e7871046f7f94c01dc0133912fd5cf226c6a" integrity sha512-jwqQPdKGeAslcq8L+1SZZgL6uDiIDmTe9Gq4brsdWAH27y7MJ2g9Ue6MyST3ogmSM49EAQP7bype1V5hsuNrmQ== -emittery@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.11.0.tgz#eb5f756a200d3431de2c6e850cb2d8afd97a03b9" - integrity sha512-S/7tzL6v5i+4iJd627Nhv9cLFIo5weAIlGccqJFpnBoDB8U1TF2k5tez4J/QNuxyyhWuFqHg1L84Kd3m7iXg6g== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" @@ -1045,79 +502,16 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -error-polyfill@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/error-polyfill/-/error-polyfill-0.1.3.tgz#df848b61ad8834f7a5db69a70b9913df86721d15" - integrity sha512-XHJk60ufE+TG/ydwp4lilOog549iiQF2OAPhkk9DdiYWMrltz5yhDz/xnKuenNwP7gy3dsibssO5QpVhkrSzzg== - dependencies: - capability "^0.2.5" - o3 "^1.0.3" - u3 "^0.1.1" - -es-abstract@^1.19.0, es-abstract@^1.19.1, es-abstract@^1.19.5: - version "1.20.4" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.20.4.tgz#1d103f9f8d78d4cf0713edcd6d0ed1a46eed5861" - integrity sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA== - dependencies: - call-bind "^1.0.2" - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.1.3" - get-symbol-description "^1.0.0" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-symbols "^1.0.3" - internal-slot "^1.0.3" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-weakref "^1.0.2" - object-inspect "^1.12.2" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - safe-regex-test "^1.0.0" - string.prototype.trimend "^1.0.5" - string.prototype.trimstart "^1.0.5" - unbox-primitive "^1.0.2" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== -escape-string-regexp@5.0.0, escape-string-regexp@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" - integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== - escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -esprima@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - estree-walker@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" @@ -1128,34 +522,6 @@ estree-walker@^2.0.1: resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== -esutils@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -fast-diff@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.2.0.tgz#73ee11982d86caaf7959828d519cfe927fac5f03" - integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== - -fast-glob@^3.2.11, fast-glob@^3.2.9: - version "3.2.11" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9" - integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== - dependencies: - reusify "^1.0.4" - figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" @@ -1163,21 +529,6 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -figures@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/figures/-/figures-4.0.1.tgz#27b26609907bc888b3e3b0ef5403643f80aa2518" - integrity sha512-rElJwkA/xS04Vfg+CaZodpso7VqBknOYbzi6I76hI4X80RUjkSxO2oAyPmGbuXUppywjqndOrQDl817hDnI++w== - dependencies: - escape-string-regexp "^5.0.0" - is-unicode-supported "^1.2.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - find-up@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" @@ -1185,30 +536,6 @@ find-up@^2.0.0: dependencies: locate-path "^2.0.0" -find-up@^6.0.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-6.3.0.tgz#2abab3d3280b2dc7ac10199ef324c4e002c8c790" - integrity sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw== - dependencies: - locate-path "^7.1.0" - path-exists "^5.0.0" - -fs-extra@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs-minipass@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" - integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== - dependencies: - minipass "^3.0.0" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -1224,63 +551,12 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - -functions-have-names@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.3.tgz#063c84329ad93e83893c7f4f243ef63ffa351385" - integrity sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.3" - -get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@^7.1.3, glob@^7.1.6: +glob@^7.1.6: version "7.2.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== @@ -1297,80 +573,16 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globby@^11.0.1: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -globby@^13.1.1: - version "13.1.2" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.2.tgz#29047105582427ab6eca4f905200667b056da515" - integrity sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ== - dependencies: - dir-glob "^3.0.1" - fast-glob "^3.2.11" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^4.0.0" - -got@^11.8.2: - version "11.8.5" - resolved "https://registry.yarnpkg.com/got/-/got-11.8.5.tgz#ce77d045136de56e8f024bebb82ea349bc730046" - integrity sha512-o0Je4NvQObAuZPHLFoRSkdG2lTgtcynqymzg2Vupdx6PorhaT5MCbIyXG6d4D94kk8ZG57QeosgdiqfJWhEhlQ== - dependencies: - "@sindresorhus/is" "^4.0.0" - "@szmarczak/http-timer" "^4.0.5" - "@types/cacheable-request" "^6.0.1" - "@types/responselike" "^1.0.0" - cacheable-lookup "^5.0.3" - cacheable-request "^7.0.2" - decompress-response "^6.0.0" - http2-wrapper "^1.0.0-beta.5.2" - lowercase-keys "^2.0.0" - p-cancelable "^2.0.0" - responselike "^2.0.0" - -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: +graceful-fs@^4.1.2: version "4.2.10" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== -has-property-descriptors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" - integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== - dependencies: - get-intrinsic "^1.1.1" - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - has@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" @@ -1378,60 +590,6 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" -hosted-git-info@^2.1.4: - version "2.8.9" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" - integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== - -http-cache-semantics@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" - integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== - -http-errors@^1.7.2: - version "1.8.1" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" - integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.2.0" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.1" - -http2-wrapper@^1.0.0-beta.5.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" - integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== - dependencies: - quick-lru "^5.1.1" - resolve-alpn "^1.0.0" - -ignore-by-default@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-2.1.0.tgz#c0e0de1a99b6065bdc93315a6f728867981464db" - integrity sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw== - -ignore@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a" - integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ== - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -indent-string@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-5.0.0.tgz#4fd2980fccaf8622d14c64d694f4cf33c81951a5" - integrity sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg== - inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" @@ -1440,52 +598,16 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4: +inherits@2: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -internal-slot@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" - integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== - dependencies: - get-intrinsic "^1.1.0" - has "^1.0.3" - side-channel "^1.0.4" - -irregular-plurals@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/irregular-plurals/-/irregular-plurals-3.3.0.tgz#67d0715d4361a60d9fd9ee80af3881c631a31ee2" - integrity sha512-MVBLKUTangM3EfRPFROhmWQQKRDsrgI83J8GS3jXy+OwYqiR2/aoWndYQ5416jLE3uaGgLH7ncme3X9y09gZ3g== - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - is-builtin-module@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.1.0.tgz#6fdb24313b1c03b75f8b9711c0feb8c30b903b00" @@ -1493,11 +615,6 @@ is-builtin-module@^3.1.0: dependencies: builtin-modules "^3.0.0" -is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - is-core-module@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" @@ -1505,82 +622,11 @@ is-core-module@^2.9.0: dependencies: has "^1.0.3" -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-error@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/is-error/-/is-error-2.2.2.tgz#c10ade187b3c93510c5470a5567833ee25649843" - integrity sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-fullwidth-code-point@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" - integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== - -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" integrity sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g== -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-path-cwd@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" - integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== - -is-path-inside@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-promise@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" - integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== - is-reference@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" @@ -1588,85 +634,16 @@ is-reference@^1.2.1: dependencies: "@types/estree" "*" -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-unicode-supported@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.2.0.tgz#f4f54f34d8ebc84a46b93559a036763b6d3e1014" - integrity sha512-wH+U77omcRzevfIG8dDhTS0V9zZyweakfD01FULl97+0EHiJTTZtJqxPSkIIo/SDPv/i07k/C9jAPY+jwLLeUQ== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -js-sha256@^0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/js-sha256/-/js-sha256-0.9.0.tgz#0b89ac166583e91ef9123644bd3c5334ce9d0966" - integrity sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA== - -js-string-escape@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/js-string-escape/-/js-string-escape-1.0.1.tgz#e2625badbc0d67c7533e9edc1068c587ae4137ef" - integrity sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg== - js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.14.1: - version "3.14.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" - integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== -json-buffer@3.0.1, json-buffer@~3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" - integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== - json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -1677,23 +654,6 @@ json5@^2.2.1: resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.1.tgz#655d50ed1e6f95ad1a3caababd2b0efda10b395c" integrity sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA== -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -keyv@^4.0.0: - version "4.3.3" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.3.3.tgz#6c1bcda6353a9e96fc1b4e1aeb803a6e35090ba9" - integrity sha512-AcysI17RvakTh8ir03+a3zJr5r0ovnAH/XTXei/4HIv3bL2K/jzvgivLK9UuI/JbU1aJjM3NSAnVvVVd3n+4DQ== - dependencies: - compress-brotli "^1.3.8" - json-buffer "3.0.1" - load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" @@ -1704,11 +664,6 @@ load-json-file@^4.0.0: pify "^3.0.0" strip-bom "^3.0.0" -load-json-file@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-7.0.1.tgz#a3c9fde6beffb6bedb5acf104fad6bb1604e1b00" - integrity sha512-Gnxj3ev3mB5TkVBGad0JM6dmLiQL+o0t23JPBZ9sd+yvSLk05mFoqKBw5N8gbbkU4TNXyqCgIrl/VM17OgUIgQ== - locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -1717,35 +672,11 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" -locate-path@^7.1.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-7.1.1.tgz#8e1e5a75c7343770cef02ff93c4bf1f0aa666374" - integrity sha512-vJXaRMJgRVD3+cUZs3Mncj2mxpt5mP0EmNOsxRSZRMlbqjvxzDEOIUWXGmavo0ZC9+tNZCBLQ66reA11nbpHZg== - dependencies: - p-locate "^6.0.0" - lodash-es@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== -lodash@^4.17.15: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -lowercase-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" - integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - magic-string@^0.25.7: version "0.25.9" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" @@ -1753,137 +684,20 @@ magic-string@^0.25.7: dependencies: sourcemap-codec "^1.4.8" -map-age-cleaner@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - -matcher@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/matcher/-/matcher-5.0.0.tgz#cd82f1c7ae7ee472a9eeaf8ec7cac45e0fe0da62" - integrity sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw== - dependencies: - escape-string-regexp "^5.0.0" - -md5-hex@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-3.0.1.tgz#be3741b510591434b2784d79e556eefc2c9a8e5c" - integrity sha512-BUiRtTtV39LIJwinWBjqVsU9xhdnz7/i889V859IBFpuqGAj6LuOvHv5XLbgZ2R7ptJoJaEcxkv88/h25T7Ciw== - dependencies: - blueimp-md5 "^2.10.0" - -mem@^9.0.2: - version "9.0.2" - resolved "https://registry.yarnpkg.com/mem/-/mem-9.0.2.tgz#bbc2d40be045afe30749681e8f5d554cee0c0354" - integrity sha512-F2t4YIv9XQUBHt6AOJ0y7lSmP1+cY7Fm1DRh9GClTGzKST7UWLMx6ly9WZdLH/G/ppM5RL4MlQfRT71ri9t19A== - dependencies: - map-age-cleaner "^0.1.3" - mimic-fn "^4.0.0" - -memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mimic-fn@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" - integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== - -mimic-response@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" - integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== - -mimic-response@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" - integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== - -minimatch@^3.0.4, minimatch@^3.1.1: +minimatch@^3.1.1: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" -minipass@^3.0.0: - version "3.3.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.3.4.tgz#ca99f95dd77c43c7a76bf51e6d200025eee0ffae" - integrity sha512-I9WPbWHCGu8W+6k1ZiGpPu0GkoKBeorkfKNuAFBNS1HNFJvke82sxvI5bzcCNpWPorkOO5QQ+zomzzwRxejXiw== - dependencies: - yallist "^4.0.0" - -minizlib@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.2.tgz#e90d3466ba209b932451508a11ce3d3632145931" - integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg== - dependencies: - minipass "^3.0.0" - yallist "^4.0.0" - -mkdirp@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - ms@2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -mustache@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/mustache/-/mustache-4.2.0.tgz#e5892324d60a12ec9c2a73359edca52972bf6f64" - integrity sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ== - -near-api-js@^0.44.1: - version "0.44.2" - resolved "https://registry.yarnpkg.com/near-api-js/-/near-api-js-0.44.2.tgz#e451f68f2c56bd885c7b918db5818a3e6e9423d0" - integrity sha512-eMnc4V+geggapEUa3nU2p8HSHn/njtloI4P2mceHQWO8vDE1NGpnAw8FuTBrLmXSgIv9m6oocgFc9t3VNf5zwg== - dependencies: - bn.js "5.2.0" - borsh "^0.6.0" - bs58 "^4.0.0" - depd "^2.0.0" - error-polyfill "^0.1.3" - http-errors "^1.7.2" - js-sha256 "^0.9.0" - mustache "^4.0.0" - node-fetch "^2.6.1" - text-encoding-utf-8 "^1.0.2" - tweetnacl "^1.0.1" - -near-sandbox@^0.0.13: - version "0.0.13" - resolved "https://registry.yarnpkg.com/near-sandbox/-/near-sandbox-0.0.13.tgz#139b70708ccefcdf2dd406710f6615590d1880e5" - integrity sha512-rtRn51BBD1oT9SeGAIInKVedfaS/i4VqKqznZIvFddWo0jcI4lMoK1yHuTVuEE7YfEE12NsspFG1GxN1SlPV2g== - dependencies: - got "^11.8.2" - tar "^6.1.0" - "near-sdk-js@file:..": - version "0.5.0-1" + version "0.6.0" dependencies: "@babel/core" "^7.17.5" "@babel/plugin-proposal-decorators" "^7.17.2" @@ -1897,147 +711,18 @@ near-sandbox@^0.0.13: rollup-plugin-sourcemaps "^0.6.3" signale "^1.4.0" -near-units@^0.1.9: - version "0.1.9" - resolved "https://registry.yarnpkg.com/near-units/-/near-units-0.1.9.tgz#4bf07da0b046e08e0b8785ad8e32d4df3a944b93" - integrity sha512-xiuBjpNsi+ywiu7P6iWRZdgFm7iCr/cfWlVO6+e5uaAqH4mE1rrurElyrL91llNDSnMwogd9XmlZOw5KbbHNsA== - dependencies: - bn.js "^5.2.0" - -near-workspaces@3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/near-workspaces/-/near-workspaces-3.2.1.tgz#38c33474ece5898323f10cff7c75f771bb5a991a" - integrity sha512-761D8lsbSetS+Nu9C4IWdONn0gBSVpfjY8V09AOQt1Zb5XjtURFWpFTZun6vQJhvWv5+RsSNTF6uYsLyTLJBAA== - dependencies: - base64url "^3.0.1" - bn.js "^5.2.0" - borsh "^0.5.0" - bs58 "^4.0.1" - callsites "^4.0.0" - fs-extra "^10.0.0" - js-sha256 "^0.9.0" - near-api-js "^0.44.1" - near-sandbox "^0.0.13" - near-units "^0.1.9" - node-port-check "^2.0.1" - promisify-child-process "^4.1.1" - pure-uuid "^1.6.2" - rimraf "^3.0.2" - temp-dir "^2.0.0" - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -node-fetch@^2.6.1: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== - dependencies: - whatwg-url "^5.0.0" - -node-port-check@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/node-port-check/-/node-port-check-2.0.1.tgz#72cae367d3ca906b0903b261ce818c297aade11f" - integrity sha512-PV1tj5OPbWwxvhPcChXxwCIKl/IfVEdPP4u/gQz2lao/VGoeIUXb/4U72KSHLZpTVBmgTnMm0me7yR0wUsIuPg== - node-releases@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.6.tgz#8a7088c63a55e493845683ebf3c828d8c51c5503" integrity sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg== -nofilter@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" - integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== - -normalize-package-data@^2.3.2: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-url@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" - integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== - -npm-run-all@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" - integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== - dependencies: - ansi-styles "^3.2.1" - chalk "^2.4.1" - cross-spawn "^6.0.5" - memorystream "^0.3.1" - minimatch "^3.0.4" - pidtree "^0.3.0" - read-pkg "^3.0.0" - shell-quote "^1.6.1" - string.prototype.padend "^3.0.0" - -o3@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/o3/-/o3-1.0.3.tgz#192ce877a882dfa6751f0412a865fafb2da1dac0" - integrity sha512-f+4n+vC6s4ysy7YO7O2gslWZBUu8Qj2i2OUJOvjRxQva7jVjYjB29jrr9NCjmxZQR0gzrOcv1RnqoYOeMs5VRQ== - dependencies: - capability "^0.2.5" - -object-inspect@^1.12.2, object-inspect@^1.9.0: - version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" - integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.4: - version "4.1.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" - integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: +once@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" -p-cancelable@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" - integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== - -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw== - -p-event@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/p-event/-/p-event-5.0.1.tgz#614624ec02ae7f4f13d09a721c90586184af5b0c" - integrity sha512-dd589iCQ7m1L0bmC5NLlVYfy3TbBEsMUfWx9PyAgPeIcFZ/E2yaTZ4Rz4MiBmmJShviiftHVXOqfnfzJ6kyMrQ== - dependencies: - p-timeout "^5.0.2" - p-limit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" @@ -2045,13 +730,6 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-4.0.0.tgz#914af6544ed32bfa54670b061cafcbd04984b644" - integrity sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ== - dependencies: - yocto-queue "^1.0.0" - p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" @@ -2059,32 +737,6 @@ p-locate@^2.0.0: dependencies: p-limit "^1.1.0" -p-locate@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-6.0.0.tgz#3da9a49d4934b901089dca3302fa65dc5a05c04f" - integrity sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw== - dependencies: - p-limit "^4.0.0" - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -p-map@^5.4.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-5.5.0.tgz#054ca8ca778dfa4cf3f8db6638ccb5b937266715" - integrity sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg== - dependencies: - aggregate-error "^4.0.0" - -p-timeout@^5.0.2: - version "5.1.0" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-5.1.0.tgz#b3c691cf4415138ce2d9cfe071dba11f0fee085b" - integrity sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew== - p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" @@ -2098,63 +750,31 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-ms@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-2.1.0.tgz#348565a753d4391fa524029956b172cb7753097d" - integrity sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA== - path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== -path-exists@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-5.0.0.tgz#a6aad9489200b21fab31e49cf09277e5116fb9e7" - integrity sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ== - path-is-absolute@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== -path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== - path-parse@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.2, picomatch@^2.3.1: +picomatch@^2.2.2: version "2.3.1" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== -pidtree@^0.3.0: - version "0.3.1" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a" - integrity sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA== - pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" @@ -2168,104 +788,7 @@ pkg-conf@^2.1.0: find-up "^2.0.0" load-json-file "^4.0.0" -pkg-conf@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-4.0.0.tgz#63ace00cbacfa94c2226aee133800802d3e3b80c" - integrity sha512-7dmgi4UY4qk+4mj5Cd8v/GExPo0K+SlY+hulOSdfZ/T6jVH6//y7NtzZo5WrfhDBxuQ0jCa7fLZmNaNh7EWL/w== - dependencies: - find-up "^6.0.0" - load-json-file "^7.0.0" - -plur@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/plur/-/plur-5.1.0.tgz#bff58c9f557b9061d60d8ebf93959cf4b08594ae" - integrity sha512-VP/72JeXqak2KiOzjgKtQen5y3IZHn+9GOuLDafPv0eXa47xq0At93XahYBs26MsifCQ4enGKwbjBTKgb9QJXg== - dependencies: - irregular-plurals "^3.3.0" - -pretty-ms@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-7.0.1.tgz#7d903eaab281f7d8e03c66f867e239dc32fb73e8" - integrity sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q== - dependencies: - parse-ms "^2.1.0" - -promisify-child-process@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/promisify-child-process/-/promisify-child-process-4.1.1.tgz#290659e079f9c7bd46708404d4488a1a6b802686" - integrity sha512-/sRjHZwoXf1rJ+8s4oWjYjGRVKNK1DUnqfRC1Zek18pl0cN6k3yJ1cCbqd0tWNe4h0Gr+SY4vR42N33+T82WkA== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pure-uuid@^1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/pure-uuid/-/pure-uuid-1.6.2.tgz#64f3032d54953b93b0585be3263a2629f1d60a04" - integrity sha512-WQ4xz74ApW6s0BToRuuyuMo9g0VHx1HljY0H2gPng+mqqz/K1yLj7sHZonZZQ2++WfHl/ZzruilWvuz+WtmxjQ== - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quick-lru@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" - integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" - -regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -resolve-alpn@^1.0.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" - integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== - -resolve-cwd@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" - integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== - dependencies: - resolve-from "^5.0.0" - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve@^1.10.0, resolve@^1.17.0, resolve@^1.19.0: +resolve@^1.17.0, resolve@^1.19.0: version "1.22.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== @@ -2274,25 +797,6 @@ resolve@^1.10.0, resolve@^1.17.0, resolve@^1.19.0: path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -responselike@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" - integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== - dependencies: - lowercase-keys "^2.0.0" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rimraf@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - rollup-plugin-sourcemaps@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz#bf93913ffe056e414419607f1d02780d7ece84ed" @@ -2308,92 +812,16 @@ rollup@^2.61.1: optionalDependencies: fsevents "~2.3.2" -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-buffer@^5.0.1: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" - -"semver@2 || 3 || 4 || 5", semver@^5.5.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@^7.3.2: - version "7.3.7" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.7.tgz#12c5b649afdbf9049707796e22a4028814ce523f" - integrity sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g== - dependencies: - lru-cache "^6.0.0" - -serialize-error@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18" - integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== - dependencies: - type-fest "^0.13.1" - -setprototypeof@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" - integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== - dependencies: - shebang-regex "^1.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== - -shell-quote@^1.6.1: - version "1.7.4" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.4.tgz#33fe15dee71ab2a81fcbd3a52106c5cfb9fb75d8" - integrity sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw== - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - signale@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/signale/-/signale-1.4.0.tgz#c4be58302fb0262ac00fc3d886a7c113759042f1" @@ -2403,24 +831,6 @@ signale@^1.4.0: figures "^2.0.0" pkg-conf "^2.1.0" -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slash@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" - integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== - -slice-ansi@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" - integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== - dependencies: - ansi-styles "^6.0.0" - is-fullwidth-code-point "^4.0.0" - source-map-resolve@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" @@ -2434,123 +844,11 @@ sourcemap-codec@^1.4.8: resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== -spdx-correct@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" - integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.12" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.12.tgz#69077835abe2710b65f03969898b6637b505a779" - integrity sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA== - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== - -stack-utils@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.5.tgz#d25265fca995154659dbbfba3b49254778d2fdd5" - integrity sha512-xrQcmYhOsn/1kX+Vraq+7j4oE2j/6BFscZ0etmYg81xuM8Gq0022Pxb8+IqgOFUIaxHs0KaSb7T1+OegiNrNFA== - dependencies: - escape-string-regexp "^2.0.0" - -"statuses@>= 1.5.0 < 2": - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -string.prototype.padend@^3.0.0: - version "3.1.3" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz#997a6de12c92c7cb34dc8a201a6c53d9bd88a5f1" - integrity sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.1" - -string.prototype.trimend@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.5.tgz#914a65baaab25fbdd4ee291ca7dde57e869cb8d0" - integrity sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - -string.prototype.trimstart@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.5.tgz#5466d93ba58cfa2134839f81d7f42437e8c01fef" - integrity sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.19.5" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== - dependencies: - ansi-regex "^6.0.1" - strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== -supertap@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/supertap/-/supertap-3.0.1.tgz#aa89e4522104402c6e8fe470a7d2db6dc4037c6a" - integrity sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw== - dependencies: - indent-string "^5.0.0" - js-yaml "^3.14.1" - serialize-error "^7.0.1" - strip-ansi "^7.0.1" - supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -2563,90 +861,16 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -tar@^6.1.0: - version "6.1.11" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.11.tgz#6760a38f003afa1b2ffd0ffe9e9abbd0eab3d621" - integrity sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^3.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -temp-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-2.0.0.tgz#bde92b05bdfeb1516e804c9c00ad45177f31321e" - integrity sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg== - -text-encoding-utf-8@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz#585b62197b0ae437e3c7b5d0af27ac1021e10d13" - integrity sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg== - -time-zone@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/time-zone/-/time-zone-1.0.0.tgz#99c5bf55958966af6d06d83bdf3800dc82faec5d" - integrity sha512-TIsDdtKo6+XrPtiTm1ssmMngN1sAhyKnTO2kunQWqNPWIVvCm15Wmw4SWInwTVgJ5u/Tr04+8Ei9TNcw4x4ONA== - to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -toidentifier@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" - integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -tweetnacl@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" - integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== - -type-fest@^0.13.1: - version "0.13.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" - integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== - typescript@^4.7.4: version "4.7.4" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== -u3@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/u3/-/u3-0.1.1.tgz#5f52044f42ee76cd8de33148829e14528494b73b" - integrity sha512-+J5D5ir763y+Am/QY6hXNRlwljIeRMZMGs0cT6qqZVVzzT3X3nFPXVyPOFRMOR4kupB0T8JnCdpWdp6Q/iXn3w== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - update-browserslist-db@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz#be06a5eedd62f107b7c19eb5bcefb194411abf38" @@ -2655,101 +879,7 @@ update-browserslist-db@^1.0.4: escalade "^3.1.1" picocolors "^1.0.0" -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -well-known-symbols@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/well-known-symbols/-/well-known-symbols-2.0.0.tgz#e9c7c07dbd132b7b84212c8174391ec1f9871ba5" - integrity sha512-ZMjC3ho+KXo0BfJb7JgtQ5IBuvnShdlACNkKkdsqBmYw3bPAaJfPeYUo6tLUaT5tG/Gkh7xkpBhKRQ9e7pyg9Q== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which@^1.2.9: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -write-file-atomic@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.1.tgz#9faa33a964c1c85ff6f849b80b42a88c2c537c8f" - integrity sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ== - dependencies: - imurmurhash "^0.1.4" - signal-exit "^3.0.7" - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yargs-parser@^21.0.0: - version "21.0.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.0.1.tgz#0267f286c877a4f0f728fceb6f8a3e4cb95c6e35" - integrity sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg== - -yargs@^17.5.1: - version "17.5.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e" - integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.0.0" - -yocto-queue@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" - integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== From 36708b24cb3b2694d034c703803128089ef2b2b9 Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Fri, 4 Nov 2022 20:27:05 +0800 Subject: [PATCH 42/44] Address Serhii's comments --- .gitattributes | 4 +++- near-contract-standards/lib/event.d.ts | 6 +++--- .../approval/approval_receiver.d.ts | 2 +- .../lib/non_fungible_token/core/receiver.d.ts | 2 +- .../lib/non_fungible_token/core/resolver.d.ts | 2 +- .../lib/non_fungible_token/events.d.ts | 16 ++++++++-------- .../lib/non_fungible_token/events.js | 16 ++++++++-------- .../lib/non_fungible_token/impl.d.ts | 2 +- .../lib/non_fungible_token/impl.js | 2 +- .../lib/non_fungible_token/utils.d.ts | 8 ++++---- near-contract-standards/src/event.ts | 6 +++--- .../approval/approval_receiver.ts | 2 +- .../src/non_fungible_token/core/receiver.ts | 2 +- .../src/non_fungible_token/core/resolver.ts | 2 +- .../src/non_fungible_token/events.ts | 16 ++++++++-------- .../src/non_fungible_token/impl.ts | 2 +- .../src/non_fungible_token/utils.ts | 10 +++++----- 17 files changed, 51 insertions(+), 49 deletions(-) diff --git a/.gitattributes b/.gitattributes index bc987806..21d24bd3 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,5 @@ yarn.lock linguist-generated=true -diff lib/**/*.js linguist-generated=true -diff -lib/**/*.d.ts linguist-generated=true -diff \ No newline at end of file +lib/**/*.d.ts linguist-generated=true -diff +near-contract-standards/lib/**/*.js linguist-generated=true -diff +near-contract-standards/lib/**/*.d.ts linguist-generated=true -diff diff --git a/near-contract-standards/lib/event.d.ts b/near-contract-standards/lib/event.d.ts index 7d601fa4..1c0d4343 100644 --- a/near-contract-standards/lib/event.d.ts +++ b/near-contract-standards/lib/event.d.ts @@ -1,6 +1,6 @@ -export declare class NearEvent { - internal_to_json_string(): string; - internal_to_json_event_string(): string; +export declare abstract class NearEvent { + private internal_to_json_string; + private internal_to_json_event_string; /** * Logs the event to the host. This is required to ensure that the event is triggered * and to consume the event. diff --git a/near-contract-standards/lib/non_fungible_token/approval/approval_receiver.d.ts b/near-contract-standards/lib/non_fungible_token/approval/approval_receiver.d.ts index 3f608d4c..324ccc1a 100644 --- a/near-contract-standards/lib/non_fungible_token/approval/approval_receiver.d.ts +++ b/near-contract-standards/lib/non_fungible_token/approval/approval_receiver.d.ts @@ -1,7 +1,7 @@ import { PromiseOrValue } from "near-sdk-js/lib"; import { AccountId } from "near-sdk-js/lib/types"; import { TokenId } from "../token"; -/** Approval receiver is the trait for the method called (or attempted to be called) when an NFT contract adds an approval for an account. */ +/** Approval receiver is the interface for the method called (or attempted to be called) when an NFT contract adds an approval for an account. */ export interface NonFungibleTokenApprovalReceiver { /** Respond to notification that contract has been granted approval for a token. * diff --git a/near-contract-standards/lib/non_fungible_token/core/receiver.d.ts b/near-contract-standards/lib/non_fungible_token/core/receiver.d.ts index 4ff96afc..5c1fab05 100644 --- a/near-contract-standards/lib/non_fungible_token/core/receiver.d.ts +++ b/near-contract-standards/lib/non_fungible_token/core/receiver.d.ts @@ -1,7 +1,7 @@ import { PromiseOrValue } from "near-sdk-js/lib"; import { AccountId } from "near-sdk-js/lib/types"; import { TokenId } from "../token"; -/** Used when an NFT is transferred using `nft_transfer_call`. This trait is implemented on the receiving contract, not on the NFT contract. */ +/** Used when an NFT is transferred using `nft_transfer_call`. This interface is implemented on the receiving contract, not on the NFT contract. */ export interface NonFungibleTokenReceiver { /** Take some action after receiving a non-fungible token * diff --git a/near-contract-standards/lib/non_fungible_token/core/resolver.d.ts b/near-contract-standards/lib/non_fungible_token/core/resolver.d.ts index 155aad55..9d27310c 100644 --- a/near-contract-standards/lib/non_fungible_token/core/resolver.d.ts +++ b/near-contract-standards/lib/non_fungible_token/core/resolver.d.ts @@ -1,7 +1,7 @@ import { AccountId } from "../../../../lib/types"; import { TokenId } from "../token"; import { Option } from "../utils"; -/** Used when an NFT is transferred using `nft_transfer_call`. This is the method that's called after `nft_on_transfer`. This trait is implemented on the NFT contract. */ +/** Used when an NFT is transferred using `nft_transfer_call`. This is the method that's called after `nft_on_transfer`. This interface is implemented on the NFT contract. */ export interface NonFungibleTokenResolver { /** Finalize an `nft_transfer_call` chain of cross-contract calls. * diff --git a/near-contract-standards/lib/non_fungible_token/events.d.ts b/near-contract-standards/lib/non_fungible_token/events.d.ts index d1bc03dd..715f9140 100644 --- a/near-contract-standards/lib/non_fungible_token/events.d.ts +++ b/near-contract-standards/lib/non_fungible_token/events.d.ts @@ -10,8 +10,8 @@ * The three events in this standard are [`NftMint`], [`NftTransfer`], and [`NftBurn`]. * * These events can be logged by calling `.emit()` on them if a single event, or calling - * [`NftMint::emit_many`], [`NftTransfer::emit_many`], - * or [`NftBurn::emit_many`] respectively. + * [`NftMint.emit_many`], [`NftTransfer.emit_many`], + * or [`NftBurn.emit_many`] respectively. */ import { NearEvent } from "../event"; import { Option } from "./utils"; @@ -21,7 +21,7 @@ export declare class Nep171Event extends NearEvent { event_kind: Nep171EventKind; constructor(version: string, event_kind: Nep171EventKind); } -/** Data to log for an NFT mint event. To log this event, call [`.emit()`](NftMint::emit). */ +/** Data to log for an NFT mint event. To log this event, call `.emit()` */ export declare class NftMint { owner_id: string; token_ids: string[]; @@ -30,12 +30,12 @@ export declare class NftMint { /** Logs the event to the host. This is required to ensure that the event is triggered * and to consume the event. */ emit(): void; - /** Emits an nft mint event, through [`env::log_str`](near_sdk::env::log_str), + /** Emits an nft mint event, through `near.log`, * where each [`NftMint`] represents the data of each mint. */ static emit_many(data: NftMint[]): void; } /** Data to log for an NFT transfer event. To log this event, - * call [`.emit()`](NftTransfer::emit). */ + * call [`.emit()`](NftTransfer.emit). */ export declare class NftTransfer { old_owner_id: string; new_owner_id: string; @@ -46,11 +46,11 @@ export declare class NftTransfer { /** Logs the event to the host. This is required to ensure that the event is triggered * and to consume the event. */ emit(): void; - /** Emits an nft transfer event, through [`env::log_str`](near_sdk::env::log_str), + /** Emits an nft transfer event, through `near.log`, * where each [`NftTransfer`] represents the data of each transfer. */ static emit_many(data: NftTransfer[]): void; } -/** Data to log for an NFT burn event. To log this event, call [`.emit()`](NftBurn::emit). */ +/** Data to log for an NFT burn event. To log this event, call [`.emit()`](NftBurn.emit). */ export declare class NftBurn { owner_id: string; token_ids: string[]; @@ -59,7 +59,7 @@ export declare class NftBurn { /** Logs the event to the host. This is required to ensure that the event is triggered * and to consume the event. */ emit(): void; - /** Emits an nft burn event, through [`env::log_str`](near_sdk::env::log_str), + /** Emits an nft burn event, through `near.log`, * where each [`NftBurn`] represents the data of each burn. */ static emit_many(data: NftBurn[]): void; } diff --git a/near-contract-standards/lib/non_fungible_token/events.js b/near-contract-standards/lib/non_fungible_token/events.js index a9d60807..d006306c 100644 --- a/near-contract-standards/lib/non_fungible_token/events.js +++ b/near-contract-standards/lib/non_fungible_token/events.js @@ -10,8 +10,8 @@ * The three events in this standard are [`NftMint`], [`NftTransfer`], and [`NftBurn`]. * * These events can be logged by calling `.emit()` on them if a single event, or calling - * [`NftMint::emit_many`], [`NftTransfer::emit_many`], - * or [`NftBurn::emit_many`] respectively. + * [`NftMint.emit_many`], [`NftTransfer.emit_many`], + * or [`NftBurn.emit_many`] respectively. */ import { NearEvent } from "../event"; export class Nep171Event extends NearEvent { @@ -21,7 +21,7 @@ export class Nep171Event extends NearEvent { this.event_kind = event_kind; } } -/** Data to log for an NFT mint event. To log this event, call [`.emit()`](NftMint::emit). */ +/** Data to log for an NFT mint event. To log this event, call `.emit()` */ export class NftMint { constructor(owner_id, token_ids, memo) { this.owner_id = owner_id; @@ -33,14 +33,14 @@ export class NftMint { emit() { NftMint.emit_many([this]); } - /** Emits an nft mint event, through [`env::log_str`](near_sdk::env::log_str), + /** Emits an nft mint event, through `near.log`, * where each [`NftMint`] represents the data of each mint. */ static emit_many(data) { new_171_v1(data).emit(); } } /** Data to log for an NFT transfer event. To log this event, - * call [`.emit()`](NftTransfer::emit). */ + * call [`.emit()`](NftTransfer.emit). */ export class NftTransfer { constructor(old_owner_id, new_owner_id, token_ids, authorized_id, memo) { this.old_owner_id = old_owner_id; @@ -54,13 +54,13 @@ export class NftTransfer { emit() { NftTransfer.emit_many([this]); } - /** Emits an nft transfer event, through [`env::log_str`](near_sdk::env::log_str), + /** Emits an nft transfer event, through `near.log`, * where each [`NftTransfer`] represents the data of each transfer. */ static emit_many(data) { new_171_v1(data).emit(); } } -/** Data to log for an NFT burn event. To log this event, call [`.emit()`](NftBurn::emit). */ +/** Data to log for an NFT burn event. To log this event, call [`.emit()`](NftBurn.emit). */ export class NftBurn { constructor(owner_id, token_ids, authorized_id, memo) { this.owner_id = owner_id; @@ -72,7 +72,7 @@ export class NftBurn { emit() { NftBurn.emit_many([this]); } - /** Emits an nft burn event, through [`env::log_str`](near_sdk::env::log_str), + /** Emits an nft burn event, through `near.log`, * where each [`NftBurn`] represents the data of each burn. */ static emit_many(data) { new_171_v1(data).emit(); diff --git a/near-contract-standards/lib/non_fungible_token/impl.d.ts b/near-contract-standards/lib/non_fungible_token/impl.d.ts index 08afed4a..ad83f5ca 100644 --- a/near-contract-standards/lib/non_fungible_token/impl.d.ts +++ b/near-contract-standards/lib/non_fungible_token/impl.d.ts @@ -9,7 +9,7 @@ import { NonFungibleTokenApproval } from "./approval"; import { NonFungibleTokenEnumeration } from "./enumeration"; /** Implementation of the non-fungible token standard. * Allows to include NEP-171 compatible token to any contract. - * There are next traits that any contract may implement: + * There are next interfaces that any contract may implement: * - NonFungibleTokenCore -- interface with nft_transfer methods. NonFungibleToken provides methods for it. * - NonFungibleTokenApproval -- interface with nft_approve methods. NonFungibleToken provides methods for it. * - NonFungibleTokenEnumeration -- interface for getting lists of tokens. NonFungibleToken provides methods for it. diff --git a/near-contract-standards/lib/non_fungible_token/impl.js b/near-contract-standards/lib/non_fungible_token/impl.js index 09a907de..aaf6d06d 100644 --- a/near-contract-standards/lib/non_fungible_token/impl.js +++ b/near-contract-standards/lib/non_fungible_token/impl.js @@ -24,7 +24,7 @@ function expect_approval(option) { } /** Implementation of the non-fungible token standard. * Allows to include NEP-171 compatible token to any contract. - * There are next traits that any contract may implement: + * There are next interfaces that any contract may implement: * - NonFungibleTokenCore -- interface with nft_transfer methods. NonFungibleToken provides methods for it. * - NonFungibleTokenApproval -- interface with nft_approve methods. NonFungibleToken provides methods for it. * - NonFungibleTokenEnumeration -- interface for getting lists of tokens. NonFungibleToken provides methods for it. diff --git a/near-contract-standards/lib/non_fungible_token/utils.d.ts b/near-contract-standards/lib/non_fungible_token/utils.d.ts index 5e806f7a..9cf82ceb 100644 --- a/near-contract-standards/lib/non_fungible_token/utils.d.ts +++ b/near-contract-standards/lib/non_fungible_token/utils.d.ts @@ -1,14 +1,14 @@ import { Bytes } from "near-sdk-js"; import { AccountId } from "near-sdk-js/lib/types"; export declare function bytes_for_approved_account_id(account_id: string): number; -export declare function refund_approved_account_ids_iter(account_id: string, approved_account_ids: string[]): void; +export declare function refund_approved_account_ids_iter(account_id: AccountId, approved_account_ids: AccountId[]): void; export declare function refund_approved_account_ids(account_id: AccountId, approved_account_ids: { - [approvals: string]: bigint; + [approvals: AccountId]: bigint; }): void; -export declare function refund_deposit_to_account(storage_used: bigint, account_id: string): void; +export declare function refund_deposit_to_account(storage_used: bigint, account_id: AccountId): void; /** Assumes that the precedecessor will be refunded */ export declare function refund_deposit(storage_used: bigint): void; -export declare function hash_account_id(account_id: string): Bytes; +export declare function hash_account_id(account_id: AccountId): Bytes; /** Assert that at least 1 yoctoNEAR was attached. */ export declare function assert_at_least_one_yocto(): void; /** Assert that exactly 1 yoctoNEAR was attached */ diff --git a/near-contract-standards/src/event.ts b/near-contract-standards/src/event.ts index 5c564a60..48753ee8 100644 --- a/near-contract-standards/src/event.ts +++ b/near-contract-standards/src/event.ts @@ -1,11 +1,11 @@ import { near } from "near-sdk-js"; -export class NearEvent { - internal_to_json_string(): string { +export abstract class NearEvent { + private internal_to_json_string(): string { return JSON.stringify(this); } - internal_to_json_event_string(): string { + private internal_to_json_event_string(): string { return `EVENT_JSON: ${this.internal_to_json_string()}`; } diff --git a/near-contract-standards/src/non_fungible_token/approval/approval_receiver.ts b/near-contract-standards/src/non_fungible_token/approval/approval_receiver.ts index 33c529f3..3c78f107 100644 --- a/near-contract-standards/src/non_fungible_token/approval/approval_receiver.ts +++ b/near-contract-standards/src/non_fungible_token/approval/approval_receiver.ts @@ -2,7 +2,7 @@ import { PromiseOrValue } from "near-sdk-js/lib"; import { AccountId } from "near-sdk-js/lib/types"; import { TokenId } from "../token"; -/** Approval receiver is the trait for the method called (or attempted to be called) when an NFT contract adds an approval for an account. */ +/** Approval receiver is the interface for the method called (or attempted to be called) when an NFT contract adds an approval for an account. */ export interface NonFungibleTokenApprovalReceiver { /** Respond to notification that contract has been granted approval for a token. * diff --git a/near-contract-standards/src/non_fungible_token/core/receiver.ts b/near-contract-standards/src/non_fungible_token/core/receiver.ts index 5127e49f..ee2a9ec1 100644 --- a/near-contract-standards/src/non_fungible_token/core/receiver.ts +++ b/near-contract-standards/src/non_fungible_token/core/receiver.ts @@ -2,7 +2,7 @@ import { PromiseOrValue } from "near-sdk-js/lib"; import { AccountId } from "near-sdk-js/lib/types"; import { TokenId } from "../token"; -/** Used when an NFT is transferred using `nft_transfer_call`. This trait is implemented on the receiving contract, not on the NFT contract. */ +/** Used when an NFT is transferred using `nft_transfer_call`. This interface is implemented on the receiving contract, not on the NFT contract. */ export interface NonFungibleTokenReceiver { /** Take some action after receiving a non-fungible token * diff --git a/near-contract-standards/src/non_fungible_token/core/resolver.ts b/near-contract-standards/src/non_fungible_token/core/resolver.ts index c1310067..20cfb345 100644 --- a/near-contract-standards/src/non_fungible_token/core/resolver.ts +++ b/near-contract-standards/src/non_fungible_token/core/resolver.ts @@ -2,7 +2,7 @@ import { AccountId } from "../../../../lib/types"; import { TokenId } from "../token"; import { Option } from "../utils"; -/** Used when an NFT is transferred using `nft_transfer_call`. This is the method that's called after `nft_on_transfer`. This trait is implemented on the NFT contract. */ +/** Used when an NFT is transferred using `nft_transfer_call`. This is the method that's called after `nft_on_transfer`. This interface is implemented on the NFT contract. */ export interface NonFungibleTokenResolver { /** Finalize an `nft_transfer_call` chain of cross-contract calls. * diff --git a/near-contract-standards/src/non_fungible_token/events.ts b/near-contract-standards/src/non_fungible_token/events.ts index d246a2ff..82069ed2 100644 --- a/near-contract-standards/src/non_fungible_token/events.ts +++ b/near-contract-standards/src/non_fungible_token/events.ts @@ -10,8 +10,8 @@ * The three events in this standard are [`NftMint`], [`NftTransfer`], and [`NftBurn`]. * * These events can be logged by calling `.emit()` on them if a single event, or calling - * [`NftMint::emit_many`], [`NftTransfer::emit_many`], - * or [`NftBurn::emit_many`] respectively. + * [`NftMint.emit_many`], [`NftTransfer.emit_many`], + * or [`NftBurn.emit_many`] respectively. */ import { NearEvent } from "../event"; import { Option } from "./utils"; @@ -29,7 +29,7 @@ export class Nep171Event extends NearEvent { } } -/** Data to log for an NFT mint event. To log this event, call [`.emit()`](NftMint::emit). */ +/** Data to log for an NFT mint event. To log this event, call `.emit()` */ export class NftMint { constructor( public owner_id: string, @@ -43,7 +43,7 @@ export class NftMint { NftMint.emit_many([this]); } - /** Emits an nft mint event, through [`env::log_str`](near_sdk::env::log_str), + /** Emits an nft mint event, through `near.log`, * where each [`NftMint`] represents the data of each mint. */ static emit_many(data: NftMint[]) { new_171_v1(data).emit(); @@ -51,7 +51,7 @@ export class NftMint { } /** Data to log for an NFT transfer event. To log this event, - * call [`.emit()`](NftTransfer::emit). */ + * call [`.emit()`](NftTransfer.emit). */ export class NftTransfer { constructor( public old_owner_id: string, @@ -67,14 +67,14 @@ export class NftTransfer { NftTransfer.emit_many([this]); } - /** Emits an nft transfer event, through [`env::log_str`](near_sdk::env::log_str), + /** Emits an nft transfer event, through `near.log`, * where each [`NftTransfer`] represents the data of each transfer. */ static emit_many(data: NftTransfer[]) { new_171_v1(data).emit(); } } -/** Data to log for an NFT burn event. To log this event, call [`.emit()`](NftBurn::emit). */ +/** Data to log for an NFT burn event. To log this event, call [`.emit()`](NftBurn.emit). */ export class NftBurn { constructor( public owner_id: string, @@ -89,7 +89,7 @@ export class NftBurn { NftBurn.emit_many([this]); } - /** Emits an nft burn event, through [`env::log_str`](near_sdk::env::log_str), + /** Emits an nft burn event, through `near.log`, * where each [`NftBurn`] represents the data of each burn. */ static emit_many(data: NftBurn[]) { new_171_v1(data).emit(); diff --git a/near-contract-standards/src/non_fungible_token/impl.ts b/near-contract-standards/src/non_fungible_token/impl.ts index e0e1d521..08a6dbeb 100644 --- a/near-contract-standards/src/non_fungible_token/impl.ts +++ b/near-contract-standards/src/non_fungible_token/impl.ts @@ -54,7 +54,7 @@ function expect_approval(option: Option): T { /** Implementation of the non-fungible token standard. * Allows to include NEP-171 compatible token to any contract. - * There are next traits that any contract may implement: + * There are next interfaces that any contract may implement: * - NonFungibleTokenCore -- interface with nft_transfer methods. NonFungibleToken provides methods for it. * - NonFungibleTokenApproval -- interface with nft_approve methods. NonFungibleToken provides methods for it. * - NonFungibleTokenEnumeration -- interface for getting lists of tokens. NonFungibleToken provides methods for it. diff --git a/near-contract-standards/src/non_fungible_token/utils.ts b/near-contract-standards/src/non_fungible_token/utils.ts index 5d125203..95d452b0 100644 --- a/near-contract-standards/src/non_fungible_token/utils.ts +++ b/near-contract-standards/src/non_fungible_token/utils.ts @@ -7,8 +7,8 @@ export function bytes_for_approved_account_id(account_id: string): number { } export function refund_approved_account_ids_iter( - account_id: string, - approved_account_ids: string[] + account_id: AccountId, + approved_account_ids: AccountId[] ): void { const storage_released = approved_account_ids .map(bytes_for_approved_account_id) @@ -23,7 +23,7 @@ export function refund_approved_account_ids_iter( export function refund_approved_account_ids( account_id: AccountId, - approved_account_ids: { [approvals: string]: bigint } + approved_account_ids: { [approvals: AccountId]: bigint } ) { refund_approved_account_ids_iter( account_id, @@ -33,7 +33,7 @@ export function refund_approved_account_ids( export function refund_deposit_to_account( storage_used: bigint, - account_id: string + account_id: AccountId ): void { const required_cost = near.storageByteCost() * storage_used; const attached_deposit = near.attachedDeposit(); @@ -56,7 +56,7 @@ export function refund_deposit(storage_used: bigint): void { refund_deposit_to_account(storage_used, near.predecessorAccountId()); } -export function hash_account_id(account_id: string): Bytes { +export function hash_account_id(account_id: AccountId): Bytes { return near.sha256(account_id); } From ea95d69eadeddc9daa4159d08d8afcf27a6ad926 Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Fri, 4 Nov 2022 21:04:18 +0800 Subject: [PATCH 43/44] fix all account id and token ids in nft standard --- .../lib/non_fungible_token/core/resolver.d.ts | 2 +- .../lib/non_fungible_token/events.d.ts | 24 ++--- .../lib/non_fungible_token/events.js | 15 ---- .../lib/non_fungible_token/impl.d.ts | 56 ++++++------ .../lib/non_fungible_token/token.d.ts | 4 +- .../lib/non_fungible_token/utils.d.ts | 2 +- .../src/non_fungible_token/core/resolver.ts | 2 +- .../src/non_fungible_token/events.ts | 18 ++-- .../src/non_fungible_token/impl.ts | 89 ++++++++++--------- .../src/non_fungible_token/token.ts | 2 +- .../src/non_fungible_token/utils.ts | 2 +- 11 files changed, 106 insertions(+), 110 deletions(-) diff --git a/near-contract-standards/lib/non_fungible_token/core/resolver.d.ts b/near-contract-standards/lib/non_fungible_token/core/resolver.d.ts index 9d27310c..032b27f6 100644 --- a/near-contract-standards/lib/non_fungible_token/core/resolver.d.ts +++ b/near-contract-standards/lib/non_fungible_token/core/resolver.d.ts @@ -34,7 +34,7 @@ export interface NonFungibleTokenResolver { receiver_id: AccountId, token_id: TokenId, approvals: Option<{ - [approval: string]: bigint; + [approval: AccountId]: bigint; }> ]): boolean; } diff --git a/near-contract-standards/lib/non_fungible_token/events.d.ts b/near-contract-standards/lib/non_fungible_token/events.d.ts index 715f9140..086dd309 100644 --- a/near-contract-standards/lib/non_fungible_token/events.d.ts +++ b/near-contract-standards/lib/non_fungible_token/events.d.ts @@ -13,7 +13,9 @@ * [`NftMint.emit_many`], [`NftTransfer.emit_many`], * or [`NftBurn.emit_many`] respectively. */ +import { AccountId } from "near-sdk-js/lib/types"; import { NearEvent } from "../event"; +import { TokenId } from "./token"; import { Option } from "./utils"; export declare type Nep171EventKind = NftMint[] | NftTransfer[] | NftBurn[]; export declare class Nep171Event extends NearEvent { @@ -23,10 +25,10 @@ export declare class Nep171Event extends NearEvent { } /** Data to log for an NFT mint event. To log this event, call `.emit()` */ export declare class NftMint { - owner_id: string; - token_ids: string[]; + owner_id: AccountId; + token_ids: TokenId[]; memo: Option; - constructor(owner_id: string, token_ids: string[], memo: Option); + constructor(owner_id: AccountId, token_ids: TokenId[], memo: Option); /** Logs the event to the host. This is required to ensure that the event is triggered * and to consume the event. */ emit(): void; @@ -37,12 +39,12 @@ export declare class NftMint { /** Data to log for an NFT transfer event. To log this event, * call [`.emit()`](NftTransfer.emit). */ export declare class NftTransfer { - old_owner_id: string; - new_owner_id: string; - token_ids: string[]; - authorized_id: Option; + old_owner_id: AccountId; + new_owner_id: AccountId; + token_ids: TokenId[]; + authorized_id: Option; memo: Option; - constructor(old_owner_id: string, new_owner_id: string, token_ids: string[], authorized_id: Option, memo: Option); + constructor(old_owner_id: AccountId, new_owner_id: AccountId, token_ids: TokenId[], authorized_id: Option, memo: Option); /** Logs the event to the host. This is required to ensure that the event is triggered * and to consume the event. */ emit(): void; @@ -52,10 +54,10 @@ export declare class NftTransfer { } /** Data to log for an NFT burn event. To log this event, call [`.emit()`](NftBurn.emit). */ export declare class NftBurn { - owner_id: string; - token_ids: string[]; + owner_id: AccountId; + token_ids: TokenId[]; memo: Option; - constructor(owner_id: string, token_ids: string[], authorized_id: Option, memo: Option); + constructor(owner_id: AccountId, token_ids: TokenId[], authorized_id: Option, memo: Option); /** Logs the event to the host. This is required to ensure that the event is triggered * and to consume the event. */ emit(): void; diff --git a/near-contract-standards/lib/non_fungible_token/events.js b/near-contract-standards/lib/non_fungible_token/events.js index d006306c..1bf0dfb3 100644 --- a/near-contract-standards/lib/non_fungible_token/events.js +++ b/near-contract-standards/lib/non_fungible_token/events.js @@ -1,18 +1,3 @@ -/** Standard for nep171 (Non-Fungible Token) events. - * - * These events will be picked up by the NEAR indexer. - * - * - * - * This is an extension of the events format (nep-297): - * - * - * The three events in this standard are [`NftMint`], [`NftTransfer`], and [`NftBurn`]. - * - * These events can be logged by calling `.emit()` on them if a single event, or calling - * [`NftMint.emit_many`], [`NftTransfer.emit_many`], - * or [`NftBurn.emit_many`] respectively. - */ import { NearEvent } from "../event"; export class Nep171Event extends NearEvent { constructor(version, event_kind) { diff --git a/near-contract-standards/lib/non_fungible_token/impl.d.ts b/near-contract-standards/lib/non_fungible_token/impl.d.ts index ad83f5ca..89acaa76 100644 --- a/near-contract-standards/lib/non_fungible_token/impl.d.ts +++ b/near-contract-standards/lib/non_fungible_token/impl.d.ts @@ -3,7 +3,7 @@ import { TokenMetadata } from "./metadata"; import { IntoStorageKey, Option } from "./utils"; import { NonFungibleTokenResolver } from "./core/resolver"; import { AccountId } from "near-sdk-js/lib/types/index"; -import { Token } from "./token"; +import { Token, TokenId } from "./token"; import { NonFungibleTokenCore } from "./core"; import { NonFungibleTokenApproval } from "./approval"; import { NonFungibleTokenEnumeration } from "./enumeration"; @@ -18,13 +18,13 @@ import { NonFungibleTokenEnumeration } from "./enumeration"; * For example usage, see near-contract-standards/example-contracts/non-fungible-token/my-nft.ts. */ export declare class NonFungibleToken implements NonFungibleTokenCore, NonFungibleTokenResolver, NonFungibleTokenApproval, NonFungibleTokenEnumeration { - owner_id: string; + owner_id: AccountId; extra_storage_in_bytes_per_token: bigint; owner_by_id: UnorderedMap; token_metadata_by_id: Option>; - tokens_per_owner: Option>>; + tokens_per_owner: Option>>; approvals_by_id: Option>; next_approval_id_by_id: Option>; constructor(); @@ -34,54 +34,54 @@ export declare class NonFungibleToken implements NonFungibleTokenCore, NonFungib from_index: number | null, limit: number | null ]): Token[]; - nft_supply_for_owner(account_id: string): number; + nft_supply_for_owner(account_id: AccountId): number; nft_tokens_for_owner([account_id, from_index, limit]: [ - account_id: string, + account_id: AccountId, from_index: number, limit: number ]): Token[]; nft_approve([token_id, account_id, msg]: [ - token_id: string, - account_id: string, + token_id: TokenId, + account_id: AccountId, msg: string ]): Option; - nft_revoke([token_id, account_id]: [token_id: string, account_id: string]): void; - nft_revoke_all(token_id: string): void; + nft_revoke([token_id, account_id]: [token_id: TokenId, account_id: AccountId]): void; + nft_revoke_all(token_id: TokenId): void; nft_is_approved([token_id, approved_account_id, approval_id]: [ - token_id: string, - approved_account_id: string, + token_id: TokenId, + approved_account_id: AccountId, approval_id: bigint ]): boolean; - init(owner_by_id_prefix: IntoStorageKey, owner_id: string, token_metadata_prefix: Option, enumeration_prefix: Option, approval_prefix: Option): void; + init(owner_by_id_prefix: IntoStorageKey, owner_id: AccountId, token_metadata_prefix: Option, enumeration_prefix: Option, approval_prefix: Option): void; static reconstruct(data: NonFungibleToken): NonFungibleToken; measure_min_token_storage_cost(): void; - internal_transfer_unguarded(token_id: string, from: string, to: string): void; - internal_transfer(sender_id: string, receiver_id: string, token_id: string, approval_id: Option, memo: Option): [string, { - [approvals: string]: bigint; + internal_transfer_unguarded(token_id: TokenId, from: AccountId, to: AccountId): void; + internal_transfer(sender_id: AccountId, receiver_id: AccountId, token_id: TokenId, approval_id: Option, memo: Option): [AccountId, { + [approvals: AccountId]: bigint; } | null]; - static emit_transfer(owner_id: string, receiver_id: string, token_id: string, sender_id: Option, memo: Option): void; - internal_mint(token_id: string, token_owner_id: string, token_metadata: Option): Token; - internal_mint_with_refund(token_id: string, token_owner_id: string, token_metadata: Option, refund_id: Option): Token; + static emit_transfer(owner_id: AccountId, receiver_id: AccountId, token_id: TokenId, sender_id: Option, memo: Option): void; + internal_mint(token_id: TokenId, token_owner_id: AccountId, token_metadata: Option): Token; + internal_mint_with_refund(token_id: TokenId, token_owner_id: AccountId, token_metadata: Option, refund_id: Option): Token; nft_transfer([receiver_id, token_id, approval_id, memo]: [ - receiver_id: string, - token_id: string, + receiver_id: AccountId, + token_id: TokenId, approval_id: Option, memo: Option ]): void; nft_transfer_call([receiver_id, token_id, approval_id, memo, msg]: [ - receiver_id: string, - token_id: string, + receiver_id: AccountId, + token_id: TokenId, approval_id: Option, memo: Option, msg: string ]): NearPromise; - nft_token(token_id: string): Option; + nft_token(token_id: TokenId): Option; nft_resolve_transfer([previous_owner_id, receiver_id, token_id, approved_account_ids,]: [ - previous_owner_id: string, - receiver_id: string, - token_id: string, + previous_owner_id: AccountId, + receiver_id: AccountId, + token_id: TokenId, approved_account_ids: Option<{ - [approvals: string]: bigint; + [approvals: AccountId]: bigint; }> ]): boolean; } diff --git a/near-contract-standards/lib/non_fungible_token/token.d.ts b/near-contract-standards/lib/non_fungible_token/token.d.ts index 8cd79253..0deafe0c 100644 --- a/near-contract-standards/lib/non_fungible_token/token.d.ts +++ b/near-contract-standards/lib/non_fungible_token/token.d.ts @@ -9,9 +9,9 @@ export declare class Token { owner_id: AccountId; metadata: Option; approved_account_ids: Option<{ - [approved_account_id: string]: bigint; + [approved_account_id: AccountId]: bigint; }>; constructor(token_id: TokenId, owner_id: AccountId, metadata: Option, approved_account_ids: Option<{ - [approved_account_id: string]: bigint; + [approved_account_id: AccountId]: bigint; }>); } diff --git a/near-contract-standards/lib/non_fungible_token/utils.d.ts b/near-contract-standards/lib/non_fungible_token/utils.d.ts index 9cf82ceb..d7e503ed 100644 --- a/near-contract-standards/lib/non_fungible_token/utils.d.ts +++ b/near-contract-standards/lib/non_fungible_token/utils.d.ts @@ -1,6 +1,6 @@ import { Bytes } from "near-sdk-js"; import { AccountId } from "near-sdk-js/lib/types"; -export declare function bytes_for_approved_account_id(account_id: string): number; +export declare function bytes_for_approved_account_id(account_id: AccountId): number; export declare function refund_approved_account_ids_iter(account_id: AccountId, approved_account_ids: AccountId[]): void; export declare function refund_approved_account_ids(account_id: AccountId, approved_account_ids: { [approvals: AccountId]: bigint; diff --git a/near-contract-standards/src/non_fungible_token/core/resolver.ts b/near-contract-standards/src/non_fungible_token/core/resolver.ts index 20cfb345..5707fea2 100644 --- a/near-contract-standards/src/non_fungible_token/core/resolver.ts +++ b/near-contract-standards/src/non_fungible_token/core/resolver.ts @@ -34,6 +34,6 @@ export interface NonFungibleTokenResolver { previous_owner_id: AccountId, receiver_id: AccountId, token_id: TokenId, - approvals: Option<{ [approval: string]: bigint }> + approvals: Option<{ [approval: AccountId]: bigint }> ]): boolean; } diff --git a/near-contract-standards/src/non_fungible_token/events.ts b/near-contract-standards/src/non_fungible_token/events.ts index 82069ed2..98596c46 100644 --- a/near-contract-standards/src/non_fungible_token/events.ts +++ b/near-contract-standards/src/non_fungible_token/events.ts @@ -13,7 +13,9 @@ * [`NftMint.emit_many`], [`NftTransfer.emit_many`], * or [`NftBurn.emit_many`] respectively. */ +import { AccountId } from "near-sdk-js/lib/types"; import { NearEvent } from "../event"; +import { TokenId } from "./token"; import { Option } from "./utils"; export type Nep171EventKind = NftMint[] | NftTransfer[] | NftBurn[]; @@ -32,8 +34,8 @@ export class Nep171Event extends NearEvent { /** Data to log for an NFT mint event. To log this event, call `.emit()` */ export class NftMint { constructor( - public owner_id: string, - public token_ids: string[], + public owner_id: AccountId, + public token_ids: TokenId[], public memo: Option ) {} @@ -54,10 +56,10 @@ export class NftMint { * call [`.emit()`](NftTransfer.emit). */ export class NftTransfer { constructor( - public old_owner_id: string, - public new_owner_id: string, - public token_ids: string[], - public authorized_id: Option, + public old_owner_id: AccountId, + public new_owner_id: AccountId, + public token_ids: TokenId[], + public authorized_id: Option, public memo: Option ) {} @@ -77,8 +79,8 @@ export class NftTransfer { /** Data to log for an NFT burn event. To log this event, call [`.emit()`](NftBurn.emit). */ export class NftBurn { constructor( - public owner_id: string, - public token_ids: string[], + public owner_id: AccountId, + public token_ids: TokenId[], authorized_id: Option, public memo: Option ) {} diff --git a/near-contract-standards/src/non_fungible_token/impl.ts b/near-contract-standards/src/non_fungible_token/impl.ts index 08a6dbeb..bd984cb1 100644 --- a/near-contract-standards/src/non_fungible_token/impl.ts +++ b/near-contract-standards/src/non_fungible_token/impl.ts @@ -69,12 +69,12 @@ export class NonFungibleToken NonFungibleTokenApproval, NonFungibleTokenEnumeration { - public owner_id: string; + public owner_id: AccountId; public extra_storage_in_bytes_per_token: bigint; public owner_by_id: UnorderedMap; public token_metadata_by_id: Option>; - public tokens_per_owner: Option>>; - public approvals_by_id: Option>; + public tokens_per_owner: Option>>; + public approvals_by_id: Option>; public next_approval_id_by_id: Option>; constructor() { @@ -122,7 +122,7 @@ export class NonFungibleToken return ret; } - nft_supply_for_owner(account_id: string): number { + nft_supply_for_owner(account_id: AccountId): number { const tokens_per_owner = this.tokens_per_owner; assert( tokens_per_owner !== null, @@ -136,7 +136,7 @@ export class NonFungibleToken } nft_tokens_for_owner([account_id, from_index, limit]: [ - account_id: string, + account_id: AccountId, from_index: number, limit: number ]): Token[] { @@ -169,8 +169,8 @@ export class NonFungibleToken } nft_approve([token_id, account_id, msg]: [ - token_id: string, - account_id: string, + token_id: TokenId, + account_id: AccountId, msg: string ]): Option { assert_at_least_one_yocto(); @@ -210,7 +210,10 @@ export class NonFungibleToken return null; } - nft_revoke([token_id, account_id]: [token_id: string, account_id: string]) { + nft_revoke([token_id, account_id]: [ + token_id: TokenId, + account_id: AccountId + ]) { assert_one_yocto(); if (this.approvals_by_id === null) { throw new Error("NFT does not support Approval Management"); @@ -237,7 +240,7 @@ export class NonFungibleToken } } - nft_revoke_all(token_id: string) { + nft_revoke_all(token_id: TokenId) { assert_one_yocto(); if (this.approvals_by_id === null) { throw new Error("NFT does not support Approval Management"); @@ -260,8 +263,8 @@ export class NonFungibleToken } nft_is_approved([token_id, approved_account_id, approval_id]: [ - token_id: string, - approved_account_id: string, + token_id: TokenId, + approved_account_id: AccountId, approval_id: bigint ]): boolean { expect_token_found(this.owner_by_id.get(token_id)); @@ -289,12 +292,12 @@ export class NonFungibleToken init( owner_by_id_prefix: IntoStorageKey, - owner_id: string, + owner_id: AccountId, token_metadata_prefix: Option, enumeration_prefix: Option, approval_prefix: Option ) { - let approvals_by_id: Option>; + let approvals_by_id: Option>; let next_approval_id_by_id: Option>; if (approval_prefix) { const prefix = approval_prefix.into_storage_key(); @@ -370,7 +373,7 @@ export class NonFungibleToken ); } if (this.tokens_per_owner) { - const u = new UnorderedSet( + const u = new UnorderedSet( new TokensPerOwner(near.sha256(tmp_owner_id)).into_storage_key() ); u.set(tmp_token_id); @@ -408,7 +411,11 @@ export class NonFungibleToken this.owner_by_id.remove(tmp_token_id); } - internal_transfer_unguarded(token_id: string, from: string, to: string) { + internal_transfer_unguarded( + token_id: TokenId, + from: AccountId, + to: AccountId + ) { this.owner_by_id.set(token_id, to); if (this.tokens_per_owner) { @@ -429,7 +436,7 @@ export class NonFungibleToken reconstructor: UnorderedSet.reconstruct, }); if (receiver_tokens_set === null) { - receiver_tokens_set = new UnorderedSet( + receiver_tokens_set = new UnorderedSet( new TokensPerOwner(near.sha256(to)).into_storage_key() ); } @@ -439,12 +446,12 @@ export class NonFungibleToken } internal_transfer( - sender_id: string, - receiver_id: string, - token_id: string, + sender_id: AccountId, + receiver_id: AccountId, + token_id: TokenId, approval_id: Option, memo: Option - ): [string, { [approvals: string]: bigint } | null] { + ): [AccountId, { [approvals: AccountId]: bigint } | null] { const owner_id = this.owner_by_id.get(token_id); if (owner_id == null) { throw new Error("Token not found"); @@ -472,22 +479,22 @@ export class NonFungibleToken sender_id_authorized = null; } assert(owner_id != receiver_id, "Current and next owner must differ"); - this.internal_transfer_unguarded(token_id, owner_id as string, receiver_id); + this.internal_transfer_unguarded(token_id, owner_id, receiver_id); NonFungibleToken.emit_transfer( - owner_id as string, + owner_id, receiver_id, token_id, sender_id_authorized, memo ); - return [owner_id as string, approved_account_ids]; + return [owner_id, approved_account_ids]; } static emit_transfer( - owner_id: string, - receiver_id: string, - token_id: string, - sender_id: Option, + owner_id: AccountId, + receiver_id: AccountId, + token_id: TokenId, + sender_id: Option, memo: Option ) { new NftTransfer( @@ -500,8 +507,8 @@ export class NonFungibleToken } internal_mint( - token_id: string, - token_owner_id: string, + token_id: TokenId, + token_owner_id: AccountId, token_metadata: Option ): Token { const token = this.internal_mint_with_refund( @@ -515,8 +522,8 @@ export class NonFungibleToken } internal_mint_with_refund( - token_id: string, - token_owner_id: string, + token_id: TokenId, + token_owner_id: AccountId, token_metadata: Option, refund_id: Option ): Token { @@ -556,8 +563,8 @@ export class NonFungibleToken } nft_transfer([receiver_id, token_id, approval_id, memo]: [ - receiver_id: string, - token_id: string, + receiver_id: AccountId, + token_id: TokenId, approval_id: Option, memo: Option ]) { @@ -567,8 +574,8 @@ export class NonFungibleToken } nft_transfer_call([receiver_id, token_id, approval_id, memo, msg]: [ - receiver_id: string, - token_id: string, + receiver_id: AccountId, + token_id: TokenId, approval_id: Option, memo: Option, msg: string @@ -607,7 +614,7 @@ export class NonFungibleToken return promise; } - nft_token(token_id: string): Option { + nft_token(token_id: TokenId): Option { const owner_id = this.owner_by_id.get(token_id); if (owner_id == null) { return null; @@ -616,7 +623,7 @@ export class NonFungibleToken reconstructor: TokenMetadata.reconstruct, }); const approved_account_ids = this.approvals_by_id?.get(token_id) as Option<{ - [approvals: string]: bigint; + [approvals: AccountId]: bigint; }>; return new Token(token_id, owner_id, metadata, approved_account_ids); } @@ -627,10 +634,10 @@ export class NonFungibleToken token_id, approved_account_ids, ]: [ - previous_owner_id: string, - receiver_id: string, - token_id: string, - approved_account_ids: Option<{ [approvals: string]: bigint }> + previous_owner_id: AccountId, + receiver_id: AccountId, + token_id: TokenId, + approved_account_ids: Option<{ [approvals: AccountId]: bigint }> ]): boolean { let must_revert = false; let p: Bytes; diff --git a/near-contract-standards/src/non_fungible_token/token.ts b/near-contract-standards/src/non_fungible_token/token.ts index 9306ec23..49563258 100644 --- a/near-contract-standards/src/non_fungible_token/token.ts +++ b/near-contract-standards/src/non_fungible_token/token.ts @@ -12,7 +12,7 @@ export class Token { public owner_id: AccountId, public metadata: Option, public approved_account_ids: Option<{ - [approved_account_id: string]: bigint; + [approved_account_id: AccountId]: bigint; }> ) {} } diff --git a/near-contract-standards/src/non_fungible_token/utils.ts b/near-contract-standards/src/non_fungible_token/utils.ts index 95d452b0..649b12e0 100644 --- a/near-contract-standards/src/non_fungible_token/utils.ts +++ b/near-contract-standards/src/non_fungible_token/utils.ts @@ -1,7 +1,7 @@ import { near, assert, Bytes } from "near-sdk-js"; import { AccountId } from "near-sdk-js/lib/types"; -export function bytes_for_approved_account_id(account_id: string): number { +export function bytes_for_approved_account_id(account_id: AccountId): number { // The extra 4 bytes are coming from Borsh serialization to store the length of the string. return account_id.length + 4 + 8; } From 9ef0c920f5283f34b8bff3dcfb665ec9147e1754 Mon Sep 17 00:00:00 2001 From: Bo Yao Date: Tue, 8 Nov 2022 15:47:44 +0800 Subject: [PATCH 44/44] make nft standard taking object arguments instead of positional --- .../standard-nft/test_approval.ava.js | 266 ++++++++++++------ .../__tests__/standard-nft/test_core.ava.js | 92 ++++-- .../standard-nft/test_enumeration.ava.js | 79 +++--- examples/src/standard-nft/my-nft.ts | 165 +++++++---- .../standard-nft/test-approval-receiver.ts | 23 +- .../src/standard-nft/test-token-receiver.ts | 23 +- .../approval/approval_receiver.d.ts | 12 +- .../non_fungible_token/approval/index.d.ts | 32 ++- .../lib/non_fungible_token/core/index.d.ts | 30 +- .../lib/non_fungible_token/core/receiver.d.ts | 12 +- .../lib/non_fungible_token/core/resolver.d.ts | 14 +- .../non_fungible_token/enumeration/index.d.ts | 22 +- .../lib/non_fungible_token/impl.d.ts | 93 +++--- .../lib/non_fungible_token/impl.js | 35 ++- .../approval/approval_receiver.ts | 17 +- .../src/non_fungible_token/approval/index.ts | 41 ++- .../src/non_fungible_token/core/index.ts | 38 ++- .../src/non_fungible_token/core/receiver.ts | 17 +- .../src/non_fungible_token/core/resolver.ts | 17 +- .../non_fungible_token/enumeration/index.ts | 27 +- .../src/non_fungible_token/impl.ts | 134 +++++---- 21 files changed, 755 insertions(+), 434 deletions(-) diff --git a/examples/__tests__/standard-nft/test_approval.ava.js b/examples/__tests__/standard-nft/test_approval.ava.js index 56890fb3..91bb428e 100644 --- a/examples/__tests__/standard-nft/test_approval.ava.js +++ b/examples/__tests__/standard-nft/test_approval.ava.js @@ -25,8 +25,12 @@ test.beforeEach(async (t) => { metadata: { spec: "nft-1.0.0", name: "My NFT", symbol: "NFT" }, }); - await nftReceiver.call(nftReceiver, "init", nft.accountId); - await nftReceiver.call(approvalReceiver, "init", nft.accountId); + await nftReceiver.call(nftReceiver, "init", { + non_fungible_token_account_id: nft.accountId, + }); + await approvalReceiver.call(approvalReceiver, "init", { + non_fungible_token_account_id: nft.accountId, + }); let token_metadata = { title: "Olympus Mons", @@ -45,7 +49,11 @@ test.beforeEach(async (t) => { await nftOwner.call( nft, "nft_mint", - ["0", nftOwner.accountId, token_metadata], + { + token_id: "0", + token_owner_id: nftOwner.accountId, + token_metadata, + }, { attachedDeposit: "10 mN" } ); @@ -74,53 +82,75 @@ test("Simple approve", async (t) => { let res = await nftOwner.callRaw( nft, "nft_approve", - ["0", ali.accountId, null], + { + token_id: "0", + account_id: ali.accountId, + msg: null, + }, { attachedDeposit: "510000000000000000000" } ); t.assert(res.result.status.SuccessValue); - let alice_approved = await nft.view("nft_is_approved", [ - "0", - ali.accountId, - null, - ]); + let alice_approved = await nft.view("nft_is_approved", { + token_id: "0", + approved_account_id: ali.accountId, + approval_id: null, + }); t.assert(alice_approved); - let alice_approval_id_is_1 = await nft.view("nft_is_approved", [ - "0", - ali.accountId, - "1", - ]); + let alice_approval_id_is_1 = await nft.view("nft_is_approved", { + token_id: "0", + approved_account_id: ali.accountId, + approval_id: "1", + }); t.assert(alice_approval_id_is_1); - let alice_approval_id_is_2 = await nft.view("nft_is_approved", [ - "0", - ali.accountId, - "2", - ]); + let alice_approval_id_is_2 = await nft.view("nft_is_approved", { + token_id: "0", + approved_account_id: ali.accountId, + approval_id: "2", + }); t.assert(!alice_approval_id_is_2); - res = await nftOwner.callRaw(nft, "nft_approve", ["0", ali.accountId, null], { - attachedDeposit: "1", - }); + res = await nftOwner.callRaw( + nft, + "nft_approve", + { + token_id: "0", + account_id: ali.accountId, + msg: null, + }, + { + attachedDeposit: "1", + } + ); t.assert(res.result.status.SuccessValue); - alice_approval_id_is_2 = await nft.view("nft_is_approved", [ - "0", - ali.accountId, - "2", - ]); + alice_approval_id_is_2 = await nft.view("nft_is_approved", { + token_id: "0", + approved_account_id: ali.accountId, + approval_id: "2", + }); t.assert(alice_approval_id_is_2); - res = await nftOwner.callRaw(nft, "nft_approve", ["0", bob.accountId, null], { - attachedDeposit: "450000000000000000000", - }); + res = await nftOwner.callRaw( + nft, + "nft_approve", + { + token_id: "0", + account_id: bob.accountId, + msg: null, + }, + { + attachedDeposit: "450000000000000000000", + } + ); t.assert(res.result.status.SuccessValue); - let bob_approval_id_is_3 = await nft.view("nft_is_approved", [ - "0", - bob.accountId, - "3", - ]); + let bob_approval_id_is_3 = await nft.view("nft_is_approved", { + token_id: "0", + approved_account_id: bob.accountId, + approval_id: "3", + }); t.assert(bob_approval_id_is_3); }); @@ -130,7 +160,11 @@ test("Approve call", async (t) => { let res = await nftOwner.call( nft, "nft_approve", - ["0", approvalReceiver.accountId, "return-now"], + { + token_id: "0", + account_id: approvalReceiver.accountId, + msg: "return-now", + }, { attachedDeposit: "450000000000000000000", gas: "300 Tgas" } ); t.is(res, "cool"); @@ -138,7 +172,11 @@ test("Approve call", async (t) => { res = await nftOwner.call( nft, "nft_approve", - ["0", approvalReceiver.accountId, "hahaha"], + { + token_id: "0", + account_id: approvalReceiver.accountId, + msg: "hahaha", + }, { attachedDeposit: "1", gas: "300 Tgas" } ); t.is(res, "hahaha"); @@ -150,23 +188,32 @@ test("Approved account transfers token", async (t) => { let res = await nftOwner.callRaw( nft, "nft_approve", - ["0", ali.accountId, null], + { + token_id: "0", + account_id: ali.accountId, + msg: null, + }, { attachedDeposit: "510000000000000000000" } ); t.assert(res.result.status.SuccessValue); - let token = await nft.view("nft_token", "0"); + let token = await nft.view("nft_token", { token_id: "0" }); t.is(token.owner_id, nftOwner.accountId); res = await ali.callRaw( nft, "nft_transfer", - [ali.accountId, "0", null, "gotcha! bahahaha"], + { + receiver_id: ali.accountId, + token_id: "0", + approval_id: null, + memo: "gotcha! bahahaha", + }, { attachedDeposit: "1" } ); t.is(res.result.status.SuccessValue, ""); - token = await nft.view("nft_token", "0"); + token = await nft.view("nft_token", { token_id: "0" }); t.is(token.owner_id, ali.accountId); }); @@ -176,48 +223,81 @@ test("revoke", async (t) => { let res = await nftOwner.callRaw( nft, "nft_approve", - ["0", ali.accountId, null], + { + token_id: "0", + account_id: ali.accountId, + msg: null, + }, { attachedDeposit: "510000000000000000000" } ); t.assert(res.result.status.SuccessValue); - res = await nftOwner.callRaw(nft, "nft_approve", ["0", bob.accountId, null], { - attachedDeposit: "510000000000000000000", - }); + res = await nftOwner.callRaw( + nft, + "nft_approve", + { + token_id: "0", + account_id: bob.accountId, + msg: null, + }, + { + attachedDeposit: "510000000000000000000", + } + ); t.assert(res.result.status.SuccessValue); - res = await nftOwner.callRaw(nft, "nft_revoke", ["0", ali.accountId], { - attachedDeposit: "1", - }); + res = await nftOwner.callRaw( + nft, + "nft_revoke", + { + token_id: "0", + account_id: ali.accountId, + }, + { + attachedDeposit: "1", + } + ); t.is(res.result.status.SuccessValue, ""); - let alice_approved = await nft.view("nft_is_approved", [ - "0", - ali.accountId, - null, - ]); + let alice_approved = await nft.view("nft_is_approved", { + token_id: "0", + approved_account_id: ali.accountId, + approval_id: null, + }); t.assert(!alice_approved); - let bob_approved = await nft.view("nft_is_approved", [ - "0", - bob.accountId, - null, - ]); + let bob_approved = await nft.view("nft_is_approved", { + token_id: "0", + approved_account_id: bob.accountId, + approval_id: null, + }); t.assert(bob_approved); - res = await nftOwner.callRaw(nft, "nft_revoke", ["0", bob.accountId], { - attachedDeposit: "1", - }); + res = await nftOwner.callRaw( + nft, + "nft_revoke", + { + token_id: "0", + account_id: bob.accountId, + }, + { + attachedDeposit: "1", + } + ); t.is(res.result.status.SuccessValue, ""); - alice_approved = await nft.view("nft_is_approved", [ - "0", - ali.accountId, - null, - ]); + alice_approved = await nft.view("nft_is_approved", { + token_id: "0", + approved_account_id: ali.accountId, + approval_id: null, + }); t.assert(!alice_approved); - bob_approved = await nft.view("nft_is_approved", ["0", bob.accountId, null]); + bob_approved = await nft.view("nft_is_approved", { + token_id: "0", + approved_account_id: bob.accountId, + approval_id: null, + }); t.assert(!bob_approved); }); @@ -227,32 +307,50 @@ test("revoke all", async (t) => { let res = await nftOwner.callRaw( nft, "nft_approve", - ["0", ali.accountId, null], + { + token_id: "0", + accountId: ali.accountId, + msg: null, + }, { attachedDeposit: "510000000000000000000" } ); t.assert(res.result.status.SuccessValue); - res = await nftOwner.callRaw(nft, "nft_approve", ["0", bob.accountId, null], { - attachedDeposit: "510000000000000000000", - }); + res = await nftOwner.callRaw( + nft, + "nft_approve", + { + token_id: "0", + accountId: bob.accountId, + msg: null, + }, + { + attachedDeposit: "510000000000000000000", + } + ); t.assert(res.result.status.SuccessValue); - res = await nftOwner.callRaw(nft, "nft_revoke_all", "0", { - attachedDeposit: "1", - }); + res = await nftOwner.callRaw( + nft, + "nft_revoke_all", + { token_id: "0" }, + { + attachedDeposit: "1", + } + ); t.is(res.result.status.SuccessValue, ""); - let alice_approved = await nft.view("nft_is_approved", [ - "0", - ali.accountId, - null, - ]); + let alice_approved = await nft.view("nft_is_approved", { + token_id: "0", + approved_account_id: ali.accountId, + approval_id: null, + }); t.assert(!alice_approved); - let bob_approved = await nft.view("nft_is_approved", [ - "0", - bob.accountId, - null, - ]); + let bob_approved = await nft.view("nft_is_approved", { + token_id: "0", + approved_account_id: bob.accountId, + approval_id: null, + }); t.assert(!bob_approved); }); diff --git a/examples/__tests__/standard-nft/test_core.ava.js b/examples/__tests__/standard-nft/test_core.ava.js index a42cf14f..43904603 100644 --- a/examples/__tests__/standard-nft/test_core.ava.js +++ b/examples/__tests__/standard-nft/test_core.ava.js @@ -24,7 +24,9 @@ test.beforeEach(async (t) => { metadata: { spec: "nft-1.0.0", name: "My NFT", symbol: "NFT" }, }); - await nftReceiver.call(nftReceiver, "init", nft.accountId); + await nftReceiver.call(nftReceiver, "init", { + non_fungible_token_account_id: nft.accountId, + }); let token_metadata = { title: "Olympus Mons", @@ -43,7 +45,11 @@ test.beforeEach(async (t) => { await nftOwner.call( nft, "nft_mint", - ["0", nftOwner.accountId, token_metadata], + { + token_id: "0", + token_owner_id: nftOwner.accountId, + token_metadata, + }, { attachedDeposit: "10 mN" } ); @@ -68,20 +74,25 @@ test.afterEach.always(async (t) => { test("Simple transfer", async (t) => { const { ali, nft, nftOwner } = t.context.accounts; - let token = await nft.view("nft_token", "0"); + let token = await nft.view("nft_token", { token_id: "0" }); t.is(token.owner_id, nftOwner.accountId); let res = await nftOwner.callRaw( nft, "nft_transfer", - [ali.accountId, "0", null, "simple transfer"], + { + receiver_id: ali.accountId, + token_id: "0", + approval_id: null, + memo: "simple transfer", + }, { attachedDeposit: "1" } ); t.is(res.result.status.SuccessValue, ""); t.is(res.logs.length, 1); - token = await nft.view("nft_token", "0"); + token = await nft.view("nft_token", { token_id: "0" }); t.is(token.owner_id, ali.accountId); }); @@ -91,7 +102,13 @@ test("Transfer call fast return to sender", async (t) => { let res = await nftOwner.callRaw( nft, "nft_transfer_call", - [nftReceiver.accountId, "0", null, "transfer & call", "return-it-now"], + { + receiver_id: nftReceiver.accountId, + token_id: "0", + approval_id: null, + memo: "transfer & call", + msg: "return-it-now", + }, { attachedDeposit: "1", gas: MAX_GAS } ); t.is( @@ -99,7 +116,7 @@ test("Transfer call fast return to sender", async (t) => { "false" ); - let token = await nft.view("nft_token", "0"); + let token = await nft.view("nft_token", { token_id: "0" }); t.is(token.owner_id, nftOwner.accountId); }); @@ -109,7 +126,13 @@ test("Transfer call slow return to sender", async (t) => { let res = await nftOwner.callRaw( nft, "nft_transfer_call", - [nftReceiver.accountId, "0", null, "transfer & call", "return-it-later"], + { + receiver_id: nftReceiver.accountId, + token_id: "0", + approval_id: null, + memo: "transfer & call", + msg: "return-it-later", + }, { attachedDeposit: "1", gas: MAX_GAS } ); t.is( @@ -117,7 +140,7 @@ test("Transfer call slow return to sender", async (t) => { "false" ); - let token = await nft.view("nft_token", "0"); + let token = await nft.view("nft_token", { token_id: "0" }); t.is(token.owner_id, nftOwner.accountId); }); @@ -127,7 +150,13 @@ test("Transfer call fast keep with sender", async (t) => { let res = await nftOwner.callRaw( nft, "nft_transfer_call", - [nftReceiver.accountId, "0", null, "transfer & call", "keep-it-now"], + { + receiver_id: nftReceiver.accountId, + token_id: "0", + approval_id: null, + memo: "transfer & call", + msg: "keep-it-now", + }, { attachedDeposit: "1", gas: MAX_GAS } ); t.is( @@ -135,7 +164,7 @@ test("Transfer call fast keep with sender", async (t) => { "true" ); - let token = await nft.view("nft_token", "0"); + let token = await nft.view("nft_token", { token_id: "0" }); t.is(token.owner_id, nftReceiver.accountId); }); @@ -145,7 +174,13 @@ test("Transfer call slow keep with sender", async (t) => { let res = await nftOwner.callRaw( nft, "nft_transfer_call", - [nftReceiver.accountId, "0", null, "transfer & call", "keep-it-later"], + { + receiver_id: nftReceiver.accountId, + token_id: "0", + approval_id: null, + memo: "transfer & call", + msg: "keep-it-later", + }, { attachedDeposit: "1", gas: MAX_GAS } ); t.is( @@ -153,7 +188,7 @@ test("Transfer call slow keep with sender", async (t) => { "true" ); - let token = await nft.view("nft_token", "0"); + let token = await nft.view("nft_token", { token_id: "0" }); t.is(token.owner_id, nftReceiver.accountId); }); @@ -163,7 +198,13 @@ test("Transfer call receiver panics", async (t) => { let res = await nftOwner.callRaw( nft, "nft_transfer_call", - [nftReceiver.accountId, "0", null, "transfer & call", "incorrect message"], + { + receiver_id: nftReceiver.accountId, + token_id: "0", + approval_id: null, + memo: "transfer & call", + msg: "incorrect message", + }, { attachedDeposit: "1", gas: MAX_GAS } ); t.is( @@ -173,7 +214,7 @@ test("Transfer call receiver panics", async (t) => { t.is(res.logs.length, 3); - let token = await nft.view("nft_token", "0"); + let token = await nft.view("nft_token", { token_id: "0" }); t.is(token.owner_id, nftOwner.accountId); }); @@ -183,34 +224,45 @@ test("Transfer call receiver panics and nft_resolve_transfer produces no log if let res = await nftOwner.callRaw( nft, "nft_transfer_call", - [nftReceiver.accountId, "0", null, "transfer & call", "incorrect message"], + { + receiver_id: nftReceiver.accountId, + token_id: "0", + approval_id: null, + memo: "transfer & call", + msg: "incorrect message", + }, { attachedDeposit: "1", gas: 30_000_000_000_000n } ); t.assert(res.result.status.Failure !== undefined); t.is(res.logs.length, 0); - let token = await nft.view("nft_token", "0"); + let token = await nft.view("nft_token", { token_id: "0" }); t.is(token.owner_id, nftOwner.accountId); }); test("Simple transfer no logs on failure", async (t) => { const { nft, nftOwner } = t.context.accounts; - let token = await nft.view("nft_token", "0"); + let token = await nft.view("nft_token", { token_id: "0" }); t.is(token.owner_id, nftOwner.accountId); // transfer to the current owner should fail and not print log let res = await nftOwner.callRaw( nft, "nft_transfer", - [nftOwner.accountId, "0", null, "simple transfer"], + { + receiver_id: nftOwner.accountId, + token_id: "0", + approval_id: null, + memo: "simple transfer", + }, { attachedDeposit: "1" } ); t.assert(res.result.status.Failure !== undefined); t.is(res.logs.length, 0); - token = await nft.view("nft_token", "0"); + token = await nft.view("nft_token", { token_id: "0" }); t.is(token.owner_id, nftOwner.accountId); }); diff --git a/examples/__tests__/standard-nft/test_enumeration.ava.js b/examples/__tests__/standard-nft/test_enumeration.ava.js index 3443c493..1fd7c171 100644 --- a/examples/__tests__/standard-nft/test_enumeration.ava.js +++ b/examples/__tests__/standard-nft/test_enumeration.ava.js @@ -19,7 +19,11 @@ async function helper_mint(nft, nftOwner, id, title, description) { await nftOwner.call( nft, "nft_mint", - [id, nftOwner.accountId, token_metadata], + { + token_id: id, + token_owner_id: nftOwner.accountId, + token_metadata, + }, { attachedDeposit: "10 mN" } ); } @@ -45,7 +49,9 @@ test.beforeEach(async (t) => { metadata: { spec: "nft-1.0.0", name: "My NFT", symbol: "NFT" }, }); - await nftReceiver.call(nftReceiver, "init", nft.accountId); + await nftReceiver.call(nftReceiver, "init", { + non_fungible_token_account_id: nft.accountId, + }); await helper_mint( nft, @@ -86,13 +92,13 @@ test("Enumerate NFT tokens total supply", async (t) => { test("Enumerate NFT tokens", async (t) => { const { nft } = t.context.accounts; - let nftTokens = await nft.view("nft_tokens", [1, null]); + let nftTokens = await nft.view("nft_tokens", { from_index: 1, limit: null }); t.is(nftTokens.length, 3); t.is(nftTokens[0].token_id, "1"); t.is(nftTokens[1].token_id, "2"); t.is(nftTokens[2].token_id, "3"); - nftTokens = await nft.view("nft_tokens", [null, 2]); + nftTokens = await nft.view("nft_tokens", { from_index: null, limit: 2 }); t.is(nftTokens.length, 2); t.is(nftTokens[0].token_id, "0"); t.is(nftTokens[1].token_id, "1"); @@ -101,42 +107,46 @@ test("Enumerate NFT tokens", async (t) => { test("Enumerate NFT tokens supply for owner", async (t) => { const { ali, nft, nftOwner } = t.context.accounts; - let aliNfts = await nft.view("nft_supply_for_owner", ali.accountId); + let aliNfts = await nft.view("nft_supply_for_owner", { + account_id: ali.accountId, + }); t.is(aliNfts, 0); - let ownerNfts = await nft.view("nft_supply_for_owner", nftOwner.accountId); + let ownerNfts = await nft.view("nft_supply_for_owner", { + account_id: nftOwner.accountId, + }); t.is(ownerNfts, 4); }); test("Enumerate NFT tokens for owner", async (t) => { const { ali, nft, nftOwner } = t.context.accounts; - let nftTokens = await nft.view("nft_tokens_for_owner", [ - nftOwner.accountId, - null, - null, - ]); + let nftTokens = await nft.view("nft_tokens_for_owner", { + account_id: nftOwner.accountId, + from_index: null, + limit: null, + }); t.is(nftTokens.length, 4); t.is(nftTokens[0].token_id, "0"); t.is(nftTokens[1].token_id, "1"); t.is(nftTokens[2].token_id, "2"); t.is(nftTokens[3].token_id, "3"); - nftTokens = await nft.view("nft_tokens_for_owner", [ - nftOwner.accountId, - 1, - null, - ]); + nftTokens = await nft.view("nft_tokens_for_owner", { + account_id: nftOwner.accountId, + from_index: 1, + limit: null, + }); t.is(nftTokens.length, 3); t.is(nftTokens[0].token_id, "1"); t.is(nftTokens[1].token_id, "2"); t.is(nftTokens[2].token_id, "3"); - nftTokens = await nft.view("nft_tokens_for_owner", [ - nftOwner.accountId, - null, - 2, - ]); + nftTokens = await nft.view("nft_tokens_for_owner", { + account_id: nftOwner.accountId, + from_index: null, + limit: 2, + }); t.is(nftTokens.length, 2); t.is(nftTokens[0].token_id, "0"); t.is(nftTokens[1].token_id, "1"); @@ -144,23 +154,28 @@ test("Enumerate NFT tokens for owner", async (t) => { let res = await nftOwner.callRaw( nft, "nft_transfer", - [ali.accountId, "0", null, "simple transfer"], + { + receiver_id: ali.accountId, + token_id: "0", + approval_id: null, + memo: "simple transfer", + }, { attachedDeposit: "1" } ); t.is(res.result.status.SuccessValue, ""); - nftTokens = await nft.view("nft_tokens_for_owner", [ - ali.accountId, - null, - null, - ]); + nftTokens = await nft.view("nft_tokens_for_owner", { + account_id: ali.accountId, + from_index: null, + limit: null, + }); t.is(nftTokens.length, 1); - nftTokens = await nft.view("nft_tokens_for_owner", [ - nftOwner.accountId, - null, - null, - ]); + nftTokens = await nft.view("nft_tokens_for_owner", { + account_id: nftOwner.accountId, + from_index: null, + limit: null, + }); t.is(nftTokens.length, 3); t.is(nftTokens[0].token_id, "3"); t.is(nftTokens[1].token_id, "1"); diff --git a/examples/src/standard-nft/my-nft.ts b/examples/src/standard-nft/my-nft.ts index 4171487c..430dedfd 100644 --- a/examples/src/standard-nft/my-nft.ts +++ b/examples/src/standard-nft/my-nft.ts @@ -78,72 +78,98 @@ export class MyNFT } @view({}) - nft_tokens([from_index, limit]: [ - from_index: number, - limit: number - ]): Token[] { - return this.tokens.nft_tokens([from_index, limit]); + nft_tokens({ + from_index, + limit, + }: { + from_index: number; + limit: number; + }): Token[] { + return this.tokens.nft_tokens({ from_index, limit }); } @view({}) - nft_supply_for_owner(account_id: string): number { - return this.tokens.nft_supply_for_owner(account_id); + nft_supply_for_owner({ account_id }: { account_id: string }): number { + return this.tokens.nft_supply_for_owner({ account_id }); } @view({}) - nft_tokens_for_owner([account_id, from_index, limit]: [ - account_id: string, - from_index: number, - limit: number - ]): Token[] { - return this.tokens.nft_tokens_for_owner([account_id, from_index, limit]); + nft_tokens_for_owner({ + account_id, + from_index, + limit, + }: { + account_id: string; + from_index: number; + limit: number; + }): Token[] { + return this.tokens.nft_tokens_for_owner({ account_id, from_index, limit }); } @call({ payableFunction: true }) - nft_approve([token_id, account_id, msg]: [ - token_id: string, - account_id: string, - msg: string - ]): Option { - return this.tokens.nft_approve([token_id, account_id, msg]); + nft_approve({ + token_id, + account_id, + msg, + }: { + token_id: string; + account_id: string; + msg: string; + }): Option { + return this.tokens.nft_approve({ token_id, account_id, msg }); } @call({ payableFunction: true }) - nft_revoke([token_id, account_id]: [token_id: string, account_id: string]) { - return this.tokens.nft_revoke([token_id, account_id]); + nft_revoke({ + token_id, + account_id, + }: { + token_id: string; + account_id: string; + }) { + return this.tokens.nft_revoke({ token_id, account_id }); } @call({ payableFunction: true }) - nft_revoke_all(token_id: string) { - return this.tokens.nft_revoke_all(token_id); + nft_revoke_all({ token_id }: { token_id: string }) { + return this.tokens.nft_revoke_all({ token_id }); } @view({}) - nft_is_approved([token_id, approved_account_id, approval_id]: [ - token_id: string, - approved_account_id: string, - approval_id: bigint - ]): boolean { - return this.tokens.nft_is_approved([ + nft_is_approved({ + token_id, + approved_account_id, + approval_id, + }: { + token_id: string; + approved_account_id: string; + approval_id: bigint; + }): boolean { + return this.tokens.nft_is_approved({ token_id, approved_account_id, approval_id, - ]); + }); } @call({}) - nft_resolve_transfer([previous_owner_id, receiver_id, token_id, approvals]: [ - previous_owner_id: string, - receiver_id: string, - token_id: string, - approvals: { [approval: string]: bigint } - ]): boolean { - return this.tokens.nft_resolve_transfer([ + nft_resolve_transfer({ + previous_owner_id, + receiver_id, + token_id, + approved_account_ids, + }: { + previous_owner_id: string; + receiver_id: string; + token_id: string; + approved_account_ids: { [approval: string]: bigint }; + }): boolean { + return this.tokens.nft_resolve_transfer({ previous_owner_id, receiver_id, token_id, - approvals, - ]); + approved_account_ids, + }); } @view({}) @@ -153,35 +179,46 @@ export class MyNFT } @call({ payableFunction: true }) - nft_transfer([receiver_id, token_id, approval_id, memo]: [ - receiver_id: string, - token_id: string, - approval_id: bigint, - memo: string - ]) { - this.tokens.nft_transfer([receiver_id, token_id, approval_id, memo]); + nft_transfer({ + receiver_id, + token_id, + approval_id, + memo, + }: { + receiver_id: string; + token_id: string; + approval_id: bigint; + memo: string; + }) { + this.tokens.nft_transfer({ receiver_id, token_id, approval_id, memo }); } @call({ payableFunction: true }) - nft_transfer_call([receiver_id, token_id, approval_id, memo, msg]: [ - receiver_id: string, - token_id: string, - approval_id: bigint, - memo: string, - msg: string - ]): PromiseOrValue { - return this.tokens.nft_transfer_call([ + nft_transfer_call({ + receiver_id, + token_id, + approval_id, + memo, + msg, + }: { + receiver_id: string; + token_id: string; + approval_id: bigint; + memo: string; + msg: string; + }): PromiseOrValue { + return this.tokens.nft_transfer_call({ receiver_id, token_id, approval_id, memo, msg, - ]); + }); } @view({}) - nft_token(token_id: string): Option { - return this.tokens.nft_token(token_id); + nft_token({ token_id }: { token_id: string }): Option { + return this.tokens.nft_token({ token_id }); } @initialize({ requireInit: true }) @@ -205,11 +242,15 @@ export class MyNFT } @call({ payableFunction: true }) - nft_mint([token_id, token_owner_id, token_metadata]: [ - token_id: TokenId, - token_owner_id: AccountId, - token_metadata: TokenMetadata - ]) { + nft_mint({ + token_id, + token_owner_id, + token_metadata, + }: { + token_id: TokenId; + token_owner_id: AccountId; + token_metadata: TokenMetadata; + }) { assert( near.predecessorAccountId() === this.tokens.owner_id, "Unauthorized" diff --git a/examples/src/standard-nft/test-approval-receiver.ts b/examples/src/standard-nft/test-approval-receiver.ts index 8c9f083d..db527100 100644 --- a/examples/src/standard-nft/test-approval-receiver.ts +++ b/examples/src/standard-nft/test-approval-receiver.ts @@ -29,12 +29,17 @@ export class ApprovalReceiver } @call({}) - nft_on_approve([token_id, owner_id, approval_id, msg]: [ - token_id: string, - owner_id: string, - approval_id: bigint, - msg: string - ]): PromiseOrValue { + nft_on_approve({ + token_id, + owner_id, + approval_id, + msg, + }: { + token_id: string; + owner_id: string; + approval_id: bigint; + msg: string; + }): PromiseOrValue { assert( near.predecessorAccountId() === this.non_fungible_token_account_id, "Only supports the one non-fungible token contract" @@ -66,7 +71,11 @@ export class ApprovalReceiver } @initialize({}) - init(non_fungible_token_account_id: AccountId) { + init({ + non_fungible_token_account_id, + }: { + non_fungible_token_account_id: AccountId; + }) { this.non_fungible_token_account_id = non_fungible_token_account_id; } } diff --git a/examples/src/standard-nft/test-token-receiver.ts b/examples/src/standard-nft/test-token-receiver.ts index 7d0a8192..d9df9484 100644 --- a/examples/src/standard-nft/test-token-receiver.ts +++ b/examples/src/standard-nft/test-token-receiver.ts @@ -29,17 +29,26 @@ export class TokenReceiver } @initialize({}) - init(non_fungible_token_account_id: AccountId) { + init({ + non_fungible_token_account_id, + }: { + non_fungible_token_account_id: AccountId; + }) { this.non_fungible_token_account_id = non_fungible_token_account_id; } @call({}) - nft_on_transfer([sender_id, previous_owner_id, token_id, msg]: [ - sender_id: string, - previous_owner_id: string, - token_id: string, - msg: string - ]): PromiseOrValue { + nft_on_transfer({ + sender_id, + previous_owner_id, + token_id, + msg, + }: { + sender_id: string; + previous_owner_id: string; + token_id: string; + msg: string; + }): PromiseOrValue { assert( near.predecessorAccountId() === this.non_fungible_token_account_id, "Only supports the one non-fungible token contract" diff --git a/near-contract-standards/lib/non_fungible_token/approval/approval_receiver.d.ts b/near-contract-standards/lib/non_fungible_token/approval/approval_receiver.d.ts index 324ccc1a..f146baf8 100644 --- a/near-contract-standards/lib/non_fungible_token/approval/approval_receiver.d.ts +++ b/near-contract-standards/lib/non_fungible_token/approval/approval_receiver.d.ts @@ -16,10 +16,10 @@ export interface NonFungibleTokenApprovalReceiver { handle the approval. Can indicate both a function to call and the parameters to pass to that function. */ - nft_on_approve([token_id, owner_id, approval_id, msg]: [ - token_id: TokenId, - owner_id: AccountId, - approval_id: bigint, - msg: string - ]): PromiseOrValue; + nft_on_approve({ token_id, owner_id, approval_id, msg }: { + token_id: TokenId; + owner_id: AccountId; + approval_id: bigint; + msg: string; + }): PromiseOrValue; } diff --git a/near-contract-standards/lib/non_fungible_token/approval/index.d.ts b/near-contract-standards/lib/non_fungible_token/approval/index.d.ts index 72373608..bc3c874a 100644 --- a/near-contract-standards/lib/non_fungible_token/approval/index.d.ts +++ b/near-contract-standards/lib/non_fungible_token/approval/index.d.ts @@ -34,11 +34,11 @@ export interface NonFungibleTokenApproval { * @returns void, if no `msg` given. Otherwise, returns promise call to * `nft_on_approve`, which can resolve with whatever it wants. */ - nft_approve([token_id, account_id, msg]: [ - token_id: TokenId, - account_id: AccountId, - msg: Option - ]): Option; + nft_approve({ token_id, account_id, msg }: { + token_id: TokenId; + account_id: AccountId; + msg: Option; + }): Option; /** Revoke an approved account for a specific token. * * Requirements @@ -51,10 +51,10 @@ export interface NonFungibleTokenApproval { * @param token_id - The token for which to revoke an approval * @param account_id - The account to remove from `approvals` */ - nft_revoke([token_id, account_id]: [ - token_id: TokenId, - account_id: AccountId - ]): any; + nft_revoke({ token_id, account_id }: { + token_id: TokenId; + account_id: AccountId; + }): any; /** Revoke all approved accounts for a specific token. * * Requirements @@ -66,7 +66,9 @@ export interface NonFungibleTokenApproval { * * @param token_id - The token with approvals to revoke */ - nft_revoke_all(token_id: TokenId): any; + nft_revoke_all({ token_id }: { + token_id: TokenId; + }): any; /** Check if a token is approved for transfer by a given account, optionally * checking an approval_id * @@ -76,9 +78,9 @@ export interface NonFungibleTokenApproval { * @returns if `approval_id` given, `true` if `approved_account_id` is approved with given `approval_id` * otherwise, `true` if `approved_account_id` is in list of approved accounts */ - nft_is_approved([token_id, approved_account_id, approval_id]: [ - token_id: TokenId, - approved_account_id: AccountId, - approval_id: Option - ]): boolean; + nft_is_approved({ token_id, approved_account_id, approval_id }: { + token_id: TokenId; + approved_account_id: AccountId; + approval_id: Option; + }): boolean; } diff --git a/near-contract-standards/lib/non_fungible_token/core/index.d.ts b/near-contract-standards/lib/non_fungible_token/core/index.d.ts index b8ff6d7a..67f19a68 100644 --- a/near-contract-standards/lib/non_fungible_token/core/index.d.ts +++ b/near-contract-standards/lib/non_fungible_token/core/index.d.ts @@ -32,12 +32,12 @@ export interface NonFungibleTokenCore { * @param memo (optional) - For use cases that may benefit from indexing or * providing information for a transfer */ - nft_transfer([receiver_id, token_id, approval_id, memo]: [ - receiver_id: AccountId, - token_id: TokenId, - approval_id: Option, - memo: Option - ]): any; + nft_transfer({ receiver_id, token_id, approval_id, memo }: { + receiver_id: AccountId; + token_id: TokenId; + approval_id: Option; + memo: Option; + }): any; /** Transfer token and call a method on a receiver contract. A successful * workflow will end in a success execution outcome to the callback on the NFT * contract at the method `nft_resolve_transfer`. @@ -71,13 +71,15 @@ export interface NonFungibleTokenCore { * order to properly handle the transfer. Can indicate both a function to * call and the parameters to pass to that function. */ - nft_transfer_call([receiver_id, token_id, approval_id, memo]: [ - receiver_id: AccountId, - token_id: TokenId, - approval_id: Option, - memo: Option, - msg: string - ]): any; + nft_transfer_call({ receiver_id, token_id, approval_id, memo }: { + receiver_id: AccountId; + token_id: TokenId; + approval_id: Option; + memo: Option; + msg: string; + }): any; /** Returns the token with the given `token_id` or `null` if no such token. */ - nft_token(token_id: TokenId): Option; + nft_token({ token_id }: { + token_id: TokenId; + }): Option; } diff --git a/near-contract-standards/lib/non_fungible_token/core/receiver.d.ts b/near-contract-standards/lib/non_fungible_token/core/receiver.d.ts index 5c1fab05..8b26858e 100644 --- a/near-contract-standards/lib/non_fungible_token/core/receiver.d.ts +++ b/near-contract-standards/lib/non_fungible_token/core/receiver.d.ts @@ -19,10 +19,10 @@ export interface NonFungibleTokenReceiver { * * @returns true if token should be returned to `sender_id` */ - nft_on_transfer([sender_id, previous_owner_id, token_id, msg]: [ - sender_id: AccountId, - previous_owner_id: AccountId, - token_id: TokenId, - msg: string - ]): PromiseOrValue; + nft_on_transfer({ sender_id, previous_owner_id, token_id, msg }: { + sender_id: AccountId; + previous_owner_id: AccountId; + token_id: TokenId; + msg: string; + }): PromiseOrValue; } diff --git a/near-contract-standards/lib/non_fungible_token/core/resolver.d.ts b/near-contract-standards/lib/non_fungible_token/core/resolver.d.ts index 032b27f6..690acbd2 100644 --- a/near-contract-standards/lib/non_fungible_token/core/resolver.d.ts +++ b/near-contract-standards/lib/non_fungible_token/core/resolver.d.ts @@ -29,12 +29,12 @@ export interface NonFungibleTokenResolver { * * @returns true if token was successfully transferred to `receiver_id`. */ - nft_resolve_transfer([previous_owner_id, receiver_id, token_id, approvals]: [ - previous_owner_id: AccountId, - receiver_id: AccountId, - token_id: TokenId, - approvals: Option<{ + nft_resolve_transfer({ previous_owner_id, receiver_id, token_id, approved_account_ids }: { + previous_owner_id: AccountId; + receiver_id: AccountId; + token_id: TokenId; + approved_account_ids: Option<{ [approval: AccountId]: bigint; - }> - ]): boolean; + }>; + }): boolean; } diff --git a/near-contract-standards/lib/non_fungible_token/enumeration/index.d.ts b/near-contract-standards/lib/non_fungible_token/enumeration/index.d.ts index e8b98432..89b6ad94 100644 --- a/near-contract-standards/lib/non_fungible_token/enumeration/index.d.ts +++ b/near-contract-standards/lib/non_fungible_token/enumeration/index.d.ts @@ -10,16 +10,18 @@ export interface NonFungibleTokenEnumeration { * @param limit - The maximum number of tokens to return * @returns - An array of Token objects, as described in Core standard */ - nft_tokens([from_index, limit]: [ - from_index: number | null, - limit: number | null - ]): Token[]; + nft_tokens({ from_index, limit }: { + from_index: number | null; + limit: number | null; + }): Token[]; /** Get number of tokens owned by a given account * * @param account_id - A valid NEAR account * @returns - The number of non-fungible tokens owned by given `account_id` */ - nft_supply_for_owner(account_id: AccountId): number; + nft_supply_for_owner({ account_id }: { + account_id: AccountId; + }): number; /** Get list of all tokens owned by a given account * * @param account_id - A valid NEAR account @@ -27,9 +29,9 @@ export interface NonFungibleTokenEnumeration { * @param limit - The maximum number of tokens to return * @returns - A paginated list of all tokens owned by this account */ - nft_tokens_for_owner([account_id, from_index, limit]: [ - account_id: AccountId, - from_index: number, - limit: number - ]): Token[]; + nft_tokens_for_owner({ account_id, from_index, limit }: { + account_id: AccountId; + from_index: number; + limit: number; + }): Token[]; } diff --git a/near-contract-standards/lib/non_fungible_token/impl.d.ts b/near-contract-standards/lib/non_fungible_token/impl.d.ts index 89acaa76..0ad9ddb7 100644 --- a/near-contract-standards/lib/non_fungible_token/impl.d.ts +++ b/near-contract-standards/lib/non_fungible_token/impl.d.ts @@ -30,28 +30,35 @@ export declare class NonFungibleToken implements NonFungibleTokenCore, NonFungib constructor(); nft_total_supply(): number; private enum_get_token; - nft_tokens([from_index, limit]: [ - from_index: number | null, - limit: number | null - ]): Token[]; - nft_supply_for_owner(account_id: AccountId): number; - nft_tokens_for_owner([account_id, from_index, limit]: [ - account_id: AccountId, - from_index: number, - limit: number - ]): Token[]; - nft_approve([token_id, account_id, msg]: [ - token_id: TokenId, - account_id: AccountId, - msg: string - ]): Option; - nft_revoke([token_id, account_id]: [token_id: TokenId, account_id: AccountId]): void; - nft_revoke_all(token_id: TokenId): void; - nft_is_approved([token_id, approved_account_id, approval_id]: [ - token_id: TokenId, - approved_account_id: AccountId, - approval_id: bigint - ]): boolean; + nft_tokens({ from_index, limit }: { + from_index: number | null; + limit: number | null; + }): Token[]; + nft_supply_for_owner({ account_id }: { + account_id: AccountId; + }): number; + nft_tokens_for_owner({ account_id, from_index, limit }: { + account_id: AccountId; + from_index: number; + limit: number; + }): Token[]; + nft_approve({ token_id, account_id, msg }: { + token_id: TokenId; + account_id: AccountId; + msg: string; + }): Option; + nft_revoke({ token_id, account_id }: { + token_id: TokenId; + account_id: AccountId; + }): void; + nft_revoke_all({ token_id }: { + token_id: TokenId; + }): void; + nft_is_approved({ token_id, approved_account_id, approval_id }: { + token_id: TokenId; + approved_account_id: AccountId; + approval_id: Option; + }): boolean; init(owner_by_id_prefix: IntoStorageKey, owner_id: AccountId, token_metadata_prefix: Option, enumeration_prefix: Option, approval_prefix: Option): void; static reconstruct(data: NonFungibleToken): NonFungibleToken; measure_min_token_storage_cost(): void; @@ -62,28 +69,30 @@ export declare class NonFungibleToken implements NonFungibleTokenCore, NonFungib static emit_transfer(owner_id: AccountId, receiver_id: AccountId, token_id: TokenId, sender_id: Option, memo: Option): void; internal_mint(token_id: TokenId, token_owner_id: AccountId, token_metadata: Option): Token; internal_mint_with_refund(token_id: TokenId, token_owner_id: AccountId, token_metadata: Option, refund_id: Option): Token; - nft_transfer([receiver_id, token_id, approval_id, memo]: [ - receiver_id: AccountId, - token_id: TokenId, - approval_id: Option, - memo: Option - ]): void; - nft_transfer_call([receiver_id, token_id, approval_id, memo, msg]: [ - receiver_id: AccountId, - token_id: TokenId, - approval_id: Option, - memo: Option, - msg: string - ]): NearPromise; - nft_token(token_id: TokenId): Option; - nft_resolve_transfer([previous_owner_id, receiver_id, token_id, approved_account_ids,]: [ - previous_owner_id: AccountId, - receiver_id: AccountId, - token_id: TokenId, + nft_transfer({ receiver_id, token_id, approval_id, memo }: { + receiver_id: AccountId; + token_id: TokenId; + approval_id: Option; + memo: Option; + }): void; + nft_transfer_call({ receiver_id, token_id, approval_id, memo, msg }: { + receiver_id: AccountId; + token_id: TokenId; + approval_id: Option; + memo: Option; + msg: string; + }): NearPromise; + nft_token({ token_id }: { + token_id: TokenId; + }): Option; + nft_resolve_transfer({ previous_owner_id, receiver_id, token_id, approved_account_ids, }: { + previous_owner_id: AccountId; + receiver_id: AccountId; + token_id: TokenId; approved_account_ids: Option<{ [approvals: AccountId]: bigint; - }> - ]): boolean; + }>; + }): boolean; } export declare type StorageKey = TokensPerOwner | TokenPerOwnerInner; export declare class TokensPerOwner implements IntoStorageKey { diff --git a/near-contract-standards/lib/non_fungible_token/impl.js b/near-contract-standards/lib/non_fungible_token/impl.js index aaf6d06d..c68e2010 100644 --- a/near-contract-standards/lib/non_fungible_token/impl.js +++ b/near-contract-standards/lib/non_fungible_token/impl.js @@ -54,7 +54,7 @@ export class NonFungibleToken { }); return new Token(token_id, owner_id, metadata, approved_account_ids); } - nft_tokens([from_index, limit]) { + nft_tokens({ from_index, limit }) { const start_index = from_index === null ? 0 : from_index; assert(this.owner_by_id.length >= start_index, "Out of bounds, please use a smaller from_index."); let l = limit === null ? 2 ** 32 : limit; @@ -68,7 +68,7 @@ export class NonFungibleToken { } return ret; } - nft_supply_for_owner(account_id) { + nft_supply_for_owner({ account_id }) { const tokens_per_owner = this.tokens_per_owner; assert(tokens_per_owner !== null, "Could not find tokens_per_owner when calling a method on the enumeration standard."); const account_tokens = tokens_per_owner.get(account_id, { @@ -76,7 +76,7 @@ export class NonFungibleToken { }); return account_tokens === null ? 0 : account_tokens.length; } - nft_tokens_for_owner([account_id, from_index, limit]) { + nft_tokens_for_owner({ account_id, from_index, limit }) { const tokens_per_owner = this.tokens_per_owner; assert(tokens_per_owner !== null, "Could not find tokens_per_owner when calling a method on the enumeration standard."); const token_set = tokens_per_owner.get(account_id, { @@ -96,7 +96,7 @@ export class NonFungibleToken { } return ret; } - nft_approve([token_id, account_id, msg]) { + nft_approve({ token_id, account_id, msg }) { assert_at_least_one_yocto(); if (this.approvals_by_id === null) { throw new Error("NFT does not support Approval Management"); @@ -114,11 +114,11 @@ export class NonFungibleToken { const storage_used = old_approval_id === null ? bytes_for_approved_account_id(account_id) : 0; refund_deposit(BigInt(storage_used)); if (msg) { - return NearPromise.new(account_id).functionCall("nft_on_approve", bytes(serialize([token_id, owner_id, approval_id, msg])), 0n, near.prepaidGas() - GAS_FOR_NFT_APPROVE); + return NearPromise.new(account_id).functionCall("nft_on_approve", bytes(serialize({ token_id, owner_id, approval_id, msg })), 0n, near.prepaidGas() - GAS_FOR_NFT_APPROVE); } return null; } - nft_revoke([token_id, account_id]) { + nft_revoke({ token_id, account_id }) { assert_one_yocto(); if (this.approvals_by_id === null) { throw new Error("NFT does not support Approval Management"); @@ -139,7 +139,7 @@ export class NonFungibleToken { } } } - nft_revoke_all(token_id) { + nft_revoke_all({ token_id }) { assert_one_yocto(); if (this.approvals_by_id === null) { throw new Error("NFT does not support Approval Management"); @@ -154,7 +154,7 @@ export class NonFungibleToken { approvals_by_id.remove(token_id); } } - nft_is_approved([token_id, approved_account_id, approval_id]) { + nft_is_approved({ token_id, approved_account_id, approval_id }) { expect_token_found(this.owner_by_id.get(token_id)); if (this.approvals_by_id === null) { return false; @@ -349,22 +349,27 @@ export class NonFungibleToken { } return new Token(token_id, owner_id, token_metadata, approved_account_ids); } - nft_transfer([receiver_id, token_id, approval_id, memo]) { + nft_transfer({ receiver_id, token_id, approval_id, memo }) { assert_at_least_one_yocto(); const sender_id = near.predecessorAccountId(); this.internal_transfer(sender_id, receiver_id, token_id, approval_id, memo); } - nft_transfer_call([receiver_id, token_id, approval_id, memo, msg]) { + nft_transfer_call({ receiver_id, token_id, approval_id, memo, msg }) { assert_at_least_one_yocto(); assert(near.prepaidGas() > GAS_FOR_NFT_TRANSFER_CALL, "Not enough prepaid gas"); const sender_id = near.predecessorAccountId(); - const [old_owner, old_approvals] = this.internal_transfer(sender_id, receiver_id, token_id, approval_id, memo); + const [previous_owner_id, approved_account_ids] = this.internal_transfer(sender_id, receiver_id, token_id, approval_id, memo); const promise = NearPromise.new(receiver_id) - .functionCall("nft_on_transfer", bytes(JSON.stringify([sender_id, old_owner, token_id, msg])), 0n, near.prepaidGas() - GAS_FOR_NFT_TRANSFER_CALL) - .then(NearPromise.new(near.currentAccountId()).functionCall("nft_resolve_transfer", bytes(JSON.stringify([old_owner, receiver_id, token_id, old_approvals])), 0n, GAS_FOR_RESOLVE_TRANSFER)); + .functionCall("nft_on_transfer", bytes(JSON.stringify({ sender_id, previous_owner_id, token_id, msg })), 0n, near.prepaidGas() - GAS_FOR_NFT_TRANSFER_CALL) + .then(NearPromise.new(near.currentAccountId()).functionCall("nft_resolve_transfer", bytes(JSON.stringify({ + previous_owner_id, + receiver_id, + token_id, + approved_account_ids, + })), 0n, GAS_FOR_RESOLVE_TRANSFER)); return promise; } - nft_token(token_id) { + nft_token({ token_id }) { const owner_id = this.owner_by_id.get(token_id); if (owner_id == null) { return null; @@ -375,7 +380,7 @@ export class NonFungibleToken { const approved_account_ids = this.approvals_by_id?.get(token_id); return new Token(token_id, owner_id, metadata, approved_account_ids); } - nft_resolve_transfer([previous_owner_id, receiver_id, token_id, approved_account_ids,]) { + nft_resolve_transfer({ previous_owner_id, receiver_id, token_id, approved_account_ids, }) { let must_revert = false; let p; try { diff --git a/near-contract-standards/src/non_fungible_token/approval/approval_receiver.ts b/near-contract-standards/src/non_fungible_token/approval/approval_receiver.ts index 3c78f107..f10478b1 100644 --- a/near-contract-standards/src/non_fungible_token/approval/approval_receiver.ts +++ b/near-contract-standards/src/non_fungible_token/approval/approval_receiver.ts @@ -17,10 +17,15 @@ export interface NonFungibleTokenApprovalReceiver { handle the approval. Can indicate both a function to call and the parameters to pass to that function. */ - nft_on_approve([token_id, owner_id, approval_id, msg]: [ - token_id: TokenId, - owner_id: AccountId, - approval_id: bigint, - msg: string - ]): PromiseOrValue; + nft_on_approve({ + token_id, + owner_id, + approval_id, + msg, + }: { + token_id: TokenId; + owner_id: AccountId; + approval_id: bigint; + msg: string; + }): PromiseOrValue; } diff --git a/near-contract-standards/src/non_fungible_token/approval/index.ts b/near-contract-standards/src/non_fungible_token/approval/index.ts index 7f0dd24f..e97bfa14 100644 --- a/near-contract-standards/src/non_fungible_token/approval/index.ts +++ b/near-contract-standards/src/non_fungible_token/approval/index.ts @@ -35,11 +35,15 @@ export interface NonFungibleTokenApproval { * @returns void, if no `msg` given. Otherwise, returns promise call to * `nft_on_approve`, which can resolve with whatever it wants. */ - nft_approve([token_id, account_id, msg]: [ - token_id: TokenId, - account_id: AccountId, - msg: Option - ]): Option; + nft_approve({ + token_id, + account_id, + msg, + }: { + token_id: TokenId; + account_id: AccountId; + msg: Option; + }): Option; /** Revoke an approved account for a specific token. * @@ -53,10 +57,13 @@ export interface NonFungibleTokenApproval { * @param token_id - The token for which to revoke an approval * @param account_id - The account to remove from `approvals` */ - nft_revoke([token_id, account_id]: [ - token_id: TokenId, - account_id: AccountId - ]); + nft_revoke({ + token_id, + account_id, + }: { + token_id: TokenId; + account_id: AccountId; + }); /** Revoke all approved accounts for a specific token. * @@ -69,7 +76,7 @@ export interface NonFungibleTokenApproval { * * @param token_id - The token with approvals to revoke */ - nft_revoke_all(token_id: TokenId); + nft_revoke_all({ token_id }: { token_id: TokenId }); /** Check if a token is approved for transfer by a given account, optionally * checking an approval_id @@ -80,9 +87,13 @@ export interface NonFungibleTokenApproval { * @returns if `approval_id` given, `true` if `approved_account_id` is approved with given `approval_id` * otherwise, `true` if `approved_account_id` is in list of approved accounts */ - nft_is_approved([token_id, approved_account_id, approval_id]: [ - token_id: TokenId, - approved_account_id: AccountId, - approval_id: Option - ]): boolean; + nft_is_approved({ + token_id, + approved_account_id, + approval_id, + }: { + token_id: TokenId; + approved_account_id: AccountId; + approval_id: Option; + }): boolean; } diff --git a/near-contract-standards/src/non_fungible_token/core/index.ts b/near-contract-standards/src/non_fungible_token/core/index.ts index 1aa15ada..397acf32 100644 --- a/near-contract-standards/src/non_fungible_token/core/index.ts +++ b/near-contract-standards/src/non_fungible_token/core/index.ts @@ -33,12 +33,17 @@ export interface NonFungibleTokenCore { * @param memo (optional) - For use cases that may benefit from indexing or * providing information for a transfer */ - nft_transfer([receiver_id, token_id, approval_id, memo]: [ - receiver_id: AccountId, - token_id: TokenId, - approval_id: Option, - memo: Option - ]); + nft_transfer({ + receiver_id, + token_id, + approval_id, + memo, + }: { + receiver_id: AccountId; + token_id: TokenId; + approval_id: Option; + memo: Option; + }); /** Transfer token and call a method on a receiver contract. A successful * workflow will end in a success execution outcome to the callback on the NFT @@ -73,14 +78,19 @@ export interface NonFungibleTokenCore { * order to properly handle the transfer. Can indicate both a function to * call and the parameters to pass to that function. */ - nft_transfer_call([receiver_id, token_id, approval_id, memo]: [ - receiver_id: AccountId, - token_id: TokenId, - approval_id: Option, - memo: Option, - msg: string - ]); + nft_transfer_call({ + receiver_id, + token_id, + approval_id, + memo, + }: { + receiver_id: AccountId; + token_id: TokenId; + approval_id: Option; + memo: Option; + msg: string; + }); /** Returns the token with the given `token_id` or `null` if no such token. */ - nft_token(token_id: TokenId): Option; + nft_token({ token_id }: { token_id: TokenId }): Option; } diff --git a/near-contract-standards/src/non_fungible_token/core/receiver.ts b/near-contract-standards/src/non_fungible_token/core/receiver.ts index ee2a9ec1..70241c91 100644 --- a/near-contract-standards/src/non_fungible_token/core/receiver.ts +++ b/near-contract-standards/src/non_fungible_token/core/receiver.ts @@ -20,10 +20,15 @@ export interface NonFungibleTokenReceiver { * * @returns true if token should be returned to `sender_id` */ - nft_on_transfer([sender_id, previous_owner_id, token_id, msg]: [ - sender_id: AccountId, - previous_owner_id: AccountId, - token_id: TokenId, - msg: string - ]): PromiseOrValue; + nft_on_transfer({ + sender_id, + previous_owner_id, + token_id, + msg, + }: { + sender_id: AccountId; + previous_owner_id: AccountId; + token_id: TokenId; + msg: string; + }): PromiseOrValue; } diff --git a/near-contract-standards/src/non_fungible_token/core/resolver.ts b/near-contract-standards/src/non_fungible_token/core/resolver.ts index 5707fea2..c0e56327 100644 --- a/near-contract-standards/src/non_fungible_token/core/resolver.ts +++ b/near-contract-standards/src/non_fungible_token/core/resolver.ts @@ -30,10 +30,15 @@ export interface NonFungibleTokenResolver { * * @returns true if token was successfully transferred to `receiver_id`. */ - nft_resolve_transfer([previous_owner_id, receiver_id, token_id, approvals]: [ - previous_owner_id: AccountId, - receiver_id: AccountId, - token_id: TokenId, - approvals: Option<{ [approval: AccountId]: bigint }> - ]): boolean; + nft_resolve_transfer({ + previous_owner_id, + receiver_id, + token_id, + approved_account_ids, + }: { + previous_owner_id: AccountId; + receiver_id: AccountId; + token_id: TokenId; + approved_account_ids: Option<{ [approval: AccountId]: bigint }>; + }): boolean; } diff --git a/near-contract-standards/src/non_fungible_token/enumeration/index.ts b/near-contract-standards/src/non_fungible_token/enumeration/index.ts index f69545c6..d9d2b620 100644 --- a/near-contract-standards/src/non_fungible_token/enumeration/index.ts +++ b/near-contract-standards/src/non_fungible_token/enumeration/index.ts @@ -12,17 +12,20 @@ export interface NonFungibleTokenEnumeration { * @param limit - The maximum number of tokens to return * @returns - An array of Token objects, as described in Core standard */ - nft_tokens([from_index, limit]: [ - from_index: number | null, // default: "0" - limit: number | null // default: unlimited (could fail due to gas limit) - ]): Token[]; + nft_tokens({ + from_index, + limit, + }: { + from_index: number | null; // default: "0" + limit: number | null; // default: unlimited (could fail due to gas limit) + }): Token[]; /** Get number of tokens owned by a given account * * @param account_id - A valid NEAR account * @returns - The number of non-fungible tokens owned by given `account_id` */ - nft_supply_for_owner(account_id: AccountId): number; + nft_supply_for_owner({ account_id }: { account_id: AccountId }): number; /** Get list of all tokens owned by a given account * @@ -31,9 +34,13 @@ export interface NonFungibleTokenEnumeration { * @param limit - The maximum number of tokens to return * @returns - A paginated list of all tokens owned by this account */ - nft_tokens_for_owner([account_id, from_index, limit]: [ - account_id: AccountId, - from_index: number, // default: "0" - limit: number // default: unlimited (could fail due to gas limit) - ]): Token[]; + nft_tokens_for_owner({ + account_id, + from_index, + limit, + }: { + account_id: AccountId; + from_index: number; // default: "0" + limit: number; // default: unlimited (could fail due to gas limit) + }): Token[]; } diff --git a/near-contract-standards/src/non_fungible_token/impl.ts b/near-contract-standards/src/non_fungible_token/impl.ts index bd984cb1..e2a38aa4 100644 --- a/near-contract-standards/src/non_fungible_token/impl.ts +++ b/near-contract-standards/src/non_fungible_token/impl.ts @@ -101,10 +101,13 @@ export class NonFungibleToken return new Token(token_id, owner_id, metadata, approved_account_ids); } - nft_tokens([from_index, limit]: [ - from_index: number | null, - limit: number | null - ]): Token[] { + nft_tokens({ + from_index, + limit, + }: { + from_index: number | null; + limit: number | null; + }): Token[] { const start_index = from_index === null ? 0 : from_index; assert( this.owner_by_id.length >= start_index, @@ -122,7 +125,7 @@ export class NonFungibleToken return ret; } - nft_supply_for_owner(account_id: AccountId): number { + nft_supply_for_owner({ account_id }: { account_id: AccountId }): number { const tokens_per_owner = this.tokens_per_owner; assert( tokens_per_owner !== null, @@ -135,11 +138,15 @@ export class NonFungibleToken return account_tokens === null ? 0 : account_tokens.length; } - nft_tokens_for_owner([account_id, from_index, limit]: [ - account_id: AccountId, - from_index: number, - limit: number - ]): Token[] { + nft_tokens_for_owner({ + account_id, + from_index, + limit, + }: { + account_id: AccountId; + from_index: number; + limit: number; + }): Token[] { const tokens_per_owner = this.tokens_per_owner; assert( tokens_per_owner !== null, @@ -168,11 +175,15 @@ export class NonFungibleToken return ret; } - nft_approve([token_id, account_id, msg]: [ - token_id: TokenId, - account_id: AccountId, - msg: string - ]): Option { + nft_approve({ + token_id, + account_id, + msg, + }: { + token_id: TokenId; + account_id: AccountId; + msg: string; + }): Option { assert_at_least_one_yocto(); if (this.approvals_by_id === null) { throw new Error("NFT does not support Approval Management"); @@ -202,7 +213,7 @@ export class NonFungibleToken if (msg) { return NearPromise.new(account_id).functionCall( "nft_on_approve", - bytes(serialize([token_id, owner_id, approval_id, msg])), + bytes(serialize({ token_id, owner_id, approval_id, msg })), 0n, near.prepaidGas() - GAS_FOR_NFT_APPROVE ); @@ -210,10 +221,13 @@ export class NonFungibleToken return null; } - nft_revoke([token_id, account_id]: [ - token_id: TokenId, - account_id: AccountId - ]) { + nft_revoke({ + token_id, + account_id, + }: { + token_id: TokenId; + account_id: AccountId; + }) { assert_one_yocto(); if (this.approvals_by_id === null) { throw new Error("NFT does not support Approval Management"); @@ -240,7 +254,7 @@ export class NonFungibleToken } } - nft_revoke_all(token_id: TokenId) { + nft_revoke_all({ token_id }: { token_id: TokenId }) { assert_one_yocto(); if (this.approvals_by_id === null) { throw new Error("NFT does not support Approval Management"); @@ -262,11 +276,15 @@ export class NonFungibleToken } } - nft_is_approved([token_id, approved_account_id, approval_id]: [ - token_id: TokenId, - approved_account_id: AccountId, - approval_id: bigint - ]): boolean { + nft_is_approved({ + token_id, + approved_account_id, + approval_id, + }: { + token_id: TokenId; + approved_account_id: AccountId; + approval_id: Option; + }): boolean { expect_token_found(this.owner_by_id.get(token_id)); if (this.approvals_by_id === null) { @@ -562,31 +580,42 @@ export class NonFungibleToken return new Token(token_id, owner_id, token_metadata, approved_account_ids); } - nft_transfer([receiver_id, token_id, approval_id, memo]: [ - receiver_id: AccountId, - token_id: TokenId, - approval_id: Option, - memo: Option - ]) { + nft_transfer({ + receiver_id, + token_id, + approval_id, + memo, + }: { + receiver_id: AccountId; + token_id: TokenId; + approval_id: Option; + memo: Option; + }) { assert_at_least_one_yocto(); const sender_id = near.predecessorAccountId(); this.internal_transfer(sender_id, receiver_id, token_id, approval_id, memo); } - nft_transfer_call([receiver_id, token_id, approval_id, memo, msg]: [ - receiver_id: AccountId, - token_id: TokenId, - approval_id: Option, - memo: Option, - msg: string - ]) { + nft_transfer_call({ + receiver_id, + token_id, + approval_id, + memo, + msg, + }: { + receiver_id: AccountId; + token_id: TokenId; + approval_id: Option; + memo: Option; + msg: string; + }) { assert_at_least_one_yocto(); assert( near.prepaidGas() > GAS_FOR_NFT_TRANSFER_CALL, "Not enough prepaid gas" ); const sender_id = near.predecessorAccountId(); - const [old_owner, old_approvals] = this.internal_transfer( + const [previous_owner_id, approved_account_ids] = this.internal_transfer( sender_id, receiver_id, token_id, @@ -597,7 +626,7 @@ export class NonFungibleToken const promise = NearPromise.new(receiver_id) .functionCall( "nft_on_transfer", - bytes(JSON.stringify([sender_id, old_owner, token_id, msg])), + bytes(JSON.stringify({ sender_id, previous_owner_id, token_id, msg })), 0n, near.prepaidGas() - GAS_FOR_NFT_TRANSFER_CALL ) @@ -605,7 +634,12 @@ export class NonFungibleToken NearPromise.new(near.currentAccountId()).functionCall( "nft_resolve_transfer", bytes( - JSON.stringify([old_owner, receiver_id, token_id, old_approvals]) + JSON.stringify({ + previous_owner_id, + receiver_id, + token_id, + approved_account_ids, + }) ), 0n, GAS_FOR_RESOLVE_TRANSFER @@ -614,7 +648,7 @@ export class NonFungibleToken return promise; } - nft_token(token_id: TokenId): Option { + nft_token({ token_id }: { token_id: TokenId }): Option { const owner_id = this.owner_by_id.get(token_id); if (owner_id == null) { return null; @@ -628,17 +662,17 @@ export class NonFungibleToken return new Token(token_id, owner_id, metadata, approved_account_ids); } - nft_resolve_transfer([ + nft_resolve_transfer({ previous_owner_id, receiver_id, token_id, approved_account_ids, - ]: [ - previous_owner_id: AccountId, - receiver_id: AccountId, - token_id: TokenId, - approved_account_ids: Option<{ [approvals: AccountId]: bigint }> - ]): boolean { + }: { + previous_owner_id: AccountId; + receiver_id: AccountId; + token_id: TokenId; + approved_account_ids: Option<{ [approvals: AccountId]: bigint }>; + }): boolean { let must_revert = false; let p: Bytes; try {