├── .gitignore ├── worker ├── README.md ├── .prettierrc ├── .gitignore ├── wrangler.toml ├── rollup.config.js ├── package.json ├── index.ts ├── CODE_OF_CONDUCT.md └── package-lock.json ├── frontend ├── .gitignore ├── public │ ├── favicon.ico │ ├── index.html │ └── global.css ├── src │ ├── main.js │ ├── App.svelte │ └── CFNFT.json ├── package.json ├── rollup.config.js ├── README.md └── scripts │ └── setupTypeScript.js ├── contract ├── .gitignore ├── README.md ├── package.json ├── scripts │ ├── start_sale.js │ ├── deploy.js │ └── fund_localhost.js ├── hardhat.config.js ├── test │ └── sample-test.js └── contracts │ └── CFNFT.sol ├── img └── metamask-testnet.png ├── .github └── workflows │ ├── deploy-worker.yml │ └── semgrep.yml ├── LICENSE_MIT ├── README.md └── LICENSE_APACHE /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /worker/README.md: -------------------------------------------------------------------------------- 1 | fill me in plzzzz -------------------------------------------------------------------------------- /frontend/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /public/build/ 3 | 4 | .DS_Store 5 | -------------------------------------------------------------------------------- /contract/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env 3 | 4 | #Hardhat files 5 | cache 6 | artifacts 7 | -------------------------------------------------------------------------------- /img/metamask-testnet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/cfweb3/main/img/metamask-testnet.png -------------------------------------------------------------------------------- /frontend/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cloudflare/cfweb3/main/frontend/public/favicon.ico -------------------------------------------------------------------------------- /frontend/src/main.js: -------------------------------------------------------------------------------- 1 | import App from './App.svelte'; 2 | 3 | const app = new App({ target: document.body }); 4 | 5 | export default app; 6 | -------------------------------------------------------------------------------- /worker/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "semi": false, 4 | "trailingComma": "all", 5 | "tabWidth": 2, 6 | "printWidth": 80 7 | } 8 | -------------------------------------------------------------------------------- /worker/.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /dist 3 | **/*.rs.bk 4 | Cargo.lock 5 | bin/ 6 | pkg/ 7 | wasm-pack.log 8 | worker/ 9 | node_modules/ 10 | .cargo-ok 11 | /build 12 | -------------------------------------------------------------------------------- /worker/wrangler.toml: -------------------------------------------------------------------------------- 1 | name = "nft" 2 | type = "javascript" 3 | 4 | account_id = "e9bc21da719562a3e45d77de7dd042de" 5 | workers_dev = true 6 | 7 | [build] 8 | command = "npm install && npm run build" 9 | [build.upload] 10 | format = "service-worker" -------------------------------------------------------------------------------- /.github/workflows/deploy-worker.yml: -------------------------------------------------------------------------------- 1 | name: Deploy Workers function 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | 8 | jobs: 9 | deploy: 10 | runs-on: ubuntu-latest 11 | name: Deploy Workers function 12 | steps: 13 | - uses: actions/checkout@v2 14 | - name: Publish 15 | uses: cloudflare/wrangler-action@1.3.0 16 | with: 17 | apiToken: ${{ secrets.CF_API_TOKEN }} -------------------------------------------------------------------------------- /worker/rollup.config.js: -------------------------------------------------------------------------------- 1 | import { terser } from 'rollup-plugin-terser' 2 | import { nodeResolve } from '@rollup/plugin-node-resolve' 3 | import commonjs from '@rollup/plugin-commonjs' 4 | import typescript from '@rollup/plugin-typescript'; 5 | 6 | export default { 7 | input: 'index.ts', 8 | output: { 9 | file: 'build/out.js', 10 | sourcemap: true, 11 | }, 12 | 13 | plugins: [ 14 | typescript(), 15 | commonjs(), 16 | nodeResolve({ browser: true }), 17 | terser(), 18 | ], 19 | } -------------------------------------------------------------------------------- /frontend/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | CFNFT Example Application 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /contract/README.md: -------------------------------------------------------------------------------- 1 | # Basic Sample Hardhat Project 2 | 3 | This project demonstrates a basic Hardhat use case. It comes with a sample contract, a test for that contract, a sample script that deploys that contract, and an example of a task implementation, which simply lists the available accounts. 4 | 5 | Try running some of the following tasks: 6 | 7 | ```shell 8 | npx hardhat accounts 9 | npx hardhat compile 10 | npx hardhat clean 11 | npx hardhat test 12 | npx hardhat node 13 | node scripts/sample-script.js 14 | npx hardhat help 15 | ``` 16 | -------------------------------------------------------------------------------- /contract/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hh", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "keywords": [], 10 | "author": "", 11 | "license": "ISC", 12 | "dependencies": { 13 | "@nomiclabs/hardhat-ethers": "^2.0.2", 14 | "@nomiclabs/hardhat-waffle": "^2.0.1", 15 | "@openzeppelin/contracts": "^4.3.2", 16 | "chai": "^4.3.4", 17 | "ethereum-waffle": "^3.4.0", 18 | "ethers": "^5.4.6" 19 | }, 20 | "devDependencies": { 21 | "@nomiclabs/hardhat-etherscan": "^2.1.6", 22 | "hardhat": "^2.6.4", 23 | "hardhat-gas-reporter": "^1.0.4" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /.github/workflows/semgrep.yml: -------------------------------------------------------------------------------- 1 | 2 | on: 3 | pull_request: {} 4 | workflow_dispatch: {} 5 | push: 6 | branches: 7 | - main 8 | - master 9 | schedule: 10 | - cron: '0 0 * * *' 11 | name: Semgrep config 12 | jobs: 13 | semgrep: 14 | name: semgrep/ci 15 | runs-on: ubuntu-20.04 16 | env: 17 | SEMGREP_APP_TOKEN: ${{ secrets.SEMGREP_APP_TOKEN }} 18 | SEMGREP_URL: https://cloudflare.semgrep.dev 19 | SEMGREP_APP_URL: https://cloudflare.semgrep.dev 20 | SEMGREP_VERSION_CHECK_URL: https://cloudflare.semgrep.dev/api/check-version 21 | container: 22 | image: returntocorp/semgrep 23 | steps: 24 | - uses: actions/checkout@v3 25 | - run: semgrep ci 26 | -------------------------------------------------------------------------------- /frontend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "svelte-app", 3 | "version": "1.0.0", 4 | "private": true, 5 | "scripts": { 6 | "build": "rollup -c", 7 | "dev": "rollup -c -w", 8 | "start": "sirv public --no-clear" 9 | }, 10 | "devDependencies": { 11 | "@rollup/plugin-commonjs": "^17.0.0", 12 | "@rollup/plugin-json": "^4.1.0", 13 | "@rollup/plugin-node-resolve": "^11.0.0", 14 | "rollup": "^2.3.4", 15 | "rollup-plugin-css-only": "^3.1.0", 16 | "rollup-plugin-livereload": "^2.0.0", 17 | "rollup-plugin-svelte": "^7.0.0", 18 | "rollup-plugin-terser": "^7.0.0", 19 | "svelte": "^3.0.0" 20 | }, 21 | "dependencies": { 22 | "ethers": "^5.4.6", 23 | "sirv-cli": "^1.0.0" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /contract/scripts/start_sale.js: -------------------------------------------------------------------------------- 1 | const hre = require("hardhat"); 2 | 3 | const pk = process.env.dapk 4 | 5 | async function main() { 6 | const CONTRACT_ID = "0x290422EC6eADc2CC12aCd98C50333720382CA86B"; 7 | const CFNFT = await hre.ethers.getContractAt("CFNFT", CONTRACT_ID); 8 | 9 | const [owner] = await hre.ethers.getSigners() 10 | const signer = pk ? new hre.ethers.Wallet(pk, hre.ethers.provider) : owner 11 | 12 | const contract = CFNFT.connect(signer); 13 | await contract.startSale() 14 | 15 | console.log("Started sale"); 16 | } 17 | 18 | main() 19 | .then(() => process.exit(0)) 20 | .catch((error) => { 21 | console.error("something went wrong") 22 | console.error(error); 23 | process.exit(1); 24 | }); 25 | -------------------------------------------------------------------------------- /contract/scripts/deploy.js: -------------------------------------------------------------------------------- 1 | // We require the Hardhat Runtime Environment explicitly here. This is optional 2 | // but useful for running the script in a standalone fashion through `node 8 | 9 | As well as validating the code for CI. 10 | */ 11 | 12 | /** To work on this script: 13 | rm -rf test-template template && git clone sveltejs/template test-template && node scripts/setupTypeScript.js test-template 14 | */ 15 | 16 | const fs = require("fs") 17 | const path = require("path") 18 | const { argv } = require("process") 19 | 20 | const projectRoot = argv[2] || path.join(__dirname, "..") 21 | 22 | // Add deps to pkg.json 23 | const packageJSON = JSON.parse(fs.readFileSync(path.join(projectRoot, "package.json"), "utf8")) 24 | packageJSON.devDependencies = Object.assign(packageJSON.devDependencies, { 25 | "svelte-check": "^2.0.0", 26 | "svelte-preprocess": "^4.0.0", 27 | "@rollup/plugin-typescript": "^8.0.0", 28 | "typescript": "^4.0.0", 29 | "tslib": "^2.0.0", 30 | "@tsconfig/svelte": "^2.0.0" 31 | }) 32 | 33 | // Add script for checking 34 | packageJSON.scripts = Object.assign(packageJSON.scripts, { 35 | "check": "svelte-check --tsconfig ./tsconfig.json" 36 | }) 37 | 38 | // Write the package JSON 39 | fs.writeFileSync(path.join(projectRoot, "package.json"), JSON.stringify(packageJSON, null, " ")) 40 | 41 | // mv src/main.js to main.ts - note, we need to edit rollup.config.js for this too 42 | const beforeMainJSPath = path.join(projectRoot, "src", "main.js") 43 | const afterMainTSPath = path.join(projectRoot, "src", "main.ts") 44 | fs.renameSync(beforeMainJSPath, afterMainTSPath) 45 | 46 | // Switch the app.svelte file to use TS 47 | const appSveltePath = path.join(projectRoot, "src", "App.svelte") 48 | let appFile = fs.readFileSync(appSveltePath, "utf8") 49 | appFile = appFile.replace(" 119 | 120 |
121 | Cloudflare Web3 122 | 128 |
129 | 130 | {#if chain === "4"} 131 |
132 | This marketplace is connected to the Rinkeby test network. 133 |
134 | {:else} 135 |
136 | This application requires you to be on the Rinkeby network. Use Metamask to 137 | switch networks. 138 |
139 | {/if} 140 | 141 |
142 | {#if ethereum} 143 | {#if account} 144 |

👋 Welcome to the Cloudflare Web3 app

145 |

You are currently logged in as {account.slice(0, 5)}

146 | {#if loading} 147 |

Transaction processing...

148 | {/if} 149 | {#if minted} 150 |

151 | You minted an NFT! If you haven't already, add a new asset to Metamask 152 | using the below info 153 |

154 | 159 | {/if} 160 | 161 |
162 | 169 | 170 | {#if currentMinted >= maxTokens} 171 | 172 | {:else} 173 | 174 | {/if} 175 |
176 | 177 |
178 | {currentMinted}/2048 minted 179 |
180 | 181 |

Your Tokens:

182 | {#if ownedTokens} 183 |
184 | 201 |
202 | {:else} 203 |
204 | You don't have any tokens. Mint one with the button above to add it to 205 | your collection. 206 |
207 | {/if} 208 | {:else} 209 |

👋 Welcome to Cloudflare Web3.

210 |

Login with Metamask to mint your NFT

211 | 212 | 213 |

Recently Minted NFTs:

214 | {#if recentlyMintedTokens} 215 |
216 | 233 |
234 | {/if} 235 | {/if} 236 | {:else} 237 |

This app requires a Metamask wallet.

238 |

239 | You won't be asked to add any money. Install Metamask 240 | here. 241 |

242 |

243 | Then follow these instructions to get started. 246 |

247 | {/if} 248 |
249 | 250 | 258 | -------------------------------------------------------------------------------- /LICENSE_APACHE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | -------------------------------------------------------------------------------- /worker/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "worker", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "worker", 9 | "version": "1.0.0", 10 | "license": "MIT", 11 | "dependencies": { 12 | "worktop": "^0.7.3" 13 | }, 14 | "devDependencies": { 15 | "@rollup/plugin-commonjs": "^20.0.0", 16 | "@rollup/plugin-node-resolve": "^13.0.4", 17 | "@rollup/plugin-typescript": "^8.2.5", 18 | "prettier": "^1.18.2", 19 | "rollup": "^2.56.3", 20 | "rollup-plugin-terser": "^7.0.2" 21 | } 22 | }, 23 | "node_modules/@babel/code-frame": { 24 | "version": "7.14.5", 25 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", 26 | "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", 27 | "dev": true, 28 | "dependencies": { 29 | "@babel/highlight": "^7.14.5" 30 | }, 31 | "engines": { 32 | "node": ">=6.9.0" 33 | } 34 | }, 35 | "node_modules/@babel/helper-validator-identifier": { 36 | "version": "7.14.9", 37 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", 38 | "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", 39 | "dev": true, 40 | "engines": { 41 | "node": ">=6.9.0" 42 | } 43 | }, 44 | "node_modules/@babel/highlight": { 45 | "version": "7.14.5", 46 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", 47 | "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", 48 | "dev": true, 49 | "dependencies": { 50 | "@babel/helper-validator-identifier": "^7.14.5", 51 | "chalk": "^2.0.0", 52 | "js-tokens": "^4.0.0" 53 | }, 54 | "engines": { 55 | "node": ">=6.9.0" 56 | } 57 | }, 58 | "node_modules/@rollup/plugin-commonjs": { 59 | "version": "20.0.0", 60 | "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz", 61 | "integrity": "sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg==", 62 | "dev": true, 63 | "dependencies": { 64 | "@rollup/pluginutils": "^3.1.0", 65 | "commondir": "^1.0.1", 66 | "estree-walker": "^2.0.1", 67 | "glob": "^7.1.6", 68 | "is-reference": "^1.2.1", 69 | "magic-string": "^0.25.7", 70 | "resolve": "^1.17.0" 71 | }, 72 | "engines": { 73 | "node": ">= 8.0.0" 74 | }, 75 | "peerDependencies": { 76 | "rollup": "^2.38.3" 77 | } 78 | }, 79 | "node_modules/@rollup/plugin-node-resolve": { 80 | "version": "13.0.4", 81 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.4.tgz", 82 | "integrity": "sha512-eYq4TFy40O8hjeDs+sIxEH/jc9lyuI2k9DM557WN6rO5OpnC2qXMBNj4IKH1oHrnAazL49C5p0tgP0/VpqJ+/w==", 83 | "dev": true, 84 | "dependencies": { 85 | "@rollup/pluginutils": "^3.1.0", 86 | "@types/resolve": "1.17.1", 87 | "builtin-modules": "^3.1.0", 88 | "deepmerge": "^4.2.2", 89 | "is-module": "^1.0.0", 90 | "resolve": "^1.19.0" 91 | }, 92 | "engines": { 93 | "node": ">= 10.0.0" 94 | }, 95 | "peerDependencies": { 96 | "rollup": "^2.42.0" 97 | } 98 | }, 99 | "node_modules/@rollup/plugin-typescript": { 100 | "version": "8.2.5", 101 | "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-8.2.5.tgz", 102 | "integrity": "sha512-QL/LvDol/PAGB2O0S7/+q2HpSUNodpw7z6nGn9BfoVCPOZ0r4EALrojFU29Bkoi2Hr2jgTocTejJ5GGWZfOxbQ==", 103 | "dev": true, 104 | "dependencies": { 105 | "@rollup/pluginutils": "^3.1.0", 106 | "resolve": "^1.17.0" 107 | }, 108 | "engines": { 109 | "node": ">=8.0.0" 110 | }, 111 | "peerDependencies": { 112 | "rollup": "^2.14.0", 113 | "tslib": "*", 114 | "typescript": ">=3.7.0" 115 | } 116 | }, 117 | "node_modules/@rollup/pluginutils": { 118 | "version": "3.1.0", 119 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", 120 | "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", 121 | "dev": true, 122 | "dependencies": { 123 | "@types/estree": "0.0.39", 124 | "estree-walker": "^1.0.1", 125 | "picomatch": "^2.2.2" 126 | }, 127 | "engines": { 128 | "node": ">= 8.0.0" 129 | }, 130 | "peerDependencies": { 131 | "rollup": "^1.20.0||^2.0.0" 132 | } 133 | }, 134 | "node_modules/@rollup/pluginutils/node_modules/estree-walker": { 135 | "version": "1.0.1", 136 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", 137 | "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", 138 | "dev": true 139 | }, 140 | "node_modules/@types/estree": { 141 | "version": "0.0.39", 142 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", 143 | "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", 144 | "dev": true 145 | }, 146 | "node_modules/@types/node": { 147 | "version": "16.9.1", 148 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz", 149 | "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==", 150 | "dev": true 151 | }, 152 | "node_modules/@types/resolve": { 153 | "version": "1.17.1", 154 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", 155 | "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", 156 | "dev": true, 157 | "dependencies": { 158 | "@types/node": "*" 159 | } 160 | }, 161 | "node_modules/ansi-styles": { 162 | "version": "3.2.1", 163 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 164 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 165 | "dev": true, 166 | "dependencies": { 167 | "color-convert": "^1.9.0" 168 | }, 169 | "engines": { 170 | "node": ">=4" 171 | } 172 | }, 173 | "node_modules/balanced-match": { 174 | "version": "1.0.2", 175 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 176 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 177 | "dev": true 178 | }, 179 | "node_modules/brace-expansion": { 180 | "version": "1.1.11", 181 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 182 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 183 | "dev": true, 184 | "dependencies": { 185 | "balanced-match": "^1.0.0", 186 | "concat-map": "0.0.1" 187 | } 188 | }, 189 | "node_modules/buffer-from": { 190 | "version": "1.1.2", 191 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 192 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 193 | "dev": true 194 | }, 195 | "node_modules/builtin-modules": { 196 | "version": "3.2.0", 197 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", 198 | "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", 199 | "dev": true, 200 | "engines": { 201 | "node": ">=6" 202 | }, 203 | "funding": { 204 | "url": "https://github.com/sponsors/sindresorhus" 205 | } 206 | }, 207 | "node_modules/chalk": { 208 | "version": "2.4.2", 209 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 210 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 211 | "dev": true, 212 | "dependencies": { 213 | "ansi-styles": "^3.2.1", 214 | "escape-string-regexp": "^1.0.5", 215 | "supports-color": "^5.3.0" 216 | }, 217 | "engines": { 218 | "node": ">=4" 219 | } 220 | }, 221 | "node_modules/color-convert": { 222 | "version": "1.9.3", 223 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 224 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 225 | "dev": true, 226 | "dependencies": { 227 | "color-name": "1.1.3" 228 | } 229 | }, 230 | "node_modules/color-name": { 231 | "version": "1.1.3", 232 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 233 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 234 | "dev": true 235 | }, 236 | "node_modules/commander": { 237 | "version": "2.20.3", 238 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 239 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 240 | "dev": true 241 | }, 242 | "node_modules/commondir": { 243 | "version": "1.0.1", 244 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 245 | "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", 246 | "dev": true 247 | }, 248 | "node_modules/concat-map": { 249 | "version": "0.0.1", 250 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 251 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 252 | "dev": true 253 | }, 254 | "node_modules/deepmerge": { 255 | "version": "4.2.2", 256 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", 257 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", 258 | "dev": true, 259 | "engines": { 260 | "node": ">=0.10.0" 261 | } 262 | }, 263 | "node_modules/escape-string-regexp": { 264 | "version": "1.0.5", 265 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 266 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 267 | "dev": true, 268 | "engines": { 269 | "node": ">=0.8.0" 270 | } 271 | }, 272 | "node_modules/estree-walker": { 273 | "version": "2.0.2", 274 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 275 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 276 | "dev": true 277 | }, 278 | "node_modules/fs.realpath": { 279 | "version": "1.0.0", 280 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 281 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 282 | "dev": true 283 | }, 284 | "node_modules/fsevents": { 285 | "version": "2.3.2", 286 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 287 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 288 | "dev": true, 289 | "hasInstallScript": true, 290 | "optional": true, 291 | "os": [ 292 | "darwin" 293 | ], 294 | "engines": { 295 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 296 | } 297 | }, 298 | "node_modules/function-bind": { 299 | "version": "1.1.1", 300 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 301 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 302 | "dev": true 303 | }, 304 | "node_modules/glob": { 305 | "version": "7.1.7", 306 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", 307 | "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", 308 | "dev": true, 309 | "dependencies": { 310 | "fs.realpath": "^1.0.0", 311 | "inflight": "^1.0.4", 312 | "inherits": "2", 313 | "minimatch": "^3.0.4", 314 | "once": "^1.3.0", 315 | "path-is-absolute": "^1.0.0" 316 | }, 317 | "engines": { 318 | "node": "*" 319 | }, 320 | "funding": { 321 | "url": "https://github.com/sponsors/isaacs" 322 | } 323 | }, 324 | "node_modules/has": { 325 | "version": "1.0.3", 326 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 327 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 328 | "dev": true, 329 | "dependencies": { 330 | "function-bind": "^1.1.1" 331 | }, 332 | "engines": { 333 | "node": ">= 0.4.0" 334 | } 335 | }, 336 | "node_modules/has-flag": { 337 | "version": "3.0.0", 338 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 339 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 340 | "dev": true, 341 | "engines": { 342 | "node": ">=4" 343 | } 344 | }, 345 | "node_modules/inflight": { 346 | "version": "1.0.6", 347 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 348 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 349 | "dev": true, 350 | "dependencies": { 351 | "once": "^1.3.0", 352 | "wrappy": "1" 353 | } 354 | }, 355 | "node_modules/inherits": { 356 | "version": "2.0.4", 357 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 358 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 359 | "dev": true 360 | }, 361 | "node_modules/is-core-module": { 362 | "version": "2.6.0", 363 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", 364 | "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", 365 | "dev": true, 366 | "dependencies": { 367 | "has": "^1.0.3" 368 | }, 369 | "funding": { 370 | "url": "https://github.com/sponsors/ljharb" 371 | } 372 | }, 373 | "node_modules/is-module": { 374 | "version": "1.0.0", 375 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 376 | "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", 377 | "dev": true 378 | }, 379 | "node_modules/is-reference": { 380 | "version": "1.2.1", 381 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", 382 | "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", 383 | "dev": true, 384 | "dependencies": { 385 | "@types/estree": "*" 386 | } 387 | }, 388 | "node_modules/jest-worker": { 389 | "version": "26.6.2", 390 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", 391 | "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", 392 | "dev": true, 393 | "dependencies": { 394 | "@types/node": "*", 395 | "merge-stream": "^2.0.0", 396 | "supports-color": "^7.0.0" 397 | }, 398 | "engines": { 399 | "node": ">= 10.13.0" 400 | } 401 | }, 402 | "node_modules/jest-worker/node_modules/has-flag": { 403 | "version": "4.0.0", 404 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 405 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 406 | "dev": true, 407 | "engines": { 408 | "node": ">=8" 409 | } 410 | }, 411 | "node_modules/jest-worker/node_modules/supports-color": { 412 | "version": "7.2.0", 413 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 414 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 415 | "dev": true, 416 | "dependencies": { 417 | "has-flag": "^4.0.0" 418 | }, 419 | "engines": { 420 | "node": ">=8" 421 | } 422 | }, 423 | "node_modules/js-tokens": { 424 | "version": "4.0.0", 425 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 426 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 427 | "dev": true 428 | }, 429 | "node_modules/magic-string": { 430 | "version": "0.25.7", 431 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", 432 | "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", 433 | "dev": true, 434 | "dependencies": { 435 | "sourcemap-codec": "^1.4.4" 436 | } 437 | }, 438 | "node_modules/merge-stream": { 439 | "version": "2.0.0", 440 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 441 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 442 | "dev": true 443 | }, 444 | "node_modules/minimatch": { 445 | "version": "3.0.4", 446 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 447 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 448 | "dev": true, 449 | "dependencies": { 450 | "brace-expansion": "^1.1.7" 451 | }, 452 | "engines": { 453 | "node": "*" 454 | } 455 | }, 456 | "node_modules/once": { 457 | "version": "1.4.0", 458 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 459 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 460 | "dev": true, 461 | "dependencies": { 462 | "wrappy": "1" 463 | } 464 | }, 465 | "node_modules/path-is-absolute": { 466 | "version": "1.0.1", 467 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 468 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 469 | "dev": true, 470 | "engines": { 471 | "node": ">=0.10.0" 472 | } 473 | }, 474 | "node_modules/path-parse": { 475 | "version": "1.0.7", 476 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 477 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 478 | "dev": true 479 | }, 480 | "node_modules/picomatch": { 481 | "version": "2.3.0", 482 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 483 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", 484 | "dev": true, 485 | "engines": { 486 | "node": ">=8.6" 487 | }, 488 | "funding": { 489 | "url": "https://github.com/sponsors/jonschlinkert" 490 | } 491 | }, 492 | "node_modules/prettier": { 493 | "version": "1.19.1", 494 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", 495 | "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", 496 | "dev": true, 497 | "bin": { 498 | "prettier": "bin-prettier.js" 499 | }, 500 | "engines": { 501 | "node": ">=4" 502 | } 503 | }, 504 | "node_modules/randombytes": { 505 | "version": "2.1.0", 506 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 507 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 508 | "dev": true, 509 | "dependencies": { 510 | "safe-buffer": "^5.1.0" 511 | } 512 | }, 513 | "node_modules/regexparam": { 514 | "version": "2.0.0", 515 | "resolved": "https://registry.npmjs.org/regexparam/-/regexparam-2.0.0.tgz", 516 | "integrity": "sha512-gJKwd2MVPWHAIFLsaYDZfyKzHNS4o7E/v8YmNf44vmeV2e4YfVoDToTOKTvE7ab68cRJ++kLuEXJBaEeJVt5ow==", 517 | "engines": { 518 | "node": ">=8" 519 | } 520 | }, 521 | "node_modules/resolve": { 522 | "version": "1.20.0", 523 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 524 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 525 | "dev": true, 526 | "dependencies": { 527 | "is-core-module": "^2.2.0", 528 | "path-parse": "^1.0.6" 529 | }, 530 | "funding": { 531 | "url": "https://github.com/sponsors/ljharb" 532 | } 533 | }, 534 | "node_modules/rollup": { 535 | "version": "2.56.3", 536 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.56.3.tgz", 537 | "integrity": "sha512-Au92NuznFklgQCUcV96iXlxUbHuB1vQMaH76DHl5M11TotjOHwqk9CwcrT78+Tnv4FN9uTBxq6p4EJoYkpyekg==", 538 | "dev": true, 539 | "bin": { 540 | "rollup": "dist/bin/rollup" 541 | }, 542 | "engines": { 543 | "node": ">=10.0.0" 544 | }, 545 | "optionalDependencies": { 546 | "fsevents": "~2.3.2" 547 | } 548 | }, 549 | "node_modules/rollup-plugin-terser": { 550 | "version": "7.0.2", 551 | "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", 552 | "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", 553 | "dev": true, 554 | "dependencies": { 555 | "@babel/code-frame": "^7.10.4", 556 | "jest-worker": "^26.2.1", 557 | "serialize-javascript": "^4.0.0", 558 | "terser": "^5.0.0" 559 | }, 560 | "peerDependencies": { 561 | "rollup": "^2.0.0" 562 | } 563 | }, 564 | "node_modules/safe-buffer": { 565 | "version": "5.2.1", 566 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 567 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 568 | "dev": true, 569 | "funding": [ 570 | { 571 | "type": "github", 572 | "url": "https://github.com/sponsors/feross" 573 | }, 574 | { 575 | "type": "patreon", 576 | "url": "https://www.patreon.com/feross" 577 | }, 578 | { 579 | "type": "consulting", 580 | "url": "https://feross.org/support" 581 | } 582 | ] 583 | }, 584 | "node_modules/serialize-javascript": { 585 | "version": "4.0.0", 586 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", 587 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", 588 | "dev": true, 589 | "dependencies": { 590 | "randombytes": "^2.1.0" 591 | } 592 | }, 593 | "node_modules/source-map": { 594 | "version": "0.7.3", 595 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", 596 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", 597 | "dev": true, 598 | "engines": { 599 | "node": ">= 8" 600 | } 601 | }, 602 | "node_modules/source-map-support": { 603 | "version": "0.5.20", 604 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", 605 | "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", 606 | "dev": true, 607 | "dependencies": { 608 | "buffer-from": "^1.0.0", 609 | "source-map": "^0.6.0" 610 | } 611 | }, 612 | "node_modules/source-map-support/node_modules/source-map": { 613 | "version": "0.6.1", 614 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 615 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 616 | "dev": true, 617 | "engines": { 618 | "node": ">=0.10.0" 619 | } 620 | }, 621 | "node_modules/sourcemap-codec": { 622 | "version": "1.4.8", 623 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 624 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 625 | "dev": true 626 | }, 627 | "node_modules/supports-color": { 628 | "version": "5.5.0", 629 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 630 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 631 | "dev": true, 632 | "dependencies": { 633 | "has-flag": "^3.0.0" 634 | }, 635 | "engines": { 636 | "node": ">=4" 637 | } 638 | }, 639 | "node_modules/terser": { 640 | "version": "5.8.0", 641 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.8.0.tgz", 642 | "integrity": "sha512-f0JH+6yMpneYcRJN314lZrSwu9eKkUFEHLN/kNy8ceh8gaRiLgFPJqrB9HsXjhEGdv4e/ekjTOFxIlL6xlma8A==", 643 | "dev": true, 644 | "dependencies": { 645 | "commander": "^2.20.0", 646 | "source-map": "~0.7.2", 647 | "source-map-support": "~0.5.20" 648 | }, 649 | "bin": { 650 | "terser": "bin/terser" 651 | }, 652 | "engines": { 653 | "node": ">=10" 654 | } 655 | }, 656 | "node_modules/tslib": { 657 | "version": "2.3.1", 658 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", 659 | "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", 660 | "dev": true, 661 | "peer": true 662 | }, 663 | "node_modules/typescript": { 664 | "version": "4.4.3", 665 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", 666 | "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==", 667 | "dev": true, 668 | "peer": true, 669 | "bin": { 670 | "tsc": "bin/tsc", 671 | "tsserver": "bin/tsserver" 672 | }, 673 | "engines": { 674 | "node": ">=4.2.0" 675 | } 676 | }, 677 | "node_modules/worktop": { 678 | "version": "0.7.3", 679 | "resolved": "https://registry.npmjs.org/worktop/-/worktop-0.7.3.tgz", 680 | "integrity": "sha512-WBHP1hk8pLP7ahAw13fugDWcO0SUAOiCD6DHT/bfLWoCIA/PL9u7GKdudT2nGZ8EGR1APbGCAI6ZzKG1+X+PnQ==", 681 | "dependencies": { 682 | "regexparam": "^2.0.0" 683 | }, 684 | "engines": { 685 | "node": ">=12" 686 | } 687 | }, 688 | "node_modules/wrappy": { 689 | "version": "1.0.2", 690 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 691 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 692 | "dev": true 693 | } 694 | }, 695 | "dependencies": { 696 | "@babel/code-frame": { 697 | "version": "7.14.5", 698 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", 699 | "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", 700 | "dev": true, 701 | "requires": { 702 | "@babel/highlight": "^7.14.5" 703 | } 704 | }, 705 | "@babel/helper-validator-identifier": { 706 | "version": "7.14.9", 707 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", 708 | "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==", 709 | "dev": true 710 | }, 711 | "@babel/highlight": { 712 | "version": "7.14.5", 713 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", 714 | "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", 715 | "dev": true, 716 | "requires": { 717 | "@babel/helper-validator-identifier": "^7.14.5", 718 | "chalk": "^2.0.0", 719 | "js-tokens": "^4.0.0" 720 | } 721 | }, 722 | "@rollup/plugin-commonjs": { 723 | "version": "20.0.0", 724 | "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz", 725 | "integrity": "sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg==", 726 | "dev": true, 727 | "requires": { 728 | "@rollup/pluginutils": "^3.1.0", 729 | "commondir": "^1.0.1", 730 | "estree-walker": "^2.0.1", 731 | "glob": "^7.1.6", 732 | "is-reference": "^1.2.1", 733 | "magic-string": "^0.25.7", 734 | "resolve": "^1.17.0" 735 | } 736 | }, 737 | "@rollup/plugin-node-resolve": { 738 | "version": "13.0.4", 739 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.4.tgz", 740 | "integrity": "sha512-eYq4TFy40O8hjeDs+sIxEH/jc9lyuI2k9DM557WN6rO5OpnC2qXMBNj4IKH1oHrnAazL49C5p0tgP0/VpqJ+/w==", 741 | "dev": true, 742 | "requires": { 743 | "@rollup/pluginutils": "^3.1.0", 744 | "@types/resolve": "1.17.1", 745 | "builtin-modules": "^3.1.0", 746 | "deepmerge": "^4.2.2", 747 | "is-module": "^1.0.0", 748 | "resolve": "^1.19.0" 749 | } 750 | }, 751 | "@rollup/plugin-typescript": { 752 | "version": "8.2.5", 753 | "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-8.2.5.tgz", 754 | "integrity": "sha512-QL/LvDol/PAGB2O0S7/+q2HpSUNodpw7z6nGn9BfoVCPOZ0r4EALrojFU29Bkoi2Hr2jgTocTejJ5GGWZfOxbQ==", 755 | "dev": true, 756 | "requires": { 757 | "@rollup/pluginutils": "^3.1.0", 758 | "resolve": "^1.17.0" 759 | } 760 | }, 761 | "@rollup/pluginutils": { 762 | "version": "3.1.0", 763 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", 764 | "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", 765 | "dev": true, 766 | "requires": { 767 | "@types/estree": "0.0.39", 768 | "estree-walker": "^1.0.1", 769 | "picomatch": "^2.2.2" 770 | }, 771 | "dependencies": { 772 | "estree-walker": { 773 | "version": "1.0.1", 774 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", 775 | "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", 776 | "dev": true 777 | } 778 | } 779 | }, 780 | "@types/estree": { 781 | "version": "0.0.39", 782 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", 783 | "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", 784 | "dev": true 785 | }, 786 | "@types/node": { 787 | "version": "16.9.1", 788 | "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz", 789 | "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==", 790 | "dev": true 791 | }, 792 | "@types/resolve": { 793 | "version": "1.17.1", 794 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", 795 | "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", 796 | "dev": true, 797 | "requires": { 798 | "@types/node": "*" 799 | } 800 | }, 801 | "ansi-styles": { 802 | "version": "3.2.1", 803 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 804 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 805 | "dev": true, 806 | "requires": { 807 | "color-convert": "^1.9.0" 808 | } 809 | }, 810 | "balanced-match": { 811 | "version": "1.0.2", 812 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 813 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 814 | "dev": true 815 | }, 816 | "brace-expansion": { 817 | "version": "1.1.11", 818 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 819 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 820 | "dev": true, 821 | "requires": { 822 | "balanced-match": "^1.0.0", 823 | "concat-map": "0.0.1" 824 | } 825 | }, 826 | "buffer-from": { 827 | "version": "1.1.2", 828 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 829 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 830 | "dev": true 831 | }, 832 | "builtin-modules": { 833 | "version": "3.2.0", 834 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", 835 | "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", 836 | "dev": true 837 | }, 838 | "chalk": { 839 | "version": "2.4.2", 840 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 841 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 842 | "dev": true, 843 | "requires": { 844 | "ansi-styles": "^3.2.1", 845 | "escape-string-regexp": "^1.0.5", 846 | "supports-color": "^5.3.0" 847 | } 848 | }, 849 | "color-convert": { 850 | "version": "1.9.3", 851 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 852 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 853 | "dev": true, 854 | "requires": { 855 | "color-name": "1.1.3" 856 | } 857 | }, 858 | "color-name": { 859 | "version": "1.1.3", 860 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 861 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 862 | "dev": true 863 | }, 864 | "commander": { 865 | "version": "2.20.3", 866 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 867 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 868 | "dev": true 869 | }, 870 | "commondir": { 871 | "version": "1.0.1", 872 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 873 | "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", 874 | "dev": true 875 | }, 876 | "concat-map": { 877 | "version": "0.0.1", 878 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 879 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 880 | "dev": true 881 | }, 882 | "deepmerge": { 883 | "version": "4.2.2", 884 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", 885 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", 886 | "dev": true 887 | }, 888 | "escape-string-regexp": { 889 | "version": "1.0.5", 890 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 891 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 892 | "dev": true 893 | }, 894 | "estree-walker": { 895 | "version": "2.0.2", 896 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 897 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 898 | "dev": true 899 | }, 900 | "fs.realpath": { 901 | "version": "1.0.0", 902 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 903 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 904 | "dev": true 905 | }, 906 | "fsevents": { 907 | "version": "2.3.2", 908 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 909 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 910 | "dev": true, 911 | "optional": true 912 | }, 913 | "function-bind": { 914 | "version": "1.1.1", 915 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 916 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 917 | "dev": true 918 | }, 919 | "glob": { 920 | "version": "7.1.7", 921 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", 922 | "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", 923 | "dev": true, 924 | "requires": { 925 | "fs.realpath": "^1.0.0", 926 | "inflight": "^1.0.4", 927 | "inherits": "2", 928 | "minimatch": "^3.0.4", 929 | "once": "^1.3.0", 930 | "path-is-absolute": "^1.0.0" 931 | } 932 | }, 933 | "has": { 934 | "version": "1.0.3", 935 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 936 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 937 | "dev": true, 938 | "requires": { 939 | "function-bind": "^1.1.1" 940 | } 941 | }, 942 | "has-flag": { 943 | "version": "3.0.0", 944 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 945 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 946 | "dev": true 947 | }, 948 | "inflight": { 949 | "version": "1.0.6", 950 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 951 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 952 | "dev": true, 953 | "requires": { 954 | "once": "^1.3.0", 955 | "wrappy": "1" 956 | } 957 | }, 958 | "inherits": { 959 | "version": "2.0.4", 960 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 961 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 962 | "dev": true 963 | }, 964 | "is-core-module": { 965 | "version": "2.6.0", 966 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", 967 | "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", 968 | "dev": true, 969 | "requires": { 970 | "has": "^1.0.3" 971 | } 972 | }, 973 | "is-module": { 974 | "version": "1.0.0", 975 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 976 | "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", 977 | "dev": true 978 | }, 979 | "is-reference": { 980 | "version": "1.2.1", 981 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", 982 | "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", 983 | "dev": true, 984 | "requires": { 985 | "@types/estree": "*" 986 | } 987 | }, 988 | "jest-worker": { 989 | "version": "26.6.2", 990 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", 991 | "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", 992 | "dev": true, 993 | "requires": { 994 | "@types/node": "*", 995 | "merge-stream": "^2.0.0", 996 | "supports-color": "^7.0.0" 997 | }, 998 | "dependencies": { 999 | "has-flag": { 1000 | "version": "4.0.0", 1001 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1002 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1003 | "dev": true 1004 | }, 1005 | "supports-color": { 1006 | "version": "7.2.0", 1007 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1008 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1009 | "dev": true, 1010 | "requires": { 1011 | "has-flag": "^4.0.0" 1012 | } 1013 | } 1014 | } 1015 | }, 1016 | "js-tokens": { 1017 | "version": "4.0.0", 1018 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1019 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1020 | "dev": true 1021 | }, 1022 | "magic-string": { 1023 | "version": "0.25.7", 1024 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", 1025 | "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", 1026 | "dev": true, 1027 | "requires": { 1028 | "sourcemap-codec": "^1.4.4" 1029 | } 1030 | }, 1031 | "merge-stream": { 1032 | "version": "2.0.0", 1033 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1034 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1035 | "dev": true 1036 | }, 1037 | "minimatch": { 1038 | "version": "3.0.4", 1039 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1040 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1041 | "dev": true, 1042 | "requires": { 1043 | "brace-expansion": "^1.1.7" 1044 | } 1045 | }, 1046 | "once": { 1047 | "version": "1.4.0", 1048 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1049 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1050 | "dev": true, 1051 | "requires": { 1052 | "wrappy": "1" 1053 | } 1054 | }, 1055 | "path-is-absolute": { 1056 | "version": "1.0.1", 1057 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1058 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1059 | "dev": true 1060 | }, 1061 | "path-parse": { 1062 | "version": "1.0.7", 1063 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1064 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1065 | "dev": true 1066 | }, 1067 | "picomatch": { 1068 | "version": "2.3.0", 1069 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 1070 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", 1071 | "dev": true 1072 | }, 1073 | "prettier": { 1074 | "version": "1.19.1", 1075 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", 1076 | "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", 1077 | "dev": true 1078 | }, 1079 | "randombytes": { 1080 | "version": "2.1.0", 1081 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1082 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1083 | "dev": true, 1084 | "requires": { 1085 | "safe-buffer": "^5.1.0" 1086 | } 1087 | }, 1088 | "regexparam": { 1089 | "version": "2.0.0", 1090 | "resolved": "https://registry.npmjs.org/regexparam/-/regexparam-2.0.0.tgz", 1091 | "integrity": "sha512-gJKwd2MVPWHAIFLsaYDZfyKzHNS4o7E/v8YmNf44vmeV2e4YfVoDToTOKTvE7ab68cRJ++kLuEXJBaEeJVt5ow==" 1092 | }, 1093 | "resolve": { 1094 | "version": "1.20.0", 1095 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", 1096 | "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", 1097 | "dev": true, 1098 | "requires": { 1099 | "is-core-module": "^2.2.0", 1100 | "path-parse": "^1.0.6" 1101 | } 1102 | }, 1103 | "rollup": { 1104 | "version": "2.56.3", 1105 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.56.3.tgz", 1106 | "integrity": "sha512-Au92NuznFklgQCUcV96iXlxUbHuB1vQMaH76DHl5M11TotjOHwqk9CwcrT78+Tnv4FN9uTBxq6p4EJoYkpyekg==", 1107 | "dev": true, 1108 | "requires": { 1109 | "fsevents": "~2.3.2" 1110 | } 1111 | }, 1112 | "rollup-plugin-terser": { 1113 | "version": "7.0.2", 1114 | "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", 1115 | "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", 1116 | "dev": true, 1117 | "requires": { 1118 | "@babel/code-frame": "^7.10.4", 1119 | "jest-worker": "^26.2.1", 1120 | "serialize-javascript": "^4.0.0", 1121 | "terser": "^5.0.0" 1122 | } 1123 | }, 1124 | "safe-buffer": { 1125 | "version": "5.2.1", 1126 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1127 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1128 | "dev": true 1129 | }, 1130 | "serialize-javascript": { 1131 | "version": "4.0.0", 1132 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", 1133 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", 1134 | "dev": true, 1135 | "requires": { 1136 | "randombytes": "^2.1.0" 1137 | } 1138 | }, 1139 | "source-map": { 1140 | "version": "0.7.3", 1141 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", 1142 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", 1143 | "dev": true 1144 | }, 1145 | "source-map-support": { 1146 | "version": "0.5.20", 1147 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", 1148 | "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", 1149 | "dev": true, 1150 | "requires": { 1151 | "buffer-from": "^1.0.0", 1152 | "source-map": "^0.6.0" 1153 | }, 1154 | "dependencies": { 1155 | "source-map": { 1156 | "version": "0.6.1", 1157 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1158 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1159 | "dev": true 1160 | } 1161 | } 1162 | }, 1163 | "sourcemap-codec": { 1164 | "version": "1.4.8", 1165 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 1166 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 1167 | "dev": true 1168 | }, 1169 | "supports-color": { 1170 | "version": "5.5.0", 1171 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1172 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1173 | "dev": true, 1174 | "requires": { 1175 | "has-flag": "^3.0.0" 1176 | } 1177 | }, 1178 | "terser": { 1179 | "version": "5.8.0", 1180 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.8.0.tgz", 1181 | "integrity": "sha512-f0JH+6yMpneYcRJN314lZrSwu9eKkUFEHLN/kNy8ceh8gaRiLgFPJqrB9HsXjhEGdv4e/ekjTOFxIlL6xlma8A==", 1182 | "dev": true, 1183 | "requires": { 1184 | "commander": "^2.20.0", 1185 | "source-map": "~0.7.2", 1186 | "source-map-support": "~0.5.20" 1187 | } 1188 | }, 1189 | "tslib": { 1190 | "version": "2.3.1", 1191 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", 1192 | "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", 1193 | "dev": true, 1194 | "peer": true 1195 | }, 1196 | "typescript": { 1197 | "version": "4.4.3", 1198 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", 1199 | "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==", 1200 | "dev": true, 1201 | "peer": true 1202 | }, 1203 | "worktop": { 1204 | "version": "0.7.3", 1205 | "resolved": "https://registry.npmjs.org/worktop/-/worktop-0.7.3.tgz", 1206 | "integrity": "sha512-WBHP1hk8pLP7ahAw13fugDWcO0SUAOiCD6DHT/bfLWoCIA/PL9u7GKdudT2nGZ8EGR1APbGCAI6ZzKG1+X+PnQ==", 1207 | "requires": { 1208 | "regexparam": "^2.0.0" 1209 | } 1210 | }, 1211 | "wrappy": { 1212 | "version": "1.0.2", 1213 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1214 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1215 | "dev": true 1216 | } 1217 | } 1218 | } 1219 | -------------------------------------------------------------------------------- /frontend/src/CFNFT.json: -------------------------------------------------------------------------------- 1 | { 2 | "_format": "hh-sol-artifact-1", 3 | "contractName": "CFNFT", 4 | "sourceName": "contracts/CFNFT.sol", 5 | "abi": [ 6 | { 7 | "inputs": [], 8 | "stateMutability": "nonpayable", 9 | "type": "constructor" 10 | }, 11 | { 12 | "anonymous": false, 13 | "inputs": [ 14 | { 15 | "indexed": true, 16 | "internalType": "address", 17 | "name": "owner", 18 | "type": "address" 19 | }, 20 | { 21 | "indexed": true, 22 | "internalType": "address", 23 | "name": "approved", 24 | "type": "address" 25 | }, 26 | { 27 | "indexed": true, 28 | "internalType": "uint256", 29 | "name": "tokenId", 30 | "type": "uint256" 31 | } 32 | ], 33 | "name": "Approval", 34 | "type": "event" 35 | }, 36 | { 37 | "anonymous": false, 38 | "inputs": [ 39 | { 40 | "indexed": true, 41 | "internalType": "address", 42 | "name": "owner", 43 | "type": "address" 44 | }, 45 | { 46 | "indexed": true, 47 | "internalType": "address", 48 | "name": "operator", 49 | "type": "address" 50 | }, 51 | { 52 | "indexed": false, 53 | "internalType": "bool", 54 | "name": "approved", 55 | "type": "bool" 56 | } 57 | ], 58 | "name": "ApprovalForAll", 59 | "type": "event" 60 | }, 61 | { 62 | "anonymous": false, 63 | "inputs": [ 64 | { 65 | "indexed": false, 66 | "internalType": "uint256", 67 | "name": "tokenId", 68 | "type": "uint256" 69 | }, 70 | { 71 | "indexed": false, 72 | "internalType": "address", 73 | "name": "owner", 74 | "type": "address" 75 | } 76 | ], 77 | "name": "Minted", 78 | "type": "event" 79 | }, 80 | { 81 | "anonymous": false, 82 | "inputs": [ 83 | { 84 | "indexed": true, 85 | "internalType": "address", 86 | "name": "previousOwner", 87 | "type": "address" 88 | }, 89 | { 90 | "indexed": true, 91 | "internalType": "address", 92 | "name": "newOwner", 93 | "type": "address" 94 | } 95 | ], 96 | "name": "OwnershipTransferred", 97 | "type": "event" 98 | }, 99 | { 100 | "anonymous": false, 101 | "inputs": [ 102 | { 103 | "indexed": false, 104 | "internalType": "address", 105 | "name": "account", 106 | "type": "address" 107 | } 108 | ], 109 | "name": "Paused", 110 | "type": "event" 111 | }, 112 | { 113 | "anonymous": false, 114 | "inputs": [ 115 | { 116 | "indexed": true, 117 | "internalType": "bytes32", 118 | "name": "role", 119 | "type": "bytes32" 120 | }, 121 | { 122 | "indexed": true, 123 | "internalType": "bytes32", 124 | "name": "previousAdminRole", 125 | "type": "bytes32" 126 | }, 127 | { 128 | "indexed": true, 129 | "internalType": "bytes32", 130 | "name": "newAdminRole", 131 | "type": "bytes32" 132 | } 133 | ], 134 | "name": "RoleAdminChanged", 135 | "type": "event" 136 | }, 137 | { 138 | "anonymous": false, 139 | "inputs": [ 140 | { 141 | "indexed": true, 142 | "internalType": "bytes32", 143 | "name": "role", 144 | "type": "bytes32" 145 | }, 146 | { 147 | "indexed": true, 148 | "internalType": "address", 149 | "name": "account", 150 | "type": "address" 151 | }, 152 | { 153 | "indexed": true, 154 | "internalType": "address", 155 | "name": "sender", 156 | "type": "address" 157 | } 158 | ], 159 | "name": "RoleGranted", 160 | "type": "event" 161 | }, 162 | { 163 | "anonymous": false, 164 | "inputs": [ 165 | { 166 | "indexed": true, 167 | "internalType": "bytes32", 168 | "name": "role", 169 | "type": "bytes32" 170 | }, 171 | { 172 | "indexed": true, 173 | "internalType": "address", 174 | "name": "account", 175 | "type": "address" 176 | }, 177 | { 178 | "indexed": true, 179 | "internalType": "address", 180 | "name": "sender", 181 | "type": "address" 182 | } 183 | ], 184 | "name": "RoleRevoked", 185 | "type": "event" 186 | }, 187 | { 188 | "anonymous": false, 189 | "inputs": [ 190 | { 191 | "indexed": true, 192 | "internalType": "address", 193 | "name": "from", 194 | "type": "address" 195 | }, 196 | { 197 | "indexed": true, 198 | "internalType": "address", 199 | "name": "to", 200 | "type": "address" 201 | }, 202 | { 203 | "indexed": true, 204 | "internalType": "uint256", 205 | "name": "tokenId", 206 | "type": "uint256" 207 | } 208 | ], 209 | "name": "Transfer", 210 | "type": "event" 211 | }, 212 | { 213 | "anonymous": false, 214 | "inputs": [ 215 | { 216 | "indexed": false, 217 | "internalType": "address", 218 | "name": "account", 219 | "type": "address" 220 | } 221 | ], 222 | "name": "Unpaused", 223 | "type": "event" 224 | }, 225 | { 226 | "inputs": [], 227 | "name": "DEFAULT_ADMIN_ROLE", 228 | "outputs": [ 229 | { 230 | "internalType": "bytes32", 231 | "name": "", 232 | "type": "bytes32" 233 | } 234 | ], 235 | "stateMutability": "view", 236 | "type": "function" 237 | }, 238 | { 239 | "inputs": [], 240 | "name": "MAX_TOKENS", 241 | "outputs": [ 242 | { 243 | "internalType": "uint256", 244 | "name": "", 245 | "type": "uint256" 246 | } 247 | ], 248 | "stateMutability": "view", 249 | "type": "function" 250 | }, 251 | { 252 | "inputs": [], 253 | "name": "MINTER_ROLE", 254 | "outputs": [ 255 | { 256 | "internalType": "bytes32", 257 | "name": "", 258 | "type": "bytes32" 259 | } 260 | ], 261 | "stateMutability": "view", 262 | "type": "function" 263 | }, 264 | { 265 | "inputs": [], 266 | "name": "PAUSER_ROLE", 267 | "outputs": [ 268 | { 269 | "internalType": "bytes32", 270 | "name": "", 271 | "type": "bytes32" 272 | } 273 | ], 274 | "stateMutability": "view", 275 | "type": "function" 276 | }, 277 | { 278 | "inputs": [ 279 | { 280 | "internalType": "address", 281 | "name": "to", 282 | "type": "address" 283 | }, 284 | { 285 | "internalType": "uint256", 286 | "name": "tokenId", 287 | "type": "uint256" 288 | } 289 | ], 290 | "name": "approve", 291 | "outputs": [], 292 | "stateMutability": "nonpayable", 293 | "type": "function" 294 | }, 295 | { 296 | "inputs": [ 297 | { 298 | "internalType": "address", 299 | "name": "owner", 300 | "type": "address" 301 | } 302 | ], 303 | "name": "balanceOf", 304 | "outputs": [ 305 | { 306 | "internalType": "uint256", 307 | "name": "", 308 | "type": "uint256" 309 | } 310 | ], 311 | "stateMutability": "view", 312 | "type": "function" 313 | }, 314 | { 315 | "inputs": [ 316 | { 317 | "internalType": "uint256", 318 | "name": "tokenId", 319 | "type": "uint256" 320 | } 321 | ], 322 | "name": "burn", 323 | "outputs": [], 324 | "stateMutability": "nonpayable", 325 | "type": "function" 326 | }, 327 | { 328 | "inputs": [ 329 | { 330 | "internalType": "uint256", 331 | "name": "tokenId", 332 | "type": "uint256" 333 | } 334 | ], 335 | "name": "getApproved", 336 | "outputs": [ 337 | { 338 | "internalType": "address", 339 | "name": "", 340 | "type": "address" 341 | } 342 | ], 343 | "stateMutability": "view", 344 | "type": "function" 345 | }, 346 | { 347 | "inputs": [ 348 | { 349 | "internalType": "bytes32", 350 | "name": "role", 351 | "type": "bytes32" 352 | } 353 | ], 354 | "name": "getRoleAdmin", 355 | "outputs": [ 356 | { 357 | "internalType": "bytes32", 358 | "name": "", 359 | "type": "bytes32" 360 | } 361 | ], 362 | "stateMutability": "view", 363 | "type": "function" 364 | }, 365 | { 366 | "inputs": [ 367 | { 368 | "internalType": "bytes32", 369 | "name": "role", 370 | "type": "bytes32" 371 | }, 372 | { 373 | "internalType": "uint256", 374 | "name": "index", 375 | "type": "uint256" 376 | } 377 | ], 378 | "name": "getRoleMember", 379 | "outputs": [ 380 | { 381 | "internalType": "address", 382 | "name": "", 383 | "type": "address" 384 | } 385 | ], 386 | "stateMutability": "view", 387 | "type": "function" 388 | }, 389 | { 390 | "inputs": [ 391 | { 392 | "internalType": "bytes32", 393 | "name": "role", 394 | "type": "bytes32" 395 | } 396 | ], 397 | "name": "getRoleMemberCount", 398 | "outputs": [ 399 | { 400 | "internalType": "uint256", 401 | "name": "", 402 | "type": "uint256" 403 | } 404 | ], 405 | "stateMutability": "view", 406 | "type": "function" 407 | }, 408 | { 409 | "inputs": [ 410 | { 411 | "internalType": "bytes32", 412 | "name": "role", 413 | "type": "bytes32" 414 | }, 415 | { 416 | "internalType": "address", 417 | "name": "account", 418 | "type": "address" 419 | } 420 | ], 421 | "name": "grantRole", 422 | "outputs": [], 423 | "stateMutability": "nonpayable", 424 | "type": "function" 425 | }, 426 | { 427 | "inputs": [ 428 | { 429 | "internalType": "bytes32", 430 | "name": "role", 431 | "type": "bytes32" 432 | }, 433 | { 434 | "internalType": "address", 435 | "name": "account", 436 | "type": "address" 437 | } 438 | ], 439 | "name": "hasRole", 440 | "outputs": [ 441 | { 442 | "internalType": "bool", 443 | "name": "", 444 | "type": "bool" 445 | } 446 | ], 447 | "stateMutability": "view", 448 | "type": "function" 449 | }, 450 | { 451 | "inputs": [], 452 | "name": "hasSaleStarted", 453 | "outputs": [ 454 | { 455 | "internalType": "bool", 456 | "name": "", 457 | "type": "bool" 458 | } 459 | ], 460 | "stateMutability": "view", 461 | "type": "function" 462 | }, 463 | { 464 | "inputs": [], 465 | "name": "hasSoldOut", 466 | "outputs": [ 467 | { 468 | "internalType": "bool", 469 | "name": "", 470 | "type": "bool" 471 | } 472 | ], 473 | "stateMutability": "view", 474 | "type": "function" 475 | }, 476 | { 477 | "inputs": [ 478 | { 479 | "internalType": "address", 480 | "name": "_owner", 481 | "type": "address" 482 | }, 483 | { 484 | "internalType": "address", 485 | "name": "_operator", 486 | "type": "address" 487 | } 488 | ], 489 | "name": "isApprovedForAll", 490 | "outputs": [ 491 | { 492 | "internalType": "bool", 493 | "name": "isOperator", 494 | "type": "bool" 495 | } 496 | ], 497 | "stateMutability": "view", 498 | "type": "function" 499 | }, 500 | { 501 | "inputs": [ 502 | { 503 | "internalType": "address", 504 | "name": "to", 505 | "type": "address" 506 | } 507 | ], 508 | "name": "mint", 509 | "outputs": [], 510 | "stateMutability": "nonpayable", 511 | "type": "function" 512 | }, 513 | { 514 | "inputs": [ 515 | { 516 | "internalType": "uint256", 517 | "name": "quantity", 518 | "type": "uint256" 519 | }, 520 | { 521 | "internalType": "address", 522 | "name": "receiver", 523 | "type": "address" 524 | } 525 | ], 526 | "name": "mintToken", 527 | "outputs": [], 528 | "stateMutability": "payable", 529 | "type": "function" 530 | }, 531 | { 532 | "inputs": [], 533 | "name": "name", 534 | "outputs": [ 535 | { 536 | "internalType": "string", 537 | "name": "", 538 | "type": "string" 539 | } 540 | ], 541 | "stateMutability": "view", 542 | "type": "function" 543 | }, 544 | { 545 | "inputs": [], 546 | "name": "owner", 547 | "outputs": [ 548 | { 549 | "internalType": "address", 550 | "name": "", 551 | "type": "address" 552 | } 553 | ], 554 | "stateMutability": "view", 555 | "type": "function" 556 | }, 557 | { 558 | "inputs": [ 559 | { 560 | "internalType": "uint256", 561 | "name": "tokenId", 562 | "type": "uint256" 563 | } 564 | ], 565 | "name": "ownerOf", 566 | "outputs": [ 567 | { 568 | "internalType": "address", 569 | "name": "", 570 | "type": "address" 571 | } 572 | ], 573 | "stateMutability": "view", 574 | "type": "function" 575 | }, 576 | { 577 | "inputs": [], 578 | "name": "pause", 579 | "outputs": [], 580 | "stateMutability": "nonpayable", 581 | "type": "function" 582 | }, 583 | { 584 | "inputs": [], 585 | "name": "pauseSale", 586 | "outputs": [], 587 | "stateMutability": "nonpayable", 588 | "type": "function" 589 | }, 590 | { 591 | "inputs": [], 592 | "name": "paused", 593 | "outputs": [ 594 | { 595 | "internalType": "bool", 596 | "name": "", 597 | "type": "bool" 598 | } 599 | ], 600 | "stateMutability": "view", 601 | "type": "function" 602 | }, 603 | { 604 | "inputs": [], 605 | "name": "renounceOwnership", 606 | "outputs": [], 607 | "stateMutability": "nonpayable", 608 | "type": "function" 609 | }, 610 | { 611 | "inputs": [ 612 | { 613 | "internalType": "bytes32", 614 | "name": "role", 615 | "type": "bytes32" 616 | }, 617 | { 618 | "internalType": "address", 619 | "name": "account", 620 | "type": "address" 621 | } 622 | ], 623 | "name": "renounceRole", 624 | "outputs": [], 625 | "stateMutability": "nonpayable", 626 | "type": "function" 627 | }, 628 | { 629 | "inputs": [ 630 | { 631 | "internalType": "bytes32", 632 | "name": "role", 633 | "type": "bytes32" 634 | }, 635 | { 636 | "internalType": "address", 637 | "name": "account", 638 | "type": "address" 639 | } 640 | ], 641 | "name": "revokeRole", 642 | "outputs": [], 643 | "stateMutability": "nonpayable", 644 | "type": "function" 645 | }, 646 | { 647 | "inputs": [ 648 | { 649 | "internalType": "address", 650 | "name": "from", 651 | "type": "address" 652 | }, 653 | { 654 | "internalType": "address", 655 | "name": "to", 656 | "type": "address" 657 | }, 658 | { 659 | "internalType": "uint256", 660 | "name": "tokenId", 661 | "type": "uint256" 662 | } 663 | ], 664 | "name": "safeTransferFrom", 665 | "outputs": [], 666 | "stateMutability": "nonpayable", 667 | "type": "function" 668 | }, 669 | { 670 | "inputs": [ 671 | { 672 | "internalType": "address", 673 | "name": "from", 674 | "type": "address" 675 | }, 676 | { 677 | "internalType": "address", 678 | "name": "to", 679 | "type": "address" 680 | }, 681 | { 682 | "internalType": "uint256", 683 | "name": "tokenId", 684 | "type": "uint256" 685 | }, 686 | { 687 | "internalType": "bytes", 688 | "name": "_data", 689 | "type": "bytes" 690 | } 691 | ], 692 | "name": "safeTransferFrom", 693 | "outputs": [], 694 | "stateMutability": "nonpayable", 695 | "type": "function" 696 | }, 697 | { 698 | "inputs": [ 699 | { 700 | "internalType": "address", 701 | "name": "operator", 702 | "type": "address" 703 | }, 704 | { 705 | "internalType": "bool", 706 | "name": "approved", 707 | "type": "bool" 708 | } 709 | ], 710 | "name": "setApprovalForAll", 711 | "outputs": [], 712 | "stateMutability": "nonpayable", 713 | "type": "function" 714 | }, 715 | { 716 | "inputs": [], 717 | "name": "startSale", 718 | "outputs": [], 719 | "stateMutability": "nonpayable", 720 | "type": "function" 721 | }, 722 | { 723 | "inputs": [ 724 | { 725 | "internalType": "bytes4", 726 | "name": "interfaceId", 727 | "type": "bytes4" 728 | } 729 | ], 730 | "name": "supportsInterface", 731 | "outputs": [ 732 | { 733 | "internalType": "bool", 734 | "name": "", 735 | "type": "bool" 736 | } 737 | ], 738 | "stateMutability": "view", 739 | "type": "function" 740 | }, 741 | { 742 | "inputs": [], 743 | "name": "symbol", 744 | "outputs": [ 745 | { 746 | "internalType": "string", 747 | "name": "", 748 | "type": "string" 749 | } 750 | ], 751 | "stateMutability": "view", 752 | "type": "function" 753 | }, 754 | { 755 | "inputs": [ 756 | { 757 | "internalType": "uint256", 758 | "name": "index", 759 | "type": "uint256" 760 | } 761 | ], 762 | "name": "tokenByIndex", 763 | "outputs": [ 764 | { 765 | "internalType": "uint256", 766 | "name": "", 767 | "type": "uint256" 768 | } 769 | ], 770 | "stateMutability": "view", 771 | "type": "function" 772 | }, 773 | { 774 | "inputs": [ 775 | { 776 | "internalType": "uint256", 777 | "name": "tokenId", 778 | "type": "uint256" 779 | } 780 | ], 781 | "name": "tokenExists", 782 | "outputs": [ 783 | { 784 | "internalType": "bool", 785 | "name": "", 786 | "type": "bool" 787 | } 788 | ], 789 | "stateMutability": "view", 790 | "type": "function" 791 | }, 792 | { 793 | "inputs": [ 794 | { 795 | "internalType": "address", 796 | "name": "owner", 797 | "type": "address" 798 | }, 799 | { 800 | "internalType": "uint256", 801 | "name": "index", 802 | "type": "uint256" 803 | } 804 | ], 805 | "name": "tokenOfOwnerByIndex", 806 | "outputs": [ 807 | { 808 | "internalType": "uint256", 809 | "name": "", 810 | "type": "uint256" 811 | } 812 | ], 813 | "stateMutability": "view", 814 | "type": "function" 815 | }, 816 | { 817 | "inputs": [ 818 | { 819 | "internalType": "uint256", 820 | "name": "tokenId", 821 | "type": "uint256" 822 | } 823 | ], 824 | "name": "tokenURI", 825 | "outputs": [ 826 | { 827 | "internalType": "string", 828 | "name": "", 829 | "type": "string" 830 | } 831 | ], 832 | "stateMutability": "view", 833 | "type": "function" 834 | }, 835 | { 836 | "inputs": [], 837 | "name": "totalSupply", 838 | "outputs": [ 839 | { 840 | "internalType": "uint256", 841 | "name": "", 842 | "type": "uint256" 843 | } 844 | ], 845 | "stateMutability": "view", 846 | "type": "function" 847 | }, 848 | { 849 | "inputs": [ 850 | { 851 | "internalType": "address", 852 | "name": "from", 853 | "type": "address" 854 | }, 855 | { 856 | "internalType": "address", 857 | "name": "to", 858 | "type": "address" 859 | }, 860 | { 861 | "internalType": "uint256", 862 | "name": "tokenId", 863 | "type": "uint256" 864 | } 865 | ], 866 | "name": "transferFrom", 867 | "outputs": [], 868 | "stateMutability": "nonpayable", 869 | "type": "function" 870 | }, 871 | { 872 | "inputs": [ 873 | { 874 | "internalType": "address", 875 | "name": "newOwner", 876 | "type": "address" 877 | } 878 | ], 879 | "name": "transferOwnership", 880 | "outputs": [], 881 | "stateMutability": "nonpayable", 882 | "type": "function" 883 | }, 884 | { 885 | "inputs": [], 886 | "name": "unpause", 887 | "outputs": [], 888 | "stateMutability": "nonpayable", 889 | "type": "function" 890 | } 891 | ], 892 | "bytecode": "0x60806040526000600f60146101000a81548160ff0219169083151502179055503480156200002c57600080fd5b506040518060400160405280600581526020017f43464e46540000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f43464e465400000000000000000000000000000000000000000000000000000081525060405180606001604052806025815260200162005f026025913982828160029080519060200190620000cd9291906200060f565b508060039080519060200190620000e69291906200060f565b5050506000600c60006101000a81548160ff02191690831515021790555080600e90805190602001906200011c9291906200060f565b50620001416000801b62000135620001ec60201b60201c565b6200020860201b60201c565b620001827f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a662000176620001ec60201b60201c565b6200020860201b60201c565b620001c37f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a620001b7620001ec60201b60201c565b6200020860201b60201c565b505050620001e6620001da620001ec60201b60201c565b6200025060201b60201c565b62000724565b6000620002036200031660201b62001b8d1760201c565b905090565b6200021f8282620003c960201b62001c3e1760201c565b6200024b8160016000858152602001908152602001600020620003df60201b62001c4c1790919060201c565b505050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415620003c257600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff818301511692505050620003c6565b3390505b90565b620003db82826200041760201b60201c565b5050565b60006200040f836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6200050860201b60201c565b905092915050565b6200042982826200058260201b60201c565b6200050457600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620004a9620001ec60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006200051c8383620005ec60201b60201c565b620005775782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506200057c565b600090505b92915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b8280546200061d90620006bf565b90600052602060002090601f0160209004810192826200064157600085556200068d565b82601f106200065c57805160ff19168380011785556200068d565b828001600101855582156200068d579182015b828111156200068c5782518255916020019190600101906200066f565b5b5090506200069c9190620006a0565b5090565b5b80821115620006bb576000816000905550600101620006a1565b5090565b60006002820490506001821680620006d857607f821691505b60208210811415620006ef57620006ee620006f5565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6157ce80620007346000396000f3fe6080604052600436106102455760003560e01c80636a62784211610139578063a22cb465116100b6578063d53913931161007a578063d53913931461087e578063d547741f146108a9578063e63ab1e9146108d2578063e985e9c5146108fd578063f2fde38b1461093a578063f47c84c51461096357610245565b8063a22cb4651461079b578063b66a0e5d146107c4578063b88d4fde146107db578063c87b56dd14610804578063ca15c8731461084157610245565b80639010d07c116100fd5780639010d07c146106af57806391d14854146106ec57806395d89b4114610729578063a140ae2314610754578063a217fddf1461077057610245565b80636a627842146105f057806370a0823114610619578063715018a6146106565780638456cb591461066d5780638da5cb5b1461068457610245565b80632f2ff15d116101c757806342966c681161018b57806342966c681461050b5780634f6ccce71461053457806355367ba9146105715780635c975abb146105885780636352211e146105b357610245565b80632f2ff15d1461043c5780632f745c591461046557806336568abe146104a25780633f4ba83a146104cb57806342842e0e146104e257610245565b8063095ea7b31161020e578063095ea7b31461035757806318160ddd146103805780631c8b232d146103ab57806323b872dd146103d6578063248a9ca3146103ff57610245565b8062923f9e1461024a57806301ffc9a71461028757806303824f76146102c457806306fdde03146102ef578063081812fc1461031a575b600080fd5b34801561025657600080fd5b50610271600480360381019061026c9190613f9a565b61098e565b60405161027e9190614626565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190613f48565b6109a0565b6040516102bb9190614626565b60405180910390f35b3480156102d057600080fd5b506102d96109b2565b6040516102e69190614626565b60405180910390f35b3480156102fb57600080fd5b506103046109d5565b604051610311919061465c565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c9190613f9a565b610a67565b60405161034e91906145bf565b60405180910390f35b34801561036357600080fd5b5061037e60048036038101906103799190613e6b565b610aec565b005b34801561038c57600080fd5b50610395610c04565b6040516103a29190614a5e565b60405180910390f35b3480156103b757600080fd5b506103c0610c11565b6040516103cd9190614626565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190613d65565b610c24565b005b34801561040b57600080fd5b5061042660048036038101906104219190613ea7565b610c84565b6040516104339190614641565b60405180910390f35b34801561044857600080fd5b50610463600480360381019061045e9190613ed0565b610ca3565b005b34801561047157600080fd5b5061048c60048036038101906104879190613e6b565b610cd7565b6040516104999190614a5e565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c49190613ed0565b610d7c565b005b3480156104d757600080fd5b506104e0610db0565b005b3480156104ee57600080fd5b5061050960048036038101906105049190613d65565b610e2a565b005b34801561051757600080fd5b50610532600480360381019061052d9190613f9a565b610e4a565b005b34801561054057600080fd5b5061055b60048036038101906105569190613f9a565b610ea6565b6040516105689190614a5e565b60405180910390f35b34801561057d57600080fd5b50610586610f3d565b005b34801561059457600080fd5b5061059d610fd6565b6040516105aa9190614626565b60405180910390f35b3480156105bf57600080fd5b506105da60048036038101906105d59190613f9a565b610fed565b6040516105e791906145bf565b60405180910390f35b3480156105fc57600080fd5b5061061760048036038101906106129190613d00565b61109f565b005b34801561062557600080fd5b50610640600480360381019061063b9190613d00565b61112f565b60405161064d9190614a5e565b60405180910390f35b34801561066257600080fd5b5061066b6111e7565b005b34801561067957600080fd5b5061068261126f565b005b34801561069057600080fd5b506106996112e9565b6040516106a691906145bf565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d19190613f0c565b611313565b6040516106e391906145bf565b60405180910390f35b3480156106f857600080fd5b50610713600480360381019061070e9190613ed0565b611342565b6040516107209190614626565b60405180910390f35b34801561073557600080fd5b5061073e6113ac565b60405161074b919061465c565b60405180910390f35b61076e60048036038101906107699190613fc3565b61143e565b005b34801561077c57600080fd5b5061078561165f565b6040516107929190614641565b60405180910390f35b3480156107a757600080fd5b506107c260048036038101906107bd9190613e2f565b611666565b005b3480156107d057600080fd5b506107d96117e7565b005b3480156107e757600080fd5b5061080260048036038101906107fd9190613db4565b611880565b005b34801561081057600080fd5b5061082b60048036038101906108269190613f9a565b6118e2565b604051610838919061465c565b60405180910390f35b34801561084d57600080fd5b5061086860048036038101906108639190613ea7565b611989565b6040516108759190614a5e565b60405180910390f35b34801561088a57600080fd5b506108936119ad565b6040516108a09190614641565b60405180910390f35b3480156108b557600080fd5b506108d060048036038101906108cb9190613ed0565b6119d1565b005b3480156108de57600080fd5b506108e7611a05565b6040516108f49190614641565b60405180910390f35b34801561090957600080fd5b50610924600480360381019061091f9190613d29565b611a29565b6040516109319190614626565b60405180910390f35b34801561094657600080fd5b50610961600480360381019061095c9190613d00565b611a8f565b005b34801561096f57600080fd5b50610978611b87565b6040516109859190614a5e565b60405180910390f35b600061099982611c7c565b9050919050565b60006109ab82611ce8565b9050919050565b60006108006109bf610c04565b106109cd57600190506109d2565b600090505b90565b6060600280546109e490614d3a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1090614d3a565b8015610a5d5780601f10610a3257610100808354040283529160200191610a5d565b820191906000526020600020905b815481529060010190602001808311610a4057829003601f168201915b5050505050905090565b6000610a7282611c7c565b610ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa8906148de565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610af782610fed565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5f9061497e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b87611d62565b73ffffffffffffffffffffffffffffffffffffffff161480610bb65750610bb581610bb0611d62565b611a29565b5b610bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bec9061483e565b60405180910390fd5b610bff8383611d71565b505050565b6000600a80549050905090565b600f60149054906101000a900460ff1681565b610c35610c2f611d62565b82611e2a565b610c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6b9061499e565b60405180910390fd5b610c7f838383611f08565b505050565b6000806000838152602001908152602001600020600101549050919050565b610cad8282612164565b610cd28160016000858152602001908152602001600020611c4c90919063ffffffff16565b505050565b6000610ce28361112f565b8210610d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1a906146fe565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d86828261218d565b610dab816001600085815260200190815260200160002061221090919063ffffffff16565b505050565b610de17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ddc611d62565b611342565b610e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1790614a1e565b60405180910390fd5b610e28612240565b565b610e4583838360405180602001604052806000815250611880565b505050565b610e5b610e55611d62565b82611e2a565b610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e91906149fe565b60405180910390fd5b610ea3816122e2565b50565b6000610eb0610c04565b8210610ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee8906149be565b60405180910390fd5b600a8281548110610f2b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610f45611d62565b73ffffffffffffffffffffffffffffffffffffffff16610f636112e9565b73ffffffffffffffffffffffffffffffffffffffff1614610fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb0906148fe565b60405180910390fd5b6000600f60146101000a81548160ff021916908315150217905550565b6000600c60009054906101000a900460ff16905090565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108d9061487e565b60405180910390fd5b80915050919050565b6110d07f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66110cb611d62565b611342565b61110f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611106906149de565b60405180910390fd5b6111228161111d600d6123f3565b612401565b61112c600d6125cf565b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111979061485e565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111ef611d62565b73ffffffffffffffffffffffffffffffffffffffff1661120d6112e9565b73ffffffffffffffffffffffffffffffffffffffff1614611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a906148fe565b60405180910390fd5b61126d60006125e5565b565b6112a07f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61129b611d62565b611342565b6112df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d69061477e565b60405180910390fd5b6112e76126ab565b565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061133a826001600086815260200190815260200160002061274e90919063ffffffff16565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600380546113bb90614d3a565b80601f01602080910402602001604051908101604052809291908181526020018280546113e790614d3a565b80156114345780601f1061140957610100808354040283529160200191611434565b820191906000526020600020905b81548152906001019060200180831161141757829003601f168201915b5050505050905090565b600f60149054906101000a900460ff168061148b575061145c6112e9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c1906146de565b60405180910390fd5b6000821161150d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115049061489e565b60405180910390fd5b6003821115611551576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115489061495e565b60405180910390fd5b61080061156e83611560610c04565b61276890919063ffffffff16565b1115806115ad575061157e6112e9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6115ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e3906147fe565b60405180910390fd5b60005b8281101561165a576000611601610c04565b905061160d838261277e565b7fb9203d657e9c0ec8274c818292ab0f58b04e1970050716891770eb1bab5d655e818460405161163e929190614a79565b60405180910390a150808061165290614d9d565b9150506115ef565b505050565b6000801b81565b61166e611d62565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d3906147be565b60405180910390fd5b80600760006116e9611d62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611796611d62565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117db9190614626565b60405180910390a35050565b6117ef611d62565b73ffffffffffffffffffffffffffffffffffffffff1661180d6112e9565b73ffffffffffffffffffffffffffffffffffffffff1614611863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185a906148fe565b60405180910390fd5b6001600f60146101000a81548160ff021916908315150217905550565b61189161188b611d62565b83611e2a565b6118d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c79061499e565b60405180910390fd5b6118dc8484848461279c565b50505050565b60606118ed82611c7c565b61192c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119239061493e565b60405180910390fd5b60006119366127f8565b905060008151116119565760405180602001604052806000815250611981565b806119608461288a565b604051602001611971929190614561565b6040516020818303038152906040525b915050919050565b60006119a660016000848152602001908152602001600020612a37565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6119db8282612a4c565b611a00816001600085815260200190815260200160002061221090919063ffffffff16565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007358807bad0b376efc12f5ad86aac70e78ed67deae73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a7c5760019050611a89565b611a868383612a75565b90505b92915050565b611a97611d62565b73ffffffffffffffffffffffffffffffffffffffff16611ab56112e9565b73ffffffffffffffffffffffffffffffffffffffff1614611b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b02906148fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b729061473e565b60405180910390fd5b611b84816125e5565b50565b61080081565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611c3757600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff818301511692505050611c3b565b3390505b90565b611c488282612b09565b5050565b6000611c74836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612be9565b905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d5b5750611d5a82612c59565b5b9050919050565b6000611d6c611b8d565b905090565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611de483610fed565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e3582611c7c565b611e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6b906147de565b60405180910390fd5b6000611e7f83610fed565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611eee57508373ffffffffffffffffffffffffffffffffffffffff16611ed684610a67565b73ffffffffffffffffffffffffffffffffffffffff16145b80611eff5750611efe8185611a29565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f2882610fed565b73ffffffffffffffffffffffffffffffffffffffff1614611f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f759061491e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe59061479e565b60405180910390fd5b611ff9838383612d3b565b612004600082611d71565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120549190614c1c565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120ab9190614b3b565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61216d82610c84565b61217e81612179611d62565b612d4b565b6121888383612b09565b505050565b612195611d62565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f990614a3e565b60405180910390fd5b61220c8282612de8565b5050565b6000612238836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612ec9565b905092915050565b612248610fd6565b612287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227e906146be565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6122cb611d62565b6040516122d891906145bf565b60405180910390a1565b60006122ed82610fed565b90506122fb81600084612d3b565b612306600083611d71565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123569190614c1c565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612471576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612468906148be565b60405180910390fd5b61247a81611c7c565b156124ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b19061475e565b60405180910390fd5b6124c660008383612d3b565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125169190614b3b565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6001816000016000828254019250508190555050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126b3610fd6565b156126f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ea9061481e565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612737611d62565b60405161274491906145bf565b60405180910390a1565b600061275d836000018361304f565b60001c905092915050565b600081836127769190614b3b565b905092915050565b6127988282604051806020016040528060008152506130a0565b5050565b6127a7848484611f08565b6127b3848484846130fb565b6127f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e99061471e565b60405180910390fd5b50505050565b6060600e805461280790614d3a565b80601f016020809104026020016040519081016040528092919081815260200182805461283390614d3a565b80156128805780601f1061285557610100808354040283529160200191612880565b820191906000526020600020905b81548152906001019060200180831161286357829003601f168201915b5050505050905090565b606060008214156128d2576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a32565b600082905060005b600082146129045780806128ed90614d9d565b915050600a826128fd9190614b91565b91506128da565b60008167ffffffffffffffff811115612946577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156129785781602001600182028036833780820191505090505b5090505b60008514612a2b576001826129919190614c1c565b9150600a856129a09190614de6565b60306129ac9190614b3b565b60f81b8183815181106129e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a249190614b91565b945061297c565b8093505050505b919050565b6000612a4582600001613292565b9050919050565b612a5582610c84565b612a6681612a61611d62565b612d4b565b612a708383612de8565b505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612b138282611342565b612be557600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612b8a611d62565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000612bf583836132a3565b612c4e578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612c53565b600090505b92915050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612d2457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612d345750612d33826132c6565b5b9050919050565b612d46838383613340565b505050565b612d558282611342565b612de457612d7a8173ffffffffffffffffffffffffffffffffffffffff166014613398565b612d888360001c6020613398565b604051602001612d99929190614585565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ddb919061465c565b60405180910390fd5b5050565b612df28282611342565b15612ec557600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612e6a611d62565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60008083600101600084815260200190815260200160002054905060008114613043576000600182612efb9190614c1c565b9050600060018660000180549050612f139190614c1c565b9050818114612fce576000866000018281548110612f5a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080876000018481548110612fa4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480613008577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050613049565b60009150505b92915050565b600082600001828154811061308d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905092915050565b6130aa8383612401565b6130b760008484846130fb565b6130f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ed9061471e565b60405180910390fd5b505050565b600061311c8473ffffffffffffffffffffffffffffffffffffffff16613692565b15613285578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613145611d62565b8786866040518563ffffffff1660e01b815260040161316794939291906145da565b602060405180830381600087803b15801561318157600080fd5b505af19250505080156131b257506040513d601f19601f820116820180604052508101906131af9190613f71565b60015b613235573d80600081146131e2576040519150601f19603f3d011682016040523d82523d6000602084013e6131e7565b606091505b5060008151141561322d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132249061471e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061328a565b600190505b949350505050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806133395750613338826136a5565b5b9050919050565b61334b83838361371f565b613353610fd6565b15613393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338a9061469e565b60405180910390fd5b505050565b6060600060028360026133ab9190614bc2565b6133b59190614b3b565b67ffffffffffffffff8111156133f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156134265781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110613484577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061350e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261354e9190614bc2565b6135589190614b3b565b90505b6001811115613644577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106135c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b8282815181106135fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061363d90614d10565b905061355b565b5060008414613688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367f9061467e565b60405180910390fd5b8091505092915050565b600080823b905060008111915050919050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480613718575061371782613833565b5b9050919050565b61372a83838361389d565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561376d57613768816138a2565b6137ac565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146137ab576137aa83826138eb565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137ef576137ea81613a58565b61382e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461382d5761382c8282613b9b565b5b5b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b600a80549050600b600083815260200190815260200160002081905550600a81908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016138f88461112f565b6139029190614c1c565b90506000600960008481526020019081526020016000205490508181146139e7576000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816009600083815260200190815260200160002081905550505b6009600084815260200190815260200160002060009055600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600a80549050613a6c9190614c1c565b90506000600b60008481526020019081526020016000205490506000600a8381548110613ac2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600a8381548110613b0a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600b600083815260200190815260200160002081905550600b600085815260200190815260200160002060009055600a805480613b7f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613ba68361112f565b905081600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806009600084815260200190815260200160002081905550505050565b6000613c2d613c2884614ac7565b614aa2565b905082815260208101848484011115613c4557600080fd5b613c50848285614cce565b509392505050565b600081359050613c6781615725565b92915050565b600081359050613c7c8161573c565b92915050565b600081359050613c9181615753565b92915050565b600081359050613ca68161576a565b92915050565b600081519050613cbb8161576a565b92915050565b600082601f830112613cd257600080fd5b8135613ce2848260208601613c1a565b91505092915050565b600081359050613cfa81615781565b92915050565b600060208284031215613d1257600080fd5b6000613d2084828501613c58565b91505092915050565b60008060408385031215613d3c57600080fd5b6000613d4a85828601613c58565b9250506020613d5b85828601613c58565b9150509250929050565b600080600060608486031215613d7a57600080fd5b6000613d8886828701613c58565b9350506020613d9986828701613c58565b9250506040613daa86828701613ceb565b9150509250925092565b60008060008060808587031215613dca57600080fd5b6000613dd887828801613c58565b9450506020613de987828801613c58565b9350506040613dfa87828801613ceb565b925050606085013567ffffffffffffffff811115613e1757600080fd5b613e2387828801613cc1565b91505092959194509250565b60008060408385031215613e4257600080fd5b6000613e5085828601613c58565b9250506020613e6185828601613c6d565b9150509250929050565b60008060408385031215613e7e57600080fd5b6000613e8c85828601613c58565b9250506020613e9d85828601613ceb565b9150509250929050565b600060208284031215613eb957600080fd5b6000613ec784828501613c82565b91505092915050565b60008060408385031215613ee357600080fd5b6000613ef185828601613c82565b9250506020613f0285828601613c58565b9150509250929050565b60008060408385031215613f1f57600080fd5b6000613f2d85828601613c82565b9250506020613f3e85828601613ceb565b9150509250929050565b600060208284031215613f5a57600080fd5b6000613f6884828501613c97565b91505092915050565b600060208284031215613f8357600080fd5b6000613f9184828501613cac565b91505092915050565b600060208284031215613fac57600080fd5b6000613fba84828501613ceb565b91505092915050565b60008060408385031215613fd657600080fd5b6000613fe485828601613ceb565b9250506020613ff585828601613c58565b9150509250929050565b61400881614c50565b82525050565b61401781614c62565b82525050565b61402681614c6e565b82525050565b600061403782614af8565b6140418185614b0e565b9350614051818560208601614cdd565b61405a81614ed3565b840191505092915050565b600061407082614b03565b61407a8185614b1f565b935061408a818560208601614cdd565b61409381614ed3565b840191505092915050565b60006140a982614b03565b6140b38185614b30565b93506140c3818560208601614cdd565b80840191505092915050565b60006140dc602083614b1f565b91506140e782614ee4565b602082019050919050565b60006140ff602b83614b1f565b915061410a82614f0d565b604082019050919050565b6000614122601483614b1f565b915061412d82614f5c565b602082019050919050565b6000614145601383614b1f565b915061415082614f85565b602082019050919050565b6000614168602b83614b1f565b915061417382614fae565b604082019050919050565b600061418b603283614b1f565b915061419682614ffd565b604082019050919050565b60006141ae602683614b1f565b91506141b98261504c565b604082019050919050565b60006141d1601c83614b1f565b91506141dc8261509b565b602082019050919050565b60006141f4603e83614b1f565b91506141ff826150c4565b604082019050919050565b6000614217602483614b1f565b915061422282615113565b604082019050919050565b600061423a601983614b1f565b915061424582615162565b602082019050919050565b600061425d602c83614b1f565b91506142688261518b565b604082019050919050565b6000614280600883614b1f565b915061428b826151da565b602082019050919050565b60006142a3601083614b1f565b91506142ae82615203565b602082019050919050565b60006142c6603883614b1f565b91506142d18261522c565b604082019050919050565b60006142e9602a83614b1f565b91506142f48261527b565b604082019050919050565b600061430c602983614b1f565b9150614317826152ca565b604082019050919050565b600061432f601783614b1f565b915061433a82615319565b602082019050919050565b6000614352602083614b1f565b915061435d82615342565b602082019050919050565b6000614375602c83614b1f565b91506143808261536b565b604082019050919050565b6000614398602083614b1f565b91506143a3826153ba565b602082019050919050565b60006143bb602983614b1f565b91506143c6826153e3565b604082019050919050565b60006143de602f83614b1f565b91506143e982615432565b604082019050919050565b6000614401600983614b1f565b915061440c82615481565b602082019050919050565b6000614424602183614b1f565b915061442f826154aa565b604082019050919050565b6000614447603183614b1f565b9150614452826154f9565b604082019050919050565b600061446a602c83614b1f565b915061447582615548565b604082019050919050565b600061448d601783614b30565b915061449882615597565b601782019050919050565b60006144b0603d83614b1f565b91506144bb826155c0565b604082019050919050565b60006144d3603083614b1f565b91506144de8261560f565b604082019050919050565b60006144f6604083614b1f565b91506145018261565e565b604082019050919050565b6000614519601183614b30565b9150614524826156ad565b601182019050919050565b600061453c602f83614b1f565b9150614547826156d6565b604082019050919050565b61455b81614cc4565b82525050565b600061456d828561409e565b9150614579828461409e565b91508190509392505050565b600061459082614480565b915061459c828561409e565b91506145a78261450c565b91506145b3828461409e565b91508190509392505050565b60006020820190506145d46000830184613fff565b92915050565b60006080820190506145ef6000830187613fff565b6145fc6020830186613fff565b6146096040830185614552565b818103606083015261461b818461402c565b905095945050505050565b600060208201905061463b600083018461400e565b92915050565b6000602082019050614656600083018461401d565b92915050565b600060208201905081810360008301526146768184614065565b905092915050565b60006020820190508181036000830152614697816140cf565b9050919050565b600060208201905081810360008301526146b7816140f2565b9050919050565b600060208201905081810360008301526146d781614115565b9050919050565b600060208201905081810360008301526146f781614138565b9050919050565b600060208201905081810360008301526147178161415b565b9050919050565b600060208201905081810360008301526147378161417e565b9050919050565b60006020820190508181036000830152614757816141a1565b9050919050565b60006020820190508181036000830152614777816141c4565b9050919050565b60006020820190508181036000830152614797816141e7565b9050919050565b600060208201905081810360008301526147b78161420a565b9050919050565b600060208201905081810360008301526147d78161422d565b9050919050565b600060208201905081810360008301526147f781614250565b9050919050565b6000602082019050818103600083015261481781614273565b9050919050565b6000602082019050818103600083015261483781614296565b9050919050565b60006020820190508181036000830152614857816142b9565b9050919050565b60006020820190508181036000830152614877816142dc565b9050919050565b60006020820190508181036000830152614897816142ff565b9050919050565b600060208201905081810360008301526148b781614322565b9050919050565b600060208201905081810360008301526148d781614345565b9050919050565b600060208201905081810360008301526148f781614368565b9050919050565b600060208201905081810360008301526149178161438b565b9050919050565b60006020820190508181036000830152614937816143ae565b9050919050565b60006020820190508181036000830152614957816143d1565b9050919050565b60006020820190508181036000830152614977816143f4565b9050919050565b6000602082019050818103600083015261499781614417565b9050919050565b600060208201905081810360008301526149b78161443a565b9050919050565b600060208201905081810360008301526149d78161445d565b9050919050565b600060208201905081810360008301526149f7816144a3565b9050919050565b60006020820190508181036000830152614a17816144c6565b9050919050565b60006020820190508181036000830152614a37816144e9565b9050919050565b60006020820190508181036000830152614a578161452f565b9050919050565b6000602082019050614a736000830184614552565b92915050565b6000604082019050614a8e6000830185614552565b614a9b6020830184613fff565b9392505050565b6000614aac614abd565b9050614ab88282614d6c565b919050565b6000604051905090565b600067ffffffffffffffff821115614ae257614ae1614ea4565b5b614aeb82614ed3565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614b4682614cc4565b9150614b5183614cc4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b8657614b85614e17565b5b828201905092915050565b6000614b9c82614cc4565b9150614ba783614cc4565b925082614bb757614bb6614e46565b5b828204905092915050565b6000614bcd82614cc4565b9150614bd883614cc4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c1157614c10614e17565b5b828202905092915050565b6000614c2782614cc4565b9150614c3283614cc4565b925082821015614c4557614c44614e17565b5b828203905092915050565b6000614c5b82614ca4565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614cfb578082015181840152602081019050614ce0565b83811115614d0a576000848401525b50505050565b6000614d1b82614cc4565b91506000821415614d2f57614d2e614e17565b5b600182039050919050565b60006002820490506001821680614d5257607f821691505b60208210811415614d6657614d65614e75565b5b50919050565b614d7582614ed3565b810181811067ffffffffffffffff82111715614d9457614d93614ea4565b5b80604052505050565b6000614da882614cc4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ddb57614dda614e17565b5b600182019050919050565b6000614df182614cc4565b9150614dfc83614cc4565b925082614e0c57614e0b614e46565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f4552433732315061757361626c653a20746f6b656e207472616e73666572207760008201527f68696c6520706175736564000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f73616c65206861736e2774207374617274656400000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732315072657365744d696e7465725061757365724175746f49643a2060008201527f6d75737420686176652070617573657220726f6c6520746f2070617573650000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f736f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f7175616e746974792063616e6e6f74206265207a65726f000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f6578636565647320330000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f4552433732315072657365744d696e7465725061757365724175746f49643a2060008201527f6d7573742068617665206d696e74657220726f6c6520746f206d696e74000000602082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b7f4552433732315072657365744d696e7465725061757365724175746f49643a2060008201527f6d75737420686176652070617573657220726f6c6520746f20756e7061757365602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b61572e81614c50565b811461573957600080fd5b50565b61574581614c62565b811461575057600080fd5b50565b61575c81614c6e565b811461576757600080fd5b50565b61577381614c78565b811461577e57600080fd5b50565b61578a81614cc4565b811461579557600080fd5b5056fea2646970667358221220f4f57fddf4a9d42aa77f53891eda40d435ea46d105df6169404c6dbaab65bd3b64736f6c6343000804003368747470733a2f2f6e66742e6578616d706c65732e776f726b6572732e6465762f6e66742f", 893 | "deployedBytecode": "0x6080604052600436106102455760003560e01c80636a62784211610139578063a22cb465116100b6578063d53913931161007a578063d53913931461087e578063d547741f146108a9578063e63ab1e9146108d2578063e985e9c5146108fd578063f2fde38b1461093a578063f47c84c51461096357610245565b8063a22cb4651461079b578063b66a0e5d146107c4578063b88d4fde146107db578063c87b56dd14610804578063ca15c8731461084157610245565b80639010d07c116100fd5780639010d07c146106af57806391d14854146106ec57806395d89b4114610729578063a140ae2314610754578063a217fddf1461077057610245565b80636a627842146105f057806370a0823114610619578063715018a6146106565780638456cb591461066d5780638da5cb5b1461068457610245565b80632f2ff15d116101c757806342966c681161018b57806342966c681461050b5780634f6ccce71461053457806355367ba9146105715780635c975abb146105885780636352211e146105b357610245565b80632f2ff15d1461043c5780632f745c591461046557806336568abe146104a25780633f4ba83a146104cb57806342842e0e146104e257610245565b8063095ea7b31161020e578063095ea7b31461035757806318160ddd146103805780631c8b232d146103ab57806323b872dd146103d6578063248a9ca3146103ff57610245565b8062923f9e1461024a57806301ffc9a71461028757806303824f76146102c457806306fdde03146102ef578063081812fc1461031a575b600080fd5b34801561025657600080fd5b50610271600480360381019061026c9190613f9a565b61098e565b60405161027e9190614626565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190613f48565b6109a0565b6040516102bb9190614626565b60405180910390f35b3480156102d057600080fd5b506102d96109b2565b6040516102e69190614626565b60405180910390f35b3480156102fb57600080fd5b506103046109d5565b604051610311919061465c565b60405180910390f35b34801561032657600080fd5b50610341600480360381019061033c9190613f9a565b610a67565b60405161034e91906145bf565b60405180910390f35b34801561036357600080fd5b5061037e60048036038101906103799190613e6b565b610aec565b005b34801561038c57600080fd5b50610395610c04565b6040516103a29190614a5e565b60405180910390f35b3480156103b757600080fd5b506103c0610c11565b6040516103cd9190614626565b60405180910390f35b3480156103e257600080fd5b506103fd60048036038101906103f89190613d65565b610c24565b005b34801561040b57600080fd5b5061042660048036038101906104219190613ea7565b610c84565b6040516104339190614641565b60405180910390f35b34801561044857600080fd5b50610463600480360381019061045e9190613ed0565b610ca3565b005b34801561047157600080fd5b5061048c60048036038101906104879190613e6b565b610cd7565b6040516104999190614a5e565b60405180910390f35b3480156104ae57600080fd5b506104c960048036038101906104c49190613ed0565b610d7c565b005b3480156104d757600080fd5b506104e0610db0565b005b3480156104ee57600080fd5b5061050960048036038101906105049190613d65565b610e2a565b005b34801561051757600080fd5b50610532600480360381019061052d9190613f9a565b610e4a565b005b34801561054057600080fd5b5061055b60048036038101906105569190613f9a565b610ea6565b6040516105689190614a5e565b60405180910390f35b34801561057d57600080fd5b50610586610f3d565b005b34801561059457600080fd5b5061059d610fd6565b6040516105aa9190614626565b60405180910390f35b3480156105bf57600080fd5b506105da60048036038101906105d59190613f9a565b610fed565b6040516105e791906145bf565b60405180910390f35b3480156105fc57600080fd5b5061061760048036038101906106129190613d00565b61109f565b005b34801561062557600080fd5b50610640600480360381019061063b9190613d00565b61112f565b60405161064d9190614a5e565b60405180910390f35b34801561066257600080fd5b5061066b6111e7565b005b34801561067957600080fd5b5061068261126f565b005b34801561069057600080fd5b506106996112e9565b6040516106a691906145bf565b60405180910390f35b3480156106bb57600080fd5b506106d660048036038101906106d19190613f0c565b611313565b6040516106e391906145bf565b60405180910390f35b3480156106f857600080fd5b50610713600480360381019061070e9190613ed0565b611342565b6040516107209190614626565b60405180910390f35b34801561073557600080fd5b5061073e6113ac565b60405161074b919061465c565b60405180910390f35b61076e60048036038101906107699190613fc3565b61143e565b005b34801561077c57600080fd5b5061078561165f565b6040516107929190614641565b60405180910390f35b3480156107a757600080fd5b506107c260048036038101906107bd9190613e2f565b611666565b005b3480156107d057600080fd5b506107d96117e7565b005b3480156107e757600080fd5b5061080260048036038101906107fd9190613db4565b611880565b005b34801561081057600080fd5b5061082b60048036038101906108269190613f9a565b6118e2565b604051610838919061465c565b60405180910390f35b34801561084d57600080fd5b5061086860048036038101906108639190613ea7565b611989565b6040516108759190614a5e565b60405180910390f35b34801561088a57600080fd5b506108936119ad565b6040516108a09190614641565b60405180910390f35b3480156108b557600080fd5b506108d060048036038101906108cb9190613ed0565b6119d1565b005b3480156108de57600080fd5b506108e7611a05565b6040516108f49190614641565b60405180910390f35b34801561090957600080fd5b50610924600480360381019061091f9190613d29565b611a29565b6040516109319190614626565b60405180910390f35b34801561094657600080fd5b50610961600480360381019061095c9190613d00565b611a8f565b005b34801561096f57600080fd5b50610978611b87565b6040516109859190614a5e565b60405180910390f35b600061099982611c7c565b9050919050565b60006109ab82611ce8565b9050919050565b60006108006109bf610c04565b106109cd57600190506109d2565b600090505b90565b6060600280546109e490614d3a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1090614d3a565b8015610a5d5780601f10610a3257610100808354040283529160200191610a5d565b820191906000526020600020905b815481529060010190602001808311610a4057829003601f168201915b5050505050905090565b6000610a7282611c7c565b610ab1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa8906148de565b60405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610af782610fed565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5f9061497e565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b87611d62565b73ffffffffffffffffffffffffffffffffffffffff161480610bb65750610bb581610bb0611d62565b611a29565b5b610bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bec9061483e565b60405180910390fd5b610bff8383611d71565b505050565b6000600a80549050905090565b600f60149054906101000a900460ff1681565b610c35610c2f611d62565b82611e2a565b610c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6b9061499e565b60405180910390fd5b610c7f838383611f08565b505050565b6000806000838152602001908152602001600020600101549050919050565b610cad8282612164565b610cd28160016000858152602001908152602001600020611c4c90919063ffffffff16565b505050565b6000610ce28361112f565b8210610d23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1a906146fe565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610d86828261218d565b610dab816001600085815260200190815260200160002061221090919063ffffffff16565b505050565b610de17f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ddc611d62565b611342565b610e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1790614a1e565b60405180910390fd5b610e28612240565b565b610e4583838360405180602001604052806000815250611880565b505050565b610e5b610e55611d62565b82611e2a565b610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e91906149fe565b60405180910390fd5b610ea3816122e2565b50565b6000610eb0610c04565b8210610ef1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee8906149be565b60405180910390fd5b600a8281548110610f2b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610f45611d62565b73ffffffffffffffffffffffffffffffffffffffff16610f636112e9565b73ffffffffffffffffffffffffffffffffffffffff1614610fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb0906148fe565b60405180910390fd5b6000600f60146101000a81548160ff021916908315150217905550565b6000600c60009054906101000a900460ff16905090565b6000806004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108d9061487e565b60405180910390fd5b80915050919050565b6110d07f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a66110cb611d62565b611342565b61110f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611106906149de565b60405180910390fd5b6111228161111d600d6123f3565b612401565b61112c600d6125cf565b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111979061485e565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111ef611d62565b73ffffffffffffffffffffffffffffffffffffffff1661120d6112e9565b73ffffffffffffffffffffffffffffffffffffffff1614611263576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125a906148fe565b60405180910390fd5b61126d60006125e5565b565b6112a07f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61129b611d62565b611342565b6112df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d69061477e565b60405180910390fd5b6112e76126ab565b565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600061133a826001600086815260200190815260200160002061274e90919063ffffffff16565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600380546113bb90614d3a565b80601f01602080910402602001604051908101604052809291908181526020018280546113e790614d3a565b80156114345780601f1061140957610100808354040283529160200191611434565b820191906000526020600020905b81548152906001019060200180831161141757829003601f168201915b5050505050905090565b600f60149054906101000a900460ff168061148b575061145c6112e9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6114ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c1906146de565b60405180910390fd5b6000821161150d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115049061489e565b60405180910390fd5b6003821115611551576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115489061495e565b60405180910390fd5b61080061156e83611560610c04565b61276890919063ffffffff16565b1115806115ad575061157e6112e9565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6115ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e3906147fe565b60405180910390fd5b60005b8281101561165a576000611601610c04565b905061160d838261277e565b7fb9203d657e9c0ec8274c818292ab0f58b04e1970050716891770eb1bab5d655e818460405161163e929190614a79565b60405180910390a150808061165290614d9d565b9150506115ef565b505050565b6000801b81565b61166e611d62565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d3906147be565b60405180910390fd5b80600760006116e9611d62565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611796611d62565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117db9190614626565b60405180910390a35050565b6117ef611d62565b73ffffffffffffffffffffffffffffffffffffffff1661180d6112e9565b73ffffffffffffffffffffffffffffffffffffffff1614611863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185a906148fe565b60405180910390fd5b6001600f60146101000a81548160ff021916908315150217905550565b61189161188b611d62565b83611e2a565b6118d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c79061499e565b60405180910390fd5b6118dc8484848461279c565b50505050565b60606118ed82611c7c565b61192c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119239061493e565b60405180910390fd5b60006119366127f8565b905060008151116119565760405180602001604052806000815250611981565b806119608461288a565b604051602001611971929190614561565b6040516020818303038152906040525b915050919050565b60006119a660016000848152602001908152602001600020612a37565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6119db8282612a4c565b611a00816001600085815260200190815260200160002061221090919063ffffffff16565b505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b60007358807bad0b376efc12f5ad86aac70e78ed67deae73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a7c5760019050611a89565b611a868383612a75565b90505b92915050565b611a97611d62565b73ffffffffffffffffffffffffffffffffffffffff16611ab56112e9565b73ffffffffffffffffffffffffffffffffffffffff1614611b0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b02906148fe565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b729061473e565b60405180910390fd5b611b84816125e5565b50565b61080081565b60003073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415611c3757600080368080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509050600080369050905073ffffffffffffffffffffffffffffffffffffffff818301511692505050611c3b565b3390505b90565b611c488282612b09565b5050565b6000611c74836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612be9565b905092915050565b60008073ffffffffffffffffffffffffffffffffffffffff166004600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d5b5750611d5a82612c59565b5b9050919050565b6000611d6c611b8d565b905090565b816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611de483610fed565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611e3582611c7c565b611e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6b906147de565b60405180910390fd5b6000611e7f83610fed565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611eee57508373ffffffffffffffffffffffffffffffffffffffff16611ed684610a67565b73ffffffffffffffffffffffffffffffffffffffff16145b80611eff5750611efe8185611a29565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f2882610fed565b73ffffffffffffffffffffffffffffffffffffffff1614611f7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f759061491e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe59061479e565b60405180910390fd5b611ff9838383612d3b565b612004600082611d71565b6001600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120549190614c1c565b925050819055506001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120ab9190614b3b565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61216d82610c84565b61217e81612179611d62565b612d4b565b6121888383612b09565b505050565b612195611d62565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612202576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f990614a3e565b60405180910390fd5b61220c8282612de8565b5050565b6000612238836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612ec9565b905092915050565b612248610fd6565b612287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227e906146be565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6122cb611d62565b6040516122d891906145bf565b60405180910390a1565b60006122ed82610fed565b90506122fb81600084612d3b565b612306600083611d71565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123569190614c1c565b925050819055506004600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600081600001549050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612471576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612468906148be565b60405180910390fd5b61247a81611c7c565b156124ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b19061475e565b60405180910390fd5b6124c660008383612d3b565b6001600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125169190614b3b565b92505081905550816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6001816000016000828254019250508190555050565b6000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126b3610fd6565b156126f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ea9061481e565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612737611d62565b60405161274491906145bf565b60405180910390a1565b600061275d836000018361304f565b60001c905092915050565b600081836127769190614b3b565b905092915050565b6127988282604051806020016040528060008152506130a0565b5050565b6127a7848484611f08565b6127b3848484846130fb565b6127f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127e99061471e565b60405180910390fd5b50505050565b6060600e805461280790614d3a565b80601f016020809104026020016040519081016040528092919081815260200182805461283390614d3a565b80156128805780601f1061285557610100808354040283529160200191612880565b820191906000526020600020905b81548152906001019060200180831161286357829003601f168201915b5050505050905090565b606060008214156128d2576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612a32565b600082905060005b600082146129045780806128ed90614d9d565b915050600a826128fd9190614b91565b91506128da565b60008167ffffffffffffffff811115612946577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156129785781602001600182028036833780820191505090505b5090505b60008514612a2b576001826129919190614c1c565b9150600a856129a09190614de6565b60306129ac9190614b3b565b60f81b8183815181106129e8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612a249190614b91565b945061297c565b8093505050505b919050565b6000612a4582600001613292565b9050919050565b612a5582610c84565b612a6681612a61611d62565b612d4b565b612a708383612de8565b505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612b138282611342565b612be557600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612b8a611d62565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000612bf583836132a3565b612c4e578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612c53565b600090505b92915050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612d2457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612d345750612d33826132c6565b5b9050919050565b612d46838383613340565b505050565b612d558282611342565b612de457612d7a8173ffffffffffffffffffffffffffffffffffffffff166014613398565b612d888360001c6020613398565b604051602001612d99929190614585565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ddb919061465c565b60405180910390fd5b5050565b612df28282611342565b15612ec557600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612e6a611d62565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60008083600101600084815260200190815260200160002054905060008114613043576000600182612efb9190614c1c565b9050600060018660000180549050612f139190614c1c565b9050818114612fce576000866000018281548110612f5a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080876000018481548110612fa4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480613008577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050613049565b60009150505b92915050565b600082600001828154811061308d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905092915050565b6130aa8383612401565b6130b760008484846130fb565b6130f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ed9061471e565b60405180910390fd5b505050565b600061311c8473ffffffffffffffffffffffffffffffffffffffff16613692565b15613285578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613145611d62565b8786866040518563ffffffff1660e01b815260040161316794939291906145da565b602060405180830381600087803b15801561318157600080fd5b505af19250505080156131b257506040513d601f19601f820116820180604052508101906131af9190613f71565b60015b613235573d80600081146131e2576040519150601f19603f3d011682016040523d82523d6000602084013e6131e7565b606091505b5060008151141561322d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132249061471e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061328a565b600190505b949350505050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806133395750613338826136a5565b5b9050919050565b61334b83838361371f565b613353610fd6565b15613393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338a9061469e565b60405180910390fd5b505050565b6060600060028360026133ab9190614bc2565b6133b59190614b3b565b67ffffffffffffffff8111156133f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156134265781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110613484577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061350e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600261354e9190614bc2565b6135589190614b3b565b90505b6001811115613644577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106135c0577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b8282815181106135fd577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061363d90614d10565b905061355b565b5060008414613688576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161367f9061467e565b60405180910390fd5b8091505092915050565b600080823b905060008111915050919050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480613718575061371782613833565b5b9050919050565b61372a83838361389d565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561376d57613768816138a2565b6137ac565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146137ab576137aa83826138eb565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156137ef576137ea81613a58565b61382e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461382d5761382c8282613b9b565b5b5b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b600a80549050600b600083815260200190815260200160002081905550600a81908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016138f88461112f565b6139029190614c1c565b90506000600960008481526020019081526020016000205490508181146139e7576000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816009600083815260200190815260200160002081905550505b6009600084815260200190815260200160002060009055600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600a80549050613a6c9190614c1c565b90506000600b60008481526020019081526020016000205490506000600a8381548110613ac2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600a8381548110613b0a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600b600083815260200190815260200160002081905550600b600085815260200190815260200160002060009055600a805480613b7f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613ba68361112f565b905081600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806009600084815260200190815260200160002081905550505050565b6000613c2d613c2884614ac7565b614aa2565b905082815260208101848484011115613c4557600080fd5b613c50848285614cce565b509392505050565b600081359050613c6781615725565b92915050565b600081359050613c7c8161573c565b92915050565b600081359050613c9181615753565b92915050565b600081359050613ca68161576a565b92915050565b600081519050613cbb8161576a565b92915050565b600082601f830112613cd257600080fd5b8135613ce2848260208601613c1a565b91505092915050565b600081359050613cfa81615781565b92915050565b600060208284031215613d1257600080fd5b6000613d2084828501613c58565b91505092915050565b60008060408385031215613d3c57600080fd5b6000613d4a85828601613c58565b9250506020613d5b85828601613c58565b9150509250929050565b600080600060608486031215613d7a57600080fd5b6000613d8886828701613c58565b9350506020613d9986828701613c58565b9250506040613daa86828701613ceb565b9150509250925092565b60008060008060808587031215613dca57600080fd5b6000613dd887828801613c58565b9450506020613de987828801613c58565b9350506040613dfa87828801613ceb565b925050606085013567ffffffffffffffff811115613e1757600080fd5b613e2387828801613cc1565b91505092959194509250565b60008060408385031215613e4257600080fd5b6000613e5085828601613c58565b9250506020613e6185828601613c6d565b9150509250929050565b60008060408385031215613e7e57600080fd5b6000613e8c85828601613c58565b9250506020613e9d85828601613ceb565b9150509250929050565b600060208284031215613eb957600080fd5b6000613ec784828501613c82565b91505092915050565b60008060408385031215613ee357600080fd5b6000613ef185828601613c82565b9250506020613f0285828601613c58565b9150509250929050565b60008060408385031215613f1f57600080fd5b6000613f2d85828601613c82565b9250506020613f3e85828601613ceb565b9150509250929050565b600060208284031215613f5a57600080fd5b6000613f6884828501613c97565b91505092915050565b600060208284031215613f8357600080fd5b6000613f9184828501613cac565b91505092915050565b600060208284031215613fac57600080fd5b6000613fba84828501613ceb565b91505092915050565b60008060408385031215613fd657600080fd5b6000613fe485828601613ceb565b9250506020613ff585828601613c58565b9150509250929050565b61400881614c50565b82525050565b61401781614c62565b82525050565b61402681614c6e565b82525050565b600061403782614af8565b6140418185614b0e565b9350614051818560208601614cdd565b61405a81614ed3565b840191505092915050565b600061407082614b03565b61407a8185614b1f565b935061408a818560208601614cdd565b61409381614ed3565b840191505092915050565b60006140a982614b03565b6140b38185614b30565b93506140c3818560208601614cdd565b80840191505092915050565b60006140dc602083614b1f565b91506140e782614ee4565b602082019050919050565b60006140ff602b83614b1f565b915061410a82614f0d565b604082019050919050565b6000614122601483614b1f565b915061412d82614f5c565b602082019050919050565b6000614145601383614b1f565b915061415082614f85565b602082019050919050565b6000614168602b83614b1f565b915061417382614fae565b604082019050919050565b600061418b603283614b1f565b915061419682614ffd565b604082019050919050565b60006141ae602683614b1f565b91506141b98261504c565b604082019050919050565b60006141d1601c83614b1f565b91506141dc8261509b565b602082019050919050565b60006141f4603e83614b1f565b91506141ff826150c4565b604082019050919050565b6000614217602483614b1f565b915061422282615113565b604082019050919050565b600061423a601983614b1f565b915061424582615162565b602082019050919050565b600061425d602c83614b1f565b91506142688261518b565b604082019050919050565b6000614280600883614b1f565b915061428b826151da565b602082019050919050565b60006142a3601083614b1f565b91506142ae82615203565b602082019050919050565b60006142c6603883614b1f565b91506142d18261522c565b604082019050919050565b60006142e9602a83614b1f565b91506142f48261527b565b604082019050919050565b600061430c602983614b1f565b9150614317826152ca565b604082019050919050565b600061432f601783614b1f565b915061433a82615319565b602082019050919050565b6000614352602083614b1f565b915061435d82615342565b602082019050919050565b6000614375602c83614b1f565b91506143808261536b565b604082019050919050565b6000614398602083614b1f565b91506143a3826153ba565b602082019050919050565b60006143bb602983614b1f565b91506143c6826153e3565b604082019050919050565b60006143de602f83614b1f565b91506143e982615432565b604082019050919050565b6000614401600983614b1f565b915061440c82615481565b602082019050919050565b6000614424602183614b1f565b915061442f826154aa565b604082019050919050565b6000614447603183614b1f565b9150614452826154f9565b604082019050919050565b600061446a602c83614b1f565b915061447582615548565b604082019050919050565b600061448d601783614b30565b915061449882615597565b601782019050919050565b60006144b0603d83614b1f565b91506144bb826155c0565b604082019050919050565b60006144d3603083614b1f565b91506144de8261560f565b604082019050919050565b60006144f6604083614b1f565b91506145018261565e565b604082019050919050565b6000614519601183614b30565b9150614524826156ad565b601182019050919050565b600061453c602f83614b1f565b9150614547826156d6565b604082019050919050565b61455b81614cc4565b82525050565b600061456d828561409e565b9150614579828461409e565b91508190509392505050565b600061459082614480565b915061459c828561409e565b91506145a78261450c565b91506145b3828461409e565b91508190509392505050565b60006020820190506145d46000830184613fff565b92915050565b60006080820190506145ef6000830187613fff565b6145fc6020830186613fff565b6146096040830185614552565b818103606083015261461b818461402c565b905095945050505050565b600060208201905061463b600083018461400e565b92915050565b6000602082019050614656600083018461401d565b92915050565b600060208201905081810360008301526146768184614065565b905092915050565b60006020820190508181036000830152614697816140cf565b9050919050565b600060208201905081810360008301526146b7816140f2565b9050919050565b600060208201905081810360008301526146d781614115565b9050919050565b600060208201905081810360008301526146f781614138565b9050919050565b600060208201905081810360008301526147178161415b565b9050919050565b600060208201905081810360008301526147378161417e565b9050919050565b60006020820190508181036000830152614757816141a1565b9050919050565b60006020820190508181036000830152614777816141c4565b9050919050565b60006020820190508181036000830152614797816141e7565b9050919050565b600060208201905081810360008301526147b78161420a565b9050919050565b600060208201905081810360008301526147d78161422d565b9050919050565b600060208201905081810360008301526147f781614250565b9050919050565b6000602082019050818103600083015261481781614273565b9050919050565b6000602082019050818103600083015261483781614296565b9050919050565b60006020820190508181036000830152614857816142b9565b9050919050565b60006020820190508181036000830152614877816142dc565b9050919050565b60006020820190508181036000830152614897816142ff565b9050919050565b600060208201905081810360008301526148b781614322565b9050919050565b600060208201905081810360008301526148d781614345565b9050919050565b600060208201905081810360008301526148f781614368565b9050919050565b600060208201905081810360008301526149178161438b565b9050919050565b60006020820190508181036000830152614937816143ae565b9050919050565b60006020820190508181036000830152614957816143d1565b9050919050565b60006020820190508181036000830152614977816143f4565b9050919050565b6000602082019050818103600083015261499781614417565b9050919050565b600060208201905081810360008301526149b78161443a565b9050919050565b600060208201905081810360008301526149d78161445d565b9050919050565b600060208201905081810360008301526149f7816144a3565b9050919050565b60006020820190508181036000830152614a17816144c6565b9050919050565b60006020820190508181036000830152614a37816144e9565b9050919050565b60006020820190508181036000830152614a578161452f565b9050919050565b6000602082019050614a736000830184614552565b92915050565b6000604082019050614a8e6000830185614552565b614a9b6020830184613fff565b9392505050565b6000614aac614abd565b9050614ab88282614d6c565b919050565b6000604051905090565b600067ffffffffffffffff821115614ae257614ae1614ea4565b5b614aeb82614ed3565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614b4682614cc4565b9150614b5183614cc4565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614b8657614b85614e17565b5b828201905092915050565b6000614b9c82614cc4565b9150614ba783614cc4565b925082614bb757614bb6614e46565b5b828204905092915050565b6000614bcd82614cc4565b9150614bd883614cc4565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c1157614c10614e17565b5b828202905092915050565b6000614c2782614cc4565b9150614c3283614cc4565b925082821015614c4557614c44614e17565b5b828203905092915050565b6000614c5b82614ca4565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614cfb578082015181840152602081019050614ce0565b83811115614d0a576000848401525b50505050565b6000614d1b82614cc4565b91506000821415614d2f57614d2e614e17565b5b600182039050919050565b60006002820490506001821680614d5257607f821691505b60208210811415614d6657614d65614e75565b5b50919050565b614d7582614ed3565b810181811067ffffffffffffffff82111715614d9457614d93614ea4565b5b80604052505050565b6000614da882614cc4565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614ddb57614dda614e17565b5b600182019050919050565b6000614df182614cc4565b9150614dfc83614cc4565b925082614e0c57614e0b614e46565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f4552433732315061757361626c653a20746f6b656e207472616e73666572207760008201527f68696c6520706175736564000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f73616c65206861736e2774207374617274656400000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732315072657365744d696e7465725061757365724175746f49643a2060008201527f6d75737420686176652070617573657220726f6c6520746f2070617573650000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f736f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f7175616e746974792063616e6e6f74206265207a65726f000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f6578636565647320330000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f4552433732315072657365744d696e7465725061757365724175746f49643a2060008201527f6d7573742068617665206d696e74657220726f6c6520746f206d696e74000000602082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b7f4552433732315072657365744d696e7465725061757365724175746f49643a2060008201527f6d75737420686176652070617573657220726f6c6520746f20756e7061757365602082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b61572e81614c50565b811461573957600080fd5b50565b61574581614c62565b811461575057600080fd5b50565b61575c81614c6e565b811461576757600080fd5b50565b61577381614c78565b811461577e57600080fd5b50565b61578a81614cc4565b811461579557600080fd5b5056fea2646970667358221220f4f57fddf4a9d42aa77f53891eda40d435ea46d105df6169404c6dbaab65bd3b64736f6c63430008040033", 894 | "linkReferences": {}, 895 | "deployedLinkReferences": {} 896 | } 897 | --------------------------------------------------------------------------------